2012-04-03 22 views
1

嗨,WCF與PerCall,SessionMode.NotAllowed,回調?

我有一個使用下面的今天

  • NetTcpBinding的(WAS)
  • 託管在IIS7
  • PerSession服務
  • 服務SessionMode.Required
  • Callbacks
  • Singelton on ser保存所有客戶端副上下文

說我現在需要實例化這種改變爲PerCallSessionMode.NotAllowed,這是更多鈔票沒有丟失任何我的上述關鍵functionalitys的?

我已經看到,TCP是一個會話綁定protocoll,這意味着我將不得不使用HTTP綁定女巫的速度不如TCP(XML 1.0編碼器,而不是二進制編碼器)。但我仍然不確定這是否會支持例如回調?

回答

1

PerCallSessionMode.NotAllowed比您當前的設置「較少」特定/限制。只要您意識到基本含義,您應該可以輕鬆地轉換到這些設置:在服務實例的調用之間沒有更多的狀態。

這就是說,我不確定我是否理解「單件服務包含所有客戶端上下文」的含義。你能詳細說明嗎?我認爲你的意思是你在服務實現中的單態(靜態字段?)內持有狀態。從PerCall實例訪問它會很好,只要記住你必須提供圍繞該狀態的鎖定。例如,這是如何維護回調列表的。

另外,您對僅作爲會話的TCP的理解不正確。請記住,HTTP是建立在TCP之上的協議。是TCP套接字保持連接一段時間(保持活動狀態),以便它們可以重用,但是通過它們發送的消息可以完全不相關。所以如果你堅持使用NetTcpBinding,你會沒事的。同樣,您可以在技術上通過HTTP傳輸進行會話。另外,如果你切換到基於HTTP的傳輸,你不需要使用來使用文本編碼。您可以發送通過HTTP傳輸的二進制內容,它只是需要建立一個自定義綁定,將看起來像:

<bindings> 
    <customBinding> 
     <binding name="MyBinaryOverHttpBinding"> 
      <binaryMessageEncoding /> 
      <httpTransport /> 
     </binding> 
    </customBinding> 
</bindings> 
+0

我怎麼能欠幅無會話與netTCP? – Banshee 2012-04-03 19:22:28

+0

當你說「無時間」時,你說什麼水平?如果您只是更改爲PerCall模式,則不再有邏輯WCF會話。這表示您的TCP連接仍然會與服務器保持會話,以儘可能有效地進行多個呼叫。這些設置由NetTcpBinding本身的設置通過默認值爲10的MaxConnections屬性來控制。 – 2012-04-03 19:32:51

+0

好吧,但我的意思是在服務接口上,如果我設置了SessionMode.NotAllowed,那麼netTCP似乎無法工作? – Banshee 2012-04-04 06:51:03