【问题标题】:WCF callback interface passing to another WCF service method on different machineWCF 回调接口传递给不同机器上的另一个 WCF 服务方法
【发布时间】:2010-12-01 10:22:49
【问题描述】:

收到A机器的回调接口,保存在B机器上。

我想将此回调接口(即机器 B 上的代理)传递给机器 C。

机器 A、B 和 C 使用 WCF,因此可以使用适当的接口。

问题是当我运行 PassCallbackToDedicatedMachine(someCallback) 方法时,我收到如下异常:

无法将“System.Object”类型的对象转换为“HCP.Common.IClientApplicationCallback”类型。

当我在机器 B 上的回调代理上运行方法时,一切正常。

问题是当我尝试将此回调(当然分配给某些 WCF 接口)传递给另一台机器时。

也许有一些方法可以从代理获取客户端端点地址,将该地址作为字符串传递并在不同的机器上手动实例化它(也知道这个接口)。

怎么做?

谢谢,

调用堆栈如下(也许会有所帮助):

在 System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(消息回复、MessageFault 故障、字符串操作、MessageVersion 版本、FaultConverter faultConverter)

在 System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)

在 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)

在 System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs)

在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime 操作)

在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 消息)

【问题讨论】:

    标签: .net wcf proxy callback


    【解决方案1】:

    我认为您尝试的方式不会奏效。

    您需要在机器 B 上创建一个新的回调,然后将其传递给机器 C。在返回的路上,调用将通过机器 B。

    【讨论】:

    • 我解决了这个问题,引入了名为 SendCallbackTo() 的附加方法,该方法将回调接口直接发送到正确的目的地。它涉及服务器中心和客户端机器之间的额外调用,但这是我迄今为止发现的最简单的解决方案。我已经看到在代理中可以使用诸如端点 url 之类的信息(在肥皂中它是 ReplyTo 元素)。我在所有服务器机器上都有回调端点配置和行为,所以在理论上(对于 http)我应该可以手动创建具有特定目标的代理。
    • 不同的情况当然是nettcp bindind,因为它是永久性机器之间的两种(直接)连接。
    【解决方案2】:

    对不起,您不再使用 DCOM....

    DCOM 为实现此类事情做了很深的魔法,WCF 更接近于原始网络,并且不会在相同程度上隐藏网络。

    无论如何,在现实生活中,DCOM 很难为这种类型的设置设置安全性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      相关资源
      最近更新 更多