1
我通常會嘗試將我的Web服務調用封裝在我的客戶端應用程序中。Properway封裝異步Web服務通信
不是這樣:
public Guid FindUserIDSelected(string userName)
{
MyWebServiceReference service = new MyWebServiceReference(GetEndpointBasedOnEnv(Env));
return service.GetUserIDFromName(userName);
}
我有一個封裝與Web服務通信的靜態類。它通過確定環境(以及其他類似的東西)來處理端點解析。
所以上面的代碼更改爲如下所示:
public Guid FindUserIDSelected(string userName)
{
return Communication.GetUserIDFromName(userName);
}
但現在我有一個問題。 Silverlight只支持異步調用(至少就我所見)。所以調用Web服務,然後返回封裝調用中的值不起作用。
我能想出的傳遞是在通信類用於已完成事件的委託最好的:
private Guid foundUserID;
public void FindUserIDSelected(string userName)
{
Communication.GetUserIDFromName(userName, GetUserIDCompleted);
}
private void QuestionRecieved(object sender, GetUserIDFromNameCompletedEventArgs e)
{
foundUserID= e.Result();
}
這有幾個問題(在我看來)。
- 我現在的Web服務已經打破封裝要素(完成的呼叫是真正的Web服務的回報。我不希望我的課的其餘部分不得不關心服務)。
- 我不得不在課堂上暴露我的結果(foundUserID)。
我是不是太死板?這足夠好嗎?有沒有更好的辦法?
我是誰擁有這個問題的唯一一個?