赞
踩
本文介绍WebService的三种调用方式,直接引用,引用wsdl和soap请求三种方式。
第一种是直接引用,这个适用于开发者可以直接访问到webservice的情况,直接引用会自动生成引用代码。
在引用->添加服务引用->高级->添加web引用,直接输入webservice地址点添加引用即可。
添加完成后会自动生成一个文件,这个文件就是我们引用的webservice。
接下来将引用的webservice实例化对象就可以使用了。
private localhost.WebService1 web = new localhost.WebService1();
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = web.GetMax(10,19).ToString();
}
运行后结果如下:
第二种是引用wsdl文件,这种适合开发者无法直接调用webservice的情况,直接引用其wsdl文件与直接引用webservice效果一样。wsdl是webservice的一种描述方式,用浏览器打开服务然后其服务说明就是整个wsdl的所有内容。
将以上文本全部复制到一个文本中,将后缀名改为wsdl即可。
有了wsdl后,其引用方式与webservice直接引用方式相同,引用->添加服务引用->高级->添加web引用,将其全路径输入到URL中即可;
使用方法与直接引用也一样;
private WebReference.WebService1 web2 = new WebReference.WebService1();
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = web2.GetMax(10,19).ToString();
}
第三种是soap请求的方式,通过查看被调用方案的soap格式如下:
POST /WebService1.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/GetMax"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetMax xmlns="http://tempuri.org/">
<num1>int</num1>
<num2>int</num2>
</GetMax>
</soap:Body>
</soap:Envelope>
我们利用System.Net.WebRequest进行请求:
private void Form1_Load(object sender, EventArgs e) { textBox1.Text = GetMax(20, 19); } private string GetMax(int num1,int num2) { string s = string.Empty; //构造soap请求信息 StringBuilder soap = new StringBuilder(); soap.Append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); soap.Append("<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"); soap.Append("<soap:Body>"); soap.Append("<GetMax xmlns=\"http://tempuri.org/\">"); soap.Append("<num1>"+num1+"</num1>"); soap.Append("<num2>"+num2+"</num2>"); soap.Append("</GetMax>"); soap.Append("</soap:Body>"); soap.Append("</soap:Envelope>"); byte[] paramBytes = Encoding.UTF8.GetBytes(soap.ToString()); //发起请求 Uri uri = new Uri("http://localhost:8000/WebService1.asmx"); WebRequest webRequest = WebRequest.Create(uri); webRequest.ContentType = "text/xml; charset=utf-8"; webRequest.Method = "POST"; webRequest.Headers.Add("SOAPAction", "http://tempuri.org/GetMax"); webRequest.ContentLength = paramBytes.Length; webRequest.Timeout = 10 * 1000; using (Stream requestStream = webRequest.GetRequestStream()) { requestStream.Write(paramBytes, 0, paramBytes.Length); } //响应 WebResponse webResponse = webRequest.GetResponse(); using (StreamReader myStreamReader = new StreamReader(webResponse.GetResponseStream(), Encoding.UTF8)) { s = myStreamReader.ReadToEnd(); } return s; }
请求结果如下,正确的返回了结果:
以上就是调用webservice的三种常用方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。