2009-08-26 8 views
0

私のアプリケーションから呼び出すWebサービスには2つの方法があります。voidを返すWebサービスの非同期メソッドを呼び出すにはどうすればよいですか?

  1. XmlNode getCase(string parameter) // synchronous
  2. void getCaseAsync(string parameter) //async

私は単にメソッド1を呼び出すと、このようなXMLNodeの中で結果を保存することができ、

XmlNode node=webservice.getCase("test"); 

が、私は取得する方法を見つけ出すことはできませんvoidを返す非同期メソッドからの結果を返します。私はこれを試みたが、erorrを得る:

IAsyncResult result = webservice.getCaseAsync(("test"); 

すべてのアイデア?

はいブライアンは、あなたは、私はすでにこのように私のフォームconsturcorクラスで実装されていることを右の「完了」イベントが、あります

webService.getCaseCompleted + =新しいwebService.getCaseCompletedEventHandler(webService_getCaseCompleted)。

空隙webService_getCaseCompleted(オブジェクト送信者、webService.getCaseCompletedEventArgs E) {webService.GetCaseAsync( "試験")。 } 私はそこからコードを実行したいフォームにボタンを持っています。私はこれを試しました プライベートvoid button1_Click(オブジェクト送信者、EventArgs e) { webService_getCaseCompleted(this、null); } "e"がNullであるというエラーが表示されます。このメソッドをどのように実行する必要がありますか?

おかげで、 デイブ

答えて

0

メソッドの戻り値の型がvoidであれば、それは何も返さないことを意味します。それが何も返されない場合は、結果を期待することはできません。そのため、あなたの割り当ては無効です。あなたはそれが何かは、その後void他の何かにメソッドの戻り値の型を変更返すようにしたい場合は

webservice.getCaseAsync("test"); 

:あなたはちょうどそのようなメソッドを呼び出す必要があります。

5

あなたはWCFプロキシについて話していると仮定すると、それはこのように行くだろう:

私はIServiceはこのようなものになります。あなたのクライアントでは

[ServiceContract] 
public interface IService 
{ 
    [OperationContract] 
    void DoSomething(); 
} 

を、あなたのコードは次のようになります。

var serviceProxy = new MyService.Service1Client(); 
serviceProxy.DoSomethingCompleted += DoSomethingComplete; 
serviceProxy.DoSomethingAsync(); 

そして、あなたの非同期のコールバックは、次のようになります。

private void DoSomethingComplete(object sender, AsyncCompletedEventArgs e) 
{ 
    // Handle the result 
} 

完了したハンドラでは、サービスコールが成功したかどうかを確認できます(e.Cancelled == falseおよびe.Error == null)。

覚えておいてください。非同期呼び出しではすぐに結果が得られません。それは完了時にあなたに伝えます。

希望すると便利ですか?

+0

明らかに、非同期メソッドが完了したかどうかを調べるためにWebサービスを呼び出すメソッドがなければならず、そうであれば結果を取得する必要があります。 APIを知っているわけではないかもしれませんが、それは他の、より賢明でない方法かもしれません... – Will

関連する問題