我在Windows服务中自托管了多个WCF服务。其中一个WCF服务需要调用在同一Windows服务中托管的另一个WCF服务。这可能需要在同一台机器上或在另一台机器上安装的相同Windows服务上运行。我是否需要应用程序添加对自身的引用,或者是否有更简单的方法来调用它自己的服务之一。我知道如何通过更改端点地址来执行不同的机器位,但我不清楚是否应该添加对自身的引用。即,我是否需要使用与单独客户端相同的代码。
答案 0 :(得分:2)
这里的概念称为“位置透明度”。也就是说,在同一进程或另一台机器上调用(WCF)服务时没有(技术上)差异。
通常,这被视为一件好事,因为您可以在部署之后/期间更改服务的位置,具体取决于您的需求(单个服务的稳定性或资源消耗)。
您可以通过配置命名管道绑定来优化您在同一台计算机上运行的事实 - 当然是否真正产生任何明显的差异取决于您的服务操作运行多长时间,执行其实际任务(请参阅{ {3}}有关选择合适的绑定的更多/良好信息。)
最后,如果真的很重要,你可以创建你的here,可能利用这两个服务在同一个过程中生活的事实 - 很可能不是一项微不足道的任务。 / p>
但是,无论如何,您希望确保实际的服务实现不依赖于正在使用的传输或绑定,以便保持位置透明性。
答案 1 :(得分:0)
如果您想访问WCF服务,无论它是否在进程中托管,为其生成代理是一个好主意,也是一种访问它的简单方法。
但是,您无需使用Channel
自行为服务创建ChannelFactory
。但如果可以,为什么不为它生成代理?
答案 2 :(得分:0)
您可以使用new关键字创建服务的新实例(目标是服务的具体实现 - 当然不是接口)。我一直这样做,它工作正常。 此外,项目不能添加对自身的引用或者会在时空连续体中引起撕裂;)