我有一个Web服务,我目前从两个不同的应用程序,WPF和MVC访问。在这两个应用程序中,我调用自动生成的异步Web服务方法。
到目前为止,WPF应用程序工作得很好,但是当从MVC应用程序调用相同的异步Web方法时,Web服务从不响应。该服务的跟踪几乎是空的,在调试时我可以看到该方法正在终止它应该是。 此外,可以从mvc app调用不同的异步方法,没有任何问题。 绑定和端点的配置在两个应用程序中完全相同。
这真的吓坏了我,因为这种行为似乎是随机的,我只是无法弄清楚出了什么问题。 非异步调用可以工作,甚至可以从MVC应用程序调用其他异步方法。
这就是我称之为方法的方式:
try
{
var result = await this._serviceChannel.GetResultsAsync(newerThan);
return result;
}
..
这就是服务的方法:
[OperationContract(Action = "GetChangedResults", ReplyAction = "GetChangedResults")]
[PrincipalPermission(SecurityAction.Demand, Role = "GetResults")]
public IEnumerable<Results> GetChangedResults(DateTime newerThan)
{
using (ResultUnitOfWork ruow = new ResultUnitOfWork())
{
return ruow.GetChangedResults(newerThan);
}
}
有任何想法或建议吗? 谢谢和问候
修改
我已经将方法体更改为在调用后直接返回NULL - 也没有响应:
public IEnumerable<DcLecturer> GetChangedLecturers(DateTime newerThan)
{
return null;
}
答案 0 :(得分:0)
这是一个典型的僵局。
等待结果时使用ConfigureAwait
:
try
{
var result = await this._serviceChannel.GetResultsAsync(newerThan).ConfigureAwait(false);
return result;
}
http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html