2012-03-18 11 views
1

Silverlight 5.0とWCF 4.0をエンティティフレームワーク4.0で使用しています。私の設計は次のとおりです。Silverlightクライアントは、通常の同期メソッド呼び出しによってサービスエージェント(これは単体のWCFサービスへのラッパー)を呼び出します。サービスエージェントinturnは、バイナリエンコーディングとhttptransportでカスタムバインディングで設定されたWCFサービスを呼び出します。このWCFサービスはSilverlightと同じアプリケーションで処理され、サービスエージェントからの呼び出しは "operationame" Asyncメソッドによって行われます。サービスエージェントには、「操作」完了メソッドが呼び出されたときに起動されるカスタムイベントがあります。このサービスエージェントのイベントは、Silverlightによって処理されます。このWCFサービスは、再度 "operationame" Asyncメソッドを使用して分散WCFサービスを呼び出します。SilverlightからのWCF呼び出しが並列ではなく順次実行されています

私のSilverlightアプリケーションは、画面に4種類のウィジェットを持ち、サービスエージェントを4回呼び出します。サービスエージェントからの4つのコールは、インプロセスWCFサービスと並行してトリガーされています。しかし、処理中のWCFサービスから、呼び出された呼び出しは、順次配布されたwcfサービスに順次行われます。私はちょうどプロセスwcfがwcfサービスに依存する順次呼び出しを行っていることを示しているfiddlerを調べました。私はそれを並行して作りたいと思います。誰か助けてもらえますか?問題は、私のサーバーが並列で実行するのと同じように、1つずつ処理していることです。私は、コールがWCFに順番に到着しているのを見て、これを確認した。 WCF分散サービスは、concurrencymode singleとwebhttpbindingを持つpercallとして構成されています。

また、silverlight/wcfスレッドモデルの仕組みを理解するためのリソースやリンクがあります。私はproxymethodAsync呼び出しが新しいスレッドを生成しているかどうかを知ることに興味がありますか?UIスレッドをブロックせずにどのように動くのでしょうか?

+0

は、変更を保存するコードを参照する必要があります。 – BentOnCoding

答えて

4

HTTPコール(あなたのWCFコールが引き継がれていると推測しています)は非同期ではありません。

コードで非同期呼び出しが発行されますが、Silverlightランタイム(またはブラウザ)がその接続を同期的に処理します。戻り時にのみ、コードにコールバックが発行されます。

一度に行うことができる内容の数にも制限があります。これは、ブラウザおよび/または実行時の制限です。通常、制限は2つのアクティブな接続です。

多くのコールを行う必要がある場合は、それらをラップして、バッチとしてサーバーに送信する必要があります。

+0

hmmm..but問題は、私のサーバーがparellelで実行しているのと同じようにonyで処理していることです。 –

+1

Fiddler(FirefoxのFirebug)のようなツールを使用すると、ブラウザが各ホストに一度に2つの接続しか実行していないことがわかります。ブラウザがレスポンスを受信すると、別のリクエストが送信されます。 –