返回顶部
首页 > 资讯 > 服务器 >C# 调用WebService的方式汇总
  • 268
分享到

C# 调用WebService的方式汇总

c#服务器 2023-09-07 20:09:12 268人浏览 独家记忆
摘要

C# 调用WEBService的方式汇总 方式一:根据提供的webservice地址,用VS自带工具生成cs文件,添加到项目中使用即可。方式二:根据webservice地址,动态在项目中生成代

C# 调用WEBService的方式汇总

方式一:根据提供的webservice地址,用VS自带工具生成cs文件,添加到项目中使用即可。

工具:
在这里插入图片描述
在这里插入图片描述

步骤一:如果本地访问不了webservice地址,则通过远端生成wsdl文件,拷贝到本地用工具生成cs类文件,导入项目中。

获取webservice地址;

在浏览器中访问webservice地址,此处访问需要在地址后面加上 ?wsdl

例如:原地址:Http://42.123.92.137:1010/interface/Hospital_Interface.asmx

访问时:http://42.123.92.137:1010/interface/Hospital_Interface.asmx?wsdl

将网页中的数据另存为 (xxx.wsdl)文件,

用VS自带工具将上一步生成的(xxx.wsdl)文件通过命令生成 (xxx.cs) 类文件。

(1)直接通过wsdl文件位置生成。公式:wsdl + wsdl文件路径 + /out:+ cs生成文件路径

例:wsdl E:\service.wsdl /out:E:/WebServicetest.cs

(2)生成带有命名空间的cs文件。公式:wsdl + wsdl文件路径 + /n:命名空间名称 +/out:+ cs生成文件路径

例:wsdl E:\service.wsdl /n:test /out:E:/WebServicetest.cs

步骤二:如果本地可以直接访问到webservice地址,直接通过VS工具生成

生成公式:wsdl /n:+命名空间名称+ /out:+cs类文件路径+文件名称.cs+ webservice地址+?wsdl (注意公式里面空格的地方)

例:wsdl /n:xx /out:D:/web.cs http://192.168.0.222/WebSite/Service.asmx?wsdl

方式二:根据webservice地址,动态在项目中生成代理类文件,通过反射调用即可

将webservice地址存放到配置文件中,代码中通过读取地址生成代理类。

///         /// 根据webservice地址生成代理类        ///         /// 本地配置文件中webservice地址        ///         public static int InitCreatClass(string url)        {            try            {                //使用 XmlTextReader 对象创建和格式化 WSDL 文档                XmlTextReader reader = new XmlTextReader(url + "?wsdl");                ServiceDescription serviceDes = ServiceDescription.Read(reader);                ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();                sdi.AddServiceDescription(serviceDes, "", "");                CodeNamespace cnspace = new CodeNamespace(@namespace);                //生成客户端代理类                CodeCompileUnit ccUnit = new CodeCompileUnit();                ccUnit.Namespaces.Add(cnspace);                sdi.Import(cnspace, ccUnit);                CSharpcodeProvider cscProvider = new CSharpCodeProvider();                ICodeCompiler icc = cscProvider.CreateCompiler();                //设置编译参数                CompilerParameters copParameters = new CompilerParameters();                copParameters.GenerateExecutable = false;                copParameters.GenerateInMemory = true;                copParameters.OutputAssembly = "TestWebService.dll";                copParameters.ReferencedAssemblies.Add("System.dll");                copParameters.ReferencedAssemblies.Add("System.XML.dll");                copParameters.ReferencedAssemblies.Add("System.Web.Services.dll");                copParameters.ReferencedAssemblies.Add("System.Data.dll");                //编译代理类                CompilerResults comResults = icc.CompileAssemblyFromDom(copParameters, ccUnit);                if (true == comResults.Errors.HasErrors)                {                    System.Text.StringBuilder sb = new System.Text.StringBuilder();                    foreach (System.CodeDom.Compiler.CompilerError ce in comResults.Errors)                    {                        sb.Append(ce.ToString());                        sb.Append(System.Environment.NewLine);                    }                    throw new Exception(sb.ToString());                }            }            catch (Exception ex)            {                throw new Exception(ex.Message);            }            return 0;        }

访问代理类,调用类中的函数

///      /// 调用代理类函数     ///      /// 函数名称     /// 入参     ///      public static object InvokeWebService(string methodname, object[] args)        {            try            {                //通过反射调用代理类函数                System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom("TestWebService.dll");                Type t = asm.GetType(classname);                object o = Activator.CreateInstance(t);                System.Reflection.MethodInfo method = t.GetMethod(methodname);                return method.Invoke(o, args);            }            catch (Exception ex)            {                throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));            }        }     ///         /// 函数调用        ///         private void TestInvoke()        {            string[] ReqParms = new string[4];//参数数量            ReqParms[0] = "参数1";            ReqParms[1] = "参数2";            ReqParms[2] = "参数3";            ReqParms[3] = "参数4";            //Func_Name  被调用函数名称            string result = InvokeWebServiceD("Func_Name", ReqParms).ToString();        }

方式三:通过 HttpWebRequest 直接调用webservice中的函数

构建httprequest帮助类

public partial class HttpHelper    {        private static HttpHelper m_Helper;        ///         /// 单例模式        ///         public static HttpHelper Helper        {            get { return m_Helper ?? (m_Helper = new HttpHelper()); }        }        ///         /// 获取请求的数据        ///         /// 请求地址        /// 请求方式        /// 参数        /// 请求编码        /// 响应编码        /// 请求超时时间(毫秒)        /// 请求成功响应信息,失败返回null        public string GetResponseString(string strUrl, ERequestMode requestMode, Dictionary<string, string> parameters, Encoding requestCoding, Encoding responseCoding, int timeout = 300)        {            string url = VerifyUrl(strUrl);            HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(new Uri(url));            HttpWebResponse webResponse = null;            switch (requestMode)            {                case ERequestMode.Get:                    webResponse = GetRequest(webRequest, timeout);                    break;                case ERequestMode.Post:                    webResponse = PostRequest(webRequest, parameters, timeout, requestCoding);                    break;            }            if (webResponse != null && webResponse.StatusCode == httpstatusCode.OK)            {                using (Stream newStream = webResponse.GetResponseStream())                {                    if (newStream != null)                        using (StreamReader reader = new StreamReader(newStream, responseCoding))                        {string result = reader.ReadToEnd();return result;                        }                }            }            return null;        }        ///         /// get 请求指定地址返回响应数据        ///         /// 请求        /// 请求超时时间(毫秒)        /// 返回:响应信息        private HttpWebResponse GetRequest(HttpWebRequest webRequest, int timeout)        {            try            {                webRequest.Accept = "text/html, application/xhtml+xml, application/JSON, text/javascript, **; q=0.01";                webRequest.Headers.Add("Accept-Language", "zh-cn,en-US,en;q=0.5");                webRequest.Headers.Add("Cache-Control", "no-cache");                webRequest.UserAgent = "DefaultUserAgent";                //webRequest.Timeout = timeout;                webRequest.ContentType = "application/x-www-fORM-urlencoded";                webRequest.ContentLength = byteArray.Length;                webRequest.Method = "POST";                // 将参数写入流                using (Stream newStream = webRequest.GetRequestStream())                {                    newStream.Write(byteArray, 0, byteArray.Length);                    newStream.Close();                }                // 接收返回信息                HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();                return webResponse;            }            catch (Exception ex)            {                return null;            }        }        ///         /// 验证URL        ///         /// 待验证 URL        ///         private string VerifyUrl(string url)        {            if (string.IsNullOrEmpty(url))                throw new Exception("URL 地址不可以为空!");            if (url.StartsWith("http://", StrinGComparison.CurrentCultureIgnoreCase))                return url;            return string.Format("http://{0}", url);        }    }    public enum ERequestMode    {        Get,        Post    }

调用方式

///         /// 测试调用        ///         private void TestInvoke()        {            //组织参数            Dictionary<string, string> parameters = new Dictionary<string, string>();            parameters.Add("CantonCode", PersonInfo.RegionNumber);            parameters.Add("CardCode", PersonInfo.CardNo);            parameters.Add("Name", txtName.Text);            parameters.Add("CompHosCode", SystemConfigData.HospitalCode);            string _result = HttpHelper.Helper.GetResponseString(url, ERequestMode.Post, parameters, Encoding.Default, Encoding.UTF8);        }

以下是对上面三种方式进行总结

方式一、

优点:利用地址直接生成cs类,操作方便快捷,发生错误机率小,调用简单;

缺点:如果webservice地址或者内容发生改变,项目必须重新生成cs文件,导致项目维护性差;

采用场景:webservice接口已经趋于稳定,不会有变动的情况下可使用这种方式;

方式二、

优点:将webservice地址放在配置文件中,一旦地址放生变化,只需要修改配置文件即可,项目维护性好;

缺点:对webservice接口要求比较高,不规范的webservice接口,生成代理类时会发生错误;

采用场景:webservice接口规范,且变动小时,可采用此种方式;

方式三、

优点:添加帮助类,然后调用即可,方便快捷,webservice地址放置在配置文件中,易于维护;

缺点:暂时未发现较大缺点;

采用场景:任何webservice接口,均可采用此种方式;

使用推荐:方式三 > 方式一 > 方式二

来源地址:https://blog.csdn.net/weixin_44012111/article/details/126406375

--结束END--

本文标题: C# 调用WebService的方式汇总

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

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

猜你喜欢
  • C# 调用WebService的方式汇总
    C# 调用WebService的方式汇总 方式一:根据提供的webservice地址,用VS自带工具生成cs文件,添加到项目中使用即可。方式二:根据webservice地址,动态在项目中生成代...
    99+
    2023-09-07
    c# 服务器
  • C#调用WebService的方法介绍
    一、前言 在日常工作中,如果涉及到与第三方进行接口对接,有的会使用WebService的方式,这篇文章主要讲解在.NET Framework中如何调用WebService。首先我们创...
    99+
    2024-04-02
  • webservice调用的方式有哪些
    有以下几种常见的方式可以调用webservice: SOAP(Simple Object Access Protocol):基于...
    99+
    2024-02-29
    webservice
  • C#中使用HttpPost调用WebService的方法
    WebService服务端代码 public class WebServiceDemo : System.Web.Services.WebService { ...
    99+
    2024-04-02
  • java调用WebService服务的四种方法总结
    目录一、前言二、简介  三、具体解析第一种方式,首先得下载axis2的jar包,Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService...
    99+
    2024-04-02
  • java关于调用方法的汇总
    以下我们根据JAVA的调用方法做了整理和总结,以及相关的调用代码也做测试,以下来学习下。java方法主要分为三种:一种是静态方法这种方法的话用static修饰,这个方法不需要与某个特定对象进行绑定;第二种就是常见的没有用static修饰的方...
    99+
    2023-05-30
    java 调用方法 ava
  • Java 调用 WebService 服务的 3 种方式
    虽然 WebService 这个框架已经过时,但是有些公司还在使用,在调用他们的服务的时候就不得不面对各种问题,本篇文章总结了最近我调用他司 WebService 的心路历程。3 种方式可以分别尝试,哪种能通用哪个。 soapui 下载地址...
    99+
    2023-08-18
    webservice java springboot
  • 数据库SQL调优的几种方式汇总
    目录char  vs varchar开启慢查询日志来定位查询慢的语句合理使用关键字优化查询缓存适当使用索引  分割数据表非规范化的方式总结 最近在复习SQL调优,总结了下主要有以下几种方式:...
    99+
    2024-04-02
  • webservice接口调用方式有哪些
    WebService接口调用方式有以下几种:1. SOAP调用方式:使用Simple Object Access Protocol ...
    99+
    2023-09-21
    webservice
  • Java webservice的POST和GET请求调用方式
    目录webservice的POST和GET请求调用POST请求1.发送请求2.POST请求体3.测试GET请求通过webService调第三方提供的接口post与getPOSTGET...
    99+
    2024-04-02
  • c#怎么调用webservice接口
    要调用Web服务接口,首先需要添加对Web服务的引用。 在Visual Studio中,右键单击项目,选择“添加”>“引用”。 在...
    99+
    2023-10-30
    C# webservice
  • C++创建文件夹的汇总方式有哪些
    这篇文章主要介绍“C++创建文件夹的汇总方式有哪些”,在日常操作中,相信很多人在C++创建文件夹的汇总方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++创建文件夹的汇总方式有哪些”的疑惑有所帮助!...
    99+
    2023-06-25
  • Python 常用的安装Module方式汇总
    一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包,进行解压,进入模块文件夹,执行: python setup.py i...
    99+
    2022-06-04
    常用 方式 Python
  • C# StackExchange.Redis 用法汇总
    目录安装StackExchange.Redis引用及初始化String(字符串)List(列表)Hash(哈希)发布订阅事务Batch 批量操作Lock(分布式锁)StackExch...
    99+
    2024-04-02
  • Java调用CXF WebService接口的两种方式实例
    方式一:使用CXF提供的工具生成客户端代码。1. 在项目中添加CXF的依赖。2. 使用CXF提供的命令行工具生成客户端代码,命令如下...
    99+
    2023-09-16
    java
  • C#中怎么动态调用WebService
    本篇文章为大家展示了C#中怎么动态调用WebService,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。public static object InvokeWebSe...
    99+
    2023-06-18
  • C# WebService如何发布与调用
    这篇文章主要为大家展示了“C# WebService如何发布与调用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C# WebService如何发布与调用”这篇文章吧。Web Service是可操...
    99+
    2023-06-18
  • SpringBoot调用第三方WebService接口的两种实现方式
    WebService简介 WebService接口的发布通常一般都是使用WSDL(web service descriptive language)文件的样式来发布的,该文档包含了请求的参数信息,返回...
    99+
    2023-09-12
    spring boot java 后端
  • C#中如何使用HttpPost调用WebService
    这篇文章主要介绍了C#中如何使用HttpPost调用WebService,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。WebService服务端代码public c...
    99+
    2023-06-29
  • Python中执行调用JS的多种方法汇总
    1. 写在前面   做爬虫的人大家都知道,现在国内Web或App普遍防护都做的很好,且越有价值的网站这方面越强 再小再弱的网站现在或多或少都要整点反爬 JS在反爬中应用非常广泛,现在做爬虫工程师基本...
    99+
    2023-08-31
    python javascript
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作