WCF是MS对于WebService/Remoting/消息服务的整合.
这部分一定会在今后的网络环境中大展拳脚.因此我就来学习一下.
首先就是进入msdn的首页,发现首页改版了,清爽很多.内容索引做的更好了.
然后进入我想要找到的页面:http://msdn.microsoft.com/zh-cn/library/ms735119.aspx
首先浏览了一下概述,和我心中想的功能差不多.
接着就是入门教程.跟着MS的实例做了一个"快速入门",感觉挺爽的.以前觉得很难实现的客户端/服务器段交互变得很容易了.
WCF服务器端主要是:
定义服务-->实现服务-->配置服务
中间端:
承载服务-->运行服务
客户端:
创建客户端-->配置客户端-->使用客户端.
其中,比较难于理解的是"承载服务".承载服务的意思是说, wcf的服务可以发布为多种方式:如TCP/IIS/named Pipe等.而承载服务就是选择一种渠道来承载服务.
从编程的角度看,首先是建立一个console application, 是service. 这个Service. 然后运行起来这个Service,运行的方式肯定是command line了,运行的期间这个黑窗口不可以关. 这个时候,最神奇的是, 我们定义的服务可以通过http访问了,而http访问的地址在iis没有设置.
然后建立client的Console Application, 调用服务即可.
其实Client的代码多半也是靠SvcUtil.exe生成的.
===
代码:
client:
namespace Client { class Program { static void Main(string[] args) { EndpointAddress epAddress = new EndpointAddress("http://localhost:8000/ServiceModelSample/Service/CalculateService"); CalculaterClient client = new CalculaterClient(new WSHttpBinding(), epAddress); Console.WriteLine(client.Add(3, 4)); Console.WriteLine(client.Subtract(5, 3)); client.Close(); } } }
服务器端:
using System; using System.Collections.Generic; using System.Text; using System.ServiceModel; using System.ServiceModel.Description; namespace WCFTest.Service { [ServiceContract(Namespace = "http://WCFTest.Service")] public interface ICalculater { [OperationContract] int Add(int a, int b); [OperationContract] int Subtract(int a, int b); } class Program { static void Main(string[] args) { //基址 Uri baseAddres = new Uri("http://localhost:8000/ServiceModelSample/Service"); ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddres); try { //承载服务 selfHost.AddServiceEndpoint(typeof(ICalculater), new WSHttpBinding(), "CalculateService"); ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); smb.HttpGetEnabled = true; selfHost.Description.Behaviors.Add(smb); selfHost.Open(); Console.WriteLine("Service Begin..."); Console.WriteLine("Press to Stop Service"); Console.WriteLine(); Console.ReadLine(); selfHost.Close(); } catch (CommunicationException ex) { Console.WriteLine("An exception occured::" + ex.Message); selfHost.Abort(); } } } }