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