0

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

このメソッドは、List<string>呼び出された を返しますuserListService1SoapClientこれは、「クライアント」として参照する WPF アプリケーションで正常に機能します。したがって、メソッドを次の方法で呼び出す必要があります -

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

ただし、Silverlight では唯一のオプションは

client.userListAsync(); //Silverlight

これは WPF では正常に機能し、目的のリストが返されますが、Silverlight ではエラーが返されます -

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

また、これに関連して、WPF アプリでは、richTextBox に userList を使用してテキストを追加していますが、これは機能しますが、Silverlight ではrichTextBox1.AppendText有効なオプションではありません。

Silverlight アプリのどこで問題が発生していますか?

4

1 に答える 1

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;
    }
}
于 2012-04-20T12:49:23.033 に答える