我正在使用自定义绑定设计双工通道wcf服务。目前,当我编译我的类库时,我收到以下错误:
传输模式流式传输不是 支持 ReliableSessionBindingElement。
以下是我的App.config:
<service behaviorConfiguration="transferServiceBehavior"
name="API.FileTransfer.FileTransferService">
<endpoint address="json"
behaviorConfiguration="WebHttpEPBehavior"
binding="webHttpBinding"
bindingConfiguration="jsonWeb"
name="MyJSONFileTransferEP"
contract="API.FileTransfer.IJSONFileTransferService" />
<endpoint address="pox"
behaviorConfiguration="WebHttpEPBehavior"
binding="webHttpBinding"
bindingConfiguration="poxWeb"
name="MyPOXFileTransferEP"
contract="API.FileTransfer.IPOXFileTransferService" />
<endpoint address="soap"
behaviorConfiguration="NetTcpEPBehavior"
binding="netTcpBinding"
bindingConfiguration="netTcpWeb"
name="MySOAPFileTransferEP"
contract="API.FileTransfer.ISOAPFileTransferService" />
<endpoint address="mex"
binding="mexTcpBinding"
bindingConfiguration=""
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:2544/filetransfer/" />
<add baseAddress="net.tcp://localhost:2544/filetransfer/" />
</baseAddresses>
</host>
</service>
我得到的错误是指我的自定义绑定,它具有reliableSession和compositeDuplex绑定元素:
<customBinding>
<binding name="netTcpCustom"
closeTimeout="00:01:00"
openTimeout="00:01:00"
receiveTimeout="00:10:00"
sendTimeout="00:01:00">
<reliableSession />
<compositeDuplex />
<oneWay />
<windowsStreamSecurity protectionLevel="None" />
<mtomMessageEncoding />
<tcpTransport maxBufferPoolSize="524288"
maxReceivedMessageSize="2147483647"
connectionBufferSize="8192"
hostNameComparisonMode="StrongWildcard"
channelInitializationTimeout="00:01:00"
maxBufferSize="2147483647"
maxPendingConnections="20"
maxOutputDelay="00:00:00.2000000"
maxPendingAccepts="5"
transferMode="Streamed"
listenBacklog="20"
portSharingEnabled="false"
teredoEnabled="false">
<connectionPoolSettings groupName="default" leaseTimeout="00:05:00"
idleTimeout="00:02:00" maxOutboundConnectionsPerEndpoint="20" />
</tcpTransport>
</binding>
</customBinding>
经过一番搜索后,我发现在使用可靠消息传递(WS-RM)时无法使用流式传输。这是因为WS-RM需要将签名/校验和作为统一等应用于整个消息;当流传输模式时,这是不可能的,只有缓冲的transferMode。
由于我正在设计双工绑定通道,并且我使用此服务来上传大文件,我需要transferMode =流式传输和可靠的会话绑定元素。
有人知道怎么攻击吗?你能告诉我它是如何完成的吗?
提前致谢。
答案 0 :(得分:1)
如果你打开安全性(例如SecurityMode =除None之外的其他东西),我相信你会在NetTcpBinding上获得一个会话。可能还有其他旋钮来提供会话,或者您可以使用tcp创建自定义绑定作为transport和reliableSession作为绑定元素。我不记得所有的细节,但希望这些是一些先发制人。
哦,等等,有一个旋钮:
http://msdn.microsoft.com/en-us/library/system.servicemodel.nettcpbinding.reliablesession.aspx
另见
答案 1 :(得分:1)
我开始认为这个问题的答案可能“不可能”。
我已经检查了MSDN和众多论坛,但它们都导致死路一条。似乎 没有可靠的流量是可能的,或者反过来但是相反 到目前为止,我还没有找到两者结合的例子。
答案 2 :(得分:0)
我们已经构建了一个系统,用户可以在不使用流媒体的情况下上传和下载非常大的文件。
使用流式传输的主要原因是它具有内存效率。
你真正需要让它发挥作用的唯一方法是很多的RAM。您还应该确保正确处理所有对象,因为在这种情况下,内存泄漏会导致问题。
答案 3 :(得分:0)
我建议更改为双工绑定,您可以在客户端和服务器之间交换多条消息。然后将结果分成不连续的部分(因此不会占用大量内存),并在双工通道下发送多个响应。
使用双工,您还可以启用安全通道和可靠会话,这两种方式都不适用于流式绑定。