• WCF REST<2>: 消费WCF REST 服务


    在上一篇《WCF Rest<1> 搭建简单的WCF REST 服务》,中,我们已经搭建了一个WCF REST 服务,在本篇中,主要介绍,如何在WinForm程序和ASP.NET程序里消费此服务

    一、在ASP.NET中通过JQuery消费REST服务

    1、为了简化测试,不考虑跨域调用的问题,我们在原来的服务中添加一个ASPX文件,并在此文件中编写如下测试代码: 

    <body>
        <form id="form1" runat="server">
        <div>
            <input id="txtHelloWorld" type="text" /><br />
        <input type ="button" value ="helloworld" id="btn1"/>
            <input type="button" value="customers" id="btn2" />
        </div>
        </form>
        <script src="jquery-1.7.1.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function () {
                $("#btn1").click(function() {
                    var url = "http://localhost:5460/Customer/XMLService/HelloWorld";
                  
                    var value = $("#txtHelloWorld").val();
                    
                    var data = { "world": value };
                    var postData = JSON.stringify(data);
                  
                    $.ajax({
                        type: 'POST',
                        url: url,
                        data:postData,
                        dataType: "json",
                        contentType: "application/json",
                        success: function(result) {
                            alert(result);
                        },
                        error: function(error) {
                            alert(error);
                        }
                      
                    });
                }
                );
                $("#btn2").click(function () {
                    var value = $("#txtHelloWorld").val();
                    var url = "http://localhost:5460/Customer/XMLService/Customers/" + value;
                     
                    $.ajax({
                        type: 'GET',
                        url: url,
               
                        success: function (result) {
                            var t = JSON.stringify(result);
                            alert(t);
                        },
                        error: function (error) {
                            alert(error);
                        },
                        dataType: "json",
                        contentType: "application/json"
                    });
                }
              );
            });
    
          
        </script>
    </body>
    

      代码中可以看到,这里有两个按钮,一个用来测试GET的REST服务,一个用来测试POST的REST服务,这里注意的是,不够使GET还是POST,我们都设置了dataType为Json,contentType为application/json,而且在POST测试时,POST到服务器的data对象时json对象的字符串格式,而非原始JSON对象

         一切准备就绪,F5进入调试状态,出现如图界面:

    在文本框中输入任意字符,进行然后点击helloworld按钮进行POST测试:

    调用成功。 再次在文本框中输入任意字符,然后按customers按钮进行GET测试:

    GET方式调用也成功了。

    到这里,看似一切顺利,但为何上面有段文字我用红色标注了呢?多说无益,让我们来看看改成红色标注的那样,直接传送JSON格式的data对象会发生什么吧!

    看到没,出现了400 Bad Request错误,为何会出现这样的问题,为何会这样,不太懂,还希望有人可以指出。

    二、在WinForm中消费WCF REST 服务

     新增一个WinFrom项目,添加两个button,并对相应的click中编写GET和POST请求:

     #region Rest
    
            /// <summary>
            /// POST
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button3_Click(object sender, EventArgs e)
            {
                string serviceUrl = "http://localhost:5460/Customer/XMLService/HelloWorld";
                string temp = textBox1.Text.Trim();
                var httpClient = new HttpClient();
                var postData = "{\"world\":\"" + temp + "\"}";
                var webclient = new WebClient();
                webclient.Encoding = System.Text.Encoding.UTF8;
                webclient.Headers.Add("Content-Type", "application/json");
                string isSuccess = webclient.UploadString(serviceUrl, "POST", postData);
                MessageBox.Show(isSuccess);
            }
    
            /// <summary>
            /// GET
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button4_Click(object sender, EventArgs e)
            {
                string serviceUrl = "http://localhost:5460/Customer/XMLService/Customers/aaaa";
                var webclient = new WebClient();
                Uri uri = new Uri(serviceUrl, UriKind.Absolute);
                if (!webclient.IsBusy)
                {
                    webclient.Encoding = System.Text.Encoding.UTF8;
                    string json = webclient.DownloadString(uri);
                    MessageBox.Show(json);
                }
            }
    
            #endregion
    

      按F5进入调试,弹出如下的界面:

     

    在这里,我们点击REST方式下面的POST按钮来测试POST操作:

    调用成功,我们再来点击REST方式下的GET按钮来进行GET操作测试:

    在这里发现,GET操作也顺利完成。

    *细心的人也会发现,在这个测试窗口中,有REST方式测试和SOAP方式测试,主要是因为这个REST服务并非只是REST服务,它还同时暴露了一个basicHttpBinding的Soap服务,SOAP测试就是通过添加服务引用的方式进行调用,跟传统意义的WCF服务没有区别,故这里就不再啰嗦了。收工。

  • 相关阅读:
    漫谈程序员系列:咦,你也在混日子啊
    JVM加载class文件的原理机制
    maven编译的时候排除junit测试类
    mysql之——存储过程 + 游标 + 事务
    JSP页面之${fn:}内置函数
    生成24位字符串ID__IdGenerator.java
    oracle创建用户,表空间,虚拟路径,导入dbf
    eclipse手动修改默认工作空间
    资源
    http协议发送header+body+json及接收解析
  • 原文地址:https://www.cnblogs.com/liaotongquan/p/2990779.html
Copyright © 2020-2023  润新知