【问题标题】:Two endpoints in WCF 3.5 for SOAP and JSONWCF 3.5 中用于 SOAP 和 JSON 的两个端点
【发布时间】:2011-04-23 00:58:04
【问题描述】:

我不知道我做错了什么。我有一个 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);

【问题讨论】:

    标签: wcf json soap wcf-binding


    【解决方案1】:

    这行不通。 WSDL 服务器仅用于 SOAP 服务,它是 Visual Studio 中添加服务参考的来源。您正在使用由 Visual Studio 生成的客户端代码,但您将它与不起作用的 Json 端点一起使用。

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

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

    【讨论】:

    • 感谢再次回复!不熟悉休息服务。将阅读更多内容!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多