2016-06-18 15 views
1

XamarinフォームからWCFサービスで簡単なログイン機能を呼び出そうとしています。XamarinフォームWCF非同期呼び出しvoid文字列関数の戻り値

私は問題なくサービスを参照しました。

私はこのようなクライアントオブジェクトを定義しています

Service1Client client = new Service1Client(); 

マイサービス関数名は、ログインで、文字列を返します。私はXamarinからその関数を呼び出すようにしようとすると、私は唯一の代わりにログインのLoginAsync機能へのアクセスを持ってServiceClientオブジェクト

Public Function Login(ByVal wUser As String, ByVal wPassword As String) As String Implements IService1.Login 
    Return String.Format("Test") 
End Function 

フォーム:ここでの定義です。少し調べてみたら、非同期関数で待たなければならないことが分かりました。

私はそれを試してみましたが、その後の行は、エラーが表示さ「を使用することはできませんが、ボイドを待つ」:

await client.LoginAsync("user", "password"); 

私が間違っているのか?

WCF関数が正しく実行され、 "Test"文字列が返されますが、Xamarinフォームでそれを取得する方法がわかりません。

関数が返す文字列を取得するにはどうすればよいですか?

ありがとうございます。

+0

あなたは "string value = await client.LoginAsync(" user "、" password ");" – Jason

+0

はい、私はそれを試みましたが、 "空で待つことができません"というエラーがまだ残っています。私の関数はvoid型ではないので、これは分かりません。私がawaitを削除した場合、エラーは "voidから文字列に変換できません"です。 – Michelh91

+0

LoginAsyncメソッドの署名は何ですか? asyncを使用するのではなく、コールバックメソッドが必要な場合があります。 – Jason

答えて

2

最終的に解決策が見つかりました。

LoginCompletedイベントにリスナー関数を割り当てる必要がありました。

client.LoginCompleted += client_LoginCompleted; 
    client.LoginAsync("user", "password"); 

そして私はここでその関数のEventArgsの

static void client_LoginCompleted(object sender, LoginCompletedEventArgs e) 
    { 
     var result = e.Result; 
    } 

で結果を得ることができ、非同期呼び出しはWCFでどのように機能するかを理解するために私を助けとなっての3つのかのう方法のリンクです結果。

http://jaliyaudagedara.blogspot.com.es/2013/03/asynchronous-operations-in-wcf.html

が、これは誰かに役立ちます願っています。

+0

本当に助けてくれました、ありがとうございます。しかし、なぜLoginメソッドが利用できないのですか? –

関連する問題