在System。Service。Model 命名空间里,定义了一个类abstract class ClientBase,给我们调用Service提供极大的便利。我们只要是我们的Client继承这样一个类,并为它指定Endpoint的三要素就一切OK了,下面我们来看看我们可以以那些方式来指定这些内容
1、Conract:我们看到了ClientBase是一个Generic的类,我们在创建一个继承自这个类的时候必须给它指定特定的TChannel.我们可以把Contract对应的类型作为Client的generic类型。
2、Binding和Address:和Service端的Endpoint一样,我们可以把相关的信息放在我们的Client端代码里面,也可以放在Client的Config里面。那个这些数据如何应用要我们创建的派生自ClientBase的类的对象上呢。其实很简单,ClientBase给我们定义了若干重载的构造函数,我们只要定义我们相应的构造函数应简单地调用基类的构造函数。下面列出了ClientBase定义的全部的构造函数。
protected ClientBase():这个构造函数没有任何的参数,它用于Endpoint的信息全部存放于Config
protected ClientBase(InstanceContext callbackInstance):指定一个Callback instance用于Service回调Client代码,这用Deplex Communication。
protected ClientBase(string EndpointConfigurationName):指定一个ID,它标识configuration 文件中定义的某一个Endpoint。这个方法在使用不同的Endpoint调用同一个Service的情况下用到的比较多。
ClientBase(Binding Binding, EndpointAddress remoteAddress);显示的指定Binding 和Address ClientBase(InstanceContext callbackInstance, string EndpointConfigurationName) ClientBase(string EndpointConfigurationName, EndpointAddress remoteAddress) ClientBase(string EndpointConfigurationName, string remoteAddress) ClientBase(InstanceContext callbackInstance, Binding Binding, EndpointAddress remoteAddress) ClientBase(InstanceContext callbackInstance, string EndpointConfigurationName, EndpointAddress remoteAddress) ClientBase(InstanceContext callbackInstance, string EndpointConfigurationName, string remoteAddress) 介绍完ClientBase后, 我们来创建我们自己的CalculatorClient。下面的相应的Code using System;
using System.Collections.Generic; using System.Text; using System.ServiceModel; using System.ServiceModel.Channels; using Artech.WCFService.Contract; namespace Artech.WCFService.Client { class CalculatorClient:ClientBase,ICalculator { internal CalculatorClient() : base() { } #region ICalculator Members public double Add(double x, double y) { return this.Channel.Add(x, y); } #endregion } }
|
上面的例子中我们仅仅定义了一个无参的构造函数,因为我们会把所有的Endpoint信息放在Config文件里面:
http://localhost:8080/WCFService/CalculatorService " Binding="basicHttpBinding" contract="Artech.WCFService. Contract.ICalculator" />
|
然后我们再Client Project中的Program class里面通过这样的方式调用CalculatorService;
using System; using System.Collections.Generic; using System.Text; using System.ServiceModel; using System.ServiceModel.Channels; using Artech.WCFService.Contract; namespace Artech.WCFService.Client { class Program { static void Main(string[] args) { try { using (CalculatorClient caluclator = new CalculatorClient()) { Console.WriteLine("Begin to invocate the calculator Service"); Console.WriteLine("x + y = {2} where x = {0} and y = {1}", 1, 2, caluclator.Add(1, 2)); Console.Read(); } } } catch (Exception ex) { Console.WriteLine("StackTrace:{0}", ex.StackTrace); Console.WriteLine("Message:{0}", ex.Message); Console.Read(); } } }
|
【相关文章】
【责任编辑:
碧海蓝天 TEL:(010)68476606】
(0票)
(0票)
(0票)
(0票)
(0票)
(0票)