我正在尝试编写一个模拟服务来模仿我在生产之前无法访问的第 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)
我只是不知道从这里去哪里,错误更新就会消失。