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'来获取返回值。 –