4

我目前有一个带有回调合同(双工)的 WCF 服务,当我在我的计算机上使用使用它的应用程序时,一切正常,但是当我从另一台计算机尝试它时,它无法连接。

一旦我切换到使用它wsDualHttpBinding(用于回调),这些问题就开始出现,因为当我使用时wsHttpBinding一切正常。

为什么 Web 服务不接受来自其他计算机的请求?是否需要修改一些托管设置?


至于日志,我得到了这些:

替代文字 http://img17.imageshack.us/img17/4628/wcfissue.jpg

打开操作未在分配的 00:01:00 超时内完成。分配给此操作的时间可能是较长超时的一部分

无法打开 System.ServiceModel.Channels.ClientReliableDuplexSessionChannel

故障 System.ServiceModel.Channels.ClientReliableDuplexSessionChannel

故障 System.ServiceModel.Channels.ServiceChannel

无法打开 System.ServiceModel.Channels.ServiceChannel


该端口在我的路由器(TCP 和 UDP)上是打开的,所以这不是问题。

至于服务属性,这就是我正在使用的:

界面:

[ServiceContract(Name = "MusicRepo_DBAccess_Service", 
                 CallbackContract = typeof(IOnlineUsersCallback),
                 SessionMode=SessionMode.Required)]

服务:

[ServiceBehavior(
        ConcurrencyMode=ConcurrencyMode.Reentrant, 
        InstanceContextMode=InstanceContextMode.Single)]

[更新]

关于Orion Edwards的帖子:

  • 没有防火墙
  • 见第 1 点
  • 是的,我可以,因为我的路由器上转发了端口
  • 我正在使用 IIS 来托管服务器。

问题是,当我从wsHttpBinding(工作正常)切换到wsDualHttpBinding(因为我需要回调)时,这个问题就开始发生了


[更新]

我现在已经切换wsDualHttpBindingNetTcpBinding并且出于某种原因,一切正常。

我使用这篇文章来帮助我在 IIS 上设置托管,谢天谢地,一切都按预期工作,带有回调。

4

3 回答 3

2

我现在已经切换wsDualHttpBindingNetTcpBinding并且出于某种原因,一切正常。

我使用这篇文章来帮助我在 IIS 上设置托管,谢天谢地,一切都按预期工作,带有回调。

于 2009-05-09T08:38:56.343 回答
1

如果您发布服务器和客户端配置设置会有所帮助。

以下是MSDN中 wsDualHttpBinding 如何工作的摘要(强调我的):

WSDualHttpBinding 为 Web Service 协议提供与 WSHttpBinding 相同的支持,但用于双工协定。WSDualHttpBinding 仅支持 SOAP 安全性并需要可靠的消息传递。此绑定要求客户端具有为服务提供回调端点的公共 URI。这是由 clientBaseAddress 属性提供的。双重绑定将客户端的 IP 地址暴露给服务。客户端应该使用安全性来确保它只连接到它信任的服务。

此绑定可用于通过一个或多个 SOAP 中介进行可靠通信。

默认情况下,此绑定生成一个运行时堆栈,其中 WS-ReliableMessaging 用于可靠性,WS-Security 用于消息安全和身份验证,HTTP 用于消息传递,以及文本/XML 消息编码。

于 2009-05-13T00:20:22.003 回答
0

检查事项:

  • Windows 防火墙
  • 您的防病毒产品的防火墙
  • 你能从远程机器telnet到端口吗?
  • 您的“服务器”是否在 ASP.NET 开发服务器下运行?这只会接受来自本地主机的请求 - 您需要使用 IIS 自行托管服务器ServiceHost或将其托管在 IIS 下。
于 2009-05-07T21:21:47.873 回答