2015-11-22 98 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'會導致死鎖? –