当前位置:首页 > 服务器技术 > IIS

c# – 在IIS上托管WCF Web服务时显式调用服务构造函数

我想在Microsoft IIS(IIS主机)上托管我的WCF服务.

为此,我创建了我的服务:

// The service
public class MyService : IMyService {
    // Ctors
    public MyService() {
        // Def ctor: I don't want to call it
    }
    public MyService(...) : this() {
        // Parametric ctor, I want to call it!
    }
   ...
}

// The contract
[ServiceContract]
public interface IMyService {
    ...
}

我创建了一个svc文件(一种为我的服务提供基地址的好方法):

<@ServiceHost Service="MyService" @>

但是这样做,当托管我的服务(只是在IIS中创建指向我的应用程序所在的文件夹的虚拟目录,通常是项目目录)时,IIS将调用默认构造函数.

如何让IIS调用不同的构造函数?

PS:我知道可以指定一个HostServiceFactory.这是我应该在这里使用的吗?它让我回到工厂和主人.对于主机,我无法对主机传递的参数进行操作.但是,我该如何解决这个问题呢?

注意:我知道很多解决方案都基于Inversion of control(IoC)和几个IoC框架,如Unity,Castle ProjectSpring.NET.但我根本不会真正使用它们. WCF可以单独制作吗?我不能接受WCF不能让程序员通过以适当的方式构建服务来托管服务……

解决方法:

您必须编写多个自定义类以支持使用参数创建服务:

>实现IInstanceProvider的自定义类.该类将负责使用非默认构造函数创建服务实例.
>实现IServiceBehavior的自定义类.该类将负责将自定义实例提供程序添加到端点调度程序中.
>自定义ServiceHost将应用您的行为.
>自定义ServiceHostFactory将实例化您的自定义服务主机.您将从.svc文件引用此工厂.

这通常与构建依赖注入支持相同.您可以查看例如this article.


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!