2012-04-20 11 views
0

私は単純なWebMethodをバックエンドウェブサービスに書いています。私はこれをWPFアプリケーションとSilverlightアプリケーションの両方のサービス参照として使用しています。SilverlightとWPFでのWebサービスの使用の違い

このメソッドはuserListというList<string>を返します。これはWPFアプリケーションでうまくいきます。私はService1SoapClientを 'クライアント'として参照しています。でメソッドを呼び出すありフォア - しかし、Silverlightで唯一のオプションは、

client.userListAsync(); //Silverlight 

である。これは、WPFで正常に動作し、目的のリストを戻します

client.userlist(); //this is the case in WPF app 

、しかしSilverlightはエラーを戻します -

Error 11 Cannot implicitly convert type 'void' to 'System.Collections.Generic.List<string>' 

また、WPFアプリケーションでは、richTextBoxにuserListというテキストを追加していますが、これは動作しますが、SilverlightではrichTextBox1.AppendTextはvalではありませんidオプション。

ここで、私はSilverlightアプリケーションで間違っていますか?

答えて

3

SilverlightのすべてのWebサービス呼び出しは非同期です。つまり、結果が返ってくるのを待つ間にアプリケーションブロックを実行させることはできません。代わりにSilverlightに結果が得られたときに何をすべきかを伝え、それまでそれを自分のビジネスで続けさせます。

SilverlightアプリケーションのWebサービスクライアントでは、Webメソッドの戻り値をxxxCompletedEventArgsパラメータとして取得するイベントハンドラを渡す必要があります。ここで「xxx」はWebメソッドの名前です。

このページ:http://msdn.microsoft.com/en-us/library/cc197937(v=vs.95).aspxは、イベントハンドラを設定し、それを使用してWebサービスコールの出力を処理する方法を示します。ページから

proxy.GetUserCompleted += new EventHandler<GetUserCompletedEventArgs (proxy_GetUserCompleted); 
    proxy.GetUserAsync(1); 
    //... 
} 

//... 

void proxy_CountUsersCompleted(object sender, CountUsersCompletedEventArgs e) 
{ 
    if (e.Error != null) 
    { 
     userCountResult.Text = “Error getting the number of users.”; 
    } 
    else 
    { 
     userCountResult.Text = "Number of users: " + e.Result; 
    } 
} 
+0

あなたは、すべての実行時にもう一度proxy_CountUsersCompletedを実行します同じプロキシオブジェクトと次の実行にそうでない場合は、あなたのイベントハンドラを登録解除してください。 – Stainedart

+0

優れた答え。リンクはまさに​​私が必要としたものでした。治療をしなさい。 – Ebikeneser

関連する問題