我在配置WCF服务时遇到了一些困难。我的要求是它公开了一个basicHttpBinding端点以及一个netTcpBinding端点。我的一些客户端是.NET 2.0,需要能够通过WSDL.exe生成代理。
它似乎在很大程度上起作用 - 但是当我试图获得WSDL时,它不合作。在浏览器中,它为我提供了一些SOAP XML标记,但绝对不是完整的WSDL。 WSDL.exe给了我一系列错误:
错误:处理'http://1.2.3.4:9877/MyService/basicHttp?wsdl'时出错。
这是我的主机配置。有什么事情在这里出错吗?
<system.serviceModel>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="MyRunner">
<endpoint address="netTcp" binding="netTcpBinding" bindingConfiguration="" contract="IMyRunner">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="basicHttp" binding="basicHttpBinding" bindingConfiguration="" contract="IMyRunner">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" contract="IMetadataExchange" />
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:9876/MyService/netTcp" />
<add baseAddress="http://localhost:9877/MyService/basicHttp" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
答案 0 :(得分:1)
如果你有两个MEX端点,每个端点需要一个单独的地址 - 调用一个“mex”,然后调用另一个“mex2”或者其他东西:
<service behaviorConfiguration="MyServiceBehavior" name="MyRunner">
<endpoint address="netTcp" binding="netTcpBinding" bindingConfiguration="" contract="IMyRunner">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="basicHttp" binding="basicHttpBinding" bindingConfiguration="" contract="IMyRunner">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" contract="IMetadataExchange" />
<endpoint address="mex2" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:9876/MyService/netTcp" />
<add baseAddress="http://localhost:9877/MyService/basicHttp" />
</baseAddresses>
</host>
</service>
(好的,根据OP的评论,他不是在IIS中托管,所以这不相关)
<击> 另外:你在IIS托管?在这种情况下,您的基地址(至少是HTTP地址)毫无意义 - 服务器,虚拟目录和SVC文件的位置将决定您的服务地址:
http://YourServer/YourVirtualDirectory/SubDirectory/YourService.svc/basicHttp
表示“正常”服务端点,或
http://YourServer/YourVirtualDirectory/SubDirectory/YourService.svc/mex
用于基于HTTP的MEX端点。
击>
答案 1 :(得分:0)
感谢提示家伙。原来问题是baseAddress值指向“localhost”。在生成的WSDL中,它仍然显示“localhost”,因此WSDL.exe显然试图访问localhost(我的开发机器)而不是服务器。我将“localhost”更改为托管服务的服务器的实际IP,并且WSDL.exe成功运行,即使在.NET 1.1中也是如此。我仍然可以使用svcutil.exe获得4.0版本。