【发布时间】: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