您可以通过托管 WCF 服务的进程成为 WCF 服务的客户吗?我曾尝试在同一进程中创建单独的应用程序域,但仍然没有成功。该服务已确认可在 Http、Net.TCP 和 Net.Pipe 上使用。
感谢您的任何帮助!
纳特
您可以通过托管 WCF 服务的进程成为 WCF 服务的客户吗?我曾尝试在同一进程中创建单独的应用程序域,但仍然没有成功。该服务已确认可在 Http、Net.TCP 和 Net.Pipe 上使用。
感谢您的任何帮助!
纳特
即使在使用 ServiceModelEx 的 InProcFactory 时,我也遇到了同样的问题。
事实证明,如此处所述,您需要将 ServiceBehavior 设置为not UseSynchronizationContext
。
[ServiceBehavior(UseSynchronizationContext = false)]
public class MyService : IMyService {}
您可以尝试使用 IDesign 的 ServiceModelEx 程序集,它简化了为 WCF 服务创建进程内客户端的过程。
该程序集包括一个 InProcFactory 类,它为您的服务动态创建一个 Net.Pipe 端点和一个代理。
是的。托管 WCF 服务后,您必须在单独的线程中调用托管服务上的方法。
我不知道您的具体问题是什么,但在同一进程中使用 WCF 服务时我也遇到了问题。我的问题是我的应用程序在从客户端调用服务时会挂起一分钟,最后返回超时异常。我想这与等待服务器响应时线程上的阻塞调用有关......如果服务器被阻塞,这是一个问题。我使用的是命名管道,我没有尝试任何其他选项。
萨姆森的上述建议可能有效,但我以另一种方式做到了。我通过线程创建了服务和侦听器,而不是在线程上调用托管服务。这似乎工作得很好。
现在有点离题了——Firestrand 询问您为什么要在自己的应用程序中执行此操作。我正在创建一个 Windows 服务,以及一个需要与之通信的单独的 WPF 应用程序 UI。然而,调试 Windows 服务有点痛苦,很多服务工作,包括 WCF 调用,都进入了一个单独的 DLL,我可以在“测试”模式下在 UI 应用程序中引用它,它本质上只是调用启动例程实际的 Windows 服务会。这使我可以在不附加到进程、运行多个进程等的情况下调试 UI 和“模拟”服务。它似乎工作得很好。UI 和 DLL 完成后,我将简单地创建实际的 Windows 服务,它基本上只是 DLL 的包装器,然后至少在 UI 上隐藏测试模式。只是想我会分享以防其他人发现这种方法可能会有所帮助。