元数据包含在指定名称空间时无法解析的引用

问题描述:

我在服务和客户端之间共享的项目中有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,但这对我来说不是一个好的解决方案,因为我不想重建现有客户端。

配置中缺少一些细节。

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