WCF - 实现要在 IIS 上下文中使用的 ServiceHostFactory (svc 文件)

本文关键字:ServiceHostFactory svc 文件 实现 上下文 IIS WCF | 更新日期: 2023-09-27 18:34:41

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

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

我从@carlosfigueira中找到了这篇出色的文章,但它的实现使用工厂以一对一的关系返回特定于服务的主机。我当然可以做到,但这会导致几个特定的工厂,有很多复制和粘贴代码,我会尽量避免它。可能吗?如果是这样,我该怎么做?

WCF - 实现要在 IIS 上下文中使用的 ServiceHostFactory (svc 文件)

没有内置的方法可以找出服务类实现的协定,但代码不应该太难。它类似于下面的函数。如果您有多个合约类型,则需要一些逻辑来确定相对地址(即,如果您有单个合约,请使用",如果您有多个合约,请使用合约名称作为地址(。

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); 
}
相关文章:
  • 没有找到相关文章