将两个WCF服务(不仅仅是端点)配置为托管在IIS中,并使用由同一类实现的不同契约?

将两个WCF服务(不仅仅是端点)配置为托管在IIS中,并使用由同一类实现的不同契约?,wcf,iis,Wcf,Iis,我有一个类,它实现了一组操作,我希望能够将这些操作公开为两个不同的WCF服务。请注意,我需要它们是两个不同的服务,而不是同一服务中的两个不同端点。原因是我在其中一个服务上有一个行为需要用户名验证。同样的行为不能应用于其他服务。有两个单独的契约,这两个契约都是由充当这两个服务的类实现的 我遇到的问题是,在IIS中托管服务时,服务的名称必须与类型匹配。两个不同的服务上不允许有重复的名称。因此,我不能让同一个类(AFAIK)实现两个服务 我现在的解决方法是有两个空包装器类,它们只是从实现实际功能的公共

我有一个类,它实现了一组操作,我希望能够将这些操作公开为两个不同的WCF服务。请注意,我需要它们是两个不同的服务,而不是同一服务中的两个不同端点。原因是我在其中一个服务上有一个行为需要用户名验证。同样的行为不能应用于其他服务。有两个单独的契约,这两个契约都是由充当这两个服务的类实现的

我遇到的问题是,在IIS中托管服务时,服务的名称必须与类型匹配。两个不同的服务上不允许有重复的名称。因此,我不能让同一个类(AFAIK)实现两个服务

我现在的解决方法是有两个空包装器类,它们只是从实现实际功能的公共类继承,而不向基类添加任何内容。这允许我为两个具有不同类型名称的服务创建配置,即使这些类型只不过是别名基类

下面是我的配置文件中的一个示例(有解决方法)来帮助解释

  <service behaviorConfiguration="ServicesBehavior"
           name="Company.Services.ApplicationServiceWrapper">
    <endpoint address=""
              binding="basicHttpBinding"
              bindingConfiguration="basicHttpBinding"
              contract="Company.Contracts.IApplicationService" />
  </service>
  <service behaviorConfiguration="SecuredServiceBehavior"
           name="Company.Services.SecuredApplicationServiceWrapper">
    <endpoint address="secure"
              binding="wsHttpBinding"
              bindingConfiguration="secureAuthorizedBinding"
              contract="Company.Contracts.ISecuredApplicationService" />
  </service>

合同和包装的基本实施

    /// <summary>
    /// These two classes are in place only so that WCF can differentiate between
    /// two types, apply a different contract to each and host them in IIS.
    /// </summary>
    public class ApplicationServiceWrapper : ApplicationService { }
    public class SecuredApplicationServiceWrapper : ApplicationService { }

    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall
        , ConcurrencyMode = ConcurrencyMode.Multiple)]
    public class ApplicationService : IApplicationService
        , ISecuredApplicationService
    {
        // Implementation.
    }
//
///这两个类只有在WCF能够区分
///两种类型,对每种类型应用不同的契约,并将它们托管在IIS中。
/// 
公共类ApplicationServiceWrapper:ApplicationService{}
公共类SecuredApplicationServiceWrapper:ApplicationService{}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall
,ConcurrencyMode=ConcurrencyMode.Multiple)]
公共类应用程序服务:IAApplicationService
,ISeCuredApplication服务
{
//实施。
}

有什么想法吗?

你说的“作为两个独立的服务公开”是什么意思??使用不同的端点?如果您有一个服务类,则只需配置一个服务,但可以向其中添加多个端点。如果您确实需要两个完全独立的服务,那么您需要在两个独立的服务类中实现这一点。我确实需要它们是两个独立的服务,而不仅仅是两个独立的端点,因为这两个服务上的行为是不同的。将它们归为同一类的原因是,这两个合同有一些重叠。我的希望是避免重复那些常用方法的实现,但也许我需要从不同的角度来处理它,或者满足于解决方法。除非你有一些基础设施,比如交通管理/负载平衡系统(完全可以操纵任何事情),否则你无法真正做到你所要求的。我建议从不同的角度来看待建筑。也许可以使用您所有的共享代码,用您的契约、公共类、枚举等编译一个类库。然后只构建两个轻量级的“包装器”服务,它们基本上什么都不做,只显示端点并调用您的方法。