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了。


    private void CreateClientInstanceByProxy(Binding bind, EndpointAddress address, string a, string b)
    {
         ISrchLib ws = new SrchLibClient(bind, address);//传入binding和服务的URI

         Repeater1.DataSource = ws.SelNoteBySql(a, b);//a,b是服务中方法的参数
         Repeater1.DataBind();
               
    }

    这样,如果多个服务的方法相同,只是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

    接着就是配置文件


    <system.serviceModel>
        <behaviors>
          <endpointBehaviors>
            <behavior name="AllenBehavior">
              <enableWebScript />
            </behavior>
          </endpointBehaviors>
        </behaviors>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
        <services>
          <service name="jqueryWCF.WCFservice">
            <endpoint address="" behaviorConfiguration="AllenBehavior" binding="webHttpBinding" contract="jqueryWCF.WCFservice" />
          </service>
        </services>
      </system.serviceModel>

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


    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>wcf</title>
    <script language="javascript" type="text/javascript" src="jquery.js"></script>
    <script language="javascript" type="text/javascript">
    function sayhello(){
        var name = $("#name").val();
        $.ajax({
            type: 'post',
            url: '/WCFservice.svc/SayHello',
            contentType: 'text/json',
            data: '{"name":"'+name+'"}',
            success: function(msg) {
            var a = eval('('+msg+')');
            if(String(a.d).length>0){alert(a.d);}
            else{alert("服务器超时");}
            }
        });
        }
    </script>
    <style type="text/css">
    #content{height: 181px; 549px;}
    #title{ 544px;}
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            name:<input type="text" id="name" />
            <br />
        <input type="button"  value="hello" onclick="sayhello();" />
        </div>
        </form>
    </body>
    </html>

    这里的一些注意事项大家可以但看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

  • 相关阅读:
    SQL 连接
    nvl() 数值替换函数 oracle使用
    Oracle 中sql语句中的取前n条数据
    设置序列
    Oracle创建用户 创建表空间 分配权限
    oracle11 刚刚安装后提示invalid username password logon denied
    关于index 索引
    事物
    数据库 oracle 设计三范式
    TXT编写程序-编译-执行流程
  • 原文地址:https://www.cnblogs.com/msdynax/p/3936415.html
Copyright © 2011-2022 走看看