【问题标题】:Calling a WCF service from a Remoted DLL从远程 DLL 调用 WCF 服务
【发布时间】:2009-10-29 14:09:56
【问题描述】:

我有一个进程,我们称之为进程 A,它托管一个通过基本 Http 绑定公开的简单 WCF 服务。如果我启动该进程,我就可以从另一个进程进程 B 访问该服务,而不会出现任何问题。

但是,我需要的用例并不是那么简单。我需要做的是从使用 Remoting 托管的 DLL 访问服务。远程 DLL 由进程 A 在单独的 AppDomain 中启动,并且位于本地计算机上。

当我从进程 A 调用远程 DLL 中的一个方法时,该方法又应该回调到进程 A 中托管的 WCF 服务,调用者只是挂起,一分钟后我得到一个服务超时。永远不会输入服务代码(永远不会到达在外部调用它时遇到的断点)。

远程 DLL 能够创建客户端代理类的实例这一事实告诉我(如果我在这里错了,请纠正我)该服务的配置至少在远程客户端。如果我删除服务引用,它不会像在外部客户端中那样抱怨缺少配置信息或抛出异常。

所以我想我的问题是多部分的。首先,远程 DLL 是否可以首先调用 WCF 服务(即客户端是否可以使用所有必需的基础设施)?如果可以,我可能会错过什么?以及如何调试这样的东西?当它是一个简单的案例时,调试远程处理是很痛苦的 - 而这并不是那么简单。

最后一件事 - 我无法改变这样一个事实,即我处于远程处理 DLL 的进程中,并且远程 DLL 需要使用该服务。这是该应用程序基础架构中根深蒂固的一部分。但是,如果有任何用途,我可以将大多数 WCF 服务托管到另一个进程(我可能会在此处等待任何答案时尝试这样做)。

【问题讨论】:

    标签: .net wcf remoting


    【解决方案1】:

    Remote DLL 能够创建客户端代理类的实例这一事实并不能说明配置正常。

    确保使用与服务器相同的基地址、相同的协议和安全模式。

    既然你在同一台机器上,应该不会有网络问题。

    【讨论】:

    • 这一切都在同一台机器上。可以创建类的事实不是告诉我正在读取某些配置,不一定是正确的,但至少可以找到并加载它?
    • 我不认为 WCF 关心呼叫“从哪里来”。为什么要使用 WCF 服务的同一进程中的远程 dll?
    • 你可以创建一个带有错误参数的代理,直到你调用某些东西——它不会抛出异常。
    • 原因有点复杂,但总之DLL是应用程序自己生成然后托管的。它是远程的,因此可以随时拆除和重建。现在它只是本地的,尽管应用程序当前可以使用在网络中任何地方运行的应用程序托管的 DLL。同样,因此根本抛出异常,它只是等待 1 分钟并给出服务超时。就好像它认为它知道服务在哪里,但却无处可寻。
    • 将 wcf 跟踪添加到项目中,如果有消息,请查看消息的传播程度。并从另一个进程测试 wcf 服务,看看它是否配置正常。
    【解决方案2】:

    最后,我们完全删除了 Remoting。虽然工作量很大,但这是正确的做法。

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多