我的WCF服務被實例化多次,直到系統內存不足?如何在IIS 7中設置單個實例?如何限制IIS中WCF服務的實例數量?
我的WCF服務已被設置爲通過屬性的單個實例,但是IIS似乎忽略了這一點:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
我的WCF服務被實例化多次,直到系統內存不足?如何在IIS 7中設置單個實例?如何限制IIS中WCF服務的實例數量?
我的WCF服務已被設置爲通過屬性的單個實例,但是IIS似乎忽略了這一點:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Multiple)]
你可能定義一個WCF服務作爲一個單身 - 我會建議不要這樣做。你會遇到很多麻煩 - 性能和擴展問題,爲了解決這些問題,你必須處理多線程,線程安全的編程 - 這一切都很麻煩。
你應該做的是使用每個通話實例化設置,並將您的服務器限制在任何你認爲合理的地方。有一種叫做「serviceThrottling」的服務行爲,它允許你定義你想要允許的服務類的併發實例數量,你想要處理的併發呼叫數量等。
這些值設置的很低默認情況下,如果你有一個裝備精良的服務器,你可以輕鬆地進行一些調整。你在你的服務器的web.config這個定義是這樣的:
<behaviors>
<serviceBehaviors>
<behavior name="throttled">
<serviceThrottling
maxConcurrentCalls="16"
maxConcurrentInstances="26"
maxConcurrentSessions="10" />
</behavior>
</serviceBehaviors>
</behaviors>
(以上數值均爲缺省值)
閱讀上的服務節流和所有的細節與這些優秀的博客文章:
你可能會覆蓋web.config中的屬性? 你怎麼知道你的服務正在被客戶端調用多次實例化(而不是通過創建多個實例的服務器上的代碼)?
我不是覆蓋web.config中的這個屬性 – 2009-12-18 20:55:27
總是你回答我所有的WCF問題=) – 2009-12-18 22:04:14
請繼續 – 2009-12-18 22:08:32
限制或單身人員都不適合我在IIS中工作。儘管它作爲一個自己託管的服務。 – 2009-12-19 17:10:11