F#Wsdl提供程序-处理x引用方法和类型问题

F#Wsdl提供程序-处理x引用方法和类型问题,f#,wsdl,type-providers,F#,Wsdl,Type Providers,我正在使用F#Type提供程序来使用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 me

我正在使用F#Type提供程序来使用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.
到目前为止,我看到的所有解决方案都涉及到更新Web服务,这对我来说不是一个选项。解决方法是什么?

您有两个选择:

  • 在Web服务端重写
  • 获取所有文件和其他文件,将WSDL-/XSD文件重写为有效/可接受的文件,并再次针对实时服务器工作
  • 从一开始。这不是留给您的选项2.,您最好全力以赴,并可能删除F#type提供程序,因为它在曲面下方使用svcutil.exe,然后使用svcutil.exe手动/脚本完成所有操作:

    • 将相关文件获取到某些存储
    • 然后重写WSDL(手动或其他方式)
    • 然后svcutil.exe再次生成代码(或WSDL F#类型提供程序以重写文件)
    第二点(重写WSDL)可能不是必需的/相关的,这取决于您在生成代码时是否可以使用任何svcutil开关使代码正确:

    svcutil.exe通常是一个古怪的狗屎软件,特别是如果服务的编写者在提供服务和描述时没有特别注意遵循所有建议、最佳实践等等

    事实上,可能是服务不完全一致,因此您可以使用f.i.SoapUI检查,如果服务不完全一致,您可能有更有力的理由来修复服务。有关此零件的更多信息,请参阅

    我仍然希望有人能为F#编写一个新的WSDL类型提供程序,而不是依赖于svcutil。但是,如果svcutil.exe的编写者很难处理每一个野生的WSDL/服务描述,那么编写一个新的类型提供程序也不是一件容易的事,所以