wcf系列学习5天速成——第五天 服务托管

今天是系列的终结篇,当然要分享一下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文件”,模板给我们生成的文件代码如下:

     

 1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3
4 <system.web>
5 <compilation debug="true" targetFramework="4.0" />
6 </system.web>
7 <system.serviceModel>
8 <behaviors>
9 <serviceBehaviors>
10 <behavior>
11 <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
12 <serviceMetadata httpGetEnabled="true"/>
13 <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
14 <serviceDebug includeExceptionDetailInFaults="false"/>
15 </behavior>
16 </serviceBehaviors>
17 </behaviors>
18 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
19 </system.serviceModel>
20 <system.webServer>
21 <modules runAllManagedModulesForAllRequests="true"/>
22 </system.webServer>
23
24 </configuration>


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

      

 1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3
4 <system.web>
5 <compilation debug="true" targetFramework="4.0" />
6 </system.web>
7 <system.serviceModel>
8 <services>
9 <service name="WcfService1.Service1">
10 <endpoint address="" binding="wsHttpBinding" contract="WcfService1.IService1"></endpoint>
11 </service>
12 </services>
13 <behaviors>
14 <serviceBehaviors>
15 <behavior>
16 <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false 并删除上面的元数据终结点 -->
17 <serviceMetadata httpGetEnabled="true"/>
18 <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
19 <serviceDebug includeExceptionDetailInFaults="false"/>
20 </behavior>
21 </serviceBehaviors>
22 </behaviors>
23 <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
24 </system.serviceModel>
25 <system.webServer>
26 <modules runAllManagedModulesForAllRequests="true"/>
27 </system.webServer>
28
29 </configuration>

 

  最后就是客户端调用:

 

 

window server寄宿:

     要实现window server寄宿,也很感谢vs给我们提供了“window 服务”模板。

     步骤如下:  “文件”->“新建“—>“项目”->"wcf服务库"模板—>“点击确定”—>右键服务库项目添加“新建项”—>找到"window服务"—>"点击添加"。

                     为了方便我们将“WcfServiceLibrary1”改成Console应用程序,然后新建一个Main入口。

    

  然后我们点击上面的“单击此处切换到代码视图”按钮,进入到代码视图,

  然后我们就可以在里面的"OnStart"和“OnStop”方法中添加代码。

  

 1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Diagnostics;
6 using System.Linq;
7 using System.ServiceProcess;
8 using System.Text;
9 using System.ServiceModel;
10
11 namespace WcfServiceLibrary1
12 {
13 partial class Service2 : ServiceBase
14 {
15 public Service2()
16 {
17 InitializeComponent();
18 }
19
20 ServiceHost host;
21
22 protected override void OnStart(string[] args)
23 {
24 // TODO: 在此处添加代码以启动服务。
25 host = new ServiceHost(typeof(Service1));
26
27 host.Open();
28 }
29
30 protected override void OnStop()
31 {
32 // TODO: 在此处添加代码以执行停止服务所需的关闭操作。
33 host.Close();
34 }
35 }
36 }

 然后我们在“设计界面” 点击右键,找到”添加安装程序“,点击即可。

 

 

添加完成后会出现”servceProcessInstaller1"和“servcieInstaller1”的组件。

   右击“serviceProcessInstaller1”,打开属性窗口,修改Account为LocalSystem;

   

 

然后 右击“servcieInstaller1”组件,打开属性窗口

        修改ServcieName为:MYServiceHost,也就是定义我的服务名。

        修改StartType为:Automatic。

        

 

最后一步就是将exe注册到window server中:

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.ServiceProcess;
6
7 namespace WcfServiceLibrary1
8 {
9 public class Program
10 {
11 public static void Main()
12 {
13 ServiceBase.Run(new Service2());
14 }
15 }
16 }



好了,现在我们可以编译项目准备安装部署了,vs给我们提供了一个InstallUtil.exe工具,

                这个工具也就是真正的把我们的exe程序送到window server中。

 

打开cmd,要做的两件事情就是正确的找到“InstallUtil.exe“ 和我们的”WcfServiceLibrary1.exe“

 

ok,安装完成,现在做的就是测试工作。

看, 快看,我找到了我的window server 服务。

 

开启一下服务,然后预览一下wcf的address,看看是否真的启动了。

哈哈,真的可以了,window service 寄宿大功告成。

 

至此,wcf5天速成系列也就圆满结束了,最后感谢一下一直关注本系列的朋友。祝你们wcf学习更上一层楼。

 

转载于:https://www.cnblogs.com/huangxincheng/archive/2011/11/13/2247227.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434784.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SELECT的学习以及在socket中的应用

Select在Socket编程中还是比较重要的&#xff0c;可是对于初学Socket的人来说都不太爱用Select写程序&#xff0c;他们只是习惯写诸如 connect、accept、recv或recvfrom这样的阻塞程序&#xff08;所谓阻塞方式block&#xff0c;顾名思义&#xff0c;就是进程或是线程执行到这…

python钻石数据分析_数据分析该用什么工具?

数据分析的软件很多&#xff0c;完整的数据分析一般分为数据收集、处理、分析和展现四个步骤。下面分别介绍一下过程中每个步骤使用到的工具。Excel微软办公套装软件的一个重要的组成部分&#xff0c;它包含数据的基本处理&#xff0c;函数计算&#xff0c;数据透视表和VBA等多…

ASP.NET MVC Music Store教程(2):控制器

ASP.NET MVC Music Store教程&#xff08;2)&#xff1a;控制器 转自http://firechun.blog.163.com/blog/static/3180452220110272197830/在传统的Web架构中&#xff0c;URL总是映射到磁盘上的文件。例如&#xff1a;一个类似于“/Products.aspx”或“/Products.php”的URL可能…

C语言:利用泰勒级数计算sinx的值

题目&#xff1a; 代码&#xff1a; #include<stdio.h> #include<math.h> int main(){int sign1,n1;double x3,term,a,sinx0;//scanf("%lf",&x);termx;while(fabs(term)>0.00001){sinxsign*term;nn2;apow(x,n);double b1;for(int i1;i<n;i){…

搞IT也不能不懂“五险一金”啊

养老保险&#xff1a; 一般要交满15年&#xff0c;到退休的时候才能终生享受养老金, 所以想拿养老金的人请务必在自己退休前15年就开始交。如果到退休年龄交养老保险不满15年,那等到你退休的时候国家会把你个人帐户上存的8%的养老金全 部退给你。那单位给你交的21%到哪里去了?…

DecExpress 帮助网站

官方地址&#xff1a;http://devexpress.com 官方下载地址&#xff1a;http://downloads.devexpress.com/8981e647-2ebc-4bd4-b50c-15ca357a62e2/0.0.0.0/DXperience/2011.1/5/DXperienceUniversal-11.1.5.exe 破解地址&#xff1a; smartsoft论坛&#xff1a; http://smartsof…

elementui获取所有树节点_element-ui tree获取子节点全选的父节点信息

公司服务升级确定了新的架构&#xff0c;假如当前部门是二级部门&#xff0c;二级部门下的三级部门全部已选择&#xff0c;那么后端接口要求只需要传二级部门的id&#xff0c;并且操作符传参为 like&#xff1b;如果某一个部门已选择&#xff0c;切父级部门没有选择&#xff0c…

C++课堂整理--第二章内容

提前声明&#xff1a; 本文内容为华北水利水电大学研究生C课程&#xff0c;如有 侵权请告知&#xff0c;作者会予以删除 1程序控制结构 语句是程序的基本语法成分。程序设计语言的语句按功能可以分成三类&#xff1a;声明语句 指示编译器分配内存&#xff0c;或者提供程序…

我的电脑 III

耳机用的是飞利浦的&#xff0c;和上学那时候的差不多 老的那个睡觉的时候压碎了&#xff0c;我胖了 然后去找音箱 网店&#xff0c;专卖店&#xff0c;电脑城&#xff0c;走了一遍又一遍 没个看的上的 一个月以后&#xff0c;终于决定买飞利浦那个了 白色的&#xff0c;和整个…

学习select(函数)

select系统调用是用来让我们的程序监视多个文件句柄(file descrīptor)的状态变化的。程序会停在select这里等待&#xff0c;直到被监视的文件句柄有某一个或多个发生了状态改变。 文件在句柄在代码都是从标准输入读入9个字节字符&#xff1a; #include <stdio.h> #in…

mybatis删除成功返回0_你还在用分页?试试 MyBatis 流式查询,真心强大!

转自&#xff1a;捏造的信仰segmentfault.com/a/1190000022478915基本概念流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器&#xff0c;应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。如果没有流式查询&#xff0c;我们想要从数据库取 1000…

C++程序设计--第三章内容

提前声明&#xff1a; 本文内容为华北水利水电大学研究生C课程&#xff0c;如有 侵权请告知&#xff0c;作者会予以删除 1.函数 函数作用 —— 任务划分&#xff1b;代码重用定义形式 类型 函数名 &#xff08; 形式参数表&#xff09;{语句序列}调用形式 函数名&#x…

PHP验证变量类型

isset() : //变量是否已经声明empty(): //变量是否为空defined(): //常量是否已经定义 de…

Linux TCP server系列(5)-select模式下的单进程server

目标&#xff1a; 让服务器退化为单进程模式&#xff0c;但是利用select来提升性能 思路&#xff1a; &#xff08;1&#xff09;服务器 传统的单进程服务器一旦accept了客户端的TCP连接后&#xff0c;就转入客户请求的处理&#xff0c;处理完成后才能再一次的调用…

替换元素_80%的前端会答错的问题:lt;imggt;是什么元素?

前言某天晚上&#xff0c;和几个朋友去撸串&#xff0c;突然就聊到了面试&#xff0c;都在感叹现在的面试题太变态了&#xff0c;其中一个突然很神秘的问我&#xff1a;“你写前端这么久了&#xff0c;那你知道 <img> 是什么元素吗&#xff1f;”于是我结合平时写页面的经…

用指针变量访问数组

一维指针 地址值 a 相当于 & a[ 0 ] a 1 相当于 & a[ 1 ] a 2 相当于 & a[ 2 ] a i 相当于 & a[ i ] 元素值 a [ 0 ] * a a [ 1 ] 相当于 * ( a 1 ) a [ 2 ] 相当于 * ( a 2 ) a [ i ] 相当于 * ( a i ) 二维 用指…

LEX和YACC的使用(例子)

1、简单C语言的词法分析程序;%{#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<string.h> %} digit [0-9]letter [A-Za-z]other_char [!-\[-~]id ({letter}|[_])({letter}|{digit}|[_])*string …

C++排序法

选择排序 // sort void sort ( int x[] , int n ) { int max , t ;for ( int i 0 ; i < n-1 ; i ) //对数组排序{ t i ;for ( int j i 1 ; j < n ; j ) //寻找最大元素if ( x [ j ] > x [ t ] ) t j ;if ( t ! i ){ max x [ i ] ; //交换…

Linux TCP server系列(6)-select模式下的多线程server

目标&#xff1a; 修改上一篇的select模式下的server&#xff0c;让它使用多线程来处理客户端请求&#xff08;多进程的模式已经在上篇中加了注释&#xff09;。 思路&#xff1a; &#xff08;1&#xff09;服务器 我们已经在之前的客户端模型多个并发用户的过程中使用过多线程…

单选按钮_PerlTk教程之按钮Button、复选按钮Checkbutton、单选按钮Radiobutton(附完整代码)...

《Perl-Tk教程之按钮Button、复选按钮Checkbutton、单选按钮Radiobutton》Perl-Tk中有三种不同形式的按钮组件可供选择&#xff0c;它们分别是按钮(Button), 复选按钮(Checkbutton), 和单选按钮(Radiobutton)&#xff0c;如下图所示&#xff1a;这三种按钮看起来是不同的&#…