最近一直在学习WCF相关知识,下面将通过一个小实例对所学的知识进行简单的回顾;本实例是一个简单三层操作数据库,并且也简单实现的三种宿主(控制台宿主,IIS宿主以及Windows服务宿主)的练习;还包含一个双工的功能,下图为程序所创建分层结构图;
首先了解为这个实例所创建的两张简单表;
USE [TestDb]GO/****** 对象: Table [dbo].[T_Account] 脚本日期: 07/31/2013 23:09:27 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[T_Account]( [ID] [int] IDENTITY(1,1) NOT NULL, [Uid] [int] NULL, [Money] [int] NULL, CONSTRAINT [PK_T_Account] PRIMARY KEY CLUSTERED ( [ID] ASC)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]GO USE [TestDb]GO/****** 对象: Table [dbo].[T_User] 脚本日期: 07/31/2013 23:10:00 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[T_User]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL, [PassWord] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL) ON [PRIMARY]
|
接下来简单了解每一层的作用以及一些注意事项;源代码后面直接提供下载;
1:Service.DAL 是针对数据库操作的一些类;
2:Service.DbHelp 为数据库操作提供助手
3:Service.HostTest 为服务提供自宿主的测试;一般在编码时会用到;此层还用到批量寄存的知识;
4:Service.Interface 为契约层,定义的相关开放接口;
5:Service.Model为实体层也是数据契约层;
6:Service.ServerDemo 为实现契约的服务内容;若有逻辑都放在这一层;
7:WcfServiceForIIs 为宿主在IIS内容;
8:WebClient 为客户端为Web形式
9:Windows_HostService为宿主要Windows服务里的内容;
10:WindowsClient、WindowsFormsForHostService、WindowsFormsForIIS分别是对三种寄存宿主进行测试的客户端;
一:注意点批量寄存宿主;把重点的一些配置一及实现代码贴出;
using System.ServiceModel;using Service.ServerDeom;using Service.Interface;namespace Service.HostTest{ class Program { static void Main(string[] args) { using (ServiceHostCollection hosts = new ServiceHostCollection()) { foreach (ServiceHost host in hosts) { host.Opened += (sender, arg) => Console.WriteLine("服务{0}开始监听", (sender as ServiceHost).Description.ServiceType); } hosts.Open(); Console.Read(); } } }}
二:宿主要IIS里的注意内容;
新建一个文本文件然后把它的后缀修改成.svc;并在其头部增加一行调用服务的代码;
<%@ ServiceHost Language="C#" Debug="true" Service="Service.ServerDeom.UserService" %>
其配置如下:
把I宿主部署到IIS里;
三:宿主在Windows服务;创建一个Windows服务类库,增加相应的配置以及代码;
using System.ServiceModel;using Service.ServerDeom;using Service.Interface;namespace Windows_HostService{ public partial class Service1 : ServiceBase { private ServiceHost serviceHost = null; //寄宿服务对象 public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { try { serviceHost = new ServiceHost(typeof(UserService)); if (serviceHost.State != CommunicationState.Opened) { serviceHost.Open(); } } catch (Exception ex) { } } protected override void OnStop() { } }}
若服务安装成功后会在服务里可以看到如下:
客户端调用服务的代码大家就直接看源代码,由于本人也是刚开始学习WCF,实例内容为本人学习所做,若有不足或错误欢迎指正;[]
最近有个妹子弄的一个关于扩大眼界跟内含的订阅号,每天都会更新一些深度内容,在这里如果你感兴趣也可以关注一下(嘿对美女跟知识感兴趣),当然可以关注后输入:github 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;