【问题标题】:Custom Tool Warning: Cannot import wsdl:portType自定义工具警告:无法导入 wsdl:portType
【发布时间】:2011-08-12 19:57:43
【问题描述】:

我不确定这个错误是什么。我想我会问你们堆栈溢出可能是什么。我不得不更改我的服务合同,在我使用的测试客户端上,我更新了服务参考。现在我收到了这个警告。我该如何解决这个特定问题。

【问题讨论】:

标签: wcf


【解决方案1】:

我在What does this WCF error mean: "Custom tool warning: Cannot import wsdl:portType" 帮助中找到了答案。就我而言,我选择取消勾选“重用类型”框并解决了它。

其他想法:SOA、分布式对象和耦合

WSDL 和 WS-* 标准暗示的“面向服务”愿景是 WSDL 本身告诉您的客户您需要知道的一切使用该服务。根据这个愿景,取消勾选“重用类型”框是正确的方法。除了 wsdl,您不应该在任何地方重用类型。

勾选“重用类型”框更像是一种“分布式对象”方法:您的客户端和服务通过共享 dll 中的类型耦合。这是一个强大的分布式依赖。如果共享对象被更新,则服务及其所有客户端都必须更新,都同步。这也是分布式对象大失所望而 SOA 接管的原因之一。

除非您的公司选择(可能是偶然地,通过在 Nuget 提要上共享库)分布式对象架构并了解成本,否则我总是会取消选中重用类型。

它减少了耦合。

【讨论】:

  • 这减轻了症状而不是原因。可能想要使用强类型类。当然,这将服务和客户端的技术紧密结合在一起,并且服务不能再部分用于提供真正的 SOA。问题在于模型各个方面的序列化。
  • 当您使用客户公司 5 年前的代码时,您不能总是更改错误代码来解决您真正想要解决的问题。但你是对的——如果你需要类型正常工作,你需要修复它们。
  • 干杯伙伴。一直在挣扎。简单而完美的答案。你能解释一下这里发生了什么吗?
  • 并非如此。但我想这是因为在您的项目引用的程序集中,有一些类型与 WCF 服务合同中声明的类型同名。我的解决方案假设您确实想要使用生成的代理客户端;正如@brumScouse 指出的那样,这是您需要考虑的选择。
  • 干杯克里斯,很高兴你同意我的看法,就像我们在 msfg 的时代一样 :)
【解决方案2】:

这是我在搜索类似问题时找到的第一个答案,但我的问题是 [DataContract] 属性应用于没有任何 [DataMember] 属性的枚举,从而生成了一个空的数据协定。

我将其用作资源:

http://www.lukepuplett.com/2010/02/empty-datacontract-causes-misleading.html

似乎建议允许 WCF 为枚举推断数据协定。

【讨论】:

    【解决方案3】:

    我发现这也可以通过使用 ?singleWsdl 而不是最后的 ?wsdl 来解决。有多个链接到的 WSDL 文件,因此过于天真而无法浏览它们可能会引发错误。

    【讨论】:

      【解决方案4】:

      我们今天在尝试使用 dotnet-svcutil 将旧 WSDL 转换为 .cs fike 时遇到了这个问题。

      我们通过替换解决了:

      <xsd:complexContent>
          <xsd:restriction base="xsd:anyType" />
      </xsd:complexContent>
      

      <xsd:complexContent>
          <xsd:sequence>
              <xsd:element name="deleteThisField" type="xsd:string" />
          </xsd:sequence>
      </xsd:complexContent>
      

      然后手动删除生成结果代码中的deleteThisField字符串。

      【讨论】:

        猜你喜欢
        • 2010-12-24
        • 2013-09-18
        • 2011-03-19
        • 1970-01-01
        • 2014-09-14
        • 2014-07-23
        • 2021-10-16
        • 2011-11-06
        • 1970-01-01
        相关资源
        最近更新 更多