3

我正在尝试编写一个模拟服务来模仿我在生产之前无法访问的第 3 方 Web 服务。

假设我有方法'Foo',它接受参数'WidgetName'。请求正文可能如下所示:

<Foo xmlns="http://tempuri.org/">
    <WidgetName>Gadget</WidgetName>
        ...
</Foo>

我想要的是这样的:

<Foo xmlns="http://tempuri.org/" WidgetName="Gadget">
 ...
</Foo>

请注意,“WidgetName”是“Foo”的一个属性。我可以像这样装饰参数[XmlAttribute]

[WebMethod]
...
public string Foo([XmlAttribute]string WidgetName) {
  //...
}

但是,当一切都说完了,结果……

XmlSerializer attribute System.Xml.Serialization.XmlAttributeAttribute is not valid in sourceSystemType. Only XmlElement, XmlArray, XmlArrayItem, XmlAnyAttribute and XmlAnyElement attributes are supported when IsWrapped is true.

好吧.Bare,这不是我想要的(相反的.Wrapped),对吧?因为这会导致<Foo ..></Foo>完全消失。如果我确实设置为“Bare”,则在尝试更新 Web 服务参考时会收到此错误(带有完整的真实代码):

There was an error downloading 'http://localhost:48319/FooWS/FooWS.asmx/_vti_bin/ListData.svc/$metadata'. The request failed with the error message...它说Request format is unrecognized for URL unexpectedly ending in '/_vti_bin/ListData.svc/$metadata'.

[XmlAttribute]一旦我从Foo(string WidgetName)我只是不知道从这里去哪里,错误更新就会消失。

4

0 回答 0