接下来继续WCF(网上的方法)(实例)

1、无废话WCF入门教程一与无废话WCF入门教程二(http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html) 提供的例子已经实现;

2、WCF的宿主:

(http://www.cnblogs.com/iamlilinfeng/archive/2012/10/01/2706353.html)

一、WCF服务应用程序与WCF服务库

  我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”。

  WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定义,可以直接看到运行的效果。此项目模板基于IIS托管的程序,如本系列的第一节所示。

     在开发基于IIS托管的WCF服务程序时,比较多见,自学的时候也可以使用这种类型,简单易懂。

  WCF服务库,可以认为是一个包含WCF服务以及契约定义的类库。不能直接运行,你可以在其他项目里引用,在宿主里启用托管这个库,有点类似于我们在Web项目中应用的类库。

     考虑WCF服务设计的时候,服务类的定义为单独的库,可以为其它项目使用。提高代码的复用性。

  当然你也可以修改这些代码,比如把WCF服务程序里的类,移到一个单独的类库里,或是把类库里的类移到WCF服务程序中。

二、概述

  通过前面的介绍我们知道,WCF在运行时必寄宿在“宿主程序”之上,WCF本身不能够独自运行(每个WCF服务必须宿主在一个Windows进程中)。.net 提供了多种宿主供WCF运行,WCF还是非常灵活的。

  WCF的宿主可以是 Windows 服务、COM+应用程序、WAS(Windows Activation Services,Windows进程激活服务)或IIS、Windows应用程序,或简单的控制台应用程序及任何.net程序。

 这节的示例我们重新建立WCF类库项目为例做示例,名称为:WCFLibrary,并删除自动生成的两个文件(IService1.cs、Service1.cs)。如下图所示:

鼠标右键查看项目属性。我们发现,其实“WCF类库项目”与我们平时建立的“类库项目”都是类库,只不过多了WCF的类库项目在新建时多了两个dll的引用(System.ServiceModel.dll、System.Runtime.Serialization.dll)和一个自动生成的配置文件(该配置文件只用于调试时使用,在WCF寄宿以后会应用宿主的配置文件与其他应用程序通信)。这更说明了我们在做分式程序开发的时候与我们平时开发的应用程序没有多大的区别,只要我们在应用程序间通信时“符合WCF的约定”即可。

  服务端我们还和第一个教程一样(IUser接口与User实现),只建立一个方法做为我们调用的示例代码如下:

------------------------------------------------------------------------

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

namespace WCFLibrary

{

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IUser" in both code and config file together.

[ServiceContract]

public interface IUser     //公布接口

{

[OperationContract]

string ShowName(string name);

}

}

------------------------------------------------------------------------

using System;

using System.Collections.Generic;

using System.Linq;

using System.Runtime.Serialization;

using System.ServiceModel;

using System.Text;

namespace WCFLibrary

{

// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "User" in both code and config file together.

public class User : IUser    //实现接口

{

string IUser.ShowName(string name)

{

string wcfName = string.Format("WCF服务,显示名字:{0}",name);

return wcfName;

}

}

}

------------------------------------------------------------------------

由于原来的契约为IService,现在的为IUser,所以配置文件有两处要修改为:

<service name="WCFLibrary.User">

<endpoint address="" binding="wsHttpBinding" contract="WCFLibrary.IUser">

点击“F5“检验运行效果;

IIS宿主

  我们在第一节中,把WCF寄宿在IIS之上,在IIS中宿主一个服务的主要优点是在发生客户端请求时宿主进程会被自动启动,并且你可以依靠IIS来管理宿主进程的生命周期。在开发和使用的过程与Web Service非常相似。

具体请参见本系列的第一节课程。

控制台应用程序宿主

  建立宿主

  (1)在解决方案下新建控制台输出项目 WCFConsole。

  (2)添加 System.ServiceModel.dll 的引用。

  (3)添加 WCF 服务类库(WCFLibrary)的项目引用。(上面创立的)

  (4)创建宿主程序,代码如下:

------------------------------------------------------------------------

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.ServiceModel;

using System.ServiceModel.Description;

using System.Text;

using System.Threading.Tasks;

using WCFLibrary;

namespace WCFConsole

{

class Program

{

static void Main(string[] args)

{

//创建宿主的基地址

Uri baseAddres = new Uri("http://localhost:8080/User");

//创建宿主

using (ServiceHost host = new ServiceHost(typeof(User), baseAddres))

{

//向宿主中添加终结点

host.AddServiceEndpoint(typeof(IUser), new WSHttpBinding(), "");

//将HttpGetEnabled属性设置为true

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();

smb.HttpGetEnabled = true;

//将行为添加到Behaviors中

host.Description.Behaviors.Add(smb);

//打开宿主

host.Open();

Console.WriteLine("WCF中的HTTP监听已经启动...........");

Console.ReadLine();

host.Close();

}

}

}

}

------------------------------------------------------------------------

(5)运行宿主程序[在客户端调用时要先运行宿主程序],如下图所示:

 

 说明宿主建立成功。在上例中用到"ServiceHost"类,这里只是简单的应用;

   該過程的一個小經驗!!!!

注意:一定要在文件夹中用“管理员权限”打开,否则会出现以下异常:

     之后——建立客户端

  (1)重新建立解决方案-->Web应用程序项目。

  (2)添加对服务的引用(在引用上右键-->输入我们定义的服务宿主的基地址(此处为:http://localhost:8080/User)(宿主的!)-->前往-->确定),具体请看第一节。

(3)测试程序如下图所示说明成功(注意:一定要先运行我们的宿主程序才行,如果宿主没有打开的话会报错:由于目标计算机积极拒绝,无法连接。)。

Windows应用程序宿主 

建立宿主

  (1)在解决方案下新建Windows窗体应用程序项目 WCFHost_Form。

  (2)添加 System.ServiceModel.dll 的引用。

  (3)添加 WCF 服务类库(WCFLibrary)的项目引用。

  (4)添加应用程序配置文件App.config。

  (5)创建宿主程序MainForm窗体,并修改App.config,代码如下:

注:这个同朱哥教的是一样的,故不重复啦!

WAS宿主(用到的时候在看,上面的网址--)

  Windows 进程激活服务 (WAS) 概述  

  IIS7允许通过HTTP外的协议进行激活和网络通信。此环境适合开发可通过WCF支持的任何网络协议(包括http、net.tcp、net.pipe、net.msmq)进行通信的WCF服务。

     部署简单、管理方便,这些网络协议在部署时可像Http一样,直接丢到IIS7上即可,我们在下面的例子中以net.tcp为协议为例。IIS7以下的版本只能支持Http的通信。

宿主---至此---结束!!

WCF的宿主的更多相关文章

  1. WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  2. 无废话WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  3. 三、WCF的宿主

    注:本文为学习摘抄,原文地址:http://www.cnblogs.com/iamlilinfeng/archive/2012/10/01/2706353.html 一.WCF服务应用程序与WCF服务 ...

  4. 【转】WCF入门教程三[WCF的宿主]

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  5. WCF WCF的宿主

    一.WCF服务应用程序与WCF服务库 我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”. WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定 ...

  6. WCF系列教程之WCF服务宿主与WCF服务部署

    本文参考自http://www.cnblogs.com/wangweimutou/p/4377062.html,纯属读书笔记,加深记忆. 一.简介 任何一个程序的运行都需要依赖一个确定的进程中,WCF ...

  7. 宿主iis部署wcf

    WCF学习笔记(4)——宿主iis部署wcf 本文将部署一个wcf+silverlight简单实例,以下是详细步骤: (环境:服务端win2003,iis6.0,asp.net4.0:客户端winXP ...

  8. 使用Winform程序作为WCF服务的宿主

    如果我们自己新建一个WCF服务库,生成了dll文件.那我们需要创建一个宿主程序,在本例中我们新建一个Winform程序作为WCF的宿主程序. 在网上很多教程里对创建过程写的很模糊,错误也很多.本文是作 ...

  9. C# WCF 完整实例,winform 窗体作为 宿主

    上一次提到,我们的WCF程序宿主是发布到IIS上面的.虽然这样做未尝不可,不过不便于我们进行“开始”或“停止”WCF服务的操作.所以再次尝试了编写以窗体应用程序作为WCF服务宿主的方式,并取得了成功. ...

随机推荐

  1. selenium 遇到chrome 弹出是否保存密码框

    --待验证(以下是java脚本) ChromeOptions options = new ChromeOptions(); options.addArguments("--start-max ...

  2. AngularJS form $addControl 注冊控件control

    需求背景: 在form中使用编写的某component directive时.想通过form's name来对form中控件进行操作, 如使用$invalid等来ng-disabled btn. 解决 ...

  3. python 基础 9.12 索引

    #/usr/bin/python #-*- coding:utf-8 -*- #@Time   :2017/11/24 4:48 #@Auther :liuzhenchuan #@File   :索引 ...

  4. 【BZOJ3784】树上的路径 点分治序+ST表

    [BZOJ3784]树上的路径 Description 给定一个N个结点的树,结点用正整数1..N编号.每条边有一个正整数权值.用d(a,b)表示从结点a到结点b路边上经过边的权值.其中要求a< ...

  5. 【BZOJ4184】shallot 线段树+vector+线性基

    [BZOJ4184]shallot Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从 ...

  6. UITableView 右侧索引

    1.设置右侧索引字体颜色 self.tabView.sectionIndexColor = [UIColor blackColor]; 2.设置右侧索引背景色 self.cityTabView.sec ...

  7. ORM性能相关

    model: 先给一个简单的表结构 from django.db import models class User(models.Model): username=models.CharField(m ...

  8. 我的Android进阶之旅------>Android中android:visibility 属性VISIBLE、INVISIBLE、GONE的区别

    在Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为"visible "."invisible"."gone&quo ...

  9. linux环境下redis安装

    本篇文章主要说明的是Linux环境下redis数据库的安装: 首先进入目标目录: 下载安装包,执行命令: wget http://download.redis.io/releases/redis-4. ...

  10. 如何用excel urldecode解码把url编码转为汉字?

    统计分析可以反映出网站运营的情况,并根据实际作出相应的调整,是站长必需的基础技能.ytkah感觉最好用的是谷歌统计,里面有个搜索关键词及对应受访页面,这个功能对优化用处很大,但大家都知道访问不太顺畅. ...