2011-03-30 24 views
1

我想實現一個WCF方法的發射後不管模式。我在我的本地環境中工作,但在IIS7上運行時遇到問題。的net.tcp與流傳輸模式結合=幀模式辛格爾頓不支持

我使用net.tcp綁定,並且發現使用這種綁定一個單向通話,即使,關閉代理將阻止用戶界面(在這種情況下,一個asp.net網站)直到操作完成。我改變了傳輸模式爲流,從而關閉代理不會造成等待,如this article建議。

正如我所說,這是工作,當我在本地主機上運行,​​但是當我部署到IIS7,我儘快得到這個錯誤,我打它利用合同法的頁面:

「成幀模式Singleton不受支持。「

如果我更改綁定的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> 

回答

2

這是因爲您的安全模式的消息。連接需要等到InstanceContext完成才能發送取消令牌以結束安全會話。

嘗試(根據您的需求)的安全模式設置爲無或運輸。或者,您可以將代理傳遞給ThreadPool.QueueUserWorkItem(ShutItDown,proxy),其代碼如下所示:

void ShutItDown(object data)var proxy =(ProxyType)data; proxy.Close(); }

+0

安全模式是交通運輸,不留言 – pjacko 2011-03-30 19:20:32

+0

通過這個給另一個線程關閉代理作爲這裏建議似乎是一個有效的解決方法。標記爲已接受的答案,謝謝! – pjacko 2011-04-02 17:51:45