知识大全 c#动态调用Web Service

Posted

篇首语:如果惧怕前面跌宕的山岩,生命就永远只能是死水一潭。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 c#动态调用Web Service相关的知识,希望对你有一定的参考价值。

c#动态调用Web Service  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    看到很多动态调用WebService都只是动态调用地址而已 webservice还是同一个才行 如果换另外的一个不同的webservice 则需重新生成代理类 下面的例子 稍加修改可以做到只修改配置文件而适应不同的webservice 主要原理是根据指定的WebService地址的WSDL 然后解析模拟生成一个代理类 通过反射调用里面的方法 具体看代码    下面是WebService代码     using System;    using System Collections Generic;    using System Linq;    using System Web;    using System Web Services;    namespace TestWebService        /// <summary>    /// Service 的摘要说明    /// </summary>    [WebService(Namespace = Description = 我的Web服务 )]    [WebServiceBinding(ConformsTo = WsiProfiles BasicProfile _ )]    [System ComponentModel ToolboxItem(false)]    // 若要允许使用 ASP NET AJAX 从脚本中调用此 Web 服务 请取消对下行的注释     // [System Web Script Services ScriptService]    public class TestWebService : System Web Services WebService        [WebMethod]    public string HelloWorld()        return 测试Hello World ;        [WebMethod]    public string Test()        return 测试Test ;        [WebMethod(CacheDuration = Description = 测试 )]    public List<String> GetPersons()        List<String> list = new List<string>();    list Add( 测试一 );    list Add( 测试二 );    list Add( 测试三 );    return list;                下面是客户端的代码     客户端:    using System;    using System IO;    using System Collections Generic;    using System Linq;    using System Collections;    using System Web;    using System Net;    using System Reflection;    using System CodeDom;    using System CodeDom Compiler;    using System Web Services;    using System Text;    using System Web Services Description;    using System Web Services Protocols;    using System Xml Serialization;    using System Windows Forms;    namespace ConsoleApplication         class Program        static void Main(string[] args)        WebClient client = new WebClient();    String url = ;//这个地址可以写在Config文件里面 这里取出来就行了 在原地址后面加上 ?WSDL    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;    importer AddServiceDescription(description null null); //添加WSDL文档     CodeNamespace nmspace = new CodeNamespace(); //命名空间    nmspace Name = TestWebService ;    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( TestWebService TestWebService );    object o = Activator CreateInstance(t);    MethodInfo method = t GetMethod( GetPersons );//GetPersons是服务端的方法名称 你想调用服务端的什么方法都可以在这里改 最好封装一下    String[] item = (String[])method Invoke(o null);    //注 method Invoke(o null)返回的是一个Object 如果你服务端返回的是DataSet 这里也是用(DataSet)method Invoke(o null)转一下就行了 method Invoke( null)这里的null可以传调用方法需要的参数 string[]形式的    foreach (string str in item)    Console WriteLine(str);    //上面是根据WebService地址 模似生成一个代理类 如果你想看看生成的代码文件是什么样子 可以用以下代码保存下来 默认是保存在bin目录下面    TextWriter writer = File CreateText( MyTest cs );    provider GenerateCodeFromCompileUnit(unit writer null);    writer Flush();    writer Close();            cha138/Article/program/net/201311/12362

相关参考

知识大全 实现异步调用Web Service,防止页面超时

实现异步调用WebService,防止页面超时  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  普

知识大全 学好基本功之熟练调用 Web Service

学好基本功之熟练调用WebService  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  什么是W

知识大全 在ASP.NET Atlas中调用Web Service

在ASP.NETAtlas中调用WebService  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 使用eclipse调用.net web service

  以前我用的开发框架都是net现在换成javaEE框架和linux平台还需要一段时间的学习有时在测试工作中需要实现一些功能但是又不会用java实现怎么办呢?这里有一个方法使用net的框架开发webs

知识大全 ASP.NET 3.5核心编程之AJAX Web Service的调用

ASP.NET3.5核心编程之AJAXWebService的调用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起

知识大全 用C#制作一个最简单的Web Service

用C#制作一个最简单的WebService  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 C#实现动态调用Windows DLL

C#实现动态调用WindowsDLL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  部分代码来自

知识大全 在C#中动态调用native dll的导出函数

在C#中动态调用nativedll的导出函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在C

知识大全 .NET简谈反射(动态调用)

.NET简谈反射(动态调用)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们继续C#基础知识

知识大全 Spring中的service之间如何调用

Spring中的service之间如何调用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!