Azure 服务总线中继是否支持异步 wcf 操作?
Does azure service bus relay support async wcf opertions?
服务总线中继是否支持异步 wcf 操作?
我得到服务器无法 return 一个有意义的响应,代码如下。如果我将时间跨度更改为 30 秒,虽然它工作正常。
按照本教程开始
http://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-relay
客户代码:
var task = Task<string>.Factory.FromAsync(channel.BeginDoEcho, channel.EndDoEcho, input, null);
Console.WriteLine("Server echoed: {0}", task.Result );
服务器代码:
public IAsyncResult BeginDoEcho(string text, AsyncCallback callback, object state)
{
var task = Task<string>.Factory.StartNew(x =>
{
Thread.Sleep(TimeSpan.FromMinutes(5));
return text;
}, state);
return task.ContinueWith(result => callback(task));
}
public string EndDoEcho(IAsyncResult result)
{
return ((Task<string>) result).Result;
}
Azure cannot tell whether you have implemented your service synchronously or asynchronously. 这是一个未在写入时公开的实现细节。无论您的问题是什么原因 - 与您的服务通信的远程端都不会受到异步的影响。
事实上,您可以独立决定客户端和服务器是否要使用异步。
使用给定的代码,如果超时时间低于 5 分钟,您应该始终会看到超时错误,因为服务器需要 5 分钟来响应。服务器不会立即 returns 一个 IAsyncResult
并在 5 分钟后完成。 IAsyncResult
不可序列化,因此它永远不会通过网络传输。 5 分钟内什么也没有发送。
与本题无关:使用await
实现异步。容易多了。
您当前的服务器实现有一个问题:您在同步睡眠时阻塞线程 5 分钟。这完全否定了异步的好处。如果同时执行许多此类操作,这将导致线程池耗尽。
服务总线中继是否支持异步 wcf 操作?
我得到服务器无法 return 一个有意义的响应,代码如下。如果我将时间跨度更改为 30 秒,虽然它工作正常。
按照本教程开始 http://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-relay
客户代码:
var task = Task<string>.Factory.FromAsync(channel.BeginDoEcho, channel.EndDoEcho, input, null);
Console.WriteLine("Server echoed: {0}", task.Result );
服务器代码:
public IAsyncResult BeginDoEcho(string text, AsyncCallback callback, object state)
{
var task = Task<string>.Factory.StartNew(x =>
{
Thread.Sleep(TimeSpan.FromMinutes(5));
return text;
}, state);
return task.ContinueWith(result => callback(task));
}
public string EndDoEcho(IAsyncResult result)
{
return ((Task<string>) result).Result;
}
Azure cannot tell whether you have implemented your service synchronously or asynchronously. 这是一个未在写入时公开的实现细节。无论您的问题是什么原因 - 与您的服务通信的远程端都不会受到异步的影响。
事实上,您可以独立决定客户端和服务器是否要使用异步。
使用给定的代码,如果超时时间低于 5 分钟,您应该始终会看到超时错误,因为服务器需要 5 分钟来响应。服务器不会立即 returns 一个 IAsyncResult
并在 5 分钟后完成。 IAsyncResult
不可序列化,因此它永远不会通过网络传输。 5 分钟内什么也没有发送。
与本题无关:使用await
实现异步。容易多了。
您当前的服务器实现有一个问题:您在同步睡眠时阻塞线程 5 分钟。这完全否定了异步的好处。如果同时执行许多此类操作,这将导致线程池耗尽。