WCF服务寄宿IIS与Windows服务 - C#/.NET
WCF是Windows平台下程序间通讯的应用程序框架。整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择。wcf程序的运行需要一个宿主ServiceHost,我们可以选用控制台应用程序,也可以选择IIS寄宿,还可以选择windows 服务寄宿。相较与控制台程序,IIS,和Windows服务比较稳定。而且大家不会时不时的去重启下IIS下的网站,或者windows服务。
在IIS下寄宿Wcf
我们新建一个类库项目
在项目下添加一个ICalculator接口类,实现wcf 服务契约,操作契约接口
using System.ServiceModel;
namespace IISServices
{
[ServiceContract(Name = 'CalculatorService')]
public interface ICalculator
{
[OperationContract]
double Add(double x, double y); [OperationContract]
double Subtract(double x, double y); [OperationContract]
double Multiply(double x, double y); [OperationContract]
double Divide(double x, double y);
}
}
新建一个服务类CalculatorService,实现服务契约接口ICalculator
namespace IISServices
{
public class CalculatorService : ICalculator
{
public double Add(double x, double y)
{
return x + y;
} public double Subtract(double x, double y)
{
return x - y;
} public double Multiply(double x, double y)
{
return x * y;
} public double Divide(double x, double y)
{
return x / y;
}
}
}
添加一个文件,文件名为CalculatorService.svc就是我们用来寻找服务对外暴漏的入口。只需要添加一行代码就可以。当我们访问服务的时候IIS会寻找我们这个svc文件来找到我们提供的服务。
<%@ServiceHost Service='IISServices.CalculatorService'%>
添加一个web.Config文件,添加system.serviceModel节点的配置信息。里面不需要配置我们访问服务的地址,因为IIS下我们网站的地址就是我们访问服务的地址。
<?xml version='1.0' encoding='utf-8' ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name='metadataBehavior'>
<serviceMetadata httpGetEnabled='true'/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration='metadataBehavior' name='IISServices.CalculatorService'>
<endpoint binding='wsHttpBinding' contract='IISServices.ICalculator' />
</service>
</services>
</system.serviceModel>
</configuration>
项目详细如下,另外应用里面需要添加System.ServiceModel这个dll引用,wcf的大部分实现都在这个类库里面:

我们在IIS下面新建一个网站,根目录只需要添加web.Config,svc服务文件即可,bin下面放我们生成的IISServices.dll如下:

网站访问端口我们配置为82,启动网站。
在我们需要引用服务的类库或exe上添加服务引用http://localhost:82/CalculatorService.svc,就可以找到我们需要的服务了。

在Windows服务下寄宿wcf服务
我们新建一个控制台应用程序Service。添加下面这三个类库引用
System.ServiceModel.dll
System.ServiceProcess.dll
System.Configuration.Install.dll
将Programs.cs修改为Service.cs,添加代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.ServiceModel;
using System.ServiceProcess;
using System.Configuration;
using System.Configuration.Install; namespace Microsoft.ServiceModel.Samples
{
// Define a service contract.
[ServiceContract(Namespace = 'http://Microsoft.ServiceModel.Samples')]
public interface ICalculator
{
[OperationContract]
double Add(double n1, double n2);
[OperationContract]
double Subtract(double n1, double n2);
[OperationContract]
double Multiply(double n1, double n2);
[OperationContract]
double Divide(double n1, double n2);
} // Implement the ICalculator service contract in a service class.
public class CalculatorService : ICalculator
{
// Implement the ICalculator methods.
public double Add(double n1, double n2)
{
double result = n1 + n2;
return result;
} public double Subtract(double n1, double n2)
{
double result = n1 - n2;
return result;
} public double Multiply(double n1, double n2)
{
double result = n1 * n2;
return result;
} public double Divide(double n1, double n2)
{
double result = n1 / n2;
return result;
}
} public class CalculatorWindowsService : ServiceBase
{
public ServiceHost serviceHost = null;
public CalculatorWindowsService()
{
// Name the Windows Service
ServiceName = 'WCFWindowsServiceSample';
} public static void Main()
{
ServiceBase.Run(new CalculatorWindowsService());
} // Start the Windows service.
protected override void OnStart(string[] args)
{
if (serviceHost != null)
{
serviceHost.Close();
} // Create a ServiceHost for the CalculatorService type and
// provide the base address.
serviceHost = new ServiceHost(typeof(CalculatorService)); // Open the ServiceHostBase to create listeners and start
// listening for messages.
serviceHost.Open();
} protected override void OnStop()
{
if (serviceHost != null)
{
serviceHost.Close();
serviceHost = null;
}
}
} // Provide the ProjectInstaller class which allows
// the service to be installed by the Installutil.exe tool
[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);
}
}
}
在App.Config里面添加配置节点ServiceModel如下:
<system.serviceModel>
<services>
<!-- This section is optional with the new configuration model
introduced in .NET Framework 4. -->
<service name='Microsoft.ServiceModel.Samples.CalculatorService'
behaviorConfiguration='CalculatorServiceBehavior'>
<host>
<baseAddresses>
<add baseAddress='http://localhost:8000/ServiceModelSamples/service'/>
</baseAddresses>
</host>
<!-- this endpoint is exposed at the base address provided by host: http://localhost:8000/ServiceModelSamples/service -->
<endpoint address=''
binding='wsHttpBinding'
contract='Microsoft.ServiceModel.Samples.ICalculator' />
<!-- the mex endpoint is exposed at http://localhost:8000/ServiceModelSamples/service/mex -->
<endpoint address='mex'
binding='mexHttpBinding'
contract='IMetadataExchange' />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name='CalculatorServiceBehavior'>
<serviceMetadata httpGetEnabled='true'/>
<serviceDebug includeExceptionDetailInFaults='False'/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
生成文件,注意看程序的入口main函数ServiceBase.Run(new CalculatorWindowsService());在main函数里面程序调用了windows服务。我们这个项目本质上是一个windows服务。windows服务不可以直接运行,需要先安装。我们使用管理员身份打开cmd.exe
进入我们的.net安装目录,我这个是安装的4.0,所以进入C:WindowsMicrosoft.NETFramework644.0.30319文件夹,找到该文件夹下面的InstallUtil.exe程序。在cmd里面输入如下,回车

进入.net安装文件夹,输入InstallUtil.exe '生成服务所在的路径',注意这儿最好给路径加上引号,没有引号如果碰到空格可能报错。

安装后如果出现下面的successfully,说明服务安装完成。

然后我们到windows服务里面启动该服务。

启动服务后,在需要引用该服务的类库或者exe程序上添加服务引用,路径为我们App.config里面的 <add baseAddress='http://localhost:8000/ServiceModelSamples/service'/>基地址

点击转到,出现CalculatorService说明我们配置成功。
注:
安装 Windows 服务: installutil binservice.exe
卸载Windows服务: installutil /u binservice.exe 或者 sc delete 服务名
启动Windows服务: net start WCFWindowsServiceSample
停止Windows服务: type net stop WCFWindowsServiceSample
windows服务的寄宿,参考msdn:https://msdn.microsoft.com/zh-cn/library/ms733069.aspx
本文地址:http://www.cnblogs.com/santian/p/4397235.html
WCF服务寄宿IIS与Windows服务 - C#/.NET的更多相关文章
- WCF服务寄宿IIS与Windows服务
WCF是Windows平台下程序间通讯的应用程序框架.整合和 .net Remoting,WebService,Socket的机制,是用来开发windows平台上分布式开发的最佳选择.wcf程序的 ...
- 第三节:Windows平台部署Asp.Net Core应用(基于IIS和Windows服务两种模式)
一. 简介 二. 文件系统发布至IIS 三. Web部署发布至IIS 四. FTP发布至IIS 五. Windows服务的形式发布 ! 作 者 : Yaopengfei(姚鹏飞) 博客地址 ...
- 如何使用windows云服务器搭建IIs、windows服务
如何使用windows云服务器搭建IIs.windows服务,以下针对腾讯云服务器进行说明 1.购买云服务器之后,第1步需要设置的是,找到重装系统.重置密码等处. 2.设置安全组,设置完安全组之后才能 ...
- MongoDB配置服务--MongoDB安装成为windows服务
MongoDB安装成为windows服务 1.打开命令提示符(最好以管理员的身份打开),然后输入: mongod --logpath "D:\MongoDB\data\log\logs.tx ...
- Windows服务一:新建Windows服务、安装、卸载服务
Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面 ...
- [Solution] Microsoft Windows 服务(1) C#创建Windows服务
Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而 ...
- mpush 服务端配置 for windows 服务自动运行
mpush 服务端配置 以下安装部分是参照官方的步骤, 一.安装jdk1.8并配置环境变量 示例: http://www.cnblogs.com/endv/p/6439860.html 二.Wind ...
- windows服务搭建(VS2019创建Windows服务不显示安装组件)
1.创建windows服务应用 2.右键查看代码 3.写个计时器Timer using System.Timers; 如上图,按tab键快速操作 会自动创建一个委托 改为下边的方式,打印日志来记录 ...
- WCF寄宿控制台.WindowsService.WinFrom.WebAPI寄宿控制台和windows服务
先建立wcf类库.会默认生成一些试用代码.如下: public class Service1 { public string GetData(int value) { return string.Fo ...
随机推荐
- Codeforces 438D The Child and Sequence - 线段树
At the children's day, the child came to Picks's house, and messed his house up. Picks was angry at ...
- linux下安装tomcat和jdk
1.现在的linux服务器一般自带jdk,先查询是否已经安装jdk rpm -qa | grep java rpm -qa | grep jdk 如上则是没有安装,可以直接跳到步骤X,安装jdk.否则 ...
- CentOS7使用命令连接网络配置
背景 在安装完CentOS7无桌面的情况下,无法使用桌面图标连接,如下图所示,这时我们需要在配置文件中配置网络连接信息. 步骤 查看ip地址:ifconfig PS:在未连接网络之前,我们是查看不到i ...
- FireMonkey 源码学习(3)
五.TTextLayoutNG 在FMX.TextLayout.GPU.pas文件中,实现了几个基础功能,其中: (1)渲染单元 在TextLayout中,每一批同字体和颜色的1~n个字符,组成一个最 ...
- noip模拟【noname】
noname [问题描述] 给定一个长度为n的正整数序列,你的任务就是求出至少需要修改序列中的多少个数才能使得该数列成为一个严格(即不允许相等)单调递增的正整数序列,对序列中的任意一个数,你都可以将其 ...
- Gym 101775J Straight Master(差分数组)题解
题意:给你n个高度,再给你1~n每种高度的数量,已知高度连续的3~5个能消去,问你所给的情况能否全部消去:例:n = 4,给出序列1 2 2 1表示高度1的1个,高度2的2个,高度3的2个,高度4的1 ...
- Markdown语法参考
参考博客: https://www.jianshu.com/p/f3147a804368 https://www.jianshu.com/p/191d1e21f7ed https://www.jian ...
- 【第四十章】Spring Boot 自定义拦截器
1.首先编写拦截器代码 package com.sarnath.interceptor; import javax.servlet.http.HttpServletRequest; import ja ...
- Win10下Java开发环境配置
首先下载符合操作系统版本的jdk,比如64位的JDK8: 下载链接:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-down ...
- using Redis in .net core
Using Redis Cache in .net Core Distributed Cache using Redis and ASP.NET Core ASP.NET Core Data Prot ...