无法从客户端访问WCF双工

时间:2012-01-19 16:24:03

标签: wcf iis-7 duplex

我很生气并没有IDEA为什么我无法连接到我的WCF !!!

详细说明:

我有一个双工WCF,它成功运行并在我的本地窗口中工作。我在服务器(IIS - server 2008 R2-STANDARD)中托管它,并尝试连接,但是出现错误似乎是一个安全问题,我可以从Web浏览器访问它并获取所有xml ....

在我的客户端中,我正在尝试按以下方式访问它:

this.myCallbackProxy = new MyCallbackProxy();
  InstanceContext cntx = new InstanceContext(myCallbackProxy);
  this.Proxy = new MyServiceClientProxy(cntx, "WSDualHttpBinding_I_BridgeWCFService");

//我还尝试添加以下内容,而不是

this.Proxy.ClientCredentials.Windows.ClientCredential.UserName = "YY";
  this.Proxy.ClientCredentials.Windows.ClientCredential.Password = "PP";

以上传递没有错误或例外。 然后:

try
{
this.Proxy.Open();
}
catch { -> here I get an exception:

例外:

  

打开的操作未在指定的超时时间内完成   00:00:59.0849477。分配给此操作的时间可能是a   超时的一部分。

我必须提一下,我有另一个WCF托管在同一个IIS(非双工)中,具有相同的用户(服务器用户名),并且它完美无缺。 (我正在使用相同的应用程序轮询,我也尝试创建新的应用程序池。

如果我从我想运行应用程序的机器上浏览Web浏览器中的“http://xx.xx.xx.xx/_Bridge/_BridgeWcfService.svc”链接,我会得到xml ...正如预期的那样

服务和客户都有安全=“无”

任何想法为什么我无法连接:(?

这里是App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
  <wsDualHttpBinding>
    <binding name="WSDualHttpBinding_I_BridgeWCFService" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
      maxBufferPoolSize="2147483646" maxReceivedMessageSize="2147483646"
      messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true">
      <readerQuotas maxDepth="32" maxStringContentLength="2147483646"
        maxArrayLength="2147483646" maxBytesPerRead="2147483646" maxNameTableCharCount="2147483646" />
      <reliableSession ordered="true" inactivityTimeout="00:10:00"/>
      <security mode="None"/>
    </binding>
  </wsDualHttpBinding>
</bindings>
<client>
  <endpoint address="http://xx.xx.xx.xx/_Bridge/_BridgeWcfService.svc" 
            binding="wsDualHttpBinding" 
            bindingConfiguration="WSDualHttpBinding_I_BridgeWCFService" 
            contract="_BridgeWcfServiceReference.I_BridgeWCFService" 
            name="WSDualHttpBinding_I_BridgeWCFService">
    <identity>
      <dns value="localhost"/>
    </identity>
  </endpoint>
</client>
  </system.serviceModel>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
  </startup>
</configuration>

1 个答案:

答案 0 :(得分:1)

这听起来像防火墙问题 - wsDualHttpBinding在涉及防火墙时很容易爆炸,因为它试图打开从服务器回到客户端的连接。我建议使用NetTcpBinding进行双工通信。

我在博客上发表了这篇文章here