【问题标题】:Error creating .net client via Service References通过服务引用创建 .net 客户端时出错
【发布时间】:2015-05-27 15:37:39
【问题描述】:

尝试在 C# .Net 4.0 中为此 wsdl 定义的 Web 服务生成代理客户端时遇到问题:link(我不管理此服务,它似乎是基于 Axis2 MTOM Java服务)

这是生成器的反馈:

1):
Details: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: Object reference not set to an instance of an object.
XPath to the source of error: //wsdl:definitions[@targetNamespace='http://sls.ws.coliposte.fr']/wsdl:portType[@name='ServiceV3WS']

2):
Error: Unable to import wsdl:binding
Detail: An error occurred while importing wsdl:portType which depends wsdl:binding.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://sls.ws.coliposte.fr']/wsdl:portType[@name='ServiceV3WS']
XPath to the source of error: //wsdl:definitions[@targetNamespace='http://sls.ws.coliposte.fr']/wsdl:binding[@name='SlsServiceWSSoapBinding']

3):
Error: Unable to import wsdl:port
Detail: An error occurred while importing wsdl:binding which depends wsdl:port.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://sls.ws.coliposte.fr']/wsdl:binding[@name='SlsServiceWSSoapBinding'] 
XPath to the source of error: //wsdl:definitions[@targetNamespace='http://sls.ws.coliposte.fr']/wsdl:service[@name='SlsServiceWS']/wsdl:port[@name='SlsServiceWSPort']
  1. 这些错误对我来说似乎很神秘,但似乎错误 2 和 3 取决于错误 1。所以我的假设首先是此服务不兼容(例如,portType 未使用正确的路径定义)。因此,我尝试使用 wsdl 验证器对其进行验证(我尝试了 wsdl-analyzer.com),它返回给我一切正常。
  2. 所以我的第二个假设是我以错误的方式生成代理:
    • 我尝试通过 Visual Studio (2012) 中的“添加服务引用”菜单选项使用“标准 WCF 方式”。
    • 我还尝试使用 svcutil.exe (v 4.0.30319.xxx) 生成客户端代理。显然,它返回相同的错误。 (似乎 svcutil 被 VS 用于后端。)

我的期望:

嗯,我在 SO 上看到了很多关于这种代理生成的相关问题。但我的主要问题是我真的不明白真正的问题是什么。所以我决定发布一个新问题来请求解释这些错误:它们是什么意思,为什么会出现这样的错误以及生成这样的代理的替代方法/工具是什么。

所以这是我在 SO 上的第一篇文章,请随时查看和评论。

提前谢谢你,再见。

【问题讨论】:

    标签: c# web-services wcf wsdl svcutil.exe


    【解决方案1】:

    我花了几个小时才找到有关此问题的信息,我找到了问题的答案并解决了它。

    我查看了svcutil.exe documentation page 并尝试了看起来最适合我的问题的选项(“随机”是实际术语)。

    经过几个试错周期后,我的案例似乎缺少“生成使用 XmlSerializer 进行序列化和反序列化的数据类型”的选项 /serializer:XmlSerializer。 有关信息,默认值为 /serializer:Auto “生成标有 Serializable 属性的类”。

    关于我之前的问题,我可以说:

    • 对问题的理解:现在,这些错误对我来说仍然很神秘。这个“对象引用未设置为对象的实例”并不是“真正”问题的一个很好的描述。也许有罪类的名称System.ServiceModel.Description.DataContractSerializerMessageContractImporter 是我错过的线索。

    • 构建此类代理的替代方法:svcutil 是默认“添加服务引用”菜单选项的替代方法。它允许根据目标服务的上下文使用一组自定义选项。作为一个缺点,它与 Visual Studio 体系结构的常规工作流的集成要少得多。因此,必须“手动”集成生成的输出代理类及其配置文件。因此,每次代理都会更新,这最终不是不可能完成的任务。

    总而言之,也许要做的改进是让用户在 VS 生成 UI 中配置自己的一组参数(如果你看到这个线程并在微软的 VS 项目上工作,你知道该怎么做:))

    谢谢。 期待这个答案可以帮助处于类似情况的任何人。

    【讨论】:

    • 嗨,兄弟,我不能说我对此有多感激。你拯救了我的一天!!!
    猜你喜欢
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多