【发布时间】:2009-09-04 06:47:31
【问题描述】:
今天我有一个 WCF 问题,尽管它可能也与 .NET 中的其他网络模型有关。
我有一个 WCF 服务,它公开了一个 Send(Message) OperationContract,它是 OneWay = true。现在这个服务有一个回调通道来向客户端返回消息。
无论如何,我正在尝试(成功地)从我的客户端异步调用此 Send 方法。在 DuplexSessionChannel 上我调用 BeginSend(Message, OnSendComplete, null) 并且我有一个 OnSendComplete(IAsyncResult) 方法在 DuplexSessionChannel 上调用 EndSend(asyncResult)。
该服务有一个 CallbackContract 并使用相同的 BeginSend()/EndSend() 模式发送回客户端,该模式在我使用 OperationContext.Current.GetCallbackChannel 获得的回调通道上调用。
客户端在其 DuplexSessionChannel 上从服务回调通道接收消息时调用 BeginReceive()/EndReceive()。
即使一切正常,我也不明白 End<Operation>() 方法实际上做了什么,这就是我需要向我解释的内容。
我问是因为我在调用服务上的 EndSend() 时偶尔遇到异常(发送回客户端),抱怨集合已被修改(我知道这个异常的含义,但不知道它发生的原因或确切的位置...)。我正在使用具有 Silverlight 客户端的 PollingDuplexHttpBinding。
我不是 WCF 专家,但不要隐瞒细节,我需要知识。到目前为止,在我的职业生涯中,我曾在其他异步操作中看到过这种 Begin/End 模式,但从未真正理解发生了什么。
提前致谢。
【问题讨论】:
标签: wcf asynchronous callback