2014-12-01 106 views
1

我正在使用服務和客戶端中引用的某些類型。我對我的WCF服務做了一些更改。當我嘗試更新服務參考時,出現以下錯誤:更新服務引用時忽略「引用程序集中的重用類型」

Metadata contains a reference that cannot be resolved. 'net.tcp//xxxx/mex 

要解決此問題,我添加了mex end piont。

<endpoint address="mex" contract="IMetadataExchange" binding="mexTcpBindng" /> 

我能夠更新服務參考。但即使在「配置服務參考」設置中選中了「參考asssembly中的重用類型」選項,它也正在爲我的客戶端創建新類型。爲什麼它會創建新的類型而忽略「重用類型」設置?使用ImetadataExchnge是否可以導致這種情況?

回答

1

發生此行爲是因爲當您從引用程序集選項指定重用類型時,Visual Studio會在指定的/ r標誌下調用svcutil.exe。

因爲svcutil.exe的使用DataContractSerializer可以生成代碼,可惜這有相當strict set of rules當談到解析服務定義(包含在WSDL定義的XSD),往往將無法生成代碼。在這種情況下,svcutil.exe將切換爲使用XmlSerializer,而不支持/ r標誌(或重新使用)。因此,您將無法重新使用類型。

如果您可以參考實際的服務合同類型(通過二進制引用),這是一個更好的解決方案,因爲您可以一起取消服務引用。

您也可以使用WSCF.blue來生成您的服務合約,因爲它具有自己的自定義序列化器並支持類型的重用。

相關問題