. net服务主机调用自己的服务

本文关键字:服务 自己的 调用 主机 net | 更新日期: 2023-09-27 18:04:23

我有多个WCF服务自托管在一个windows服务中。其中一个WCF服务需要调用驻留在同一窗口服务中的另一个WCF服务。这可能需要在同一台机器上运行,或者在另一台机器上安装相同的windows服务。我是否需要应用程序添加对自身的引用,或者是否有更简单的方法来调用它自己的服务之一。我知道如何通过改变端点地址来做不同的机器位,但我不太清楚我是否应该添加对自身的引用。也就是说,我需要使用相同的代码,我将使用从一个单独的客户端。

. net服务主机调用自己的服务

这里的概念称为"位置透明度"。也就是说,调用在同一进程中或在另一台机器上运行的(WCF)服务没有(技术上的)区别。

一般来说,这被认为是一件好事,因为您可以在部署后/部署期间根据您的需求(单个服务的稳定性或资源消耗)更改服务的位置。

您可以通过配置命名管道绑定来优化您在同一台机器上运行的事实-当然,这是否会产生任何明显的差异取决于您的服务操作运行的时间,以及执行其实际任务的时间(有关选择适当绑定的更多信息,请参阅此处)。

最后,如果真的很重要,您可以创建自己的绑定,可能会利用两个服务在同一进程中生存的事实——很可能不是一个微不足道的任务。

无论如何,您都希望确保实际的服务实现不依赖于正在使用的传输或绑定,从而保持位置透明性。

如果您想访问WCF服务,无论它是否托管在进程内,为它生成代理都是一个好主意,也是访问它的一种简单方法。

这不是必需的,但是,您可以使用ChannelFactory为服务自己创建一个Channel。但是如果可以,为什么不为它生成一个代理呢?

您可以使用new关键字创建服务的新实例(针对服务的具体实现—当然不是接口)。我一直这么做,效果很好。此外,项目不能添加对自身的引用,否则会导致时空连续体的撕裂;)