0
我想在我的WCF服務中實現異步模式。 BeginMethod
被調用,但相應的EndMethod
從不被調用。調試服務器,在各處放置斷點,我注意到傳遞給BeginMethod
的回調永遠不會返回。我懷疑這就是爲什麼EndMethod
從未被調用的原因。從不調用異步WCF服務的結束方法
服務器代碼的結構如下:
IAsyncResult BeginMethod([params], AsyncCallback callback, object asyncState)
{
var task = Task<MyReturnType>.Factory.StartNew(()=>
{
//Do work here
return value;
});
return task.ContinueWith(r=>
{
callback(task);
return r;
});
}
MyReturnType EndMethod(IAsyncResult asyncResult)
{
return ((Task<MyReturnType>)asyncResult).Result;
}
我在EndMethod
斷點從未達到,而行callback(task);
永遠不會返回。
添加服務引用後,您用什麼代碼調用此端點? –
嗯,我自己編寫客戶端代碼,因爲我們不想公開我們的wsdl。基本上,我創建了ClientBase的子類以及用於覆蓋'CreateChanel'方法的ChannelBase 的子類。 Channel類分別通過調用'BeginInvoke(「」,args,callback,state)和'EndInvoke(「」,,asynResult)'來實現Begin和end方法。 –
Jesse
調用'EndXXX'實際上是調用者的責任,你明確這麼做嗎? 'BeginXXX'方法將調用同步版本,但您仍然需要調用'End'來獲取返回值。 –