之前一直用WCF来开发服务,可是从未用过WebService。对WebService有种很神奇的期待,都说WebService比较简单,但是从未用过就对我来说就是一种新的知识。起始让我来说WCF与WebService好坏,其实都差不多吧,随着时代的变迁,人都向往着新的高深技术,有的时候学习一下基础的,老一点的知识也是对自己的一种提升。俗话说万变不离其宗,对我们做编程的也是如此。

  最近也一直在看C#与ASp.NET的基础知识。其实对于基础知识,我们大眼一看啥都会,可是你深究起来,你就会有种你啥都不会的感觉。打实基础才能飞的更高更远,在编程的路上才能走的更远。

  扯远了,现在开启正题:创建web服务

  首先创建ASP.NET Web 应用程序的项目;然后在其项目下面开始创建服务如WebServiceAccept.asmx文件你会发现在App_Code下面或者直接在打开此文件再进行查看源码。就可以开始编写你所要调用的方法了

  在WebService中要调用的方法,首先要在方法最上面写上[WebMethod]例如:

  1. namespace WebServiceApplication
  2. {
  3. /// <summary>
  4. /// WebServiceApplication的摘要说明
  5. /// </summary>
  6. [WebService(Namespace = "http://tempuri.org/")]
  7. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  8. [System.ComponentModel.ToolboxItem(false)]
  9. // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
  10. // [System.Web.Script.Services.ScriptService]
  11. public class WebService1 : System.Web.Services.WebService
  12. {
  13.  
  14. [WebMethod]
  15. public string HelloWorld()//被调用的方法*****************************注意方法名不可以重复
    {
  16. return "Hello World";
  17. }
  18. }
  19. }

  WebService被调用可以返回不同类型的值,包括DataTable,DataSet,string ,int,double等等类型的值。

  OK!Web服务这一块就先写到这里,算是比较容易吧,跟平常写个方法互相调用的关系差不多。下面开始说如何调用WebService

  首先你要知道你所调用的方法在哪个页面中(URL),方法的名字(MethodName)参数object[]paras(给方法传参数是 )。

  1. public class CommonWebService
  2. {
  3. public static object InvokeCallWebservice(string url,string methodName,object[]paras)
  4. {
  5. string nameSpace = "Summay";//引用空间名
  6. try
  7. {
  8. //System.Net.WebClient 类的新实例
  9. System.Net.WebClient webClient = new System.Net.WebClient();
  10. //向流中读取WebService中的地址
  11. Stream stream = webClient.OpenRead(url + "?WSDL");
  12. //提供一种方法,以创建和格式化用于描述 XML Web services 的有效的 Web 服务描述语言 (WSDL) 文档文件,该文件是完整的,具有适当的命名空间、元素和属性。无法继承此类。
  13. ServiceDescription sd = ServiceDescription.Read(stream);//WebService服务说明
  14. string className = sd.Services[].Name;//读取类的名字
  15. ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();//公开一种为 XML Web services 生成客户端代理类的方法。
  16. //将指定的 System.Web.Services.Description.ServiceDescription 添加到要导入的 System.Web.Services.Description.ServiceDescriptionImporter.ServiceDescriptions
  17. // 值的集合中。
  18. sdi.AddServiceDescription(sd,"","");
  19.  
  20. CodeNamespace cn = new CodeNamespace(nameSpace);//表示命名空间声明
  21. CodeCompileUnit ccu = new CodeCompileUnit();//为 CodeDOM 程序图形提供容器
  22. ccu.Namespaces.Add(cn);//添加空间申明
  23. sdi.Import(cn,ccu);//引入控件声明
  24. CSharpCodeProvider csc = new CSharpCodeProvider();//提供对 C# 代码生成器和代码编译器的实例的访问
  25. CompilerParameters cplist = new CompilerParameters();//表示用于调用编译器的参数
  26. cplist.GenerateExecutable = false;//获取或设置一个值,该值指示是否生成可执行文件; 如果应生成可执行文件,则为 true;否则为 false
  27. cplist.GenerateInMemory = true;//获取或设置一个值,该值指示是否在内存中生成输出;如果编译器应在内存中生成输出,则为 true;否则为 false
  28. cplist.ReferencedAssemblies.Add("System.dll");// 添加当前项目所引用的程序集;包含由源引用以进行编译的程序集名称
  29. cplist.ReferencedAssemblies.Add("System.XML.dll");
  30. cplist.ReferencedAssemblies.Add("System.Web.Service.dll");
  31. cplist.ReferencedAssemblies.Add("System.Data.dll");
  32. //从编译器返回结果
  33. CompilerResults cr = csc.CompileAssemblyFromDom(cplist,ccu);
  34. if (cr.Errors.HasErrors)//判断编译器返回的结果是否包含错误
  35. {
  36. return null;
  37. }
  38. Assembly assembly = cr.CompiledAssembly;//加载(获取或者设置)已经编译的程序集
  39. Type t = assembly.GetType(nameSpace+"."+className,false,true);//获取程序集具有指定的类的控件名与类的方法名,是否忽略大小写,在找不到该类型时引发的异常
  40. MethodInfo mi = t.GetMethod(methodName);//搜索具有指定名称的公共方法
  41. object obj = Activator.CreateInstance(t);//用指定类型的默认构造函数来创建该类型的实例
  42. return mi.Invoke(obj, paras);//使用指定的参数调用当前实例所表示的方法或构造函数并返回该方法的返回值
  43. }
  44. catch (Exception ex)
  45. {
  46. return null;
  47. }
  48. }

执行时需要传输URL方法名称,方法参数。例如:string URL=http://localhost:3083/Readers/DMC_Service.asmx;

object obj=CommonWebService.InvokeCallWebservice(URL,"HelloWorld",new object[]{})

  如果需要返回什么样的值,把object进行转换即可。

大神勿喷

实现WebService的调用与被调用的更多相关文章

  1. Atitit 动态调用webservice与客户端代理方式调用

    Atitit 动态调用webservice与客户端代理方式调用 方式1: 使用call.invoke  直接调用WSDL,缺点:麻烦,不推荐--特别是JAVA调用.NET的WS时,会有不少的问题需要解 ...

  2. C# 调用WebService的3种方式 :直接调用、根据wsdl生成webservice的.cs文件及生成dll调用、动态调用

    1.直接调用 已知webservice路径,则可以直接 添加服务引用--高级--添加web引用 直接输入webservice URL.这个比较常见也很简单 即有完整的webservice文件目录如下图 ...

  3. WebMethod在webservice里面非静态方法能调用,在页面类里面,静态方法才能调用

    WebMethod在webservice里面非静态方法能调用,在页面类里面,静态方法才能调用

  4. webservice第一篇【介绍、Scoket、http调用、wsimport调用】

    WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧-. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么一个 ...

  5. webservice创建、部署和调用

    webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互. 下面通过一个简单的例子来创建一个webservice,用的是vs2010开发工具 首先创建一个web应用程序 接着我们添 ...

  6. 基于Axis1.4的webservice接口开发(接口调用)

    基于Axis1.4的webservice接口开发(接口调用) 一.webservice接口代码参考上一篇博客: http://www.cnblogs.com/zhukunqiang/p/7125668 ...

  7. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  8. WebService远程调用(命令行调用)

    远程调用webservice 方法, 通过wsdl命令,生成webservice 对应asmx 文件的对应类(cs文件),然后将此cs文件引用到当前项目中,项目其他地方需要调用webservice方法 ...

  9. Java调用WebService方法总结(4)--Axis调用WebService

    Axis是比较常用的WebService框架,该项目在2006实现了最终版,后面就没有更新了.文中demo所使用到的软件版本:Java 1.8.0_191.Axis 1.4. 1.准备 参考Java调 ...

  10. 浅谈WebService开发三(动态调用WebService)转

    在前两讲里,我已经向大家演示了如何使用WebService.同步, 异步调用WebService,而在实际开发过程中,可能会有多个WebService接口供你选择,而在程序执行过程中才决定使用哪一个 ...

随机推荐

  1. 2机器学习实践笔记(k-最近邻)

    1:算法是简单的叙述说明 由于训练数据样本和标签,为测试数据的示例,从最近的距离k训练样本,此k练样本中所属类别最多的类即为该測试样本的预測标签. 简称kNN.通常k是不大于20的整数,这里的距离通常 ...

  2. 如何解决FormView中实现DropDownList连动选择时出现 "Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的错误

    原文:如何解决FormView中实现DropDownList连动选择时出现 "Eval().XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用" 的 ...

  3. 全排列 ( next_permutation)

    SLT: C++的STL有一个函数可以方便地生成全排列,这就是next_permutation 在C++ Reference中查看了一下next_permutation的函数声明: #include ...

  4. linux_vim_最佳快捷键

    如何使用vi文本编辑器     vi由比尔·乔伊(Bill Joy)撰写,所有UNIX like均默认安装此文本编辑器.详细简介请点击维基中文. 1.首先复制一个文件到/tmp目录(本例中为复制根目录 ...

  5. 如何使用Linq或EF来对数据去重——Distinct方法详解

    刚开始接触LINQ时使用distinct去重时和大家一样遇到了一些麻烦,很感谢 http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062.htm ...

  6. HDU 1243 畅通project 并査集

    Total Submission(s): 31033    Accepted Submission(s): 16313 Problem Description 某省调查城镇交通状况,得到现有城镇道路统 ...

  7. Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试

    Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试   需要FQ才能安装,使用时应该不用FQ了,除非使用postman的历史记录功能:   非常棒的C ...

  8. 用python+selenium导入excel文件

    连接mysql #encoding=utf-8 import pymysql import time class ConnMysql(object): def __init__(self): self ...

  9. C#-面向对象的多态思想 ---ShinePans

    总结: 多态是面向对象的核心.---------能够理解为一个方法,多种实现, 在这里能够用虚方法,抽象类,接口能够实现多态 1.首先利用接口来实现多态: 接口相当于"功能,"接口 ...

  10. 我所理解的Spring AOP的基本概念

    Spring AOP中的概念晦涩难懂,读官方文档更是像读天书,看了非常多样例后,写一些自己理解的一些spring的概念.要理解面向切面编程,要首先理解代理模式和动态代理模式. 如果一个OA系统中的一个 ...