我在服務和客戶端之間共享的項目中有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,但這對我來說不是一個好的解決方案,因爲我不想重建現有客戶端。
謝謝,但指定端口不會對錯誤有什麼區別。此外,這個應用程序多年來一直在net tcp上運行,並且添加了服務引用,但沒有命名空間。 – Sarah