您所在的位置:开发 > 语言&工具 > WCF体验之旅(1):创建一个简单的WCF程序(4)

WCF体验之旅(1):创建一个简单的WCF程序(4)

2008-03-05 17:19 张逸 Artech 我要评论(0) 字号:T | T
一键收藏,随时查看,分享好友!

我们知道,和一个相对独立的应用不同,我们开发一个分布式应用, 尤其是开发一个企业级的分布式应用, 我们需要考虑较多的东西。

AD:

在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】

内容导航

网友评论TOP5

查看所有评论(

提交评论

  1. 专题:JVM编程语言,你的选择?
  2. 宅男程序员给老婆课程之11:域模型

文章排行

本月本周24小时

热点专题

更多>>

读书

循序渐进Oracle——数据库管理、优化与备份恢复
本书从基础知识入手,详细讨论了Oracle数据库的创建、OEM及iSQL*Plus等工具的使用、Oracle的字符集知识、用户的创建与管理、表空

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 移动互联网生活门户 灵客风LinkPhone