1

Windows サービスで WCF サービスをホストしました。WCF サービス参照を追加し、クライアントを生成したコンソール アプリがあります。

サービスへの同期呼び出しを行うことはできますが、非同期呼び出しは機能していないようです。サーバープロセスをアタッチすると、サービスにまったくヒットしません。

client= new ServiceClient();
client.DoSomething();//Works fine

client.DoSomethingAsync()//Doesnot work

これは既知の問題ですか?

4

4 に答える 4

1

asynccall はおそらくバックグラウンド ワーカースレッドで開始されます。したがって、フォアグラウンド スレッドが処理を終了したため、非同期スレッドが消滅している可能性があります。

この呼び出しを行った後、応答を待機するか、メイン スレッドで他の作業を続行するロジックがない限り、アプリケーションが終了する前にバックグラウンド スレッドを作成する時間がない場合があります。

これは、非同期呼び出しの後に Thread.Sleep を追加することで簡単にテストできます。

client.DoSomethingAsync();
Thread.Sleep(1000);

この現象の症状は、サービスが予期せず開始または停止し、Windows がエラーをスローすることです。

于 2009-07-21T12:17:49.600 に答える
0

に電話がある場合

client.DoSomethingAsync()//Doesnot work

次に、コールバック完了イベントのハンドラーを指定しましたか?

public event DoSomethingCompletedEventHandler DoSomethingCompleted;

非同期呼び出しがオフになるとどうなりますが、結果はどのように返されますか?そのためのハンドラーメソッドを提供する必要があります-それをDoSomethingCompletedイベントハンドラーに接続してください!そのメソッドでは、非同期呼び出しの結果を取得し、必要なことは何でもそれらを使用して実行できます。

マーク

于 2009-07-21T15:50:10.053 に答える
0

投稿されたコードから、asyncメソッドからの応答を処理するハンドラーを設定していないと想定しています。このmsdn投稿の下部にある例のように、 AddHanlderを使用して応答を処理する必要があります。

非同期呼び出しを行う前に、次のようなものを使用します。

AddHandler client.DoSomethingCompleted, AddressOf DoSomethingCallback

アウトームに対処する方法で:

Private Shared Sub DoSomethingCallback(ByVal sender As Object, ByVal e As DoSomethingCompletedEventArgs)

        'Do something with e.Result
        MsgBox e.Result

End Sub
于 2009-07-21T14:39:25.910 に答える
0

クライアントを生成するときに、「非同期操作を生成する」を指定するボックスにチェックを入れましたか?

于 2009-07-21T11:56:19.773 に答える