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

yizhihongxing

针对“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日

相关文章

  • 详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())

    当我们使用JavaScript来实现异步请求时,JQuery是非常方便的库之一。JQuery提供了一系列的Ajax函数以便我们发送、接收数据和处理响应。下面我们就来详细解读JQuery的各个Ajax函数。 $.get() $.get()函数用于向指定的URL发起GET请求。它需要提供的参数如下: url:(必须)用于发送请求的URL data:(可选)向服务…

    html 2023年5月30日
    00
  • PS怎么排版图文? ps文字排版的四个技巧

    以下是“PS怎么排版图文? ps文字排版的四个技巧”的完整攻略: PS怎么排版图文? ps文字排版的四个技巧 Photoshop是一款非常强大的图像处理软件,用户可以在软件中进行图像处理、图文排版等操作。下面是PS文字排版的四个技巧。 技巧1:选择合适的字体 在进行文字排版时,用户需要选择合适的字体,以便更好地表达自己的意图。用户可以根据自己的需求选择不同的…

    html 2023年5月18日
    00
  • edge浏览器怎么使用翻译功能? edge浏览器设置翻译网页的技巧

    以下是“Edge浏览器怎么使用翻译功能? Edge浏览器设置翻译网页的技巧”的完整攻略: Edge浏览器怎么使用翻译功能? Edge浏览器设置翻译网页的技巧 Edge浏览器内置了翻译功能,可以帮助用户快速翻译网页内容。下面是具体的操作步骤。 Edge浏览器使用翻译功能的步骤 打开Edge浏览器:用户需要打开Edge浏览器,进入需要翻译的网页。 点击翻译按钮:…

    html 2023年5月18日
    00
  • word怎么设计名片? word名片的制作方法

    以下是Word设计名片的完整攻略: 打开Word:首先,打开Microsoft Word软件。在Word中,您可以使用预设的名片模板或自定义名片模板来制作名片。 选择名片模板:在Word中,选择“文件”选项,然后选择“新建”选项。在“新建”页面中,选择“名片”选项,然后选择您需要的名片模板。如果您想自定义名片模板,请选择“空白文档”选项。 编辑名片内容:在选…

    html 2023年5月17日
    00
  • 深入分析XmlSerializer对象的Xml序列化与反序列化的示例详解

    深入分析XmlSerializer对象的Xml序列化与反序列化的示例详解可分为以下几个步骤: 1. 创建XmlSerializer对象 在进行Xml序列化或反序列化操作之前,我们需要先创建一个XmlSerializer对象。XmlSerializer对象是负责将对象序列化成XML格式或将XML格式反序列化成对象的核心类。创建XmlSerializer的方式很…

    html 2023年5月30日
    00
  • 深入PHP许愿墙模块功能分析

    深入PHP许愿墙模块功能分析 介绍 本篇攻略将深入分析PHP许愿墙模块的功能,并讲解如何在自己的网站中加入这个模块。PHP许愿墙是一款非常实用的应用程序,它可以让用户在页面上写下自己的心愿并与其他用户分享。它由以下几个部分组成: 用户界面 用户界面是指用户看到的网页,它由HTML和CSS构建。用户可以在页面上输入心愿并提交,也可以浏览其他用户发布的心愿。 数…

    html 2023年5月30日
    00
  • centos7怎么关闭ipv6仅使用ipv4?

    如果您需要在CentOS 7中关闭IPv6并仅使用IPv4,可以尝试以下解决方法: 解决方法1:修改sysctl.conf文件 打开终端,以root用户身份登录。 输入以下命令:vi /etc/sysctl.conf 在文件末尾添加以下两行代码: net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default…

    html 2023年5月17日
    00
  • 邮箱下载的word文档打开是乱码的解决办法

    这里是关于“邮箱下载的word文档打开是乱码的解决办法”的完整攻略,需要注意的是,本攻略需要在Windows操作系统环境下进行。 1.确定问题所在 当我们打开邮箱下载的Word文档时,如果显示的是乱码或者无法正常打开,很有可能是由于编码格式的问题导致的。这时候,我们就需要确定具体的问题出现在哪里。 1.1 查看编码格式 可以根据文档名后缀来判断它是哪一种文件…

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