当前位置:   article > 正文

C#调用WebService的三种方式_c# 调用webservice

c# 调用webservice

本文介绍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();
}
  • 1
  • 2
  • 3
  • 4
  • 5

运行后结果如下:
在这里插入图片描述
第二种是引用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();
}
  • 1
  • 2
  • 3
  • 4
  • 5

第三种是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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

我们利用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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

请求结果如下,正确的返回了结果:
在这里插入图片描述
以上就是调用webservice的三种常用方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/596898
推荐阅读
  

闽ICP备14008679号