2010-07-29 87 views
2

我很困扰这个双工WCF服务,它调用服务来获取大量数据。 我正在使用wsDualHttpBinding,它的工作原理非常缓慢。我分析并且大部分时间都被串行器和认证过程使用。所以我决定使用二进制编码并将安全性更改为传输,并且由于它是Intranet应用程序,所以不需要加密。WCF CustomBinding Duplex无法打开客户端端口

<wsDualHttpBinding> 
     <binding name="CRMXServiceDualBinding" sendTimeout="00:10:00" 
      maxBufferPoolSize="50524288" maxReceivedMessageSize="50000000" 
      messageEncoding="Mtom"> 
      <readerQuotas maxDepth="50000000" maxStringContentLength="50000000" 
      maxArrayLength="50000000" maxBytesPerRead="50000000" maxNameTableCharCount="50000000" /> 
      <reliableSession ordered="true" inactivityTimeout="00:30:00" /> 
      <security mode="Message"> 
      <message clientCredentialType="Windows" negotiateServiceCredential="true" /> 
      </security> 
     </binding> 
     </wsDualHttpBinding> 

所以我试图编写这个自定义绑定。

<customBinding> 
     <binding name="DuplexBindingConfig"> 
      <compositeDuplex /> 
      <oneWay maxAcceptedChannels="128" packetRoutable="false"> 
      <channelPoolSettings idleTimeout="00:10:00" leaseTimeout="00:10:00" 
       maxOutboundChannelsPerEndpoint="10" /> 
      </oneWay> 
      <binaryMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"> 
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
       maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
      </binaryMessageEncoding> 
      <httpTransport manualAddressing="false" maxBufferPoolSize="2147483647" 
      maxReceivedMessageSize="2147483647" allowCookies="false" authenticationScheme="Negotiate" 
      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
      keepAliveEnabled="true" maxBufferSize="2147483647" proxyAuthenticationScheme="Anonymous" 
      realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false" 
      useDefaultWebProxy="true" /> 
     </binding> 
     </customBinding> 

现在我面临两个问题:1。 为了测试ASP.Net开发服务器上它会立即返回错误: “HTTP请求是未经授权的客户端身份验证方案‘协商’接收的认证报头。从服务器是'NTLM'。“ 2.在IIS6上进行测试,调用永远不会到达服务器。 我的预感是客户端口未被打开。

请帮助..在此先感谢。

* BTW我使用Windows XP SP3,框架3.5 SP1,VS2008

回答

4

我可以看到一个问题:

不能在双面http绑定,甚至是自定义的复式http绑定使用传输层安全性。

客户端将通过通用端口监听器(即,不是Web服务的监听器)侦听,并且不理解使SSL工作所需的详细信息。

+0

感谢安德鲁的快速反应。有没有什么办法可以像上面的wsDualHttpBinding一样使用带有加密关闭的类似配置的二进制编码器,以便获得更好的性能。当前wsDualHttpBinding的性能非常缓慢。 – Bhuvan 2010-07-30 18:30:54

+0

在你的文章中,你说你从消息级安全改变为传输。只需简单地将安全性改为无。那么你应该可以通过使用二进制编码器的HTTP进行Duplex。 – 2010-07-31 20:58:03

+1

谢谢安德鲁的建议.. HTTPTransport不支持无..而是支持匿名。但是这个选项一起跳过认证..我需要用户信息(认证)。我必须通过传递UserName作为自定义标题并在授权管理器中使用它来做一个解决方法。我相信这不是一个好的解决方案..但现在它正在工作。我仍然在寻找正确的解决方案..我需要身份验证..并建立上下文..每会话一次..在一个双工服务..通过一个轻量级的渠道是快速的。 – Bhuvan 2010-08-02 19:00:53