我不知道我做错了什么。我有一个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);
答案 0 :(得分:1)
这不起作用。 WSDL服务器仅用于SOAP服务,它是Visual Studio中添加服务引用的源代码。您正在使用由Visual Studio生成的客户端代码,但您正在使用它与Json端点无关。
Json端点表示REST服务。要在.NET中调用WCF REST服务,您必须:
ChannelFactory
或WebChannelFactory
构建代理HttpClient
类(不推荐使用,因为REST Starter KIT的开发已经结束)。