我有一个WCF服务,我正在尝试使用wcf,旧肥皂和普通xml。该服务称为TestService.svc,配置如下所示:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="TestServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="poxBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="TestServiceBehavior" name="TestService">
<endpoint address="" binding="wsHttpBinding" contract="ITestService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="xml" binding="webHttpBinding" behaviorConfiguration="poxBehavior" contract="ITestService"/>
</service>
</services>
</system.serviceModel>
我从另一个问题得到了这个代码: REST / SOAP endpoints for a WCF service
现在,XML webHttpBinding似乎运行良好,但是wsHttpBinding和basicHttpBinding不能很好地工作。
我可以使用以下方式浏览服务: http://localhost:8295/WCFTest/TestService.svc
我也可以使用该端点在asp.net网站项目中添加服务引用并尝试使用该服务,但是当我创建客户端时:
TestService.TestServiceClient mytest = new TestService.TestServiceClient();
它表示由于多个端点而指定端点。我想由于同时拥有wsHttp和basicHttp?如何在此处指定端点?
接下来,我尝试通过向.net 2.0网站添加Web引用(不是服务引用)来使用basicHttpBinding端点。此时我无法添加引用并收到错误400。
接下来,我删除了wsHttp绑定,并能够通过.net 2.0客户端添加Web引用并使用该服务。
如何配置它以便我可以为可以使用普通WCF服务的客户端使用wsHttpBinding,对于只能使用较旧的非WCF SOAP请求的客户端使用basicHttpBinding,并且仍然可以为想要使用普通xml的客户端使用webHttpBinding?
答案 0 :(得分:1)
发布此链接的人(http://www.codemeit.com/wcf/wcf-restful-pox-json-and-soap-coexist.html)似乎是正确的。但由于这个问题仍然没有答案,我会详细说明一下。
如果您还没有尝试过,我会首先提到您的配置中没有指定要连接的客户端服务的实际地址。
<service behaviorConfiguration="TestServiceBehavior" name="TestService">
<endpoint address="" binding="wsHttpBinding" contract="ITestService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="xml" binding="webHttpBinding" behaviorConfiguration="poxBehavior" contract="ITestService"/>
</service>
您的第一个端点
<endpoint address="" binding="wsHttpBinding" contract="ITestService">
根据MSDN上的文档(找到here)和上面的链接,您的服务配置中似乎缺少此信息
<host>
<baseAddresses>
<!-- note, choose an available port-->
<add baseAddress="http://localhost:8295/WCFTest/TestService" />
</baseAddresses>
</host>
添加它会使您的服务配置看起来像这样
<service behaviorConfiguration="TestServiceBehavior" name="TestService">
<host>
<baseAddresses>
<!-- note, choose an available port-->
<add baseAddress="http://localhost:81/TestService" />
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" contract="ITestService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<endpoint address="soap" binding="basicHttpBinding" contract="ITestService"/>
<endpoint address="xml" binding="webHttpBinding" behaviorConfiguration="poxBehavior" contract="ITestService"/>
</service>
添加该部分将提供要使用的地址,而特定端点将使用相对于所提供的基址的地址。