使用windows service Host wcf服务

wcf服务原来是用windows应用程序来自Host的,但是在测试并发的时候发现了个问题:“即使是单调实例加并发模式,方法的调用也不是并发的,而是像队列一样顺序执行的,而且执行的线程的ID都是同一个。”另外一个使用“WCF Service Library”模板创建的WCF服务却可以并发执行。

网上有人说,用Windows应用程序自Host的wcf服务不能并发,用iis或者windows service来Host可以并发。于是改用windows service来Host。

步骤如:“http://msdn.microsoft.com/en-us/library/bb332338.aspx#msdnwcfhc_topic4”所写。

Windows Service project template创建Windows Service:


public partial class ExchangeWindowsService : ServiceBase
    {
        ServiceHost host;

        public ExchangeWindowsService()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            Type serviceType = typeof(TradeService);
            host = new ServiceHost(serviceType);
            host.Open();
        }

        protected override void OnStop()
        {
            if(host != null)
               host.Close();
        }
    }

注意:

Type serviceType = typeof(TradeService);
TradeService这里使用类,不能用接口,否则无法启动服务。System.ArgumentException: ServiceHost 仅支持类服务类型。

添加Installer,把Account属性设为LocalUser,因为在本地执行,免去验证的麻烦。

[RunInstaller(true)]
    public class ProjectInstaller : Installer
    {
        private ServiceProcessInstaller process;
        private ServiceInstaller service;

        public ProjectInstaller()
        {
            process = new ServiceProcessInstaller();
            process.Account = ServiceAccount.LocalSystem;
            service = new ServiceInstaller();
            service.ServiceName = "WCFWindowsServiceSample";
            Installers.Add(process);
            Installers.Add(service);
        }
    }

示例代码来自:“http://msdn.microsoft.com/en-us/library/ms733069(v=vs.90).aspx”

编译后在项目bin/debug目录下会生成abc.exe

在开始菜单的Visual Studio Tools目录下找到VS Commond Prompt,用管理员权限运行,然后cd 到 bin/debug目录

命令 InstallUtil ab.exe来安装服务。用 InstallUtil /u abc.exe来卸载服务。

添加app.config到项目,启动服务后方法能够并行执行,并能够看到方法由不同的线程处理的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值