1

我的一些通话在 windows phone 8 上花费了更长的时间。调用它们异步给我带来了麻烦。

我有时可以同步调用 WCF 服务方法吗?有什么办法吗?需要紧急响应 谢谢

4

2 回答 2

1

所有对网络的调用都必须异步完成。SDK 中甚至不存在这些方法的同步版本。

你看到什么样的麻烦?即使您的调用是同步的,也不会使它们更快地返回。

于 2013-01-31T12:09:04.080 回答
0

使用扩展方法和 TPL 异步。

这里

例子:

public async Task<string> GetMyData(string urlToCall)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlToCall);
    request.Method = HttpMethod.Get;
    HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

    using (var sr = new StreamReader(response.GetResponseStream()))
    {
        return sr.ReadToEnd();
    }
}

扩展方法:

 public static class HttpExtensions
    {
        public static Task<HttpWebResponse> GetResponseAsync(this HttpWebRequest request)
        {
            var taskComplete = new TaskCompletionSource<HttpWebResponse>();
            request.BeginGetResponse(asyncResponse =>
            {
                try
                {
                    HttpWebRequest responseRequest = (HttpWebRequest)asyncResponse.AsyncState;
                    HttpWebResponse someResponse = (HttpWebResponse)responseRequest.EndGetResponse(asyncResponse);
                    taskComplete.TrySetResult(someResponse);
                }
                catch (WebException webExc)
                {
                    HttpWebResponse failedResponse = (HttpWebResponse)webExc.Response;
                    taskComplete.TrySetResult(failedResponse);
                }
            }, request);
            return taskComplete.Task;
        }
     }
于 2013-01-31T15:05:54.213 回答