为什么异步Web服务调用没有响应?

时间:2015-11-22 10:07:19

标签: c# wcf asynchronous

我有一个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;
}

1 个答案:

答案 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