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

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

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

第二,我正在使用来自WCF服务的代理来调用下一个WCF服务,并且需要一个对WCF服务的异步调用示例,如果它看起来与使用典型异步示例的BeginEnvoke和EndEnvoke的典型不同。

如果我完全不在我的问题上,我会相信它,并且会感谢任何纠正以建立更好的问题。

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

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

[ServiceContract] interface IWCFContract { [OperationContract(IsOneWay = true)] void CallMe() } 

另一种做你想要的方法是让WCF服务将其工作转移到后台线程并立即返回。

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

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

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

不要使用BeginInvoke甚至是模式的线程。 确保根据Microsoft网站使用AsyncPattern装饰您的类,否则您的Async委托和线程将以同步模式运行。 WCF强制此行为。 这个信息是由另一个op发布的,他发现了阻止回调问题的解决方案。抱歉,但我不记得链接了。