C#调用WebService实例与开发教程(推荐)

针对“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技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • js 加载并解析XML字符串的代码

    首先,要加载并解析XML字符串,需要使用JavaScript里的XML解析器(XML Parser)。XML解析器可以将XML代码解析为JavaScript对象,方便文档的访问和操作。 以下是使用XML解析器的代码示例: // 创建XML解析器 let parser = new DOMParser(); // 定义一个XML字符串 let xmlString…

    html 2023年5月30日
    00
  • 关于redis可视化工具读取数据乱码问题

    关于Redis可视化工具读取数据乱码问题,一般情况下是由于Redis中存储的数据类型和编码方式不匹配导致的。以下是完整的攻略,包含两条示例说明: 1. 确认Redis中存储的数据类型 要想正确地读取Redis中的数据,首先要确保Redis中存储的数据类型和我们在可视化工具中设置的数据类型一致。通常Redis支持五种数据类型: String:字符串类型; Ha…

    html 2023年5月31日
    00
  • itunes右键没有创建aac版本怎么办?如何解决?

    以下是“iTunes右键没有创建AAC版本怎么办?如何解决?”的完整攻略: iTunes右键没有创建AAC版本怎么办?如何解决? 如果您在iTunes中右键单击音频文件时没有“创建AAC版本”选项,您可以按照以下步骤进行操作: 检查iTunes设置:首先,您需要检查iTunes设置,确保“导入设置”中的“导入使用”选项设置为“AAC编码”。在iTunes中,…

    html 2023年5月18日
    00
  • xmlhttp 乱码 比较完整的解决方法 (UTF8,GB2312 编码 解码)

    下面是关于“xmlhttp 乱码 比较完整的解决方法”的攻略。 问题描述 在使用XMLHttpRequest对象进行请求时,有可能会出现中文乱码的问题,这是因为我们在使用XMLHttpRequest对象时,需要设置编码方式。 解决方法 1. 设置发送请求时的编码 设置XMLHttpRequest对象的charset属性为”UTF-8″,即可保证中文数据传输不…

    html 2023年5月30日
    00
  • 浏览器是怎样工作的 浏览器从头到尾的工作机制

    浏览器是我们在日常生活中经常使用的软件之一,能够实现向互联网发送请求,并获得响应,呈现出网页内容。那么,浏览器是如何工作的呢?接下来,我们将详细讲解浏览器从头到尾的工作机制。 前置条件 在讲解浏览器的工作机制之前,先介绍一下 HTML、CSS 和 JavaScript 这三者在浏览器中的作用: 1.HTML 负责定义网页中的内容以及结构;2.CSS 用于控制…

    html 2023年5月30日
    00
  • Mac Mysql数据库中文乱码问题解决

    下面是详细的“Mac Mysql数据库中文乱码问题解决”的攻略: 1. 问题描述 当我们在Mac上使用Mysql数据库时经常会遇到输入中文后乱码的情况,这给我们的工作和学习带来了一定的麻烦。下面是解决这个问题的方法。 2. 解决方法 在Mac上操作Mysql数据库乱码的解决方法有很多,这里介绍两种: 方法一:修改数据库字符集 在数据库连接中加入字符集,则在数…

    html 2023年5月31日
    00
  • C# 解析XML和反序列化的示例

    下面是“C# 解析XML和反序列化的示例”的完整攻略。 1. 简介 在 C# 中,解析 XML 和反序列化是非常常见的操作。本文将提供两个示例来演示如何完成这两个操作。 2. 解析XML 解析 XML 的核心是使用 .NET Framework 提供的 XmlDocument 类。这个类提供了许多方法来操作 XML。 XmlDocument xmlDoc =…

    html 2023年5月30日
    00
  • PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】

    PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】 本文介绍PHP读取XML文件的两种主要方法,分别是DOMDocument和simplexml,介绍并比较它们的使用。 DOMDocument方法 读取XML文件 使用DOMDocument方法可以读取XML文件,示例代码如下: <?php $xml = file_ge…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部