日期:2014-06-10 浏览次数:20551 次
最近买了一本书WCF服务编程,重头再开始了解学习WCF,现将学习记录,以便后来复习,也希望和大家一起进步。
WCF用终结点表示一种组成关系,终结点就是地址、契约与绑定的混合品,即 地址(Address)、契约(Contract)、绑定(Binding)。
以一个小例子来,调通我们的第一个WCF程序。我学习就爱用Demo来学习,再深入一步一步学习。
我用的vs2012,新建WCF服务应用程序
运行后显示
这是WCF的服务端,我们先不做处理,下面我们添加WCF客户端,我们添加一个普通的控制台程序
添加服务引用:
客户端要调用服务的操作,客户端首先要导入服务契约到客户端的本地描述中。如果客户端使用了WCF,调用操作常见的做法就是使用代理。代理就是一个CLR类,它公开了一个单独的CLR接口用于表示服务契约。
我们创建我们的代理
namespace ConsoleApplication1 { class MyContractClient : ClientBase<ServiceReference1.IService1>, ServiceReference1.IService1 { public MyContractClient() { } public MyContractClient(string endpointName) : base(endpointName) { } public string GetData(int value) { return Channel.GetData(value); } public ServiceReference1.CompositeType GetDataUsingDataContract(ServiceReference1.CompositeType composite) { throw new NotImplementedException(); } public Task<string> GetDataAsync(int value) { throw new NotImplementedException(); } public Task<ServiceReference1.CompositeType> GetDataUsingDataContractAsync(ServiceReference1.CompositeType composite) { throw new NotImplementedException(); } } }
该类继承与ClientBase,需添加对using System.ServiceModel的引用。
客户端和服务端的契约和绑定要保持一致,不然会报错,我们更改服务端配置文件,修改绑定
修改客户端配置文件
服务端和客户端都使用basicHttpBinding绑定,最后我们在Program启动类中添加调用代码:
class Program { static void Main(string[] args) { using (MyContractClient client = new MyContractClient()) { string result = client.GetData(3); Console.WriteLine(result); } } }
运行后就调用了服务端方法,并返回值,服务端的GetData方法为
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Service1”。 // 注意: 为了启动 WCF 测试客户端以测试此服务,请在解决方案资源管理器中选择 Service1.svc 或 Service1.svc.cs,然后开始调试。 public class Service1 : IService1 { public string GetData(int value) { return string.Format("You entered: {0}", value); } public CompositeType GetDataUsingDataContract(CompositeType composite) { if (composite == null) { throw new ArgumentNullException("composite"); } if (composite.BoolValue) { composite.StringValue += "Suffix"; } return composite; } }
所以客户端调用结果为
以上就是我创建的WCF小例子,希望对新手有所帮助