zoukankan      html  css  js  c++  java
  • 学习 WCF (6)学习调用WCF服务的各种方法

    来自:http://www.cnblogs.com/gaoweipeng/archive/2009/07/26/1528263.html

    根据不同的情况,我们可以用不同的方法调用WCF服务,本文简单总结了一下调用WCF的一些方法(代理类,Ajax...),分享给大家。

    开发工具调用WCF

    这中方法很方便也很简单,很多工作VS就帮我们完成了。相信大家也不会对这种方法陌生。这里简单提一下。打开VS,在项目中添加服务引用:

    在config中自动声明了有关服务的节点信息,这样VS就创建了调用服务的代理:

    ServiceReference1.Service1Client poxy = new ServiceReference1.Service1Client();
    poxy.服务中相应的方法。


    C#动态调用WCF

    这个方法比较实用,可以通过工具或代码生成代理类Proxy.cs,来和WCF进行交互。不需要人为的手动进行服务的引用。生成代理类,这里我里用了工具:SvcUtil.exe,没有的朋友可以下载:SvcUtil.rar
    使用方法很简单,只需将SvcUtil.exe随便放置一个位置(这里放在C:/新建文件夹)。在命令提示行中输入如下指令:

    这里要注意的是SvcUtil.exe后面是服务的地址,会在工具所在的目录下生成代理类文件:


    工具会给我们生成一个代理类文件,代码如下:

    Code

    把这个代理类考到客户端程序就可以对WCF进行调用了,这里建议大家用工具生成,自己手写可能会出现错误,生成后如果做稍许的改动,都可能造成错误,影响到信道数据的传输。(但是这里说明一下:这个工具在xp下使用没问题,但是在2003下使用会有问题,不知是不是我2003统的问题)
    停在这里就不动了,不知为啥。
    大家这里可能会想到用代码生成代理类的方法,但是我试了几次没有成功,文件生成了但是没有内容。不知道为什么。高手指点。
    有了这个代理类,工作就好做啦!通过这个代理类就可以调用WCF了。

    Code

    这样,如果多个服务的方法相同,只是address不同(分布在不同的服务器)。这样的调用是很不错的选择!
    除此之外,我们可以采用通道工厂的方式生成客户端服务对象实例,但是前提还是需要上面生成的代理类的帮助。大家可以参看大牛Robin的文章(下面有链接)。

    ASP.NET AJAX调用WCF

    利用ASP.NET AJAX调用WCF:

    我们新建网站一个工程,在其添加启用了Ajax的WCF服务。这样配置文件中会自动的为我们添加关键的节点。

    服务中我只是简单的声明了一个方法:

    Code

    在浏览器中预览我们的服务,然后在地址后加上/js。这样就可以生成用来访问WCF的js代理。

    生成js代码
    再来看一下前台页面中的代码:

    Code

    将ScriptManager中的<script>的path设定为刚生成的js文件。这样,脚本中声明的方法就可以调用WCF的方法了。运行一下:

    这样就实现了ASP.NET AJAX对WCF的调用。

    JS(jQuery)调用WCF

    这里实现的思想和ASP.NET Ajax的有些类似,只不过有一些工作需要我们自己来完成,并且这个方法很灵活。
    首先是WCF上:我们要在类和方法前进行如下的声明:

    Code

    接着就是配置文件

    Code

    <behavior name="AllenBehavior"><enableWebScript /></behavior>
    准备工作做好后就可以前台调用了:

    Code

    这里的一些注意事项大家可以但看dudu的文章(下面有链接)。这样,我们就可以利用jQuery调用wcf了。


    小结:以上就是调用WCF的一些方法,希望对大家学习WCF有帮助。也希望大家分享其他调WCF的方法。

    参考学习资料:

    Robin:http://www.cnblogs.com/jillzhang/archive/2008/07/26/1252171.html
    dudu:http://www.cnblogs.com/dudu/archive/2009/07/14/1523082.html
    liulun:http://www.cnblogs.com/liulun/articles/1425382.html

  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/love828/p/2610329.html
Copyright © 2011-2022 走看看