2011-01-17 3 views
4

私はWCFサービスを公開するWinformsアプリケーションを持っています。WinformsアプリのWCF - 常にシングルスレッドですか?

IISから、私はサービスを利用しようとします。 2台の異なるコンピュータから、私はtest1.aspxを呼び出して、Winformsアプリケーション内のWCFを呼び出します。私は、WCFは、シングルスレッドであり、それはCALL 2の処理を開始する前に、それは私は、Windows Server 2008 R2とIIS 7.5を持っているプロセスのCALL 1.

[ServiceBehavior(IncludeExceptionDetailInFaults = true, 
       ConcurrencyMode=ConcurrencyMode.Multiple, 
       InstanceContextMode=InstanceContextMode.PerSession)] 

に完了する必要があると見

test1.aspx => from computer 1 => First Call 
test1.aspx => from computer 2 => Second Call 

誰でも手伝ってもらえますか?

+1

はどのようにしてWinformsのアプリ内であなたのWCFサービスをホストしています?あなたのやり方によっては、シングルトンやシングルスレッドのサービスになるかもしれません.... –

答えて

10

サービスがUIスレッドでホストされていると、WCFの動作が異なる場合があります。デフォルトでは、WCF処理はWindowsメッセージループに参加し、要求処理はシリアルになるだけでなく、WinForms UI(アプリケーションはフリーズする)でのすべてのイベント処理を停止します。この動作を回避するために

あなたは明示的にUIスレッドでサービスをホストしたくないことを言わなければならない:

[ServiceBehavior(UseSynchronizationContext = false)] 
+0

これは解決策です: – darez

+0

あなたは私の人生を救った! –