2015-11-22 58 views
2

我有一个Web服务,我正在从两个不同的应用程序,WPF和MVC访问。在这两个应用程序中,我都调用自动生成的异步Web服务方法。为什么异步Web服务调用没有响应?

到目前为止,WPF应用程序工作得很好,但是当从MVC应用程序调用相同的异步Web方法时,Web服务从不响应。该服务的跟踪几乎是空的,而在调试时我可以看到该方法只是应该终止。 另外,可以从mvc应用程序调用不同的异步方法,没有任何问题。 绑定和端点的配置在两个应用程序中都完全相同。

这真的让我感到困惑,因为这种行为看起来非常随机,我只是无法弄清楚发生了什么问题。 可以从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

如何生成的服务?你能发布服务的实际代码吗? GetResultsAsync –

回答

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

+0

你从哪里看到死锁?他没有在任何代码中调用'.Result'或'.Wait'。 –

+0

他正在使用'await' – Dusan

+0

为什么你认为使用'await'会导致死锁? –