一、WCF服务介绍:
1. WCF的全名称是:Windows Communication Foundation.开发代号Indigo.WCF是作为.Net Framework3.0的一个组件发布出来的,也就是说.Net Framework对其提供了原生的支持。从命名中不难看出微软对WCF所寄予的厚望:将WCF打造成为Windows平台下唯一的通信基础框架。通过合理利用上面这些分布式技术完全可以创建一个完美的,能够使用不同层次需求的分布式应用。但是,这些单一的技术和产品专注于某一特定的领域,并且具有完全不同的应用编程接口(API),这使得开发人员很难从容地从其中一种转移到另一种上去。基于这样.Net Remoting.的原因,急需一种全新的通信框架来整合以上这些技术,这就是WCF需要完成的使命。WCF是Windows平台下各种分布式技术的集大成者,它将上述的这些通信技术完全整合在一起,提供了一套统一的API。
2. wcf 与webservice服务优缺点介绍,wcf可以布置在IIS,控制台,winform,asp等等上都可以,但是web service服务只能布置在IIS上.
二、 WCF使用
1. 引用system. serviceModel
新建一个接口:必须加上特性标签,具体如下
namespace IBLL { //接口上必须加该特性标签:服务契约,就是对外提供一个服务 [ServiceContract] public interface IUserInfoService { //设置是操作契约 [OperationContract] int Add(int a, int b); } }
新建一个类,实现上面接口
namespace BLL { public class UserInfoService:IUserInfoService { public int Add(int a, int b) { return a + b; } } }
部署在控制台程序上。
新建一个控制台应用程序,修改配置文件如下
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.serviceModel> <services> <!--服务的名字 还有设置可以以get的形式请求服务--> <service name="BLL.UserInfoService" behaviorConfiguration="behaviorConfiguration"> <host> <baseAddresses> <!--服务地址--> <add baseAddress="http://localhost:8000/"/> </baseAddresses> </host> <!--服务契约--> <endpoint address="" binding="basicHttpBinding" contract="IBLL.IUserInfoService"></endpoint> </service> <!--如果有多个服务契约,添加配置,此处只有一个,所以注释掉就可以--> <!--<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>
控制台端需要添加引用文件:system.serviceModel。
namespace Host { class Program { static void Main(string[] args) { //此处需要传递一个服务的名字 using (ServiceHost host = new ServiceHost(typeof(BLL.UserInfoService))) { host.Open(); Console.ReadKey(); } } } }
客户端调用WCF服务的第一种方式:通过Visual Studio 命令提示(2013) 定位到客户端的位置,然后通过svcutil http://localhost:8000/?wsdl/o:FirstServiceClient.cs 来生成客户端代理类。
定位到客户端地址:如下路径,"C:UserswangjDesktop新建 Microsoft Office Word 文档 (3).docx"
示例命令如下:cd C:UserswangjDesktop新建 Microsoft Office Word 文档 (3).docx
再输入命令:vcutil http://localhost:8000/?wsdl/o:FirstServiceClient.cs ,其中的first需要换掉。
运行之后就会生成两个文件:右击设置包括在项目当中,但是要注意该处因为定义了自己的接口,所以,需要把UserInfoServiceClient.cs文件中相关继承接口的内容注释掉。
然后就可以按照web service一样的调用方法。
namespace Client { class Program { static void Main(string[] args) { UserInfoServiceClient client = new UserInfoServiceClient(); int sum=client.Add(3, 6); Console.WriteLine(sum.ToString()); Console.ReadKey(); } } }
三、但是以上方法不太方便快捷,最简单的方法还是和web service一样的使用方法。
1. 右击添加服务引用
2.
3. 使用
namespace Client2 { class Program { static void Main(string[] args) { ServiceReference1.UserInfoServiceClient client = new ServiceReference1.UserInfoServiceClient(); int sum = client.Add(3, 6); Console.WriteLine(sum.ToString()); Console.ReadKey(); } } }