【发布时间】:2011-08-12 19:57:43
【问题描述】:
我不确定这个错误是什么。我想我会问你们堆栈溢出可能是什么。我不得不更改我的服务合同,在我使用的测试客户端上,我更新了服务参考。现在我收到了这个警告。我该如何解决这个特定问题。
【问题讨论】:
-
你能给出完整的警告信息吗?周围还有其他警告吗?
标签: wcf
我不确定这个错误是什么。我想我会问你们堆栈溢出可能是什么。我不得不更改我的服务合同,在我使用的测试客户端上,我更新了服务参考。现在我收到了这个警告。我该如何解决这个特定问题。
【问题讨论】:
标签: wcf
我在What does this WCF error mean: "Custom tool warning: Cannot import wsdl:portType" 帮助中找到了答案。就我而言,我选择取消勾选“重用类型”框并解决了它。
其他想法:SOA、分布式对象和耦合
WSDL 和 WS-* 标准暗示的“面向服务”愿景是 WSDL 本身告诉您的客户您需要知道的一切使用该服务。根据这个愿景,取消勾选“重用类型”框是正确的方法。除了 wsdl,您不应该在任何地方重用类型。
勾选“重用类型”框更像是一种“分布式对象”方法:您的客户端和服务通过共享 dll 中的类型耦合。这是一个强大的分布式依赖。如果共享对象被更新,则服务及其所有客户端都必须更新,都同步。这也是分布式对象大失所望而 SOA 接管的原因之一。
除非您的公司选择(可能是偶然地,通过在 Nuget 提要上共享库)分布式对象架构并了解成本,否则我总是会取消选中重用类型。
它减少了耦合。
【讨论】:
这是我在搜索类似问题时找到的第一个答案,但我的问题是 [DataContract] 属性应用于没有任何 [DataMember] 属性的枚举,从而生成了一个空的数据协定。
我将其用作资源:
http://www.lukepuplett.com/2010/02/empty-datacontract-causes-misleading.html
似乎建议允许 WCF 为枚举推断数据协定。
【讨论】:
我发现这也可以通过使用 ?singleWsdl 而不是最后的 ?wsdl 来解决。有多个链接到的 WSDL 文件,因此过于天真而无法浏览它们可能会引发错误。
【讨论】:
我们今天在尝试使用 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字符串。
【讨论】: