2011-12-21 26 views
2

這是背景信息。我有一個像這樣配置的WCF服務如何配置WCF服務以使用PerCall實例上下文運行?

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 

現在我需要一些幫助來理解這種上下文模式的工作原理。

這是我正在處理的問題。爲了爭辯,可以說我有一個需要10秒的執行並從服務器返回的調用。如果我同時進行兩個調用(使用Ajax請求),第一個請求將在10秒後回來。但第二個請求會在20秒後回來。

我在期待這種上下文模式可以處理兩個彼此獨立的請求,並且同時返回兩個請求。我是否正確配置了我的服務?

回答

1

PerCall每個呼叫被分配一個單獨的實例(極端可擴展性)。每次調用該方法都會創建一個新的服務器對象(單獨的線程)。一旦處理完請求(方法返回),新的實例被釋放。

如果您已將方法配置爲使用ConcurrencyMode.Single,那麼您會看到此阻止行爲。

您應該考慮檢查serviceThrottling配置以確保您的應用程序調整正確。

<serviceBehaviors> 
    <behavior name="throttleBehavior"> 
     <serviceThrottling maxConcurrentCalls="15" maxConcurrentInstances="10"/> 
    </behavior> 
</serviceBehaviors> 
0

以下配置

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]

可能並不總是立即創建服務上下文爲每個呼叫。如果使用的綁定啓用了會話,並且服務實現了IDispose,則客戶端調用將排隊,而另一個客戶端已經有服務實例。所以,檢查你的情況下的綁定細節。

相關問題