【发布时间】:2017-10-06 02:24:41
【问题描述】:
我在服务和客户端之间共享的项目中有一个 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,这也有效,但这对我来说不是一个好的解决方案,因为我不想重建现有客户端。
【问题讨论】: