IIS承载具有2个协定的WCF服务,或承载具有依赖项的2个服务

本文关键字:服务 2个 依赖 IIS WCF | 更新日期: 2023-09-27 18:21:44

我正在开发一个WCF服务,该服务有一个名为MyApp.IOperationService.的合约

<service name="MyApp.OperationService">
    <endpoint address="OperationService" binding="basicHttpBinding" contract="MyApp.IOperationService" />
</service>

对于服务行为,我使用了InstanceContextMode=InstanceContextMode.Single和ConcurrencyMode=Currencymode.Multiple,因为应用程序使用共享的物理资源。

我需要这个服务的管理接口,首先我在同一个服务中添加了一个新的合约。这种方法对我没有吸引力,因为管理契约是通过元数据公开给使用操作契约的客户端的。

然后我选择创建另一个服务。

<service name="MyApp.AdminService">
    <endpoint address="Admin" binding="netTcpBinding" contract="MyApp.IAdminService" />
</service>

该服务有一个名为Login的操作,它将pincode传播到OperationService对象。

namespace MyApp
{
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Single, UseSynchronizationContext = false)]
    public class AdminService : IAdmin
    {
        MyApp.OperationService objOperationService = null;
        public AdminService(MyApp.OperationService objOperationService)
        {
            m_objOperationService = objOperationService;
        }
        public void Login(string pincode)
        {
            m_objOperationService.Login(pincode);
        }
    }       
}

在自托管环境中,我创建了一个MyApp.OperationService对象,然后将此对象传递给MyApp.AdminService的构造函数。对于IIS托管,我发现我需要使用WCF扩展点并实现IInstanceProvider,然后使用ServiceHostFactory。

在这一点上,我停下来想知道这是否可行,因为我的AdminService需要一个已经创建的由IIS控制的MyApp.OperationService,而对于我来说,它似乎已经非常复杂了。

问题是,这(未通过元数据公开的现有服务的管理合同/接口)是否可以通过另一种方式实现?

谢谢。

IIS承载具有2个协定的WCF服务,或承载具有依赖项的2个服务

除了使用WCF扩展点之外,我找不到解决问题的方法。我使用Microsoft.Practices.Unity通过IoC管理服务,然后使用.svc文件中的Factory属性。