加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

动态调用WebService 【原创+整理】

发布时间:2020-12-17 01:22:58 所属栏目:安全 来源:网络整理
导读:动态调用WebService 类 using System; using System.Collections.Generic; using System.Text; using System.Web.Services.Description; using System.Xml.Serialization; using System.Net; using System.CodeDom; using System.CodeDom.Compiler; using Sy

动态调用WebService 类

using System;
using System.Collections.Generic;
using System.Text;
using System.Web.Services.Description;
using System.Xml.Serialization;
using System.Net;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
using System.IO;

namespace XYH.Common
{
??? public class WebServiceClass
??? {
??????? private Log log = new Log(AppDomain.CurrentDomain.BaseDirectory + @"/up.txt");
???????
??????? public Object GetWebServiceObje(params string[] msgInfos)
??????? {
??????????? try
??????????? {
??????????????? WebClient client = new WebClient();
??????????????? //这个地址在Config文件里面,这里取出来就行了.在原地址后面加上: ?WSDL
??????????????? String url = ConfigManager.GetValue("WebServiceUrl");
??????????????? Stream stream = client.OpenRead(url);
??????????????? ServiceDescription description = ServiceDescription.Read(stream);
??????????????? //创建客户端代理代理类。
??????????????? ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
??????????????? //指定访问协议。
??????????????? importer.ProtocolName = "Soap";
??????????????? //生成客户端代理。
??????????????? importer.Style = ServiceDescriptionImportStyle.Client;
??????????????? importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
??????????????? //添加WSDL文档。
??????????????? importer.AddServiceDescription(description,null,null);
??????????????? //命名空间
??????????????? CodeNamespace nmspace = new CodeNamespace();
??????????????? // 写在配置文件里
??????????????? nmspace.Name = ConfigManager.GetValue("Namespace");
??????????????? CodeCompileUnit unit = new CodeCompileUnit();
??????????????? unit.Namespaces.Add(nmspace);

??????????????? ServiceDescriptionImportWarnings warning = importer.Import(nmspace,unit);
??????????????? CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");

??????????????? CompilerParameters parameter = new CompilerParameters();
??????????????? parameter.GenerateExecutable = false;
??????????????? //输出程序集的名称,在配置文件中配置
??????????????? string outDllName = ConfigManager.GetValue("OutDllName");
??????????????? parameter.OutputAssembly = outDllName;
??????????????? parameter.ReferencedAssemblies.Add("System.dll");
??????????????? parameter.ReferencedAssemblies.Add("System.XML.dll");
??????????????? parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
??????????????? parameter.ReferencedAssemblies.Add("System.Data.dll");

??????????????? CompilerResults result = provider.CompileAssemblyFromDom(parameter,unit);
??????????????? if (result.Errors.HasErrors)
??????????????? {
??????????????????? // 显示编译错误信息
??????????????????? log.log("动态调用webService错误:" + result.Errors.ToString());
??????????????? }
??????????????? //加载前面生成的程序集
??????????????? Assembly asm = Assembly.LoadFrom(outDllName);
??????????????? string webServiceClassName = ConfigManager.GetValue("WebServiceClassName");
??????????????? Type typeObj = asm.GetType(webServiceClassName);
??????????????? object obj = Activator.CreateInstance(typeObj);
??????????????? int count = msgInfos.Length;
??????????????? object[] objParams = new object[count];
??????????????? int i = 0;
??????????????? foreach (string str in msgInfos)
??????????????? {
??????????????????? objParams[i] = (object)str;
??????????????????? i++;
??????????????????? log.log("参数"+i+": "+str);
??????????????? }
??????????????? /// 从配置文件获取方法名称
??????????????? string methodName = ConfigManager.GetValue("WebServiceMethodName");
??????????????? object objResult = typeObj.InvokeMember(methodName,BindingFlags.Default | BindingFlags.InvokeMethod,obj,objParams);
??????????????? if (objResult == null)
??????????????????? log.log("调用失败");
??????????????? log.log("调用成功" + objResult.ToString());
??????????????? return objResult;
??????????? }
??????????? catch (Exception ex)
??????????? {
??????????????? log.log("异常错误:" + ex.ToString());
??????????? }
??????????? return null;
??????? }
??? }
}

配置文件

? <appSettings>
?? <!-- webservice地址-->
?? <add key="WebServiceUrl" value ="
http://localhost:1952/WebSite/Service.asmx?WSDL"/>?? <add key="Namespace" value ="DataReceptionDisposal.BLL.WebService"/>?? <add key="OutDllName" value ="Lib//DataReceptionDisposal.BLL.WebService.dll"/>?? <add key="WebServiceClassName" value ="DataReceptionDisposal.BLL.WebService.Service"/>?? <add key="WebServiceMethodName" value ="Show"/>? </appSettings>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读