繁体   English   中英

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

[英]WCF - Implementing a ServiceHostFactory to use into IIS context (svc file)

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

不过,我的问题是, CreateServiceHost方法仅从SVC文件接收具体的类型和URI,但是我想重用该类进行进一步的实现并需要更多信息:例如定义ServiceContract和绑定的接口已经配置。

我从@carlosfigueira找到了这篇很棒的文章 ,但是它的实现使用工厂以一对一的关系返回特定于该服务的主机。 我确实可以做到,但是这将导致一些特定的工厂,具有大量的复制和粘贴代码,我会避免这样做。 可能吗? 如果是这样,我该怎么办?

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

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); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM