2017-10-06 60 views
0

我在服務和客戶端之間共享的項目中有Class2和Class1。元數據包含在指定名稱空間時無法解析的引用

<DataContract(Name:="Class1", Namespace:="http://www.example.com/my/app")> _ 
Public Class Class1 
    <DataMember> _ 
    Public Property Test 
End Class 

<DataContract(Name:="Class2{0}", Namespace:="http://www.example.com/my/app")>  
Public Class Class2(Of ReturnType) 
    <DataMember> _ 
    Public Property Test As String 
    <DataMember()> _ 
    Public Property Items() As ReturnType() 
End Class 

這是我的服務接口:

<ServiceContract(Name:="Service")> _ 
Public Interface IService 

    <OperationContract()> _ 
    Function GetStuff() As Class2(Of Class1) 

End Interface 

在我服務的項目我也有從共享類繼承的Class1的:

<DataContract(Namespace:="http://www.example.com/my/app")> 
Public Class Class1 
    Inherits [Shared].Entities.Class1 

End Class 

我的服務配置:

<?xml version="1.0"?> 
    <configuration> 

     <system.serviceModel> 
<diagnostics> 
    <messageLogging logEntireMessage="true" logMalformedMessages="true" logMessagesAtTransportLevel="true"/> 
    <endToEndTracing propagateActivity="true" activityTracing="true" messageFlowTracing="true"/> 
</diagnostics> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="false"/> 
<bindings/> 
<services> 
    <service behaviorConfiguration="MyServ" name="WcfService1.Service"> 
    <endpoint binding="netTcpBinding" bindingConfiguration="" contract="WcfService1.IService" /> 
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" 
     contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost/service/" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="MyServ"> 
     <serviceMetadata httpGetEnabled="false" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

當我嘗試添加服務引用在我的客戶項目中,我得到的錯誤:

的URI前綴無法識別。 元數據包含無法解析的引用:'net.tcp:// localhost/service/mex'。 元數據包含無法解析的引用:'net.tcp:// localhost/service/mex'。 如果服務在當前解決方案中定義,請嘗試構建解決方案並再次添加服務引用。

如果我從服務項目中Class1的DataContract屬性中刪除名稱空間,那麼我可以生成服務引用。但是我不得不添加這個命名空間並刪除它會打破其他的東西。我怎樣才能生成我的服務引用,同時保持命名空間不變?

如果我在共享項目和服務項目中將名稱空間更改爲net.tcp而不是http,但這對我來說不是一個好的解決方案,因爲我不想重建現有客戶端。

回答

0

配置中缺少一些細節。

NetTcpBinding的可是沒有任何地址端點

的baseaddress可是沒有規定的任何港口。 如果你不使用任何端口80默認情況下只會用於http.Its總是會更好地克服這個默認值http.net對於nettcp模式你必須明確定義端口。

<service behaviorConfiguration="MyServ" name="WcfService1.Service"> 
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="" contract="WcfService1.IService" /> 
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" 
     contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost:8080/service/" /> 
     </baseAddresses> 
    </host> 
    </service> 

現在,你可以通過這個地址的net.tcp添加服務引用://本地主機:8080 /服務/

+0

謝謝,但指定端口不會對錯誤有什麼區別。此外,這個應用程序多年來一直在net tcp上運行,並且添加了服務引用,但沒有命名空間。 – Sarah

相關問題