我有一个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/>
频道有哪些替代方案?
服务器代码不在我的掌控之中。
答案 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。