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 <enter></enter> to Stop Service");
Console.WriteLine();
Console.ReadLine();
selfHost.Close();
}
catch (CommunicationException ex)
{
Console.WriteLine("An exception occured::" + ex.Message);
selfHost.Abort();
}
}
}
}