针对.NET平台下的WebService访问,为达到不添加引用的情况下,动态调用外部服务。

主体方法:

    public class WebServiceHelper
{
//Calling the WebService dynamically
public static T CallWebServiceDynamic<T>(string address, string serviceName, string serviceMethod, object[] args) {
WebClient client = new WebClient();
System.IO.Stream stream = client.OpenRead(address);
ServiceDescription description = ServiceDescription.Read(stream); ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
importer.ProtocolName = "Soap12";
importer.AddServiceDescription(description, null, null);
importer.Style = ServiceDescriptionImportStyle.Client;
importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties; CodeNamespace nmspace = new CodeNamespace();
CodeCompileUnit compileUnit = new CodeCompileUnit();
compileUnit.Namespaces.Add(nmspace);
ServiceDescriptionImportWarnings warning = importer.Import(nmspace, compileUnit);
if ( warning != ) {
throw new Exception($"Warning:{warning}");
} CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
string[] assemblyReferences = new string[] {
"System.dll",
"System.Xml.dll",
"System.Web.Services.dll"
};
CompilerParameters parms = new CompilerParameters(assemblyReferences);
parms.GenerateExecutable = false;
parms.GenerateInMemory = true; CompilerResults results = provider.CompileAssemblyFromDom(parms, compileUnit);
object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);
MethodInfo method = wsvcClass.GetType().GetMethod(serviceMethod);
var data = method.Invoke(wsvcClass, args);
if ( data != null ) {
return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(data));
}
return default(T);
}
}

使用场景:

string endPointAddress = ConfigurationManager.AppSettings["xxxxxx"];

        public WorkPackageServiceModel[] GetMinimalWorkPackage(Guid projectItemId, string projectNumber) {
return WebServiceHelper.CallWebServiceDynamic<WorkPackageServiceModel[]>(endPointAddress, "DataCenter", "GetMinimalWorkPackage", new object[] { projectItemId, projectNumber });
}

That's all!

Calling the Web Service dynamically (.NET 动态访问Web Service)的更多相关文章

  1. [转]Calling Web Service Functions Asynchronously from a Web Page 异步调用WebServices

    本文转自:http://www.codeproject.com/Articles/70441/Calling-Web-Service-Functions-Asynchronously-from Ove ...

  2. SharePoint 2013 APP 开发示例 (六)服务端跨域访问 Web Service (REST API)

    上个示例(SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API))是基于JavaScript,运行在web browser内去访问REST AP ...

  3. SharePoint 2013 APP 开发示例 (五)跨域访问 Web Service (REST API)

          虽然 JQuery 也能通过授权header实现跨域, 但SharePoint 提供了更简单的方法,它被实现在SP.RequestExecutor里 .它能访问跨域的服务包括REST AP ...

  4. [转载] 学会使用Web Service上(服务器端访问)~~~

    http://www.360doc.com/content/10/0712/12/541242_38461863.shtml# 关于什么是Web Service,相信在很多地方都会有介绍.简单的讲,W ...

  5. Reporting Service编程----访问Web服务

    将报表服务器 Web 服务的引用添加到项目中后,下一步是创建 Web 服务代理类的实例. 然后,您可以通过调用代理类中的方法来访问 Web 服务的方法. 当你的应用程序调用这些方法时,代理类生成的代码 ...

  6. linux web服务器及LAMP动态网站平台搭建

    (vim补:)vim另存为:x,x w 目标文件路径vim批量删除x:x,x d Web服务:基于B/S架构的web通信服务端:支持HTTP协议的网页提供程序客户端:按标记规范显示网页的浏览器程序客户 ...

  7. vivo web service:亿万级规模web服务引擎架构

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/ovOS0l9U5svlUMfZoYFU9Q vivo web service是开发团队围绕奇点 ...

  8. 动态调用web服务

    通常我们在程序中需要调用WebService时,都是通过“添加Web引用”,让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务.这样是使工作简单了,但是却和提供Web服务的URL.方法名 ...

  9. 在javaEE下学习web(在eclipse中开发动态的WEB工程,servlet的环境搭建,及servlet的一些方法)

    一个简便的方法实现javaee版的eclipse开发动态的WEB工程(javaWEB项目)1.把开发选项切换到javaEE2. 可以在window->shou view 中找到package e ...

随机推荐

  1. Parted 创建 GPT 分区

    对于磁盘的分区表 MBR与GPT区别. MBR:MBR分区表(即主引导记录)大家都很熟悉,是过去我们使用windows时常用的. 所支持的最大卷:2T,而且对分区有限制:最多4个主分区或3个主分区加一 ...

  2. nginx篇最初级用法之地址重写

    nginx服务器的地址重写,主要用到的配置参数是rewrite rewrite regex replacement flag rewrite 旧地址 新地址 [选项] 支持的选项有: last 不再读 ...

  3. CSPS模拟 62

    婚礼现场系列 T1 $gragh$ 为了方便把边的贡献下放到点,跑一个生成树作为划分依据. T2 $permutation$ 由于在本题中,构造的变换方法保证只能邻项交换 所以如果位置串字典序变小,权 ...

  4. 【洛谷】P2371 [国家集训队]墨墨的等式(屠版题)

    先讲讲曲折的思路吧...... 首先,应该是CRT之类的东西,乱搞 不行......打了打草稿,发现有解的情况是gcd(a1,a2.....an)|B,于是可以求gcd然后O(n)查询?但是B的范围直 ...

  5. [LINQ2Dapper]最完整Dapper To Linq框架(四)---Linq和SQL并行使用

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  6. Hibernate的多对多关系

    1.表的关系: 分别有三个表:课程表.学生表.分数表.课程和学生的关系是多对多的,因为一个学生对应多个课程,而一个课程被多个学生选修.如果用一对多.多对一的观点来看待课程和学生的关系显然是不对的,因为 ...

  7. html与css连接代码

    demo01.html: <!DOCTYPE html><html> <head>  <meta charset="utf-8">  ...

  8. 201871010114-李岩松《面向对象程序设计(java)》第六、七周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  9. 误删tree命令如何恢复

    误删tree命令如何恢复 考察rpm,yum的用法 一.删除tree命令,tree命令不可用 [root@centos7 ~]# which tree /usr/bin/tree [root@cent ...

  10. ajax传出数组到后台

    var vote = new Array();    $("input[name='option_name']").each(function(i){        if($(th ...