如何通过http传输

时间:2015-09-09 13:14:58

标签: c# web-services wcf soap soap-client

我有一个Java异步Web服务,我认为它与大多数Web服务的工作方式不同。

Client: Send Request
Server: Send synchronous reply (acknowledge message)
Some time later
Server: Send asynchronous reply (data message)

我导入了WSDL。我用wsDuelHttpBinding设置端点。这没用。然后我尝试了自定义绑定

<customBinding>
  <binding name="CustomBinding">
    <compositeDuplex clientBaseAddress="http://10.0.0.15:5555/"/>
    <oneWay packetRoutable="true" />
     <customTextMessageEncoding messageVersion="Soap11WSAddressing10" mediaType="text/xml" />
    <httpTransport />
  </binding>
</customBinding>

我修改了CustomTextMessageEncoding的Microsoft示例,这有助于我通过欺骗服务无法理解的WS寻址头来解决一些问题。客户端堆栈中的某些东西需要这些头文件。

当前的问题是服务器发送的确认消息会引发以下异常。

  

通过对基础的单向发送收到回复   IRequestChannel。确保远程端点具有兼容性   绑定在其端点(包含OneWayBindingElement的端点)。

<oneWay/>频道有哪些替代方案? 服务器代码不在我的掌控之中。

1 个答案:

答案 0 :(得分:0)

我可以使用它的方法是在客户端同时拥有WCF服务器和WCF客户端。

首先,我从服务中下载了WSDL,并制作了两份副本。我编辑了一个WSDL,因此它只有来自服务的请求&#39; ACK&#39;回复我得到了,我删除了所有其他<wsdl:operation/>元素。从此我创建了一个WCF客户端。我编辑了另一个WSDL,因此它只有异步回复操作并从中创建了一个WCF服务。

客户端的WCF客户端部分执行以下操作

Client: Send Request
Server: Send synchronous reply (acknowledge message)

客户端的WCF服务器部分处理此

Some time later
Server: Send asynchronous reply (data message)

客户端和服务的绑定现在只是basicHttpsBinding。