实现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接口供你选择,而在程序执行过程中才决定使用哪一个 ...
随机推荐
- DevExpress Report 其他常用设计技巧
原文:DevExpress Report 其他常用设计技巧 1 设置默认的打印纸张及页边距 选择Report-打开属性窗口,设置默认边距(Margins)和默认纸张(PaperKind). 2 修改R ...
- 【LaTeX排版】LaTeX纸排版<两>
1.文件夹的生成 直接使用命令\tableofcontents就可以. 其默认格式例如以下: 我们会发现.这种格式不一定是我们所期望的. 比方说,我们也希望章标题与页码之间也有点连线,而且也希 ...
- Android数据库高手秘籍(六)——LitePal的改动和删除操作
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/40083685 在上一篇文章中,我们学会了使用LitePal进行存储数据的功能.确实 ...
- HDU 3127 WHUgirls(完全背包)
HDU 3127 WHUgirls(完全背包) http://acm.hdu.edu.cn/showproblem.php? pid=3127 题意: 如今有一块X*Y的矩形布条, 然后有n种规格的x ...
- 怎样才能充分利用SQL索引
原文:怎样才能充分利用SQL索引 背景:目前WEB的普及太快,很多网站都会因为大流量的数据而发生服务器习惯性死机,一个查询语句只能适用于一定的网络环境.没有优化的查询当遇上大数据量时就不适用了. 本文 ...
- 如何使用Ubuntu online account API创建微博HTML5申请书
在这篇文章中.我们将使用Ubuntu SDK提供online account API来訪问微博的API并显示所须要的内容.这篇文章的重点是展示怎样在HTML 5中使用online account AP ...
- 图数据库 Titan 高速入门
尤其在互联网世界,图计算越来越受到人们的关注,而图计算相关的软件也越来越丰富.本文将高速展示 Titan这个open source 的图数据库. 注:本文的操作主要基于Titan 官方的两篇文档: - ...
- Vim实用小技巧
Vim实用小技巧 一些网络上质量较高的Vim资料 从我07年接触Vim以来,已经过去了8个年头,期间看过很多的Vim文章,我自己觉得非常不错,而且创作时间也比较近的文章有如下这些. Vim入门 目前为 ...
- Model Validation in Asp.net MVC
原文:Model Validation in Asp.net MVC 本文用于记录Pro ASP.NET MVC 3 Framework中阐述的数据验证的方式. 先说服务器端的吧.最简单的一种方式自然 ...
- Android adb端口转发调试助手Packet Sender
相信大家做过安卓开发或者安卓自动化测试开发的都离不开adb这个Android Debug Bridge这个工具,该工具有个很重要的功能就是端口转发.比如你在目标安卓机器端建立了一个服务来处理获取当前界 ...