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();
}

运行后结果如下:
在这里插入图片描述
第二种是引用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的三种常用方法。

  • 4
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C#调用WebService三种方式:直接引用、引用wsdl和soap请求。如果开发者可以直接访问到webservice,可以使用直接引用的方式。在Visual Studio中,可以通过添加服务引用来直接引用webservice,系统会自动生成引用代码。然后可以实例化引用的webservice对象来使用。\[2\] 如果无法直接访问webservice,可以使用引用wsdl文件的方式。首先需要获取webservice的wsdl文件,可以通过浏览器打开webservice服务,然后查看服务说明,这就是整个wsdl的内容。将wsdl文件保存为文本文件,然后将后缀名改为wsdl。在Visual Studio中,同样可以通过添加服务引用来引用wsdl文件,将wsdl文件的路径输入到URL中即可。然后可以实例化引用的webservice对象来使用。\[3\] 最后一种方式是使用SOAP请求来调用webservice。这种方式适用于无法直接引用webservice或wsdl文件的情况。可以使用HttpPost请求来发送SOAP请求,并解析返回的SOAP响应。这种方式需要手动构建SOAP请求和解析SOAP响应,相对复杂一些。 总结起来,C#调用webservice可以通过直接引用、引用wsdl和soap请求三种方式来实现。具体选择哪种方式取决于开发者的需求和情况。 #### 引用[.reference_title] - *1* [【C#调用 webservice三种方法总结](https://blog.csdn.net/weixin_44231544/article/details/124922474)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [C#调用WebService三种方式](https://blog.csdn.net/m0_43398336/article/details/105082177)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值