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
感谢安德鲁的快速反应。有没有什么办法可以像上面的wsDualHttpBinding一样使用带有加密关闭的类似配置的二进制编码器,以便获得更好的性能。当前wsDualHttpBinding的性能非常缓慢。 – Bhuvan 2010-07-30 18:30:54
在你的文章中,你说你从消息级安全改变为传输。只需简单地将安全性改为无。那么你应该可以通过使用二进制编码器的HTTP进行Duplex。 – 2010-07-31 20:58:03
谢谢安德鲁的建议.. HTTPTransport不支持无..而是支持匿名。但是这个选项一起跳过认证..我需要用户信息(认证)。我必须通过传递UserName作为自定义标题并在授权管理器中使用它来做一个解决方法。我相信这不是一个好的解决方案..但现在它正在工作。我仍然在寻找正确的解决方案..我需要身份验证..并建立上下文..每会话一次..在一个双工服务..通过一个轻量级的渠道是快速的。 – Bhuvan 2010-08-02 19:00:53