C# .Net动态调用webService实现思路及代码

C# .Net动态调用webService实现思路及代码攻略

在 C# .Net 中,可以使用动态调用的方式调用 webService。本攻略将介绍如何使用 C# .Net 动态调用 webService 的实现思路及代码。

实现思路

使用 C# .Net 动态调用 webService 的实现思路如下:

  1. 创建一个代理类。

  2. 使用代理类调用 webService。

代码实现

以下是使用 C# .Net 动态调用 webService 的代码实现:

using System;
using System.Net;
using System.Reflection;
using System.Web.Services.Description;
using System.Xml.Serialization;

public class WebServiceCaller
{
    public static object CallWebService(string url, string methodName, object[] args)
    {
        var webServiceAssembly = Assembly.GetExecutingAssembly();
        var webServiceType = GetWebServiceType(url, webServiceAssembly);
        var webServiceInstance = Activator.CreateInstance(webServiceType);
        var methodInfo = webServiceType.GetMethod(methodName);
        var result = methodInfo.Invoke(webServiceInstance, args);
        return result;
    }

    private static Type GetWebServiceType(string url, Assembly webServiceAssembly)
    {
        var webRequest = WebRequest.Create(url + "?wsdl");
        var webResponse = webRequest.GetResponse();
        var webServiceDescription = ServiceDescription.Read(webResponse.GetResponseStream());
        var webServiceDescriptionImporter = new ServiceDescriptionImporter();
        webServiceDescriptionImporter.AddServiceDescription(webServiceDescription, null, null);
        var codeNamespace = new CodeNamespace();
        var codeCompileUnit = new CodeCompileUnit();
        codeCompileUnit.Namespaces.Add(codeNamespace);
        webServiceDescriptionImporter.Import(codeNamespace, codeCompileUnit);
        var codeProvider = CodeDomProvider.CreateProvider("CSharp");
        var assemblyReferences = new[]
        {
            "System.dll",
            "System.Web.Services.dll",
            "System.Web.dll",
            "System.Xml.dll",
            "System.Data.dll"
        };
        var compilerParameters = new CompilerParameters(assemblyReferences);
        var compilerResults = codeProvider.CompileAssemblyFromDom(compilerParameters, codeCompileUnit);
        var webServiceType = compilerResults.CompiledAssembly.GetTypes()[0];
        return webServiceType;
    }
}

在上面的代码中,我们创建了一个名为 WebServiceCaller 的类,并在其中添加了一个名为 CallWebService 的方法。在 CallWebService 方法中,我们使用动态调用的方式调用 webService。

示例说明

以下是两个示例,演示如何使用 C# .Net 动态调用 webService。

示例1:调用 HelloWorld 方法

以下是调用 HelloWorld 方法的步骤:

  1. 创建一个 webService。

可以使用以下代码创建一个名为 HelloWorld 的 webService:

using System.Web.Services;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class HelloWorld : WebService
{
    [WebMethod]
    public string HelloWorldMethod(string name)
    {
        return "Hello, " + name + "!";
    }
}

在上面的代码中,我们创建了一个名为 HelloWorld 的 webService,并在其中添加了一个名为 HelloWorldMethod 的方法。

  1. 调用 HelloWorld 方法。

可以使用以下代码调用 HelloWorldMethod 方法:

var url = "http://localhost:8080/HelloWorld.asmx";
var methodName = "HelloWorldMethod";
var args = new object[] { "world" };
var result = WebServiceCaller.CallWebService(url, methodName, args);
Console.WriteLine(result);

在上面的代码中,我们使用 WebServiceCaller.CallWebService() 方法调用 HelloWorldMethod 方法,并将结果输出到控制台。

示例2:调用 GetWeather 方法

以下是调用 GetWeather 方法的步骤:

  1. 创建一个 webService。

可以使用以下代码创建一个名为 WeatherService 的 webService:

using System.Web.Services;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WeatherService : WebService
{
    [WebMethod]
    public string GetWeather(string city)
    {
        return "The weather in " + city + " is sunny.";
    }
}

在上面的代码中,我们创建了一个名为 WeatherService 的 webService,并在其中添加了一个名为 GetWeather 的方法。

  1. 调用 GetWeather 方法。

可以使用以下代码调用 GetWeather 方法:

var url = "http://localhost:8080/WeatherService.asmx";
var methodName = "GetWeather";
var args = new object[] { "New York" };
var result = WebServiceCaller.CallWebService(url, methodName, args);
Console.WriteLine(result);

在上面的代码中,我们使用 WebServiceCaller.CallWebService() 方法调用 GetWeather 方法,并将结果输出到控制台。

结论

本攻略介绍了如何使用 C# .Net 动态调用 webService 的实现思路及代码,并提供了两个示例说明。我们提供了详细的步骤和示例说明,以帮助您快速了解和使用这些方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# .Net动态调用webService实现思路及代码 - Python技术站

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

相关文章

  • 武装你的WEBAPI-OData Versioning

    本文属于OData系列 目录 武装你的WEBAPI-OData入门 武装你的WEBAPI-OData便捷查询 武装你的WEBAPI-OData分页查询 武装你的WEBAPI-OData资源更新Delta 武装你的WEBAPI-OData之EDM 武装你的WEBAPI-OData常见问题 武装你的WEBAPI-OData使用Endpoint 武装你的WEBAP…

    C# 2023年5月5日
    00
  • C#使用随机数编写班级点名器的示例代码

    C#使用随机数编写班级点名器的示例代码非常适合初学者练习,下面我会详细讲解一下完整攻略。 第一步:创建一个C#控制台应用程序 首先需要创建一个C#控制台应用程序,并命名为 ClassRollCall。在程序的主类中添加以下代码: using System; namespace ClassRollCall { class Program { static vo…

    C# 2023年5月31日
    00
  • C# String字符串案例详解

    C# String字符串案例详解 在C#编程中,字符串常常是我们经常需要处理的数据类型之一。因此,对于string类型的操作和处理,是我们编程学习的重中之重。本文将带大家详细了解C# String字符串的应用实例及操作技巧。 1. 字符串的定义及基本操作 在C#中,String字符串是一种不可变的类型,即被创建之后,它的值就不能被修改了。以下是一些定义字符串…

    C# 2023年5月31日
    00
  • C#开发微信门户及应用(5) 用户分组信息管理

    C#开发微信门户及应用(5) 用户分组信息管理 在微信公众平台开发中,我们可以通过对微信用户分组进行管理,实现对不同用户的针对性管理。本篇文章将介绍C#开发微信门户及应用中的用户分组信息管理。 1. 获取分组列表 我们可以通过向微信服务器发送请求来获取已有分组列表。代码示例: var accessToken = "your_access_token…

    C# 2023年5月31日
    00
  • 记一次 .NET 某外贸ERP 内存暴涨分析

    一:背景 1. 讲故事 上周有位朋友找到我,说他的 API 被多次调用后出现了内存暴涨,让我帮忙看下是怎么回事?看样子是有些担心,但也不是特别担心,那既然找到我,就给他分析一下吧。 二:WinDbg 分析 1. 到底是哪里的泄露 这也是我一直在训练营灌输的理念,一定要知道是哪一边的暴涨,否则很可能就南辕北辙了,使用 !address -summary 和 !…

    C# 2023年4月24日
    00
  • Unity输出带点击跳转功能的Log实现技巧详解

    Unity输出带点击跳转功能的Log实现技巧详解 在Unity开发中,我们经常需要输出Log信息来检查程序运行的过程,但是在大项目中,很难快速定位到特定的代码行,于是带有点击跳转功能的Log输出就显得尤为重要。本文将详细介绍如何实现带有点击跳转功能的Log输出。 1. 前提条件 在实现具有点击跳转功能的Log输出之前,我们需要确保我们已经掌握了以下基础知识:…

    C# 2023年5月15日
    00
  • SpringBoot与velocity的结合的示例代码

    下面是关于“SpringBoot与velocity的结合的示例代码”的完整攻略及示例说明: 1. 环境准备 在开始之前,需要确保以下环境已经准备完整: JDK 1.8或以上 Maven SpringBoot Velocity 如果您还没安装或搭建好以上环境,请先进行安装和配置。 2. 引入依赖 在SpringBoot项目的pom.xml文件中,加入以下依赖:…

    C# 2023年5月31日
    00
  • C#基础知识之Partial的使用

    C#基础知识之Partial的使用 在C#中,partial关键字可以用于将一个类、结构体或者接口定义为多个部分。这种做法可以让我们把一个大类分成多个小部分,方便管理,在多人协同开发时也可以分工合作。 Partial类的简单使用 在一个类定义中使用partial关键字定义类的多个部分,如下所示: // MyClass.cs 文件 public partial…

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