WCF - 实现ServiceHostFactory以用于IIS上下文(svc文件)

时间:2012-05-18 17:23:28

标签: c# asp.net wcf iis svc

我已经成功实现了自托管WCF服务。对于遗留问题,主机绑定配置是从非标准源(而不是app.config)读取的。将此服务移植到IIS时,我遇到了加载设置的问题,我发现该解决方案将涉及实现从ServiceHostFactory继承的类。

我的问题是,CreateServiceHost方法只接收SVC文件中的具体类型和URI,但我想重新使用此类来进一步实现并需要更多信息:如界面它定义了ServiceContract和已配置的绑定。

我从@carlosfigueira找到了this excellent article,但是它的实现使用工厂以1:1的关系返回特定于服务的主机。我当然可以做到,但这将导致几个特定的​​工厂,有很多复制和粘贴代码,我会避免它。可能吗?如果是这样,我该怎么做?

1 个答案:

答案 0 :(得分:1)

没有内置的方法可以找出服务类实现的合同,但代码不应该太难。这与下面的功能有关。如果您有多个合同类型,则需要一些逻辑来确定相对地址(例如,如果您有一个合同,请使用“”,如果您有多个,请使用合同名称作为地址)。

private IEnumerable<Type> GetContractType(Type serviceType) 
{ 
    if (HasServiceContract(serviceType))
    { 
        yield return serviceType; 
    } 

    var contractInterfaceTypes = serviceType.GetInterfaces() 
        .Where(i => HasServiceContract(i));

    foreach (var type in contractInterfaceTypes)
    {
        yield return type;
    }

    // if you want, you can also go to the service base class,
    // interface inheritance, etc.
} 

private static bool HasServiceContract(Type type) 
{ 
    return Attribute.IsDefined(type, typeof(ServiceContractAttribute), false); 
}