2009-12-18 80 views
1

我的WCF服務被實例化多次,直到系統內存不足?如何在IIS 7中設置單個實例?如何限制IIS中WCF服務的實例數量?

我的WCF服務已被設置爲通過屬性的單個實例,但是IIS似乎忽略了這一點:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Multiple)] 

回答

7

可能定義一個WCF服務作爲一個單身 - 我會建議不要這樣做。你會遇到很多麻煩 - 性能和擴展問題,爲了解決這些問題,你必須處理多線程,線程安全的編程 - 這一切都很麻煩。

你應該做的是使用每個通話實例化設置,並將您的服務器限制在任何你認爲合理的地方。有一種叫做「serviceThrottling」的服務行爲,它允許你定義你想要允許的服務類的併發實例數量,你想要處理的併發呼叫數量等。

這些值設置的很低默認情況下,如果你有一個裝備精良的服務器,你可以輕鬆地進行一些調整。你在你的服務器的web.config這個定義是這樣的:

<behaviors> 
    <serviceBehaviors> 
     <behavior name="throttled"> 
      <serviceThrottling 
       maxConcurrentCalls="16" 
       maxConcurrentInstances="26" 
       maxConcurrentSessions="10" /> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 

(以上數值均爲缺省值)

閱讀上的服務節流和所有的細節與這些優秀的博客文章:

+0

總是你回答我所有的WCF問題=) – 2009-12-18 22:04:14

+0

請繼續 – 2009-12-18 22:08:32

+0

限制或單身人員都不適合我在IIS中工作。儘管它作爲一個自己託管的服務。 – 2009-12-19 17:10:11

0

你可能會覆蓋web.config中的屬性? 你怎麼知道你的服務正在被客戶端調用多次實例化(而不是通過創建多個實例的服務器上的代碼)?

+0

我不是覆蓋web.config中的這個屬性 – 2009-12-18 20:55:27