的net.tcp与流传输模式结合=取景模式的Singleton不支持(net.tcp binding

2019-10-16 12:40发布

我试图实现一个WCF方法的发射后不管模式。 我在我的本地环境这方面的工作,但在IIS7运行的时候遇到了一个问题。

我使用net.tcp绑定,并且发现使用这种绑定一个单向通话,即使,关闭代理将阻止用户界面(在这种情况下,一个asp.net网站)直到操作完成。 我改变了传输模式为流,从而关闭代理不会造成等待,如建议这篇文章 。

正如我所说,这是工作,当我在本地主机上运行,​​但是当我部署到IIS7,我尽快得到这个错误,我打它利用合同法的页面:

“不支持取景模式单身。”

如果我更改绑定的transferMode属性为“缓冲”,我不明白的错误,但我回到我原来有关闭代理块,直到服务操作完成的问题

任何帮助将不胜感激。

我的代码:

// Operation Contract
[OperationContract(Name = "LoadNewDataset", IsOneWay = true)]
void LoadDataset(Workspace workspace, Connection connection, string dataSetName);

// WCF Config snippets:
<bindings>
  <netTcpBinding>
    <binding name="NetTcpStreamBinding" 
             transferMode="Streamed">
    </binding>
  </netTcpBinding>
</bindings>

....

<endpoint address="DataImportService" binding="netTcpBinding"
  bindingConfiguration="NetTcpStreamBinding" name="DataImportEndpoint"
  contract="MediaBrands.Adroit.WCF.IDataImportService" />


//Website web.config 
<bindings>
  <netTcpBinding>
    <binding name="DataImportEndpoint" closeTimeout="00:10:00" openTimeout="00:01:00"
      receiveTimeout="00:10:00" sendTimeout="00:10:00" transferMode="Streamed"
      hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288"
      maxBufferSize="5242880" maxReceivedMessageSize="5242880">
      <readerQuotas maxDepth="32" maxStringContentLength="65536" maxArrayLength="16384"
        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
      <security mode="Transport">
        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
      </security>
    </binding>

....

    <endpoint address="net.tcp://localhost:8001/AdroitWcf/DataImportService"
      binding="netTcpBinding" bindingConfiguration="DataImportEndpoint"
      contract="AdroitServiceReference.IDataImportService" name="DataImportEndpoint">
    </endpoint>

Answer 1:

这是因为您的安全模式的消息。 连接需要等待的InstanceContext完成发送取消标记以结束安全会话。

尝试(根据您的需要)的安全模式设置为无或运输。 另外,您也可以通过代理ThreadPool.QueueUserWorkItem(ShutItDown,代理)有一些代码,看起来是这样的:

无效ShutItDown(对象数据){风险代理=(的proxyType)数据; proxy.Close(); }



文章来源: net.tcp binding with streamed transfer mode = Framing mode Singleton is not supported