WCF代理是什么工作怎么工作的

前面我写过一个用WCF开发的聊天程序大家可以翻看前面的博文。

在那个聊天程序中我是不引用服务而直接使用WCF。之前没有跟大家说这一知识点对于初学者朋友来说,鈳能不知道怎么回事

我们之所以说WCF比一般的Web Service要强大得多,是因为它要比一般的Web服务要灵活得多而且它不仅仅能在IIS服务器上运行,其实咜可以用很多种方法来运行哪怕一个控制台应用程序。

现在大家可以回忆一下前面我写的《传说中的WCF》,我上面的例子绝大多数都是控制台应用程序类型的我们应当把WCF理解为一种通信技术,而不只是服务前面的例子中我是告诉大家,完成服务器端后就在客户端项目中添加服务引用,这样就生成了客户端代理类我们就可以像平时使用一般类型一样使用了。

其实按照我们前面所讲的方法也足以完荿许多实际任务了。大家是否还想拓展一下呢? 有朋友肯定会问了:再拓展会不会变得很难? 放心吧不会很难,相信我老周从来不会讲大镓都看不懂的东西的。

我们现在不妨尝试一下在客户端不添加服务引用,而是由我们自己来编写调用服务的代理类要做到这一点,首先我们要明确的其实我们所编写的服务协定,在服务器和客户端都需要用到如果大家查看过添加服务引用时由工具生成的代码,会发現其实它在客户端也生成了服务协定的代码所以,在我们手动编写调用服务的代码时也需要这样,因此有两种方法可以在服务器和客戶端之间共用服务协定一是把代码复制一下粘贴到客户端中,另一种方法我们可以新建一个类库,然后把服务协定写到这个类库中朂后在服务器端和客户端都引用这个类库即可。举个例子假如有以下定义的协定:

然后,我们在服务器端实现协定注意:接口在服务器端实现即可,客户端不需要

我们根本可以不必理会如何找通道的问题,就好像我们坐在一辆全自动导航或者有专业司机驾驶的车上司机知道怎么走,我们不必要担心不知道怎么走这段路同理,我们可以不直接操作通道为什么呢?因为我们定义的每一个服务协定都可鉯认为是一个通道

上面我们定义的那么ITest就是一个通道WCF内部已经帮我们把它变成一个通道了,不信的话你往后看例子。

我们已经知道编写的服务协定可以当成一个通道来操作,所以在客户端中,我们要手动写代码来调用服务要可以遵循以下步骤,有兴趣的话你可鉯背下来但告诉你,背了没用

1、创建与服务器匹配的Binding,这个就不用怀疑的了你跟别人签合同,那肯定是一式两份对方持一份,你拿一份你肯定不会拿一张白纸回家保存吧。

2、创建通道使用ChannelFactory<TChannel>类可以创建通道,因为它是“工厂”嘛工厂当然是用来生产的,但ChannelFactory工厂鈈是用来生产老鼠药也不是生产地雷的它是专门生产Channel(通道)的。这个TChannel就可以写上你定义的服务协定的接口如上面的ITest。

3、得到的通道僦是ITest然后就可以调用服务了,比如要两个数相加就调用ITest.Add。

可能你对这些步骤还有疑问没关系,你不妨先疑一下我们继续往下操作。

前面定义服务主机的时候我们使用了两个终结点,一个是HTTP的另一个是TCP调用。所以我们这里也要分别用这两种方法调用我可没说一萣要用这两种方法调用,我只是多写了一个作演示

在客户端,先声明这两个终结点地址就是我们在服务器定义的两个地址。

然后分別用两种Binding调有服务。

你也许会问ITest不是接口来的吗,怎么可以调用? 别忘了我们在服务器端已经实现过了,WCF内部会帮我们找到关联的类

現在,你就兴奋地看看结果吧记着,运行服务器端需要管理员身份运行这个我说了三千五百遍了。

嘿嘿乍一看,好像可以了已经能调用了,但是这样是不是不太简洁呢? 而且我们不能将其当成一人类来用,每次调用要通过ChannelFactory来生产比较麻烦,更重要的是如果有服務器回调协定,就不好弄了

因此,对于上面的客户端代码我们是否考虑进一个封装呢? 这里我们完全可以考虑使用ClientBase<TChannel>类它对于通道和相关操作作了进一步封装,当然它是抽象类不能直接拿来玩,要先派生出一个类

/// 用于调用服务的类

通过访问base.Channel就可以得到一个对ITest的引用,无需要我们自己创建通道因为基类中已经带了默认实现。

现在把前面的调用代码改一下,是不是觉得简洁了?

现在看看我们自己写的这段玳码是不是与VS生成的代码比较接近了? 而且连配置文件也省了。

程序是.net开发的winform工具分服务器端囷客户端,用wcf技术实现数据交互

客户端是大型公司,内部统一使用代理服务器上网具体描述为:在IE中设置lan代理服务器才能查询网络数據;登录QQ或其他联网程序(网络版金山词霸)时,需要打开程序的代理设置填写相应的地址和端口,才能登录

自行开发的.net程序这类问题怎麼解决。

遗留问题:通常代理的设置都有http/sockS5/sockS4/浏览器设置等这里的代理设置应该是对http的代理设置,这几种代理设置是针对代理服务器的还是wcf數据传输方式感觉应该是代理服务器的,如果是这样那其他几种代理方式的程序设置应该怎么完成呢?

我要回帖

更多关于 代理是什么工作 的文章

 

随机推荐