1.什么是WCF
Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。是Windows平台上开发分布式应用最佳的实践方式。
2.WCF基本概念
地址:定义服务的地址
绑定:定义服务的通讯方式(传输协议、编码方案)
契约:定义服务的具体实现
终结点:由地址、绑定和契约共同构成一个终结点,服务器通过终结点向客户端公开服务,客户端通过终结点调用服务。
【服务提供端】
下面通过简单的服务实例来了解WCF?
1.首先新建一个项目,然后新建一个类库【IBLL】,在类库中新建一个接口【IUserInfoService】。并添加【System.ServiceMode】引用。
[ServiceContract]//服务契约(仅仅对类、接口) public interface IUserinfoService { //这个契约相当于webService中的WebMethod [OperationContract]//操作契约 int Add(int a, int b); }
2.然后在新建一个类库,并新建一个类【UserInfoService】,这个类添加子【IBLL】的引用。这个类实现【IUserInfoService】接口。
public class UserInfoService: IUserinfoService { public int Add(int a,int b) { return a + b; } }
3.新建一个【控制台应用程序】,命名为【Host】。
4.然后在【App.config】中进行配置。
server节点中的name是具体服务的实现,我们具体服务的实现时BLL层中的UserInfoService。还需要在baseAddress中配置服务的地址。最后配置服务的契约,在contract属性中配置服务契约,契约是IBLL层中的IuserInfoService接口契约。如果过需要配置多个服务,在services节点中继续配置service节点即可。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <!--name:具体服务的实现 behaviorConfiguration:服务行为的配置 --> <service name="BLL.UserInfoService" behaviorConfiguration="behaviorConfiguration"> <host> <baseAddresses> <!--服务的地址--> <add baseAddress="http://localhost:8000/"/> </baseAddresses> </host> <!--服务契约--> <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserinfoService"></endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="behaviorConfiguration"> <serviceMetadata httpGetEnabled="true"/> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
5.在【Program.cs】的Main函数中编写代码,在这里也需要添加对ServiceModel的引用。
using (ServiceHost host=new ServiceHost(typeof(BLL.UserInfoService))) { //打开服务 host.Open(); Console.WriteLine("服务打开成功!"); Console.ReadKey();
//关闭服务
host.close(); }
6.最后运行程序即可,只有程序运行客户端才能调用。
7.测试:如果控制器已经成功运行,我们可以打打开浏览器输入服务地址:【http://localhost:8000/】,浏览器中会打开我们的服务页面,如果能正常显示,说明我们的服务已经启动成功,客户端可通过该地址访问我们的服务了。我们将创建一个客户端来访问我们的服务。
【调用服务-客户端】:第一种方法
1.在同一个解决方案下,新建一个【控制台应用程序】,然后我们使用微软提供的Svcutil工具生成FirstService服务的客户端代理类。可以在菜单中找到【VS2015的MSBuild命令提示符】/【VS2015开发人员命令提示】等工具,以管理员身份运行。
2.跳转到我们需要在哪个文件加生成FirstService服务的客户端代理类。
切换到E盘:【e:】
切换目录:【cd: E:\面向服务通信技术\WCF_Server_1\WCF_Client】
然后输入以下命令:svcutil http://localhost:8000/?wsdl /o:userinfoServiceClientt.cs
(执行成功后,会在解决方案目录下生成两个文件:userinfoServiceClientt.cs 和 outout.config)
3.我们可以将上面的3个文件夹展开,系统就会将隐藏的文件给显示出来。
这时我们右击隐藏的文件,点击【包含在项目中】即可。
4.然后将这个当前自带的【App.config】的文件删除,将【output.config】文件重命名为【App.config】接口。我们需要在【WCF_Client】添加对ServiceModel的引用。最后在【Program.cs】中的Main函数写以下代码。
UserinfoServiceClient client = new UserinfoServiceClient(); Console.WriteLine(client.Add(10,20)); Console.ReadKey();
【调用服务-客户端】:第二种方法
这种方法跟WebService调用的方法一样~
1.在同一个解决方案下,新建一个【控制台应用程序】。然后添加【服务引用】
2.然后输入服务地址,点击转到,可以看到有以下服务【UserinfoService】。然后点击确定即可。
3.最后在【Program.cs】中的Main函数写以下代码。
ServiceReference.UserinfoServiceClient client = new ServiceReference.UserinfoServiceClient(); int sum=client.Add(10, 20); Console.WriteLine(sum.ToString()); Console.ReadKey();
4.最后运行测试即可