F#Wsdl Provider - 处理x引用方法和类型问题

时间:2016-10-25 22:10:07

标签: f# wsdl type-providers

我使用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.

到目前为止,我见过的所有解决方案都涉及更新网络服务,这对我来说不是一个选择。这是怎么回事?

1 个答案:

答案 0 :(得分:1)

您有两种选择:

  1. 在webservice end上重写
  2. 获取所有文件以及不是,将WSDL- / XSD文件重写为有效/可接受的内容以及再次对实时服务器起作用的内容
  3. 由于1.不是一个选项,你只剩下2.,你也可以全力以赴并可能放弃F#类型提供程序,因为它在表面下使用svcutil.exe,然后手动完成所有操作/使用svcutil.exe编写脚本:

    • 将相关文件存储到某个存储空间
    • 然后重写WSDL(手动或其他方式)
    • 然后svcutil.exe再次生成代码(或WSDL F#类型提供程序重写文件)

    第二点(重写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 /服务描述,那么写一个新的类型提供者并不容易......