WCF 3.5中的两个端点用于SOAP和JSON

时间:2011-04-23 00:58:05

标签: wcf json soap wcf-binding

我不知道我做错了什么。我有一个WCF(.NET 3.5)服务(JsonSoap.svc),它有两个soap和json内容类型的端点。两个端点都引用相同的服务。我在客户端只使用一个Json端点。我的目标是让服务方法GetPerson()返回Json或soap,具体取决于用于连接服务的端点(希望在WCF中可以这样做?)。我可以看到wsdl并且能够成功地将服务引用添加到客户端。

我调用GetPerson() -

后出现以下错误
  

“接收时发生错误   HTTP响应   http://localhost:80/JsonSoap/json/GetPerson。   这可能是由于服务   端点绑定不使用HTTP   协议。这也可能是由于   中止HTTP请求上下文   由服务器(可能由于   服务关闭)。见服务器   记录更多详细信息。“

WCF服务配置

<!-- bindings -->
<bindings>

  <basicHttpBinding>
    <binding name ="soapBinding">
      <security mode="None">
      </security>
    </binding>
  </basicHttpBinding>

  <webHttpBinding>
    <binding name="webBinding">
    </binding>
  </webHttpBinding>
</bindings>

<!-- JSON behaviors -->
<endpointBehaviors>
  <behavior name="jsonBehavior">
    <enableWebScript  />
  </behavior>
</endpointBehaviors>
<serviceBehaviors>
  <behavior name="defaultBehavior">
    <serviceDebug includeExceptionDetailInFaults="true" />
    <serviceMetadata httpGetEnabled="true" />
  </behavior>
</serviceBehaviors>
</behaviors>
  <services>
    <service name="TestService.IJsonSoap" behaviorConfiguration="defaultBehavior">
      <host>
        <baseAddresses>
          <!-- note, choose an available port-->
          <add baseAddress="http://localhost:80/JsonSoap" />
        </baseAddresses>
      </host>

<endpoint address="soap" binding="basicHttpBinding"
          bindingConfiguration="soapBinding"
          contract="TestService.IJsonSoap" />

<endpoint address="json" binding="webHttpBinding"
          bindingConfiguration="webBinding"
          behaviorConfiguration="jsonBehavior"
          contract="TestService.IJsonSoap" />
</service>

WCF代码:

[OperationContract]
[WebGet]
Person GetPerson(int ID);

WCF客户端配置:

<endpoint address="http://localhost:80/JsonSoap/json" binding="webHttpBinding"
          bindingConfiguration="webBinding" behaviorConfiguration="jsonBehavior"
          contract="MyService.IJsonSoap" />

客户代码:

MyService.JsonSoapClient service = new JsonSoapClient();
MyService.Person person = service.GetPerson(10);

1 个答案:

答案 0 :(得分:1)

这不起作用。 WSDL服务器仅用于SOAP服务,它是Visual Studio中添加服务引用的源代码。您正在使用由Visual Studio生成的客户端代码,但您正在使用它与Json端点无关。

Json端点表示REST服务。要在.NET中调用WCF REST服务,您必须:

  • 构建manully HTTP请求
  • 与客户共享服务合约,并使用ChannelFactoryWebChannelFactory构建代理
  • 使用REST Starter KIT CTP2及其HttpClient类(不推荐使用,因为REST Starter KIT的开发已经结束)。