您的位置:首页 > 理论基础 > 计算机网络

C#中发送HttpPost请求来调用WebService

2015-07-20 08:37 681 查看
一、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/HelloWorld.asmx";  //服务
try
{
service += "/HelloWorld2";  //Hello 表示方法名
string postData = "username=" + username; //表示传递的参数
//  byte[] dataArray = Convert.FromBase64String(postData);
System.Text.Encoding encode = System.Text.Encoding.UTF8;
byte[] dataArray = encode.GetBytes(postData);//将参数转换为字节数组
HttpWebRequest request =(HttpWebRequest) HttpWebRequest.Create(service); //获取请求

request.Method = "POST";
request.ContentLength = dataArray.Length;
request.ContentType = "application/x-www-form-urlencoded";
Stream dataStream = request.GetRequestStream();  //获取输入流
dataStream.Write(dataArray, 0, dataArray.Length);  //写入数据
dataStream.Close();
string res = string.Empty;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//获取响应
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);//获取输出流
res = reader.ReadToEnd();
reader.Close();
Console.writeline(res);
}
catch (Exception ex)
{

}
}


二、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
........
........

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: