C# ReliableSessionBindingElement不支持流传输模式
我正在设计一个使用自定义绑定的双工通道wcf服务。目前,当我编译类库时,我得到以下错误: 传输模式流式传输不可用 支持 ReliableSessionBindingElement 下面是我的App.config:C# ReliableSessionBindingElement不支持流传输模式,c#,wcf,binding,C#,Wcf,Binding,我正在设计一个使用自定义绑定的双工通道wcf服务。目前,当我编译类库时,我得到以下错误: 传输模式流式传输不可用 支持 ReliableSessionBindingElement 下面是我的App.config: <service behaviorConfiguration="transferServiceBehavior" name="API.FileTransfer.FileTransferService"> <endpoin
<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和CompositedPlex绑定元素:
<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=streamed和可靠的会话绑定元素
有人知道如何攻击它吗?你能告诉我怎么做吗
提前感谢。如果您打开安全性(例如,SecurityMode=除None之外的其他内容),我相信您将在NetTcpBinding上获得一个会话。还可能有其他旋钮提供会话,或者您可以创建一个自定义绑定,其中tcp作为传输,reliableSession作为绑定元素。我不记得所有的细节,但希望这些是一些先发者
哦,不,等等,有一个旋钮:
另见
我们已经建立了一个系统,用户可以上传和下载非常大的文件,而无需使用流媒体 使用流媒体的主要原因是它具有内存效率
你唯一真正需要让它工作的就是大量的RAM。您还应该确保正确处理所有对象,因为在这种情况下,内存泄漏会导致问题。我开始认为这个问题的答案可能是“不可能” 我检查了MSDN和许多论坛,它们都导致了死胡同。似乎 没有reliableSession的流媒体是可能的,反之亦然
到目前为止,我还没有找到两者结合的例子 我建议改为双工绑定,这样您可以在客户端和服务器之间交换多条消息。然后将结果分块成离散的部分(因此不会消耗大量内存),并作为多个响应沿双工通道发送
使用双工,您还可以启用安全通道和可靠会话,这两种功能都不适用于流媒体绑定。谢谢。我尝试了你的定制建议,并用结果更新了我的问题。我的配置中有什么可疑的地方吗?布莱恩-根据我的问题更新,还有什么建议吗?再次感谢。谢谢设拉子,我很好奇你到底做了什么。但是,就我们眼前的目的而言,我们确实需要一个解决方案来解决发布的问题,因为在当前的体系结构中已经花费了大量的时间和精力。这有点简化,但假设有100个用户同时下载一个10MB的文件。内存只有1GB,如果您有16GB的服务器,没有问题。好的,谢谢。有道理。现在,我们将关注当前的架构,如果你有任何想法,请告诉我!谢谢你的意见。从这个问题没有答案(以及互联网上没有内容)来看,我猜我会把“不可能”作为答案。我会把这个留几天,以防万一。。。