在VS2010里建立一个最简单的WCF服务
vb实现三层结构及Wcf的入门实例(.net)
网上用来写三层结构和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服务库,名称:数据层。
2.6创建一个综合的WCF服务项目
[OperationContract] string OperationA1(); [OperationContract]
string OperationA2(); } [ServiceContract] public interface IServiceB
{ [OperationContract] string OperationB();
}
}
计算机院
4
服务
三.创建服务“Services”的类库
▪ 添加对Contract项目的引用,在类库中添加两个类ServiceA和 ServiceB两个类, ServiceA类代码:
namespace Services {
public class ServiceA: IAdmin,IServiceA { string IServiceA.OperationA1() { return "返回操作A1"; } string IServiceA.OperationA2() { return "返回操作A2"; }
2.6 创建一个综合的WCF服务项目
教学目标
▪ 掌握创建一个综合的WCF服务项目的方法
计算机院
2
手动创建WCF服务
一.构建整个解决方案 ▪ 打开Visual Studio 2010,创建名为WCF5的空
白解决方案。
➢ “Contract”的类库项目,定义服务契约 ➢ “Services”的类库项目,服务的实现 ➢ “Host”的控制台应用程序,服务的寄宿 ➢ “Client”的Windows应用程序,客户端
</services> <behaviors> <serviceBehaviors>
使用VS2010创建Windows Service
使用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,右键启动,可以在数据库中查看效果。
WCF实例
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服务
在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服务应用程序。
一个完整的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版)
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入门教程
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”部分。
WCF编程:WCF服务和客户端的建立
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服务。
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、点击启动生成解决方案,完成客户端创建。
WCF 一步一步从入门到精通(一)建立一个简单入门的例子(适合一点不会的朋友阅读)
WCF 一步一步从入门到精通(一)建立一个简单入门的例子(适合一点不会的朋友阅读)Windows Communication Foundation (WCF) 是一个统一框架,用于创建既安全可靠又可交互的分布式事务处理应用程序。
在我学习一样新的技术的时候总喜欢一开始就知道他如何使用和配置,然后再深入的了解的更多细节。
下面我们就通过图片一步一步的从一点不会开始建立一个简单的WCF程序(这个例子取自微软,很简单):我使用的环境是: VSTS2008 sp11.建立一个名为WCF的空解决方案,再右键点击他,为这个解决方案添加一个“WCF 服务库”项目WCF服务库被添加进去,结果如下2.WCF项目中有两个默认建立好的文件Iservice1.cs和Service1.cs ,我们下面要对这两个文件稍稍的做一下修改IService1.csusing System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.ServiceModel;using System.Text;namespace WcfServiceLibrary{// 注意: 如果更改此处的接口名称“IService1”,也必须更新 App.config 中对“IService1”的引用。
[ServiceContract]public interface IService1{[OperationContract]string GetData(string value);[OperationContract]CompositeType GetDataUsingDataContract(CompositeType composite);// 任务: 在此处添加服务操作}// 使用下面示例中说明的数据协定将复合类型添加到服务操作[DataContract]public class CompositeType{bool boolValue = false;string stringValue = "朋友 ";[DataMember]public bool BoolValue{get { return boolValue; }set { boolValue = value; }}[DataMember]public string StringValue{get { return stringValue; }set { stringValue = value; }}}}Service1.csusing System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.ServiceModel;using System.Text;namespace WcfServiceLibrary{// 注意: 如果更改此处的类名“IService1”,也必须更新 App.config 中对“IService1”的引用。
VS2010创建windows服务DEMO
【IT168 技术】很多人会对使用Visual Studio有不少的烦恼,下面我们来看一下作者是如何创建windows服务的,看后你一定觉得它其实很简单。
下面是一个用VS2010做windows服务的简单例子和一些注意事项:1.新建一个windows服务2.添加代码vs会自动生成一些代码在Service1.cs中会看到如下代码protected override void OnStart(string[] args){}protected override void OnStop(){}其中OnStart为启动服务时调用的方法;OnStop为停止服务时调用的方法。
每个服务都还有其他方法,比如暂停、恢复等,可以重载基类的方法来实现,如暂停:protected override void OnPause(){base.OnPause();自己的业务逻辑就可以在这些方法中调用实现。
ps:在做windows服务时常常是要弄一个循环还处理某些业务逻辑,常见的方法是用一个Timer控件,值得注意的是Toolbox中的Timer 控件默认是System.Windows.Forms.Timer,显然在这里是不会起作用的,这里可用System.Timers.Timer,可以直接在Toolbox中右键添加。
3.添加Installer这一步很关键,在处理完业务逻辑后需添加一个Installer才能使你的windows服务能够被安装。
在VS中添加Installer也很简单,操作如下:右键Service1.cs再到View Desiger视图中右键Installer就添加好了。
4.设置服务参数可以在程序中先给定windows服务的参数在添加Installer时会自动生成一个ProjectInstaller.cs,在这个文件中有个InitializeComponent方法,如下:private void InitializeComponent(){this.serviceProcessInstaller1 = new System.ServiceProcess.Service ProcessInstaller();this.serviceInstaller1 = new System.ServiceProcess.ServiceInstall er();//// serviceProcessInstaller1//this.serviceProcessInstaller1.Password = null;ername = null;//// serviceInstaller1//this.serviceInstaller1.ServiceName = "Service1";//// ProjectInstaller//this.Installers.AddRange(new System.Configuration.Install.Install er[] {this.serviceProcessInstaller1,this.serviceInstaller1});}this.serviceProcessInstaller1.Password = null;ername = null;为设置服务的登陆账号密码,如果不想设置用户名密码也可以采用本地系统帐户运行服务,代码如下:this.serviceProcessInstaller1.Account = System.ServiceProcess.Service Account.LocalSystem;其他设置也可在此完成。
Visual Studio2010搭建WCF之基础篇
VS2010搭建WCF之基础篇在看本篇之前,我先介绍以下代码和案例图片所运行的环境,如有不同,还请见谅:操作系统:win7旗舰版64位已装IIS,版本6.1(内部版本7600),(先装IIS后装VS2010)软件开发工具:Visual Studio2010专业版,版本10.0.30319.341,已打补丁,VS 启动开发语言我选C#。
和已安装什么是WCF?答:微软发展的通信方法有Web Service (SOAP with HTTP communication),.NET Remoting (TCP/HTTP/Pipeline communication) 以及基础的Winsock 等通信技术。
由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性,对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习,让开发人员在使用中有许多不便。
同时,面向服务架构(Service-Oriented Architecture) 也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是Windows Communication Foundation。
下面我们开始搭建WCF。
1、创建程序文件夹:首先在D盘新建一个文件夹“Demo”。
(啥,你没有D盘。
吐血三百升)2、创建解决方案:打开VS2010,右上角菜单栏选择“文件、新建、项目、”在弹出的窗口左边区选择“windows”,然后窗口中部选择“空项目”窗口底部设置名称为“WcfDemo”,同时解决方案名称也会跟着一致,位置设置为第一步D盘创建的文件夹Demo,“为解决方案创建目录”打钩,最后单击“确定”,解决方案就新建好了。
可惜不是完全真的空,里面还是带了一个类库项目,右键点击WcfDemo选择移除清了它。
(D:/Demo/WcfDemo/ WcfDemo文件夹也完全删除)3、新建合约层:合约是用来定义沟通的协议,共分四种。
VS2010+SILVERLIGHT4+WCF+C#开发部署全过
前言本人在网上学习silverlight的wcf功能时,发现网上流传的例子都是VB版的,但是我用的是C#语言,于是就把原来的VB版例子拿来,仔细研究了一番,发现按照那个步骤也能成功创建C#办的wcf项目,只是在把VB转换成C#时费了不少劲,好不容易把这个wcf项目完成了,发到网上供大家学习一下吧。
1安装开发环境操作系统:Windows7专业版微软先锋计划199元购Vs2010:cn_visual_studio_2010_ultimate_x86_dvd_532347.iso这是微软送的一个版本,先前在微软下载的。
银光套件:Silverlight.exeSilverlight4_Tools.exeSilverlight_Developer.exe2安装依次安装:vs2010,完全安装Silverlight.exeSilverlight4_Tools.exeSilverlight_Developer.exe,按微软说的只要安装了Silverlight4_Tools.exe,就不用安装Silverlight_Developer.exe,但是在调试程序还是要我安装Silverlight_Developer,我就有安装了它。
3建立一个vs2010+silverlight4+wcf的项目安装部署环境,网上的教程很多,我就不详细说了,下面就是建立项目的详细过程,大家根据文字和图片说明学习吧。
建立Silverlight项目,名称可以自定义完成后一定要编译一下,否则后面引用时会报错点击发现可以找到本项目下的wcf服务下面是用来生成安装程序的介绍到此这个Silverlight项目也就完成了,相信大家也基本会用了吧。
silverlight项目中的脚本XML code<UserControl x:Class="SilverlightApplication2.MainPage"xmlns="/winfx/2006/xaml/presentation"xmlns:x="/winfx/2006/xaml"xmlns:d="/expression/blend/2008"xmlns:mc="/markup-compatibility/2006"mc:Ignorable="d"d:DesignHeight="300"d:DesignWidth="400"><Grid x:Name="LayoutRoot"Background="White"><StackPanel><TextBlock x:Name="text_result"Text="显示结果"></TextBlock><Button x:Name="button_get_welcome"Content="测试WCF"Width="100"Click="button_get_welcome_Click"/></StackPanel></Grid></UserControl>后台代码:C#codepublic partial class MainPage:UserControl{private ServiceReference1.Service1Client wcf=newServiceReference1.Service1Client();//定义服务接口//定义执行函数结束后的操作private void wcf_get_wcf_welcomeCompleted(object s,ServiceReference1.get_WCF_welcomeCompletedEventArgs e){text_result.Text=e.Result;}public MainPage(){InitializeComponent();//函数实例化,执行订阅事件wcf.get_WCF_welcomeCompleted+=newEventHandler<ServiceReference1.get_WCF_welcomeCompletedEventArgs>(wcf_get_wcf_welcomeCo mpleted);}private void button_get_welcome_Click(object sender,RoutedEventArgs e){wcf.get_WCF_welcomeAsync();//异步开始执行welcome函数}}wcf中添加的一段代码:C#code[OperationContract]public string get_WCF_welcome(){return"欢迎成功连接WCF!";}。
Wcf服务入门实例
本人开发c/s模式的软件,使用clickonce发布,数据库的连接字符都写在代码中,这时候一旦被反汇编,数据安全无法保障,因此考虑使用wcf服务,用于传输数据库连接字符,避免将连接字符写入代码中被反汇编。
(当然,也可以直接用于传输数据,更加安全)。
一、新建项目,选择Wcf服务库,取名A(为便于理解,不修改默认文件)二、菜单->文件->添加,新建项目,选择windows窗体应用程序,取名B三、打开B项目中的form1,添加一个按钮button1,命名为”启动服务”四、右键点击B项目,设置为启动项目五、B项目,(菜单)项目->添加引用,选择A项目,确定。
六、继续添加引用system.servicemodel七、复制以下代码到B项目的form1Imports System.ServiceModelImports System.ServiceModel.DescriptionPublic Class Form1Dim Host1 As ServiceHostPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickHost1 = New ServiceHost(GetType(A.Service1), New Uri("net.tcp://localhost:1000/")) '用于监听的地址,在服务器就是localhost,不要改。
Host1.Description.Behaviors.Add(NewServiceMetadataBehavior())Host1.AddServiceEndpoint(GetType(IMetadataExchange), MetadataExchangeBindings.CreateMexTcpBinding(), "A") '这个不明白啥意思,不做就不能用。
(完整版)快速搭建WCF服务程序
一、快速搭建WCF程序
1、ABC的概念
A:address:服务地址。
访问网页时请求的地址
B:Binding: Client和Service的通道,例如访问web时,使用Http通道
WCF支持的通道有:BasicHttpBinding[WSHttpBinding],NetTcpBinding,netMSMQBinding.
C:Contract:契约,包括定义的接口,参数,返回值,方法名
2、定义WCF项目
(1) 在新建项目中添加新建项,找到"WCF服务"这个模板。
(2) 步骤
Service:服务端
定义一个接口
PS:接口名可以随意改:例如在IFlyService
首先在接口名上面加一个ServiceContract特性
其次在方法名上面加一个OperationContract特性
●定义一个实现类
把接口中的方法改为String是想有返回值,方法名改为Fly,实现类中重写该方法。
●定义配置文件
app.config中所有的定义都应该在System.serviceModel这个配置节点中。
●承载WCF服务,一般可用IIS,Console,winform承载
Client:建立客户端连接Service
(1)建立一个控制台应用程序
(2)然后添加服务引用,服务地址就是配置app.Config中host节点中的服务地址(可随意更改),注意一定要启动服务实例,才能访问服务
(3)下一步之后在Main方法启动代码如下:
(4)然后启动实例可以看到控制台中打印出“Hello,World!”,启动成功。
注意:一定要以管理员身份打开VS。
WCF基础介绍并创建简单应用程序
WCF基础介绍并创建简单应⽤程序什么是WCF?WCF, 英⽂全称(windows Communication Foundation) , 即为windows通讯平台。
windows想到这⾥⼤家都知道了 , WCF也正是由微软公司推出的这个⼀个玩意, 基于SOA的⼀个分布式应⽤程序框架和编程模型(WCF 编程模型的⽬标实现也就是:WCF服务、WCF客户端)描述: WCF的特点1. ⽀持多种消息模式(单向模式、请求/回复、双⼯)2. ⽀持多种传输协议和编码(Http,tcp ,msmq等。
)3. ⽀持事务,持久化。
4. 统⼀,安全,可扩展。
关于WCF的基础知识> WCF的服务结构协定: 确定消息格式, 服务类型及安全策略和⽹络协议。
服务运⾏时: 处理服务运⾏中发⽣的各种⾏为消息传递: 描述消息的数据格式和交换模型。
激活和承载: ⽤于发布WCF服务的寄主。
> 如何创建WCF 服务打开Visual Studio 新建⼀个项⽬, 选择WCF 服务库创建并命名为 HelloWCF。
可以看到, 在创建该项⽬时, 系统默认为我们添加了⼀个Iservice1(接⼝)和⼀个 service1(实现类)。
在Iservice1中, 可以看到该接⼝定义了 ServiceContract 特性, 接⼝⽅法中定义了 OperationContract 特性这两类特性则归属于WCF中的服务协定。
*特性:【⽤来声明服务端定义的所有协定。
在C#中,所有特性类都是从Attribute类继承⽽来的,⽽且其名称都有Attribute后缀。
⽤C#编写代码时,⼀律⽤中括号来声明特性类,在ServiceContract定义中, 会发现后⾯跟着Attribute后缀,声明时省略Attribute后缀,这是建议的⽤法。
特性类的⽤途是为紧跟在它后⾯的⽬标元素提供设计⾏为。
⽐如对某个字段声明了某个特性,则该特性的⽬标元素就是这个字段。
⽬标元素可以是程序集、类、构造函数、委托、枚举、事件、字段、接⼝、⽅法、可移植模块、参数、属性(Property)、返回值以及结构等。
WCF入门教程
我们通过实现一个简单的示例来对WCF有个直观而浅显的认识,希望对初次涉及WCF的朋友有所帮助。
可以简单地认为WCF程序分为4部分:契约、服务、宿主、客户端。
我们通过一个例子来逐步完成各部分,示例程序中,客户端可以获取一个信息列表,列表中每一项包括ID、值、读值时刻、状态、状态变动时刻。
这里我用的是VS2010。
首先,创建一个空白解决方案WCFDemo。
我们将在其中添加n个项目,分别实现契约、服务、宿主、客户端。
如果用VS2010新建“WCF服务库”或者“WCF服务应用程序”,它会默认把契约和服务放在一个项目中,我们这个示例把契约和服务分别放在2个类库项目中。
第一步:契约1、添加一个类库WCFDemo.Contracts。
2、在类库中添加2个文件DataContracts.cs和ServiceContracts.cs,分别放置数据契约和服务契约。
3、添加引用System.Runtime.Serialization和System.ServiceModel。
4、编写代码如下:DataContracts.csusing System;using System.Runtime.Serialization; namespace WCFDemo.Contracts{[DataContract]public class DemoData{[DataMember]public int ID{get;set;}[DataMember]public double Value{get;set;}[DataMember]public DateTime ValueTime{get;set;}[DataMember]public DeviceState State{get;set;}[DataMember]public DateTime StateTime{get;set;} }public enum DeviceState{Unknown,Working,Broken}}(题外话:DemoData类中各个属性的写法有些偷懒,其实个人不建议这样。
wcf之旅(1)创建一个简单的wcf程序
WCF之旅(1):创建一个简单的WCF程序[原创]我的WCF之旅(1):创建一个简单的WCF程序写在前面在Microsoft提出.NET战略以来,先后推出了一系列产品和技术,这些产品和技术为我们在.NET平台下建立企业级的分布式应用提供了很大的便利。
这些技术和产品包括:.NET Remoting,XML WebSerivce,WSE(2.0,3.0),Enterprise Service,MSMQ ......我们知道,和一个相对独立的应用不同,我们开发一个分布式应用,尤其是开发一个企业级的分布式应用,我们需要考虑较多的东西。
比如我们要考虑数据在不同的应用之间传递时采取什么样的机制,这种数据传递是否是安全的,可靠的;如何在分布式的环境下进行异常处理;如何把分别在不同应用中执行的操作纳入同一个事务……对于我们上面提到的这些问题,这些都是开发分布式应用考虑的典型的问题。
值得庆幸的是,Microsoft开发的分布式的产品能够部分的解决这些问题。
.NET Remoting 为我们在.NET平台下提供了非常好的解决方案(我个人认为,.NET Remoting是.NET平台下最为成熟的分布式技术。
比如相较于另一个使用更为广泛的技术XML Web Service,它具有一些自己独特的特性:可以使用不同的传输层协议进行通信——Http & TCP;可以使用不同的消息编码方式——Bianry & Text (XML);可以寄宿到IIS和任何一种托管的应用下——Console Application 、WinForm Application、Windows Service……;Server端可以通过双向通信回调(Callback)客户端的操作;……)XML Web Service为使我们实现跨平台的系统能够集成显得如此简单。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
</system.serviceModel> </configuration> 把该 App.config 文件放在与 WinForm 工程的根目录下 (与 Form1.cs 同一目录) , 还需要在 VS 中将该文件加入到工程中。
添加 Button 控件的处理函数:
private void button1_Click(object sender, EventArgs e) { System.ServiceModel.ServiceHost host = new System.ServiceModel.ServiceHost(typeof(WcfService1.Service1)); host.Open(); bel1.Text = "opened"; }
public interface IService1 { [OperationContract] string GetData(int value);
[OperationContract] CompositeType GetDataUsingDataContract(CompositeType composite); // TODO: Add your service operations here } // Use a data contract as illustrated in the sample below to add composite types to service operations. [DataContract] public class CompositeType { bool boolValue = true; string stringValue = "Hello "; [DataMember] public bool BoolValue { get { return boolValue; } set { boolValue = value; } }
不需要编辑任务文件,直接编译生成,得到一个 WcfService1.dll 文件
二、WCF 应用中的契约(Contract)
在生成的 WCF 工程中,IService1.cs 中为“契约(Contract)”(本例中契约和 服务放在同一个工程下了,实际上也可以分为两个工程),代码如下:
[ServiceContract]
if (composite == null) { throw new ArgumentNullException("composite"); } if (composite.BoolValue) { composite.StringValue += "Suffix"; } return composite; } }
可以看到, 这个 Service1 类实现了在契约中声明的 IService1 接口 (服务契约) , 也使用到了 CompositeType 类(数据契约);实现了 GetData 以及 GetDataUsingDataContract 这两个服务契约中功能,这些功能即为 WCF 服务允 许外部程序进行调用的功能。
ServiceReference1.Service1Client aa = new ServiceReference1.Service1Client(); MessageBox.Show(aa.GetData(2));
在工程中,添加对 System.ServiceModel 的引用,并添加对刚才生成的 WcfService1.dll 的引用,然后在 Form 上添加一个 Button 和一个 Label 控件, 如下图:
在 WinForm 工程中添加对要托管的 WCF 服务的描述,既可以通过代码实现,也可 以通过工具生成。本例在 VS2010 下,通过 Tools-WCF Service Configeration Editor 工具生成。 点开后,通过菜单的 File-New Config 新建一个描述文件,然后点击 Service 页面的 Create a New Service,弹出如下界面:
在 VS2010 里建立一个最简单的 WCF 服务,基本流程如下:
一:新建 WCF 应用
首先,新建一个 WCF 服务的应用(这里以 framework 4.0 为例),如下图所示,
建立完成之后,VS 将自动生成一个最简单的 WCF 工程,在这个应用中,包含了 最基本“契约(Contract)”以及“服务功能实现(Service)”. 工程如下:
完成这一步之后,接下来还有一些设置,我也不清楚用途,略去,最后点击 File-Save,生成一个 App.config 文件。这里把该文件贴上来: <?xml version="1.0" encoding="utf-8"?> <configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="NewBehavior0"> <serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8585/wcf1/metadata" /> </behavior> </serviceBehaviors> </behaviors> <services> <service behaviorConfiguration="NewBehavior0" name="WcfService1.Service1"> <endpoint address="" binding="basicHttpBinding" bindingConfiguration="" name="ep1" contract="WcfService1.IService1" /> <host> <baseAddresses> <add baseAddress="http://localhost:8585/wcf1" /> </baseAddresses> </host> </service> </services>
编译运行, 点击界面中的 Button 控件, 即可以将该 WCF 服务寄宿到该 Frm 中 (关 闭窗体后 WCF 服务结束)。
注: 如果运行时报这个错误 (HTTP could not register URL http://+:8585/wcf1/. Your process does not have access rights to this namespace),有可能是权限不足导致,需要使用管理 员权限运行。
点击 Browse...按钮, 选中刚才生成的 WcfService1.dll, 并选中其中的 Service1 服务,点击下一步,弹出如下界面:
这个界面中要选择使用的契约,默认即可,点击下一步,弹出如下界面:
这个界面中要选择使用的网络通讯协议,选择最通用的 HTTP 协议,并在下一个 界面中选择基本的 Http 服务(Basic WebService interoperablitity), 在接下来的界面中,输入访问地址,其它程序可以通过这个地址来访问本 WCF 服务。
[DataMember] public string StringValue { get { return stringValue; } set { stringValue = value; } } }
可以看到,声明了服务契约 IService1,以接口形式声明,其中还包括两个操作 契约 GetData 以及 GetDataUsingDataContract。还声明了数据契约 CompositeType, 以类的形式声明, 包含两个数据成员 BoolValue 和 StringValue。
三、WCF 应用中的服务功能实现(Service)
在生成的 WCF 应用中,Service1.svc.cs 中为“服务功能实现(Service)”(本 例中契约和服务放在同一个工程下了,实际上也可以分为两个工程),代码如下 (Service1.svc 还有其它作用,后面再说):
public class Service1 : IService1 { public string GetData(int value) { return string.Format("You entered: {0}", value); } public CompositeType GetDataUsingDataContract(CompositeType composite) {
四、寄宿(Host)WCF 服务
有 2 种常见的寄宿方式: 1)一种是为一组 WCF 服务创建一个托管的应用程序,通过手 工启动程序的方式对服务进行寄宿, 所有的托管的应用程序均可作为 WCF 服务的 宿主,比如 Console 应用、Windows Forms 应用和 应用等,我们把这种 方式的服务寄宿方式称为自我寄宿(Self Hosting)。 2)另一种则是通过操作系统现有的进程激活方式为 WCF 服务 提过宿主,Windows 下的进程激活手段包括 IIS、Windows Service 或者 WAS (Windows Process Activation Service)等 无论采用哪种寄宿方式, 在为某个服务创建 ServiceHost 的过程中,WCF 框架内 部会执行一系列的操作,其中最重要的步骤就是为服务创建服务描述(Service Description) 本例以第一种为例,建立一个 WinForm 应用作为托管程序,在 VS2010 中,建立 一个普通的 WinForm 程序(以 frameword4.0 为例),如下图: