针对“C#调用WebService实例与开发教程(推荐)”这个话题,下面是一份详细的攻略。
一、Web Service简介
Web Service是一种基于Web的远程接口标准,通过互联网进行通信,使异构的应用之间可以互相协作。它可以提供SOAP协议的基于XML语言的远程调用功能,是一种轻量级的、可互操作性的软件解决方案。
二、C#调用Web Service的方式
1. 使用Visual Studio自动生成
Visual Studio为C#开发者提供了基于Web Service描述语言(WSDL)自动生成代理类的功能,可大大简化Web Service的调用过程。
打开Visual Studio,打开Solution Explorer面板,右键单击项目并选择“添加服务引用”。在弹出的对话框中输入Web Service的地址(例如:http://localhost/MyService.asmx),然后单击“Go”按钮。一旦Web Service被识别,就会出现“服务引用名称”并自动生成代理类。
此时我们就可以像使用本地方法一样使用Web Service了。例如,我们可以在代码中通过以下方式调用Web Service中的方法:
// 引用Web Service代理类
MyService.MyWebService service = new MyService.MyWebService();
// 调用Web Service中的方法,获取字符串结果
string result = service.HelloWorld();
2. 使用SOAP协议进行调用
如果我们不想使用Visual Studio自动生成代理类的方式,而是手动编写代码来调用Web Service,我们可以使用SOAP协议的方式来实现。
首先,我们需要构造SOAP消息,具体可参考Web Service的WSDL文档获取方法名和参数等信息。然后,我们可以通过HttpWebRequest和HttpWebResponse等类来模拟HTTP请求和响应,向Web Service发送请求,并获取响应结果。以下是一个示例代码:
// 构造请求消息体
string requestXml = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>";
requestXml += "<soapenv:Header/>";
requestXml += "<soapenv:Body>";
requestXml += "<MyWebService xmlns='http://tempuri.org/'>";
requestXml += "<HelloWorld/>";
requestXml += "</MyWebService>";
requestXml += "</soapenv:Body>";
requestXml += "</soapenv:Envelope>";
// 构造HTTP请求对象
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/MyService.asmx");
request.Method = "POST";
request.ContentType = "text/xml;charset=UTF-8";
request.Accept = "text/xml";
request.Headers.Add("SOAPAction", "\"http://tempuri.org/HelloWorld\"");
Stream requestStream = request.GetRequestStream();
StreamWriter requestWriter = new StreamWriter(requestStream);
requestWriter.Write(requestXml);
requestWriter.Close();
// 获取HTTP响应对象
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader responseReader = new StreamReader(responseStream);
string responseXml = responseReader.ReadToEnd();
responseReader.Close();
responseStream.Close();
response.Close();
// 解析响应结果
XmlDocument responseDoc = new XmlDocument();
responseDoc.LoadXml(responseXml);
XmlNodeList resultNodeList = responseDoc.GetElementsByTagName("HelloWorldResult");
string result = resultNodeList[0].InnerText;
三、Web Service的开发教程
要实现一个Web Service,我们可以使用Visual Studio创建一个ASP.NET Web Application工程,选择Web Service模板,创建Web Service文件。在Web Service文件中定义需要提供的方法,并实现方法的逻辑。
以下是一个示例代码,演示了如何在Web Service中定义并实现HelloWorld方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
namespace MyWebService
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class MyService : System.Web.Services.WebService
{
[WebMethod]
public string HelloWorld()
{
return "Hello, world!";
}
}
}
在以上代码中,使用了AspNet提供的[WebService]、[WebServiceBinding]和[ToolboxItem]标签,分别用来定义WebService的基本属性、标准协议和在Visual Studio中的显示方式。在MyService类中,定义了一个名为HelloWorld的Web方法,返回字符串“Hello, world!”。
四、示例说明
以下是两条示例说明,详细讲述了如何调用Web Service并获得结果:
示例一:使用Visual Studio自动生成代理类
假设Web Service的地址是http://localhost/MyService.asmx,我们需要调用其中的HelloWorld方法。我们可以通过Visual Studio来自动生成代理类,并使用代理类中的方法来调用Web Service:
// 引用Web Service代理类
MyService.MyWebService service = new MyService.MyWebService();
// 调用Web Service中的方法,获取字符串结果
string result = service.HelloWorld();
Console.WriteLine(result);
示例二:手动构造SOAP消息
如果我们不想使用代理类,而是手动构造SOAP消息来调用Web Service,我们可以使用以下代码:
// 构造请求消息体
string requestXml = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>";
requestXml += "<soapenv:Header/>";
requestXml += "<soapenv:Body>";
requestXml += "<MyWebService xmlns='http://tempuri.org/'>";
requestXml += "<HelloWorld/>";
requestXml += "</MyWebService>";
requestXml += "</soapenv:Body>";
requestXml += "</soapenv:Envelope>";
// 构造HTTP请求对象
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/MyService.asmx");
request.Method = "POST";
request.ContentType = "text/xml;charset=UTF-8";
request.Accept = "text/xml";
request.Headers.Add("SOAPAction", "\"http://tempuri.org/HelloWorld\"");
Stream requestStream = request.GetRequestStream();
StreamWriter requestWriter = new StreamWriter(requestStream);
requestWriter.Write(requestXml);
requestWriter.Close();
// 获取HTTP响应对象
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader responseReader = new StreamReader(responseStream);
string responseXml = responseReader.ReadToEnd();
responseReader.Close();
responseStream.Close();
response.Close();
// 解析响应结果
XmlDocument responseDoc = new XmlDocument();
responseDoc.LoadXml(responseXml);
XmlNodeList resultNodeList = responseDoc.GetElementsByTagName("HelloWorldResult");
string result = resultNodeList[0].InnerText;
Console.WriteLine(result);
以上示例代码中,我们分别演示了使用Visual Studio自动生成代理类和手动构造SOAP消息两种方式来调用Web Service服务。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#调用WebService实例与开发教程(推荐) - Python技术站