需要示例fire并忘记对WCF服务的异步调用

apo*_*lfj 12 c# wcf asynchronous

在预定的时间间隔,我需要调用WCF服务异步调用另一个WCF服务.调度我已经解决的WCF服务调用.

我认为我需要的东西,我已经在stackoverflow上读到了必须...,(实质上)准备或更改WCF服务的代码,以便能够处理对它们的异步调用.如果是这样的话,那个简单的例子是什么样的?(也许是前后的例子)在.Net 3.5中还有必要吗?

其次我使用来自WCF服务的代理来执行对下一个WCF服务的调用,并且需要一个对WCF服务的异步调用的样本,如果它看起来与具有典型异步示例的BeginEnvoke和EndEnvoke的典型不同.

如果我对我的问题完全不满意,我会相信它,并且会感谢任何更正以建立更好的问题.

jos*_*rry 22

在要调用的WCF方法上,将OperationContract属性的IsOneWay属性设置为true.这告诉WCF该调用仅对一个方向有用,并且客户端不会因该方法完成执行而闲逛.

即使在调用BeginInvoke时,您的客户端代码仍然会挂起,等待服务器方法完成执行,但它会在线程池线程上执行.

[ServiceContract]
interface IWCFContract
{
   [OperationContract(IsOneWay = true)]
   void CallMe()
}
Run Code Online (Sandbox Code Playgroud)

执行所需操作的另一种方法是让WCF服务将其工作转移到后台线程并立即返回.


uri*_*rig 7

务必仔细测试OneWay WCF调用的执行方式.当你达到X个同时呼叫时,我已经看到它停止了,好像WCF确实等待呼叫结束.

更安全的解决方案是尽快让"目标"代码返回控制:不要让它完全处理调用,而是让它只将数据放入队列并返回.让另一个线程轮询队列并异步处理数据.

并确保应用线程安全机制以避免在该队列上工作的两个线程之间发生冲突.