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

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

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

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

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

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

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

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

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

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

执行时需要传输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. java中的执行顺序

    静态,非静态,构造,先父再子另外,静态块与静态变量的顺序取决于代码中的顺序 Comparable接口应用

  2. Jquery动态插入table行

    想在一个<table id="table1"></table>标签中动态的插入行,在jquery中可以这样做: $("#table1") ...

  3. H264 编解码器架构简单

    看完后H264/AVC 编解码器演示,头脑是刚刚离开以下三个: 1.H264并且不明白如何指定的编解码器来实现,仅定义了一个编码视频位流的语法.和比特流进行解码,这与MPEG 类似. 2.H264而一 ...

  4. ToDictionary() and ToList()

    ToDictionary() and ToList() 前言: 有两个简单好用的LINQ扩展方法 ToDictionary() 和ToList(),你可能知道或不知道,但是它的的确确可以简化查询转化为 ...

  5. Contoso 大学 - 使用 EF Code First 创建 MVC 应用,实例演练

    Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用.示例中的 Contoso 大学是虚构的.应用包括了类似学生注册.课程创建以及教师分配等功能. 这个系 ...

  6. SSAS系列——【05】多维数据(编程体系结构)

    原文:SSAS系列--[05]多维数据(编程体系结构) 1.什么是AMO? 翻译:AMO是SSAS中一个完整的管理类集合,它在Microsoft.AnalysisServices命名空间下,我们可以在 ...

  7. IOS科研IOS开发笔记学习基础知识

    这篇文章是我的IOS学习笔记,他们是知识的基础,在这里,根据记录的查询后的条款. 1,UIScrollView能完毕滚动的功能. 示比例如以下: UIScrollView *tableScrollVi ...

  8. Python - 字符串的替换(interpolation) 具体解释

    字符串的插值(interpolation) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27054263 字符串的替换 ...

  9. JSR303 Bean Validation 技术规范特性概述

    概述 Bean Validation 规范 Bean 是 Java Bean 的缩写,在 Java 分层架构的实际应用中,从表示层到持久化层,每一层都需要对 Java Bean 进行业务符合性验证,如 ...

  10. Excel基于POI导入导出的Annotation化之路(一)

    Excel在web项目里的使用变得越来越广泛,特别是和线下耦合度较高的业务,Excel导入导出变得非常频繁,尽管很多人写了诸多的工具方法,但是终究没有解决一个问题:有效的控制字段英文名称和实际表头名称 ...