0

WCF サービスを呼び出す Silverlight プロジェクトがあります。サービス メソッド GetData には 1 つのパラメーター dataID があり、GetDataAsync を介して呼び出され、関数 BeginGetData および EndGetData を使用して自動作成されたクラスによって処理されます。場合によっては、呼び出しによって EndGetData で TimeoutException がスローされます (これは問題ありません。WCF サービス自体がサード パーティのサービスを呼び出して、ダウンしている場合や問題がある場合があるため、タイムアウト値を増やしたくありません)。

私がやりたいことは、GetDataAsync に送信された dataID を使用してアクションを実行できるようにすることです (たとえば、GetData への新しい呼び出しをスケジュールしたり、失敗したデータ ストリームを示す適切なエラー メッセージをユーザーに表示したりします)。これはどのように行うことができますか?EndGetData にブレークポイントを設定すると、IAsyncResult 型の結果パラメーターは System.ServiceModel.Channels.ServiceChannel.SendAsyncResult オブジェクトになります。このオブジェクトには、デバッグ時にパラメーターを見つけることができる RPC プロパティがありますが、このクラスはからは利用できません。 Friend と宣言されているためです。

これはまったく可能ですか、それとも私が望む動作を別の方法で実装する方法について誰かがアイデアを持っていますか?

4

1 に答える 1

1

むしろ、VisualStudioによって自動生成されるべきであるCompletedEventHandlerを実装します。独自のuserState値を使用して呼び出すこともできます。

void GetData(int dataID)
{
  client.GetDataCompleted += GetDataCompleted;
  client.GetDataAsync(dataID, dataID); //the 2nd param being the userState object
}

void GetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
  var dataId = (int)e.UserState;
}

エラーが発生した場合、EventArgsには次の例外も含まれます。

if (e.Error != null)
  throw e.Error;

自動生成されたメソッドの変更/使用は避けてください。

于 2012-06-13T08:05:58.117 に答える