zoukankan      html  css  js  c++  java
  • C#发送HttpPost请求调用WebService

    一、Webservice调用的三种方式:

    Webservice调用1:浏览器中输入以下URL,然后再返回的页面输入参数,提交实现调用
    http://localhost/WebService/MyService.asmx?op=MyAction

    Webservice调用2:html中通过表单提交来实现调用

    <form id="form1" runat="server" action="http://10.15.223.56/WebService/MyService.asmx/MyAction">
      <input type="text" name="strXml" value="<a ObjID=\"9\"></a>" /> 
      <input type="text" name="strData" value="ContactSign|990011|我的数据" />
      <input type="submit" value="Send" />
    </form>

    Webservice调用3:在C#中发送HttpPost请求来调用WebService中的MyAction方法,代码如下:

            void UpdateContactSign()
            {
               string ServerPage ="http://localhost/WebService/MyService.asmx";
                try
                {
                    //ServerPage += "?op=TangramAction";
                    ServerPage += "/MyAction";//MyAction是WebService中的方法
                  string strXml="<a ObjID=\"9\"></a>",;//第一个参数
                  string strData="ContactSign|990011|我的数据";//第二个参数
                   string res = HttpConnectToServer(ServerPage, strXml, strData);
                    //MessageBox.Show(res);
                }
                catch (Exception ex)
                {
                    
                }
            }
    
            //发送消息到服务器
            public string HttpConnectToServer(string ServerPage,string strXml,string strData)
            {
                string postData = "strXml=" + strXml+"&strData="+strData;
    
                byte[] dataArray = Encoding.Default.GetBytes(postData);
                //创建请求
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(ServerPage);
                request.Method = "POST";
                request.ContentLength = dataArray.Length;
                request.ContentType = "application/x-www-form-urlencoded";
                //创建输入流
                Stream dataStream = null;
                try
                {
                    dataStream = request.GetRequestStream();
                }
                catch (Exception)
                {
                    return null;//连接服务器失败
                }
    
                //发送请求
                dataStream.Write(dataArray, 0, dataArray.Length);
                dataStream.Close();
                //读取返回消息
                string res = string.Empty;
                try
                {
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                    res = reader.ReadToEnd();
                    reader.Close();
                }
                catch (Exception ex)
                {
                    return null;//连接服务器失败
                }
                return res;
            }  

    二、C#中发送HttpPost请求参数传值的中文乱码处理:

    1.客户端参数Base64编码处理  在给postData赋值之前,先对 strData进行Base64编码处理,注意加号(’+‘)的替换处理,否则由于加号经过Url传递后变成空格而得不到合法的Base64字符串,修改代码如下:

         //发送消息到服务器
            public string HttpConnectToServer(string ServerPage,string strXml,string strData)
            {
                //Base64编码 处理中文乱码
                byte[] buffer = Encoding.Default.GetBytes(strData);
                string Base64StrData = Convert.ToBase64String(buffer).Replace("+", "%2B");//处理加号
    
                string postData = "strXml=" + strXml+"&strData="+Base64StrData;
    
                byte[] dataArray = Encoding.Default.GetBytes(postData);
    
                //创建请求
            .......
            .......
           return res;
        }

    2.服务端获取到数据后,先解码再使用。解码的代码如下:

            public string MyAction(string strXml, string strData)
            {
                //Base64解码
                byte[] buffer = Convert.FromBase64String(strData);
                string Data = Encoding.Default.GetString(buffer);
               
               //方法实现部分代码中凡用到strData的地方 改为使用解码后的Data 
                ........
                ........
        
          }        
  • 相关阅读:
    『华为』[行业要闻]华为,我们的光环还能顶多久(转)
    总结几点Quartz的经验
    LVS
    postfix邮件服务器安全
    让IE浏览器支持RGBA颜色
    PostgreSQL在何处处理 sql查询之六十四
    PostgreSQL在何处处理 sql查询之六十三
    PostgreSQL在何处处理 sql查询之六十五
    对PostgreSQL的prepared statement 的理解
    PostgreSQL在何处处理 sql查询之六十六
  • 原文地址:https://www.cnblogs.com/Extreme/p/2947167.html
Copyright © 2011-2022 走看看