[转]wcf系列学习——服务托管
今天是系列的终结篇,当然要分享一下wcf的托管方面的知识。
wcf中托管服务一般有一下四种:
Console寄宿: 利于开发调试,但不是生产环境中的最佳实践。
winform寄宿: 方便与用户进行交互,用户想开就开,想关就关,但如果机器重启了,不得不自己手动开一下,危险+麻烦。
IIS寄宿: 此寄宿在实战项目中得到了广泛的应用。
好处有:随系统启动和停止。
iis有大量的管理策略对其进行管理。
即想利用wcf的功能,还想访问asp.net的功能。
Window Service 寄宿: 这个寄宿在实战中也是广泛运用的,同时也是随系统开启或者停止。
好了,前两种寄宿相信大家都会,在这里我就不介绍了,我主要介绍后两种寄宿。
IIS寄宿: 首先要知道寄宿于iis的3个条件: 应用程序域(相当于serviceHost)+svc文件+config的配置节
很感谢vs模板,里面已经包含用于寄宿于iis的模板,ok,上图:
下面的流程就是:
点击确定 ——> 鼠标右击wcf服务项目——>点击“发布”——>在“发布方法”中选择“文件部署”——>在"目标位置”选择“保存位置”——>点击“发布”按钮
然后我们打开本地的IIS,新建网站,修改端口为1111,然后点击确定按钮,截图如下:
前面我们已经说过寄宿在iis中的三个条件,
首先看“应用程序域”:默认新建的网站在应用程序域中的.net framework的版本是2.0,
所以我们必须修改为4.0版本。
截图如下:
然后我们看一下"svc文件": iis寄宿有一个特点就是不用指定endpoint中的是address,因为svc文件的地址就是“endpoint”的地址,
也就是说如果我想预览则需要在url中输入此文件地址。
然后我们看一下” http://localhost:1111/Service1.svc?wsdl"里面的元数据,发现binding是“basicHttpBinding”,也就是说如果
想改变这个低端的binding,就必须修改三个条件中的最后的一个。
截图如下:
最后看一下“config文件”,模板给我们生成的文件代码如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration> <system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="true"/>
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer> </configuration>

也就是说啥也没有,要把binding改成wsHttpBinding,增加终结点即可:

<?xml version="1.0" encoding="utf-8"?>
<configuration> <system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<services>
<service name="WcfService1.Service1">
<endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
<serviceMetadata httpGetEnabled="true"/>
<!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer> </configuration>

最后就是客户端调用:
window server寄宿:
要实现window server寄宿,也很感谢vs给我们提供了“window 服务”模板。
步骤如下: “文件”->“新建“—>“项目”->"wcf服务库"模板—>“点击确定”—>右键服务库项目添加“新建项”—>找到"window服务"—>"点击添加"。
为了方便我们将“WcfServiceLibrary1”改成Console应用程序,然后新建一个Main入口。
然后我们点击上面的“单击此处切换到代码视图”按钮,进入到代码视图,
然后我们就可以在里面的"OnStart"和“OnStop”方法中添加代码。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.ServiceModel; namespace WcfServiceLibrary1
{
partial class Service2 : ServiceBase
{
public Service2()
{
InitializeComponent();
} ServiceHost host; protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
host = new ServiceHost(typeof(Service1)); host.Open();
} protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
host.Close();
}
}
}

然后我们在“设计界面” 点击右键,找到”添加安装程序“,点击即可。
添加完成后会出现”servceProcessInstaller1"和“servcieInstaller1”的组件。
右击“serviceProcessInstaller1”,打开属性窗口,修改Account为LocalSystem;
然后 右击“servcieInstaller1”组件,打开属性窗口
修改ServcieName为:MYServiceHost,也就是定义我的服务名。
修改StartType为:Automatic。
最后一步就是将exe注册到window server中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceProcess; namespace WcfServiceLibrary1
{
public class Program
{
public static void Main()
{
ServiceBase.Run(new Service2());
}
}
}

好了,现在我们可以编译项目准备安装部署了,vs给我们提供了一个InstallUtil.exe工具,
这个工具也就是真正的把我们的exe程序送到window server中。
打开cmd,要做的两件事情就是正确的找到“InstallUtil.exe“ 和我们的”WcfServiceLibrary1.exe“
ok,安装完成,现在做的就是测试工作。
看, 快看,我找到了我的window server 服务。
开启一下服务,然后预览一下wcf的address,看看是否真的启动了。
哈哈,真的可以了,window service 寄宿大功告成。
至此,wcf5天速成系列也就圆满结束了,最后感谢一下一直关注本系列的朋友。祝你们wcf学习更上一层楼。
[转]wcf系列学习——服务托管的更多相关文章
- 一: WCF的服务端与客户端在通信时有三种模式:请求响应模式、数据报模式和双工通讯模式。
说一下基本知识, 1.如果想要将当前接口作为wcf服务器,则一定要加上[ServiceContract] 契约 2.要想将方法作为wcf服务方法发布给外部调用,则一定要加上 [Operatio ...
- 如何:加载分页结果(WCF 数据服务)
WCF 数据服务 允许数据服务限制单个响应源中返回的实体数.在此情况下,源中的最后一项包含指向下一页数据的链接.通过调用执行 DataServiceQuery 时返回的 QueryOperationR ...
- 微软开源 WCF 分布式服务框架,并入 .NET 基金会项目
微软北京时间2015.5.20 在其 .NET Foundation GitHub 开源项目页中开放了 WCF 分布式服务框架的代码.WCF突然之间成为一个热门话题,在各大网站上都有不同的报道:dot ...
- 一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
JSONP(JSON with Padding)可以看成是JSON的一种“使用模式”,用以解决“跨域访问”的问题,这篇简单的文章给出一个简单的例子用于模拟如何通过jQuery以JSONP的访问调用一个 ...
- WCF服务与WCF数据服务的区别
问: Hi, I am newbie to wcf programming and a little bit confused between WCF Service and WCF Data Se ...
- WCF 数据服务 4.5
.NET Framework 4.5 其他版本 WCF 数据服务(以前称为"ADO.NET Data Services")是 .NET Framework 的一个组件.可以使用此组 ...
- IIS上发布WCF发布服务,访问不到
1 环境是IIS7,发布WCF发布服务,访问不到. 一种原因站点自动生成“程序应用池”和站点的Framwork版本不一致. 解决的办法:新建一个“程序应用池”,然后站点指向这个新建的“程序应用池”
- 使用多种客户端消费WCF RestFul服务(四)——Jquery篇
Jquery篇 互联网开发中少不了各类前端开发框架,其中JQUERY就是最流行之一,本篇我们就采用JQUERY来消费WCF RestFul服务,其中用到JSON基础知识,如果有想了解的朋友,请访问:& ...
- 【WCF--初入江湖】06 WCF契约服务行为和异常处理
06 WCF契约服务行为和异常处理 一.WCF契约服务行为 [1] 服务行为可以修改和控制WCF服务的运行特性. 在实现了WCF服务契约后,可以修改服务的很多执行特性. 这些行为(或者特性)是通过配置 ...
随机推荐
- .net 必看书籍1
我们2个网站运营群,有很多技术高手,同时也有大部分技术新人,如何从传统asp转到.net,从传统table转到div+css布局,从传统技术转到ajax,从小型程序转到高性能并发的大型程序,我花了2小 ...
- JavaScript--引用JS外部文件
通过前面知识学习,我们知道使用<script>标签在HTML文件中添加JavaScript代码,如图: JavaScript代码只能写在HTML文件中吗?当然不是,我们可以把HTML文件和 ...
- C# 利用反射进行类型转换
/// <summary> /// 父类转子类 /// </summary> /// <typeparam name="TParent">< ...
- 从源码看ASP.NET框架(一)-打造页面控件树
测试实例如下: 前台代码MyFirstWeb.aspx(没有服务器控件,即没有runat) CodeBehind="MyFirstWeb.aspx.cs":表示代码后置类文件 In ...
- [ SDOI 2009 ] HH的项链 & [ HEOI 2012 ] 采花
\(\\\) \(Description\) 给出一个长为\(N\)的序列,\(M\)次询问区间\([L_i,R_i]\)内不同数字的个数. \(N\in [1,5\times 10^4]\),\(M ...
- 阿里云虚拟主机针对恶意频繁攻击式访问造成CPU爆满的解决方法
最近网站CPU经常爆满,到阿里云提交了工单,工程师给我的处理意见: 您好,虚拟主机CPU占用比较高通常这种情况有两种可能: 一是网站应用程序代码逻辑较复杂,或业务架构效率比较低,在请求了某个网 ...
- node.js安装及其环境配置
nodejs: 实际上是采用google的chrome浏览器V8引擎,由C++编写的 本质上是一个javascript的运行环境 浏览器引擎可以解析js代码 nodejs可以解析js代码,没有浏览器端 ...
- animation仿进度条
animation:使用的好可以有很多酷炫效果 仿进度条效果.
- XML——读与写
XML写入 private static void writeXml() { using (XmlTextWriter xml = new XmlTextWriter(@"C:\Users\ ...
- Python 时间处理---------笔记
时区处理&格式化 import pytz from datetime import datetime # 设置时区 timezone = pytz.timezone('Asia/Shangha ...