实现WebService的调用与被调用
之前一直用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的调用与被调用的更多相关文章
- Atitit 动态调用webservice与客户端代理方式调用
Atitit 动态调用webservice与客户端代理方式调用 方式1: 使用call.invoke 直接调用WSDL,缺点:麻烦,不推荐--特别是JAVA调用.NET的WS时,会有不少的问题需要解 ...
- C# 调用WebService的3种方式 :直接调用、根据wsdl生成webservice的.cs文件及生成dll调用、动态调用
1.直接调用 已知webservice路径,则可以直接 添加服务引用--高级--添加web引用 直接输入webservice URL.这个比较常见也很简单 即有完整的webservice文件目录如下图 ...
- WebMethod在webservice里面非静态方法能调用,在页面类里面,静态方法才能调用
WebMethod在webservice里面非静态方法能调用,在页面类里面,静态方法才能调用
- webservice第一篇【介绍、Scoket、http调用、wsimport调用】
WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧-. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么一个 ...
- webservice创建、部署和调用
webservice 可以用于分布式应用程序之间的交互,和不同程序之间的交互. 下面通过一个简单的例子来创建一个webservice,用的是vs2010开发工具 首先创建一个web应用程序 接着我们添 ...
- 基于Axis1.4的webservice接口开发(接口调用)
基于Axis1.4的webservice接口开发(接口调用) 一.webservice接口代码参考上一篇博客: http://www.cnblogs.com/zhukunqiang/p/7125668 ...
- 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 ...
- WebService远程调用(命令行调用)
远程调用webservice 方法, 通过wsdl命令,生成webservice 对应asmx 文件的对应类(cs文件),然后将此cs文件引用到当前项目中,项目其他地方需要调用webservice方法 ...
- Java调用WebService方法总结(4)--Axis调用WebService
Axis是比较常用的WebService框架,该项目在2006实现了最终版,后面就没有更新了.文中demo所使用到的软件版本:Java 1.8.0_191.Axis 1.4. 1.准备 参考Java调 ...
- 浅谈WebService开发三(动态调用WebService)转
在前两讲里,我已经向大家演示了如何使用WebService.同步, 异步调用WebService,而在实际开发过程中,可能会有多个WebService接口供你选择,而在程序执行过程中才决定使用哪一个 ...
随机推荐
- (转).net webconfig使用IConfigurationSectionHandler自定section
自定义配置结构 (使用IConfigurationSectionHandler) 假设有以下的配置信息,其在MyInfo可以重复许多次,那么应如何读取配置呢?这时就要使用自定义的配置程序了.<m ...
- windows下系统移植到linux下出现的问题
今天遇到了一个之前没有遇到的问题,记录一下. 我们是在windows下进行开发的,最终系统是部署在linux服务器上. 在windows一切正常,但是部署到linux下时,有些功能不能用了.通过log ...
- 前端项目部署之Grunt
如果你的前端项目很小或都者项目不需要通过专门的运维同学走流水线上线部署的话,那么可以略过以下的繁文. ok,Let's go! 我们看看如何使用grunt来部署上线项目? 前端项目一般分为两种类型:T ...
- MyEclipse优化全攻略
(0) 吐槽 Eclipse仅仅是个半成品有木有?什么都须要自己安装插件,新手非常难用有木有? 安装上插件以后了版本号兼容和各种问题烦死人有木有? 都怪碎片和版本号乱公布有木有? IntelliJ I ...
- FPGA笔记-阅读.dat文件
阅读.dat图像文件 .dat文件是matlab生成的图像文件 initial begin // Initialize Inputs CLK = 0; RST = 1; IMAGE_DATA = 0; ...
- 利用WebBrowser实现Web打印的分析
原文:利用WebBrowser实现Web打印的分析 WebBrowser是IE内置的浏览器控件,无需用户下载.本文档所讨论的是有关IE6.0版本的WebBrowser控件技术内容.其他版本的IE应该也 ...
- Roundabout for jQuery
效果图: Roundabout是一个转换静态HTML元素结构为交互式播放区域的jQuery插件(而且并不仅仅是一个转盘,还有许多的形状) 首先你要下载好Jquery.min.js,和Jquery-Ro ...
- 概率图形模型(PGM)学习笔记(一)动机和概述
在本文中,基于Daphne Koller完成课程. PDM(ProbabilisticGraphiccal Models) 称为概率图模型. 以下分别说明3个词相应的意义. 概率 -给出了不确定性的明 ...
- 2014值得期待的Erlang两本新书
在2014年的开头就有这样一个令人振奋的好消息,Erlang有一本新书即将出版 <The Erlang Runtime System>,其作者happi在2013年3月份发布了这本书的写作 ...
- java设计模式之二抽象工厂模式(Abstract Factory)
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...