C# 从同一进程托管和使用WCF服务

C# 从同一进程托管和使用WCF服务,c#,.net,wcf,wcf-client,wcf-hosting,C#,.net,Wcf,Wcf Client,Wcf Hosting,您能否从托管WCF服务的进程成为WCF服务的客户端?我曾尝试在同一过程中创建不同的应用程序域,但仍然没有成功。该服务已确认在Http、Net.TCP和Net.Pipe上可用 谢谢你的帮助 Nat您可以尝试使用IDesign的ServiceModelEx程序集,它简化了为WCF服务创建进程内客户端的过程 该程序集包括一个InProcFactory类,该类为您的服务动态创建一个Net.Pipe端点和一个代理 是的。托管WCF服务后,必须在单独的线程中调用托管服务上的方法 我不知道您的具体问题是什么,

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

谢谢你的帮助


Nat

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

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


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

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

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


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

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

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

[ServiceBehavior(UseSynchronizationContext = false)]
public class MyService : IMyService {}

您有什么特殊问题?为什么?您应该能够直接使用底层方法,而不必担心端点。