我使用F#Type Provider来使用Web服务。所有请求都可以使用,除了下面给出错误的请求
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Xml.dll
Additional information: The XML element 'ResponseBO' from namespace 'http://com.x.xx/xsd' references a method and a type. Change the method's message name using WebMethodAttribute or change the type's root element using the XmlRootAttribute.
到目前为止,我见过的所有解决方案都涉及更新网络服务,这对我来说不是一个选择。这是怎么回事?
答案 0 :(得分:1)
您有两种选择:
由于1.不是一个选项,你只剩下2.,你也可以全力以赴并可能放弃F#类型提供程序,因为它在表面下使用svcutil.exe,然后手动完成所有操作/使用svcutil.exe编写脚本:
第二点(重写WSDL)可能没有必要/相关,这取决于在生成代码时是否可以使用任何svcutil-switch来使代码正确:https://msdn.microsoft.com/en-us/library/aa347733(v=vs.110).aspx
svcutil.exe通常是一个古怪的 shit 软件,特别是如果服务的编写者没有特别注意遵循所有建议,最佳实践以及什么时候不提供服务和描述。
事实上,该服务可能并非完全符合,因此您可以使用f.i检查该服务。 SoapUI,如果它不完全一致,你可能会有一个更强的案例来修复服务。有关此部分的详细信息,请参阅https://www.soapui.org/soap-and-wsdl/working-with-wsdls.html。
我仍然希望有人为F#编写一个新的WSDL类型提供程序而不依赖于svcutil。但话说回来,如果svcutil.exe的编写者很难处理每个疯狂的WSDL /服务描述,那么写一个新的类型提供者并不容易......