配置两个WCF服务(不仅仅是端点)在IIS中托管,同一个类实现不同的合同?

时间:2011-02-24 17:17:00

标签: wcf iis

我有一个类,它实现了一组我希望能够作为两个不同的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.
    }

任何想法?

0 个答案:

没有答案