iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >C#中怎么动态调用Web服务
  • 401
分享到

C#中怎么动态调用Web服务

2023-06-17 23:06:15 401人浏览 安东尼
摘要

本篇文章给大家分享的是有关C#中怎么动态调用WEB服务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。(1)首先在Web引用中的本地代理类中添加一个构造函数,这个构造函数是以We

本篇文章给大家分享的是有关C#中怎么动态调用WEB服务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

(1)首先在Web引用中的本地代理类中添加一个构造函数,这个构造函数是以Web Service的URL为参数的重载方法。

复制  保存

Namespace Web_SVSGC      '< remarks/>     < System.Diagnostics.DebuggerStepThroughAttribute(),  _     System.ComponentModel.DesignerCateGoryAttribute("code"),  _     System.Web.Services.WebServiceBindingAttribute(Name:="SVSGCSoap", [Namespace]:="Http://tempuri.org/QYjsERVICE/SVSGC"),  _     System.Xml.Serialization.XmlIncludeAttribute(GetType(Attribute))>  _      Public Class SVSGC          Inherits System.Web.Services.Protocols.SoapHttpClientProtocol      '< remarks/>         Public Sub New()              MyBase.New              Me.Url = "http://localhost/QYJSERVICE/WEBSERVICE/SERVICE/SVSGC.asmx"         End Sub           '添加一个带参数的构造函数。          Public Sub New(ByVal strUrl As String)               MyBase.New()               Me.Url = strUrl           End Sub

(2)将Web Service的url配置在调用Web Service的应用程序的配置文件中。(其中的value可以随时修改。)

复制  保存

< configuration>     < appSettings>               < add key="SVSGA_URL" value="http://192.168.108.188/ QDN/SERVICE/SVSGA.asmx" QDN/SERVICE/SVSGA.asmx" />     < /appSettings> < /configuration>< configuration>     < appSettings>               < add key="SVSGA_URL" value="http://192.168.108.188/ QDN/SERVICE/SVSGA.asmx" QDN/SERVICE/SVSGA.asmx" />     < /appSettings> < /configuration>

(3)调用时,根据配置文件的Url动态的生成Web Service。

复制  保存       

'要调用的Web Service的URL          Dim strWebSvsUrl As String          '声明一个要调用的Web Service          Dim objSVSGC As WebSvs_GC. SVSGC          '调用Web Service的远程方法的返回值          Dim strReturnValue As String          Try              '从配置文件中取得Web Service的URL              strWebSvsUrl = _               System.Configuration.ConfigurationSettings.AppSettings("SVSGC_URL")               '生成一个Web Service实例              objSVSGC = New WebSvs_GC.SVSGC (strWebSvsUrl)              '调用这个Web Service里的远程方法              strReturnValue = objSVSGC.HelloWorld()          Catch ex As Exception          End Try

C#动态调用Web服务方法二:完全动态处理,传入服务服务网址,方法名和参数即可.

using System;   using System.net;   using System.IO;   using System.CodeDom;   using Microsoft.CSharp;   using System.CodeDom.Compiler;   using System.Web.Services.Description;   using System.Web.Services.Protocols;    namespace HB.Common   {              public class WebServiceHelper       {           #region InvokeWebService           /// < summary>           /// 动态调用web服务           /// < /summary>           /// < param name="url">WSDL服务地址< /param>           /// < param name="methodname">方法名< /param>           /// < param name="args">参数< /param>           /// < returns>< /returns>           public static object InvokeWebService(string url, string methodname, object[] args)           {               return WebServiceHelper.InvokeWebService(url, null, methodname, args);           }            /// < summary>           /// 动态调用web服务           /// < /summary>           /// < param name="url">WSDL服务地址< /param>           /// < param name="classname">类名< /param>           /// < param name="methodname">方法名< /param>           /// < param name="args">参数< /param>           /// < returns>< /returns>           public static object InvokeWebService(string url, string classname, string methodname, object[] args)           {               string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";               if ((classname == null) || (classname == ""))               {                   classname = WebServiceHelper.GetWsClassName(url);               }                try               {                   //获取WSDL                   WebClient wc = new WebClient();                   Stream stream = wc.OpenRead(url + "?WSDL");                   ServiceDescription sd = ServiceDescription.Read(stream);                   ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();                   sdi.AddServiceDescription(sd, "", "");                   CodeNamespace cn = new CodeNamespace(@namespace);                    //生成客户端代理类代码                   CodeCompileUnit ccu = new CodeCompileUnit();                   ccu.Namespaces.Add(cn);                   sdi.Import(cn, ccu);                   CSharpcodeProvider icc = new CSharpCodeProvider();                    //设定编译参数                   CompilerParameters cplist = new CompilerParameters();                   cplist.GenerateExecutable = false;                   cplist.GenerateInMemory = true;                   cplist.ReferencedAssemblies.Add("System.dll");                   cplist.ReferencedAssemblies.Add("System.XML.dll");                   cplist.ReferencedAssemblies.Add("System.Web.Services.dll");                   cplist.ReferencedAssemblies.Add("System.Data.dll");                    //编译代理类                   CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);                   if (true == cr.Errors.HasErrors)                   {                       System.Text.StringBuilder sb = new System.Text.StringBuilder();                       foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)                       {                           sb.Append(ce.ToString());                           sb.Append(System.Environment.NewLine);                       }                       throw new Exception(sb.ToString());                   }                    //生成代理实例,并调用方法                   System.Reflection.Assembly assembly = cr.CompiledAssembly;                   Type t = assembly.GetType(@namespace + "." + classname, true, true);                   object obj = Activator.CreateInstance(t);                   System.Reflection.MethodInfo mi = t.GetMethod(methodname);                    return mi.Invoke(obj, args);                                   }               catch (Exception ex)               {                   throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));               }           }            private static string GetWsClassName(string wsUrl)           {               string[] parts = wsUrl.Split('/');               string[] pps = parts[parts.Length - 1].Split('.');                return pps[0];           }           #endregion       }   }

返回时如果不是字符串,即强制转换,如返回是DataSet,则

string url = "http://www.webservicex.net/globalweather.asmx" ;   string[] args = new string[2] ;   args[0] = "Hangzhou";   args[1] = "China" ;   object result = WebServiceHelper.InvokeWebService(url ,"GetWeather" ,args) ;   DataSet DSRe=(DataSet)result;

C#动态调用Web服务方法三:URL Behavior 属性

如果知道服务的方法和参数,只是调用的URL网址会随时变化,那么可以手工创建一个服务,添加上对应的的方法和传入参数,然后引入到项目中,就可以直接开发,在创建服务的实例化时,才修改对应的URL即可.

例如服务中有个方法叫GetTax,那么就可以这样改:

GetTax.GetTax GetTax1 = new GetTax.GetTax();   GetTax1.Url = "http://" + WebIp1 + "/pub_wa_gspsp1/gettax.asmx";        //动态引入服务器                      DataSet DS1 = GetTax1.GetTaxMx(Bm1, OldBz, Fpl, SLx, StaDa, EndDa);   //调用服务器返回开票数据

以上就是C#中怎么动态调用Web服务,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: C#中怎么动态调用Web服务

本文链接: https://www.lsjlt.com/news/294579.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#中怎么动态调用Web服务
    本篇文章给大家分享的是有关C#中怎么动态调用Web服务,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。(1)首先在Web引用中的本地代理类中添加一个构造函数,这个构造函数是以We...
    99+
    2023-06-17
  • C#中怎么动态调用WebService
    本篇文章为大家展示了C#中怎么动态调用WebService,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。public static object InvokeWebSe...
    99+
    2023-06-18
  • java怎么调用c++动态库
    要在Java中调用C++动态库,可以使用JNI(Java Native Interface)技术。以下是通过JNI调用C++动态库的...
    99+
    2023-10-20
    java c++
  • unity怎么调用c++动态库
    要在Unity中调用C++动态库,可以按照以下步骤进行操作:1. 创建C++动态库:首先,使用C++编写你的库,并将其编译为动态库(...
    99+
    2023-09-20
    unity c++
  • C#调用动态库
    一、引言 “为什么我们需要掌握互操作技术的呢?” 对于这个问题的解释就是——掌握了.NET平台下的互操作性技术可以帮助我们在.NET中...
    99+
    2024-04-02
  • C++调用动态库和Python调用C++动态库的方法是什么
    这篇文章主要介绍“C++调用动态库和Python调用C++动态库的方法是什么”,在日常操作中,相信很多人在C++调用动态库和Python调用C++动态库的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-07-05
  • C++调用动态库两种方式和Python调用C++动态库
    创建动态库动态库是在程序运行时加载的库文件,并不占用程序本身大小。选择动态库项目:新建.h和.cpp文件:# cat.h #pragma once extern "C" _declspec(dllexport) int sum(int a,...
    99+
    2023-05-14
    Python C++ 动态库
  • C++ DLL动态库怎么创建与调用
    本篇内容介绍了“C++ DLL动态库怎么创建与调用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、创建库工程2、添加头文件Cla...
    99+
    2023-06-30
  • linux怎么构建动态WEB服务器
    本篇内容主要讲解“linux怎么构建动态WEB服务器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux怎么构建动态WEB服务器”吧!基本配置 安装web服务器:httpd-2.X.X 先优...
    99+
    2023-06-10
  • C#怎么调用C++动态库接口函数和回调函数
    本文小编为大家详细介绍“C#怎么调用C++动态库接口函数和回调函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C#怎么调用C++动态库接口函数和回调函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 前言...
    99+
    2023-06-29
  • c++动态库调用的实现
    目录一、生成dll二、调用dll在平时的开发中某些情况,动态库和静态库是程序开发的不二法门,例如封装一个库,供别人调用(日志库、字符串处理库、设备信息采集库等),比如接入第三方系统或...
    99+
    2024-04-02
  • C#怎么使用RestClient调用Web API
    这篇文章主要介绍“C#怎么使用RestClient调用Web API”,在日常操作中,相信很多人在C#怎么使用RestClient调用Web API问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-30
  • linux怎么构建动态WEB服务器配置
    这篇文章主要讲解了“linux怎么构建动态WEB服务器配置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux怎么构建动态WEB服务器配置”吧!Apache配置文件 重要配置选项 Ser...
    99+
    2023-06-10
  • c++中的动态数组怎么用
    这篇文章给大家分享的是有关c++中的动态数组怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C++的new操作符是该语言一个非常好的语法特性,然而实际使用中却发现new操作符有不少限制,为突出的一点便是用ne...
    99+
    2023-06-03
  • c#怎么调用静态方法
    在 c# 中,调用静态方法可以通过两种方式:1. 使用类名直接调用;2. 使用类型名称 + 双冒号调用。 如何在 C# 中调用静态方法 什么是静态方法? 静态方法是不属于任何特定对象实...
    99+
    2024-05-12
    c#
  • c#静态方法怎么调用
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • SpringBoot动态Feign服务调用详解
    目录1.Feign传统方式的不足2.动态Feign2.1.服务生产者2.2.动态Feign2.3.服务消费者3.总结1.Feign传统方式的不足 ①.在微服务架构中,当我们使用Fei...
    99+
    2022-12-21
    SpringBoot动态Feign SpringBoot动态Feign服务调用
  • c#中怎么用Emit动态创建类
    在C#中使用Emit动态创建类,需要使用System.Reflection.Emit命名空间中的类和方法。以下是一个简单的示例,演示...
    99+
    2024-04-02
  • VB.NET中怎么调用Web Service
    本篇文章为大家展示了VB.NET中怎么调用Web Service,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在VB.NET调用Web Service提供的服务当Web Service已经处于对外提...
    99+
    2023-06-17
  • web开发中静态和动态语言怎么选择
    这篇文章主要讲解了“web开发中静态和动态语言怎么选择”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“web开发中静态和动态语言怎么选择”吧!动态型  VS  静态型动态语...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作