【ASP.NET】创建第一个ASP.NET WebService程序
一. 准备条件
1. 打开Visual Studio,并且准备创建一个.NET Framework的web网站。(ASP.NET Core不支持创建WebService)
二. 创建WebService实例
新建一个空的.NET Framework网站
添加WebService类
WebService1.asmx的名字可以改成其它你想要的,这个文件名也就是最后webservice的网址名称。
这里笔者取名为CalculartorWebService.asmx,并且内部代码为:
/// <summary> /// Summary description for WebService1 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class CalculatorWebService : System.Web.Services.WebService { [WebMethod(Description = "Return the value a plus b")] public int Add(int a, int b) { return a + b; } [WebMethod(Description = "Return the value a minus b")] public int Substract(int a, int b) { return a - b; } }
被[WebMethod]属性所标记的方法会被视为公共web接口,可以被远程调用。
然后 Build 程序,Build成功后,启动程序。便可以看到创建的WebService程序。
可以看出,WebService罗列出了所有的Web方法 和 方法的描述。你也可以点进每一个方法的内部查看详细的信息和运行测试数据。
除此之外,你也可以添加多个WebService,然后启动程序。
然后可以通过访问地址
http://localhost:57932/CalculatorWebService.asmx
http://localhost:57932/CarService.asmx
来查看上面定义的WebService接口。
三. 调用WebService数据
在创建完成WebService后,需要进行部署WebService服务。
这里笔者启动了第二个Visual Studio实例,并且创建了一个控制台应用程序。笔者将会用这个程序来调用上面创建的WebService数据。
添加服务引用
NameSpace你可以随便命名为你想要的,后面调用这个服务都会用到这个命名空间。
点击Finish后,等待程序完成WebService的引用。在引用完成后,你就可以调用这个web服务了。笔者除了引用了http://localhost:57932/CalculatorWebService.asmx, 还引用了http://localhost:57932/CarService.asmx。成功添加引用后,会在你的Connected Services目录下显示你所添加的引用。
然后你就可以通过如下的代码的进行调用,注意,把命名空间和类名更换为你自己的名称。
//调用CalculatorService下的CalculatorWebServiceSoapCleint类下的Add方法 CalculatorService.CalculatorWebServiceSoapClient calculatorService = new CalculatorService.CalculatorWebServiceSoapClient(CalculatorService.CalculatorWebServiceSoapClient.EndpointConfiguration.CalculatorWebServiceSoap); Console.WriteLine(calculatorService.AddAsync(1, 2).GetAwaiter().GetResult()); //调用CarService下的CarServiceSoapClient类下的GetBrand方法 CarService.CarServiceSoapClient carService = new CarService.CarServiceSoapClient(CarService.CarServiceSoapClient.EndpointConfiguration.CarServiceSoap); Console.WriteLine(carService.GetBrandAsync().GetAwaiter().GetResult().Body.GetBrandResult);
输出结果
四. WebAPI和WebService的简单对比
webapi用的是http协议,
webservice用的是soap协议webapi无状态,相对webservice更轻量级。webapi支持如get,post等http操作
soap 协议:它描述了一种在分散或分布式的环境中如何交换信息的轻量级协议。soap在http协议的基础上,一个基于XML的协议。
SOAP在HTTP协议的基础上,把编写成XML的REQUEST参数, 放在HTTP BODY上提交个WEB SERVICE服务器(SERVLET,ASP什么的) 处理完成后,结果也写成XML作为RESPONSE送回用户端, 为了使用户端和WEB SERVICE可以相互对应,可以使用WSDL作为这种通信方式的描述文件,利用WSDL工具可以自动生成WS和用户端的框架文件,SOAP具备把复杂对象序列化捆绑到XML里去的能力。