在VS2010里建立一个最简单的WCF服务
- 格式:pdf
- 大小:514.71 KB
- 文档页数:10
网上用来写三层结构和Wcf的实例不多,本人最近因为工作需要,简单学习了三层结构和Wcf服务,这里用 (vs 2010)作一个简单实例,希望能帮助一些需要的人快速入门。
网上关于三层结构和Wcf的解释都太专业和高大上,这往往会初学者带来困难。
这里用一些个人的理解作一些粗浅说明,各位配合下面的例子写出自己的代码后,再返回去看他们的专业定义,也许会更容易理解些。
所谓三层结构,按我的理解,就是把一个软件的开发,分成三块,一块专门作界面,一块专门作业务流程,一块专门作数据操作。
这在团队开发中非常有用,可以分工合作,一人作一部分,将来出错也好查错,维护起来也方便,特别是系统庞大了以后,作用更明显。
当然,如果是个人作个小软件,个人觉得什么界面、业务、数据还是放在一起吧,分层浪费的时间更多。
所谓的Wcf,我的简单理解就是为了实现三层结构中的数据层。
就是作一个数据操作的DLL,然后在网上发布这个DLL,别人调用这个DLL中的函数来实现功能,而不用管DLL是怎么写的。
那为什么不直接在自己的代码中写呢,而是要发布Dll到网上呢?答案是为了数据安全。
比如你要调用sql server中的数据库,客户端中如果使用了连接的用户名和密码,别人可以简简单单挂个小程序就把你的用户名、密码就截获了;而使用了wcf,数据库连接语句都是在服务器上进行,客户端只获得了返回的结果,显然就安全多了(平时我们浏览网页也是这种模式),还有一个好处就是如果这个数据的逻辑发生变化,更新服务器的DLL 文件就好,不需要再更新客户端了,比如某个算法,由原来的X*0.2调整为X*0.3,这个时候你也要客户端和你一起更新?这显然不经济。
当然如果你是作单机版的软件,在本机上运行的,就没有必要学wcf了。
下面会讲到Wcf的建立和在IIS 5.1上的发布,大家慢慢往下看。
以下的图例就不再作详细的文字描述了。
一、打开vs 2010,新建一个解决方案,名字为test,存在e:\mytest下二、左上角菜单->文件->添加->新建项目->windows->windows窗体应用程序,名称:界面层四、左上角菜单->文件->添加->新建项目->Wcf->Wcf服务库,名称:数据层。
使用VS2010(C#语言)创建Windows Service详细图解步骤如下:1、打开VS2010,文件/新建/项目,在新建项目框中选择Windows Service 或Windows 服务;2、双击打开Service1.cs,此时看到的是设计视图,点击菜单栏的工具/选择工具箱项,如图1所示,在.NET Framework组件中找到Timer,系统默认的是System.Windows.Forms 命名空间的Timer,而我们需要的是System.Timers命名空间的Timer,所以选中这个Timer,点击确定,如图中红线框所示:图1 选择工具箱项3、回到Service1[设计],在左侧工具箱中展开组件,双击第二个Timer(如图2),在页面选中刚添加的Timer,右键选择属性,在属性窗口的第一行看看是不是System.Timers.Timer(如图3);图2 左侧工具箱图3 右侧属性窗口4、在Timer的属性窗口中,可以修改Timer的名称和间隔时间Interval(单位毫秒);点击事件标识(闪电图标),双击Elapsed 右侧的文本框,生成Timer 事件;5、在Service1[设计] 的空白处,右键查看代码,在类名下面声明线程变量thdMain(变量名可用其他名称),在OnStart方法中给线程thdMain定义,启动Timer,并启动线程,Service1.cs全部代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Diagnostics;using System.Linq;using System.ServiceProcess;using System.Text;using System.Threading;namespace WindowsService{public partial class Service1 : ServiceBase{//private bool blnStopThread;private Thread thdMain;public Service1(){InitializeComponent();}protected override void OnStart(string[] args){thdMain = new Thread(new ThreadStart(timer1.Start));thdMain.Start();}protected override void OnStop(){}private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e){Class1 test = new Class1();test.Test(); //业务操作}}}6、在timer1_Elapsed中编写你要做的业务操作,本例中的业务操作在Class1.Test()方法中;7、Class1的代码如下,向数据库写入记录:class Class1{public void Test(){string constr = @"Data Source=.\MSSQL;Initial Catalog=Test;Integrated Security = SSPI;";Random rdm = new Random();string num = rdm.Next(1, 1000).ToString();string name = "Service" + num;string cmdstr = "insert into dbo.Table_1 (name,value ) values('"+name +"','"+ num +"')";SqlCommand cmd = new SqlCommand();using (SqlConnection conn = new SqlConnection(constr)){conn.Open();cmd.Connection = conn;mandType = mandType.Text;mandText = cmdstr;cmd.ExecuteNonQuery();}}}8、在Service1.cs[设计] 页面的空白处右键属性,修改ServiceName,如图4:图4 在Service1的属性窗口中修改服务名称9、在Service1[设计] 中右键添加安装程序,系统自动添加了ProjectInstaller.cs 文件,在ProjectInstaller.cs[设计]中有2个组件:serviceInstaller1 和serviceProcessInstaller1;10、选中serviceInstaller1 右键属性,在属性窗口中设置ServiceName 和StartType,这里的ServiceName 必须和Service1中的ServiceName相同,如图5所示:图5 设置serviceInstaller1的属性11、选中serviceProcessInstaller1 右键属性,Account 选中LocalSystem,LocalSystem 是服务控制管理员使用的账号,只要有Windows的管理员权限就可以使用这个账户,如图6:图6 设置启动服务所使用的账号12、保存项目,到此已经完成Windows Service;点击菜单栏生成/生成WindowsService;13、打开项目文件夹,在bin/Debug 文件夹中找到已编译文件WindowsService.exe应用程序,保证应用程序所在目录中不能有空格,否则把应用程序复制到其他目录中;14、下面安装服务返回桌面,打开菜单/所有程序/Miscrosoft Visual Studio 2010/ Visual Studio Tools/ Visual Studio 命令提示(2010),需要已管理员身份运行,在命令窗口中输入installutil 目录\WindowsService.exe ,如图7,安装完成后,可以在控制面板/管理工具/服务中找到刚安装的服务MyTest2,右键启动,可以在数据库中查看效果。
8.2Hello, World实例本实例与传统入门教材相同,仍然以输出一个“Hello,World”字符串开始。
实例将新建2个项目,第一个项目名为“HelloWorldService”,它提供WCF服务,并且以开发环境方式暴露一个端口供客户端调用;另外一个项目叫“HelloWorldClient”,它调用WCF服务方法,并输出返回值。
本实例的运行结果如图所示:8.2.1创建WCF服务端程序1)打开Microsoft Visual Studio 2010;2)选择菜单>文件>新建>项目;3)在弹出的“新建项目”对话框中展开左边的“已安装的模板”>Visual C#;4)选择“WCF”;5)在对话框右边选择“WCF Service Application“;6)在对话框下部的“项目名“中输入”HelloWorldService“,在位置中输入” d:\Exercise “,在解决方案名称输入”WcfSample“,确保选中”Create directory for solution “,确保未选中”Add to source control“,设置后的界面如下:7)点击“OK“按钮,VS2010已自动建立了一个WCF Service Application,并且为我们自动打开了Service1.svc.cs文件;8)打开“Solution Explorer”;(VS2010默认打开,位置在VS2010桌面的右边,如果VS2010没有打开,请使用快捷键Ctrl + W,S打开)9)在“Solution Explorer”中展开“HelloWorldService”;10)双击“IService1.cs”文件;11)用下面的代码/// <summary>/// 提供一个WCF服务方法/// </summary>/// <returns>返回“Hello, World!”</returns>[OperationContract] //声明为“OperationContract”的方法将暴露在WCF服务器上string GetHelloWorld();替换第22行的注释// TODO: Add your service operations here知识点:“ServiceContract”代表服务契约,表示IService1接口是一个WCF服务,这样,客户端就可以访问这个接口和它内部有效的方法了。
在VS2024里建立一个最简单的WCF服务在Visual Studio 2024中创建一个最简单的WCF服务,需要完成以下步骤:第一步,创建新的项目:1. 打开Visual Studio 20242.点击“文件”->“新建”->“项目”。
3. 在“项目类型”中选择“Visual C#”->“WCF”。
4.在“模板”中选择“WCF服务应用程序”。
5.输入项目名称和位置,点击“确定”按钮。
第二步,定义服务契约:1. 在“解决方案资源管理器”中,找到“IService1.cs”文件。
2.打开这个文件,删除其中的所有代码。
3.定义一个简单的服务契约,例如:```csharpusing System.ServiceModel;[ServiceContract]public interface IService1[OperationContract]string GetData(int value);```第三步,实现服务契约:1. 在“解决方案资源管理器”中,找到“Service1.svc.cs”文件。
2.打开这个文件,删除其中的所有代码。
3.实现定义的服务契约,例如:```csharppublic class Service1 : IService1public string GetData(int value)return string.Format("You entered: {0}", value);}```第四步,配置服务:1. 在“解决方案资源管理器”中,找到“Web.config”文件。
2.打开这个文件,删除其中的所有代码。
3.配置服务绑定和终结点,例如:```xml<system.serviceModel><services><service name="WcfService1.Service1"><endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1" /><endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /></service></services><bindings><basicHttpBinding><binding name="defaultBinding" /></basicHttpBinding></bindings><behaviors><serviceBehaviors><behavior><serviceDebug includeExceptionDetailInFaults="false" /> </behavior></serviceBehaviors></behaviors><serviceHostingEnvironment multipleSiteBindingsEnabled="true" /></system.serviceModel>```第五步,启动服务:1.点击“调试”->“开始调试”或者按下F5键,启动WCF服务应用程序。
使用VS自带的WCFSVCHost(WCF服务主机)发布WCF服务,时刻开发人员测试使用。
下面我们来看一下如何在IIS中部发布一个WCF服务。
环境是VS 2008 (公司电脑没有安装VS2010)^_^我们从头开始,不写代码,完全的配置,会收获不小。
新建一个WCF 服务库建立一个WCF服务应用程序结果如下删除掉WCF程序中不需要的默认文件,如下图为WcfService1项目添加WcfServiceLibrary1的引用,如下图。
修改声明指示内容,让这个Service.svc文件的后台代码指向我们创建的WCF服务库项目--WcfServiceLibrary1项目中的服务类,改后的代码如下:<%@ ServiceHost Language="C#" Debug="true"Service="WcfServiceLibrary1.Service1" %>Ctrl+Shift+B 编译一下解决方案,配置工具用的反射,先编译才行此时我们的WCF服务站点并不能把WCF服务库中的服务和终结点发布出来,还需要我们对web.config进行一系列的配置工作。
右键我们要配置的Web.Config文件,编辑WCF配置在弹出的服务配置窗口中,把Service1服务指定到WCF服务库的WcfServiceLibrary1.dll 中的WcfServiceLibrary1.Service1服务类上。
再把其中的一个对外终结点的Contract设为WCF服务库的WcfServiceLibrary1.dll中的WcfServiceLibrary1.IService1服务契约上。
这一步是可选的,我们再为此WCF服务站点添加一个终结点,配置如下图下面我们将试着使用不同的终结点与WCF服务进行交互,查看运行情况。
当我们使用IIS5或IIS6发布WCF服务的时候一般只创建Http绑定的终结点,而不能创建使用TCP绑定、管道绑定的终结点。
C#WCF简单⼊门图⽂教程(VS2010版)在这个例⼦中我们将使⽤VS2010创建⼀个WCF服务,其中会了解[DataContract][ServiceContract]等特性。
内置的WCFSVCHost,并使⽤“WCF测试客户端”来测试我们创建的服务。
注意下⾯的所有类、接⼝及⽅法都添加了public的访问级别。
⼀、建⽴⼀个WCF服务库创建⼀个WCF服务库项⽬在解决⽅案中会⾃动为我们⽣成两个类⽂件“IService1.cs”和“Service1.cs”。
这两个类⽂件是两个WCF⽰例⽂件,对我们开发没有什么⽤处,现在我们删掉这两个⽂件。
然后添加Student类创建服务接⼝,声明对外发布的类和⽅法。
实现我们上⾯声明的服务接⼝,实现对Student的添加、删除和检索的具体功能。
写完后记得编译⼆、配置服务运⾏到⽬前为⾄,我们建⽴好了WCF服务,那我们如何让WCFSVCHost(WCF服务主机)理解我们编写的服务类,并能够运⾏我们编写的服务呢。
这需要我们在App.Config⾥⾯注册⼀下我们的WCF服务。
VS为我们提供了可视化的操作界⾯。
在HelloWCF项⽬中右击“App.Config”配置⽂件,在弹出的右键菜单中选择“编辑WCF配置”。
如图:在此界⾯中暴露两个对外的终结点(外部可以访问到的类或接⼝),其中下⾯⼀个是元数据终结点,⽤来向外提供服务信息的终结点。
⽽另⼀个(即上⾯的终结点),是向外公布我们编写的[ServiceContract]的类,但我们可以看到它的Contract还是我们在第⼀步中删掉的HelloWCF.IService1这个终结点。
不仅如此,在右侧上⾯的⿊字的服务中还依旧是我们在第⼀步中删除的WcfServiceLibrary1.Service1服务。
这说明虽然在第⼀步中我们删除了那两个⾃动⽣成的类⽂件,但配置⽂件中仍没有删除这两个类⽂件的配置信息。
下⾯我们把它们改变⼀下。
单击左侧的“服务”-“HelloWCF.Service1”在右侧的Name,弹出“服务类型浏览器”对话框,在此类型中我们找到此WCF服务项⽬编译出来的HelloWCF.dll⽂件,双击它就可以出现此服务中的对外公布的服务,点击选中它单击确定。
WCF入门教程这一系列文章的内容是从MSDN中COPY过来的,讲述的是最简单的WCF程序示例:如何在控制台应用程序实现和承载WCF服务,以及如何创建、配置和使用WCF客户端。
文章主体可分为两部分,分别介绍服务器端和客户端的编程实现。
细分的话,可以分为六项任务。
服务器端定义WCF服务协定(任务一)这是创建基本Windows Communication Foundation (WCF) 服务和可以使用该服务的客户端所需的六项任务中的第一项任务。
创建基本WCF 服务时,第一项任务是为与外界共享的服务创建协定,并在其中描述如何与该服务进行通信。
具体步骤为:1、创建新的控制台应用程序项目。
在“新建项目”对话框中,选中“Visual Basic”或“Visual C#”,并选择“控制台应用程序”模板,并命名为Service。
使用默认的位置。
2、将默认的Service命名空间更改为Microsoft.ServiceModel.Samples。
3、为项目提供对System.ServiceModel命名空间的引用:右击“解决方案资源管理器”中的“Service”项目,选择“添加引用”项,在弹出的对话框中的“.NET”选项卡里的“组件名称”中选择“System.ServiceModel”,然后单击“确定”。
下面是编程步骤:1、为System.ServiceModel命名空间添加一个using语句。
using System.ServiceModel;2、创建一个新的ICalculator 接口,并将ServiceContractAttribute属性应用于该接口,并将Namespace 值设置为“http://Microsoft.ServiceModel.Samples”。
此命名空间指定该服务在计算机上的路径,并构成该服务的基址部分。
请注意,在通过采用方括号表示法的属性来批注接口或类时,该属性类可以从其名称中去掉“Attribute”部分。
1.概念Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口。
它是.NET框架的一部分,由.NET Framework 3.0开始引入。
WCF的终结点有三个要素组成,分别是地址(Address)、绑定(Binding)和契约(Contract),简记可写成Endpoint=ABC。
地址:地址决定了服务的位置,解决了服务寻址的问题。
绑定:绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能对消息进行的相应处理。
绑定的类型包括BasicHttpBinding、WsHttpBinding、NetTcpBinding等。
契约:契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。
2.契约WCF的基本概念是以契约(Contract)来定义双方沟通的协议,契约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。
契约分成了四种:数据契约(Data Contract),订定双方沟通时的数据格式。
服务契约(Service Contract),订定服务的定义。
操作契约(Operation Contract),订定服务提供的方法。
消息契约(Message Contract),订定在通信期间改写消息内容的规范。
如下图,解释了契约:3.绑定由于WCF支持了HTTP,TCP,Named Pipe,MSMQ,Peer-To-Peer TCP等协议,而HTTP又分为基本HTTP支持(BasicHttpBinding)以及WS-HTTP支持(WsHttpBinding),而TCP亦支持NetTcpBinding,NetPeerTcpBinding等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。
基本绑定(BasicHttpBinding)对应BasicHttpBinding类,能够将WCF服务公开为传统的ASMX Web服务,是以前就的程序能够使用现在的WCF服务。
一、开发环境操作系统:Windows 7开发环境:VS2013编程语言:C#IIS版本:10.0.0.0二、添加WCF服务、Internet Information Services(IIS)1、进入“控制面板”,打开“程序和功能”,点击左上角的“启用或关闭Windows功能”后,在“.NET Framework 4.6 高级服务”中的子节点选中“WCF 服务”,如下图所示:2、再找到“Internet Information Services”,同样选中该节点,如下图所示:3、点击“确定”按钮以便安装这些服务与组件,等待完成安装即可。
三、新建一个WCF服务库1、使用VS2015新建一个WCF服务库,并将项目名称改为“MyWCFService”,如下图所示:3、将鼠标移到解决方案资源管理器中项目“MyWCFService”上并右击鼠标,弹出上下文菜单,在菜单中选中“发布”后,弹出下图所示的“发布WCF服务”对话框,如下图所示:在目标位置选择“D:\WCF”,其他按默认,点击“发布”按钮,即可在“D:\WCF”文件夹里生成如下图所示的文件:四、新建一个WCF服务网站1、打开控制面板-管理工具2.点击打开IIS,右键点击网站,新建一个网站,网站名称设置为“MyWCFService”,物理地址选择“D:\WCF”,端口从默认的80改为81,如下图所示:3点击确定后,即新建一个WCF服务网站。
五、服务器程序编辑(编辑完成后需要再次发布)1、点击解决方案下的server1.Cs—GeteData2、在此处添加程序六、创建客户端1、新建一个Windows窗口客户端2、在解决方案下的引用点击右键,添加服务器引用3、地址填http://localhost:81/ MyWCFService点击转到,然后点击确定4、在这里添加客户端程序5、点击启动生成解决方案,完成客户端创建。