这个WCF错误的含义是什么:“Custom tool warning: Cannot import wsdl:portType”?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我在我的解决方案中创建了一个WCF服务库项目,并为此提供了服务引用。我使用类库中的服务,所以除了类库之外,我还从我的WPF应用程序项目中引用了它。服务设置简单 - 只改变为获取异步服务功能。

一切工作正常 - 直到我想更新我的服务参考。它失败了,所以我最终回滚重试,但即使那样也失败了!因此 - 更新服务引用失败,不做任何更改。为什么?!

我得到的错误是这样的:

Custom tool error: Failed to generate code for the service reference 
'MyServiceReference'.  Please check other error and warning messages for details.   

该警告提供了更多信息:

Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: 
System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: List of referenced types contains more than one type with data contract name 'Patient' in  
namespace 'http://schemas.datacontract.org/2004/07/MyApp.Model'. Need to exclude all but one of the 
following types. Only matching types can be valid references: 
"MyApp.Dashboard.MyServiceReference.Patient, Medski.Dashboard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
"MyApp.Model.Patient, MyApp.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" (matching)
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']

有两个类似的警告也说:

Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='ISomeService']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='WSHttpBinding_ISomeService']  

同样的:

Custom tool warning: Cannot import wsdl:port .. 

我发现这一切都令人困惑..除了我通过服务引用获得的信息,我没有在客户端仪表板上的Patient类。那么这是什么意思?为什么突然显示?记住:我甚至没有改变任何东西!

现在,在这里找到了解决这个问题的办法,但没有解释这意味着什么。所以; 在服务的“配置服务引用”中,取消选中“引用程序集中的重用类型”复选框。现在重建可以毫无问题地正常工作。但是我真的改变了什么?这会对我的应用程序产生影响吗?何时应该取消选中这个?我确实想重用我设置了DataContract的类型,但没有更多。我仍然可以访问没有检查过的人吗?

提问于
用户回答回答于

添加服务引用时,可以使用两种方式来处理服务使用的类型:

  • 这些类型存储在一个dll中,并且该dll从客户端和服务器应用程序都被引用。
  • 这些类型不在客户端引用的dll中。在这种情况下,创建服务引用的工具将在references.cs文件中创建类型。

有很多事情可能会出错。我们发现,如果该工具崩溃,那么删除服务引用有时会更快并且再次启动。

我们已经停止使用服务参考。对于我们控制客户和服务的项目,我们使用此截屏中描述的方法。

用户回答回答于

扫码关注云+社区