动态接口服务 webservice

  private void GetDll()
        {
            WebClient client = new WebClient();
            string url = "http://xxxx/services/depoWebService?wsdl";//这个地址可以写在Config文件里面,这里取出来就行了,在原地址后面加上: ?WSDL
            Stream stream = client.OpenRead(url);
            ServiceDescription description = ServiceDescription.Read(stream);

            ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//创建客户端代理代理类。这个需要把项目的目标框架改为.net framework4

            importer.ProtocolName = "Soap";//指定访问协议
            importer.Style = ServiceDescriptionImportStyle.Client;//生成客户端代理。
            importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;

            importer.AddServiceDescription(description, null, null);//添加WSDL文档

            CodeNamespace nmspace = new CodeNamespace();//命名空间
            nmspace.Name = "MyServiceNamespace";//这里是引用服务后本地自定义的命名空间(55行所用跟此相同)
            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;

            parameter.OutputAssembly = "MyTest.dll";//输出程序集的名称
            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)
            {
                Assembly asm = Assembly.LoadFrom("MyTest.dll");//加载前面生成的程序集
                Type t = asm.GetType("MyServiceNamespace.TestWS");//格式为:命名空间(33行定义的).类名

                object o = Activator.CreateInstance(t);
                MethodInfo method = t.GetMethod("validateDepositeCard");//GetPersons是服务端的方法名称,你想调用服务端的什么方法都可以在这里改,最好封闭一下
                String[] item = (String[])method.Invoke(o, null);
                //注:method.Invoke(o,null)返回的是一个Object,如果你服务端返回的是DataSet,这里也是用(DataSet)method.Invoke(o,null)转一下就行了
                foreach (string str in item)
                {
                    Response.Write(str);
                }
            }

            //上面是根据WebService地址,模拟生成的一个代理类,如果你想看看生成的代码文件是什么样子,可以用以下代码保存下来,默认是保存在 bin目录下面
            TextWriter writer = File.CreateText("MyTest.cs");
            provider.GenerateCodeFromCompileUnit(unit, writer, null);
            writer.Flush();
            writer.Close();
        }
时间: 2024-10-14 20:16:53

动态接口服务 webservice的相关文章

C# 动态加载WebService

项目中需要用到WebService的方式来进行两个服务之间的方法调用,之前都是在项目中添加服务引用的方式来实现,但是这种方式有一个弊端,就是如果提供WebService服务的一方的IP.端口一旦变更, 调用的一方代码就需要重新编译部署,实际使用不是很方便,因此就采用了下面的方法,通过在代码中动态加载WebService的方式,把IP地址.端口都做成配置项.这样如果只是url的ip和端口出现变更, 就不需要再去重新编译代码了. 具体代码如下: public static class WebServ

SpringMVC + Mybatis + SpringSecurity(权限控制到方法按钮) + Rest(服务) + Webservice(服务) + Quartz(定时调度)+ Lucene(搜索引擎) + HTML5 bootstrap + Maven项目构建绝对开源平台

框架整合: Springmvc + Mybatis + Shiro(权限) + REST(服务) + WebService(服务) + JMS(消息) + Lucene(搜搜引擎) + Quartz(定时调度) + Bootstrap Html5(支持PC.IOS.Android) 需要源码请加Q:3121026417   此处[源码获取地址] 框架简介: 项目Maven构建,真实大型互联网架构,做到高并发,大数据处理,整个项目使用定制化服务思想,提供模块化.服务化.原子化的方案,将功能模块进行

动态调用服务

利用动态调用服务,实现.net下类似Dubbo的玩法. 分布式微服务现在成为了很多公司架构首先项,据我了解,很多java公司架构都是 Maven+Dubbo+Zookeeper基础上扩展的. Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务

面向接口的webservice发布方式

import javax.jws.WebService; /**面向接口的webservice发布方式 */ @WebService public interface JobService { public String getJob(); } import javax.jws.WebService; @WebService(endpointInterface="com.oracle.ws.c.JobService")//设置服务端点接口 ,指定对外提供服务的接口 public cla

带接口的webservice 的发布

1.接口:(打上service注解) package ws.qlq.a; import javax.jws.WebService; /** * 面向接口的webservice发布方式 * * */ @WebService public interface JobService { public String getJob(); } 2.实现类(也要打赏注解设置服务端点接口全路径) package ws.qlq.a; import javax.jws.WebService; @WebService

SpringBoot接口服务处理Whitelabel Error Page

转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50915979 <SpringBoot接口服务处理Whitelabel Error Page> <Maven依赖载入错误的情况分析> <Java Webproject转换为基于Maven的Webproject> <Maven Webproject执行异常:Maven.multiModuleProjectDirectory system propery

datasnap——动态注册服务类

datasnap——动态注册服务类 在DataSnap的应用程序时,我们首先需要注册的服务器类,以提供访问客户端应用程序的服务器方法.通常的做法是使用DSServerClass组件,但有些时候,我们要做到在运行时加载.下面代码实现的类TSimpleServerClass从TDSServerClass继承,超载了Create方法并且增加了ServerClass,DataSnap Server和LifeCycle三个参数. type TSimpleServerClass = class(TDSSer

接口服务中的日志

先来看下日志对于一个接口服务的作用: 监控服务的状态,一般程序中会增加一些跟踪或者提示性的日志,用来判断服务执行的详细情况,特别是执行一些复合功能的接口或者叫聚合接口非常有利于我们判断接口的执行情况 安全,用来分析调用者的身份信息,防止接口被非法恶意调用等 性能,可以统计每个接口的访问执行时间来分析系统的瓶颈 异常分析,对于线上的异常,在没有debug的环境下,要想分析问题原因最有价值的就要算异常的堆栈信息 上面的这几点需求,如果接口服务使用的是一些高级产品比如dubbo,其实它已经实现了大部分

创建和调用webapi接口服务文件

前言 源码地址:https://github.com/kmonkey9006/QuickWebApi 现在项目中用的是webapi,其中有以下问题:    1.接口随着开发的增多逐渐增加相当庞大. 2.接口调用时不好管理. 以上是主要问题,对此就衍生了一个想法: 如果每一个接口都一个配置文件来管理,每个配置文件能清晰表示处理接口文件,地址,参数,返回值,那么通过这个配置文件,就能很好的管理起来我们所有的webapi接口不是吗? 有了这个思路之后就有了以下的实现: 具体实现: 1.核心代码 pub