此WCF错误意味着什么:"自定义工具警告:无法导入wsdl:portType"

sti*_*k81 83 wpf wcf service-reference

我在我的解决方案中创建了一个WCF服务库项目,并提供了对此的服务引用.我使用类库中的服务,所以除了类库之外,我还有来自WPF应用程序项目的引用.服务直接设置 - 仅更改为获取异步服务功能.

一切都很好 - 直到我想更新我的服务参考.它失败了,所以我最终回滚并重试,但即便如此也失败了!因此 - 更新服务引用失败而不对其进行任何更改.为什么?!

我得到的错误就是这个:

Custom tool error: Failed to generate code for the service reference 
'MyServiceReference'.  Please check other error and warning messages for details.   
Run Code Online (Sandbox Code Playgroud)

警告提供了更多信息:

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']
Run Code Online (Sandbox Code Playgroud)

有两个类似的警告也说:

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']  
Run Code Online (Sandbox Code Playgroud)

同样的:

Custom tool warning: Cannot import wsdl:port .. 
Run Code Online (Sandbox Code Playgroud)

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

现在,这里找到了解决方案,但没有解释这意味着什么.所以; 在服务的"配置服务引用"中,取消选中"在引用的程序集中重用类型"复选框.重建现在一切正常,没有问题.但是我真正改变了什么呢?这会对我的申请产生影响吗?什么时候应该取消选中?我确实想重用我已经设置DataContract的类型,但没有更多.我仍然可以访问那些没有经过检查的人吗?

Dra*_*lut 154

我在这里找到了答案:http://www.lukepuplett.com/2010/07/note-to-self-don-let-wcf-svcutil-reuse.html

简而言之:我从高级菜单中取消选中参考装配中的重用类型.


我不知道这是否重要,但我不是在使用MVC,而是使用Web Forms.

  • 这真的为我节省了很多时间,谢谢! (5认同)
  • +1 - 仅供参考:要进行此更改,请右键单击使用它的项目中的服务引用,然后选择"配置服务引用..." (5认同)
  • 注意:我还必须重新启动Visual Studio才能工作. (4认同)
  • 还需要重启VS 2012 (2认同)
  • 没有比"长话短说"更好的了:) (2认同)

Shi*_*iji 36

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

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

有很多事情可能会出错.我们发现,如果工具崩溃,有时删除服务引用并重新启动会更快.

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

  • 谢谢!我昨天发现了截屏.看着它,它真是令人大开眼界!一旦我掌握了基础知识,我计划进入该结构.听起来你已经看到了我遇到的一些相同的问题.当一些奇怪的错误时,我经常最终删除和读取服务引用,这不是一个好兆头.希望所描述的架构将有所帮助! (2认同)

Aur*_*rel 9

今天我也有这个问题.我花了整整一天才发现自己的错误.希望能帮助到你.

我的无法导入的类具有cutom枚举类型属性.此属性标记为DataMember,Enum也标记为DataContract.到目前为止一切都很好.我忘记将每个枚举成员标记为EnumMember.

所以我改变了

[DataContract]
public enum SortMethodType
{
    Default = 0,
    Popularity = 1,
    ReleaseDate = 2,
    PublishedDate = 3,
    TranslatedTitle = 4,
    OriginalTitle = 5,
    UserRating = 6,
    Duration = 7
}
Run Code Online (Sandbox Code Playgroud)

对此:

[DataContract]
public enum SortMethodType
{
    [EnumMember]
    Default = 0,
    [EnumMember]
    Popularity = 1,
    [EnumMember]
    ReleaseDate = 2,
    [EnumMember]
    PublishedDate = 3,
    [EnumMember]
    TranslatedTitle = 4,
    [EnumMember]
    OriginalTitle = 5,
    [EnumMember]
    UserRating = 6,
    [EnumMember]
    Duration = 7
}
Run Code Online (Sandbox Code Playgroud)

它终于奏效了!


小智 8

在添加引用时转到高级属性并从清单中删除"System.Window.Browser",它解决了问题.


Ate*_*eik 8

这可能听起来很奇怪,但我通过删除引用,然后关闭Visual Studio,再次重新打开它,最后再次添加引用来修复它.

我认为需要重新启动自定义工具的东西.

  • 即使您决定在不删除引用的情况下找出问题我强烈建议您创建一个新项目并添加引用以查看它是否有效.这可能会显示您在现有项目中看不到的错误,或者它可能正常工作 (2认同)