我的一些通话在 windows phone 8 上花费了更长的时间。调用它们异步给我带来了麻烦。
我有时可以同步调用 WCF 服务方法吗?有什么办法吗?需要紧急响应 谢谢
我的一些通话在 windows phone 8 上花费了更长的时间。调用它们异步给我带来了麻烦。
我有时可以同步调用 WCF 服务方法吗?有什么办法吗?需要紧急响应 谢谢
所有对网络的调用都必须异步完成。SDK 中甚至不存在这些方法的同步版本。
你看到什么样的麻烦?即使您的调用是同步的,也不会使它们更快地返回。
使用扩展方法和 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;
}
}