3

您可以通过托管 WCF 服务的进程成为 WCF 服务的客户吗?我曾尝试在同一进程中创建单独的应用程序域,但仍然没有成功。该服务已确认可在 Http、Net.TCP 和 Net.Pipe 上使用。

感谢您的任何帮助!

纳特

4

4 回答 4

4

即使在使用 ServiceModelEx 的 InProcFactory 时,我也遇到了同样的问题。

事实证明,如此所述,您需要将 ServiceBehavior 设置为not UseSynchronizationContext

[ServiceBehavior(UseSynchronizationContext = false)]
public class MyService : IMyService {}
于 2012-11-06T23:04:11.463 回答
2

您可以尝试使用 IDesign 的 ServiceModelEx 程序集,它简化了为 WCF 服务创建进程内客户端的过程。

该程序集包括一个 InProcFactory 类,它为您的服务动态创建一个 Net.Pipe 端点和一个代理。

来自 IDesign.net 的 ServiceModelEx

于 2009-12-24T19:11:20.317 回答
1

是的。托管 WCF 服务后,您必须在单独的线程中调用托管服务上的方法。

于 2010-01-07T11:08:32.320 回答
1

我不知道您的具体问题是什么,但在同一进程中使用 WCF 服务时我也遇到了问题。我的问题是我的应用程序在从客户端调用服务时会挂起一分钟,最后返回超时异常。我想这与等待服务器响应时线程上的阻塞调用有关......如果服务器被阻塞,这是一个问题。我使用的是命名管道,我没有尝试任何其他选项。

萨姆森的上述建议可能有效,但我以另一种方式做到了。我通过线程创建了服务和侦听器,而不是在线程上调用托管服务。这似乎工作得很好。

现在有点离题了——Firestrand 询问您为什么要在自己的应用程序中执行此操作。我正在创建一个 Windows 服务,以及一个需要与之通信的单独的 WPF 应用程序 UI。然而,调试 Windows 服务有点痛苦,很多服务工作,包括 WCF 调用,都进入了一个单独的 DLL,我可以在“测试”模式下在 UI 应用程序中引用它,它本质上只是调用启动例程实际的 Windows 服务会。这使我可以在不附加到进程、运行多个进程等的情况下调试 UI 和“模拟”服务。它似乎工作得很好。UI 和 DLL 完成后,我将简单地创建实际的 Windows 服务,它基本上只是 DLL 的包装器,然后至少在 UI 上隐藏测试模式。只是想我会分享以防其他人发现这种方法可能会有所帮助。

于 2011-05-24T05:11:11.043 回答