公司的项目中用到了WebService,所以学习了一下net环境下的WebService搭建并且在此记录供大家学习参考。

主要步骤:

  • 创建服务,创建一个.net framwork web项目用来提供WebService服务
  • 调用服务,这里调用我写了两个案例,一个是.net framwork控制台调用,另一个是.net core web来调用。不过大体相似。

一、创建服务

  1. 创建一个.net framwork web 空项目

WebService环境搭建及学习 - 图1

WebService环境搭建及学习 - 图2

  1. 右击项目名,点击添加 -> 新建项(Ctrl + Shift + A)

WebService环境搭建及学习 - 图3

  1. 选择Web -> Web服务(ASMX),点击添加

WebService环境搭建及学习 - 图4

  1. 如图,创建了一个WebService1.asmx文件,我在里面添加了Sum,Sum1,Sum2方法。

WebService环境搭建及学习 - 图5

  1. 点击启动,可以看到首页中有我们自定义的方法。没有ref参数的方法可以点击对应方法来进行调用。 记录下URL:https://localhost:44344/WebService1.asmx,后面客户端配置服务引用的时候要用到。

    WebService服务到此也就创建完成了,接下来我们要创建客户端来调用这些方法。

WebService环境搭建及学习 - 图6

二、调用服务

1. .Net Framework 控制台应用

  1. 创建一个.net framework 控制台项目

WebService环境搭建及学习 - 图7WebService环境搭建及学习 - 图8

  1. 在 引用 右击,点击添加服务引用。

WebService环境搭建及学习 - 图9

  1. 点击 高级 -> 添加Web引用

WebService环境搭建及学习 - 图10WebService环境搭建及学习 - 图11

4.在URL中填入上一步的URL:https://localhost:44344/WebService1.asmx

然后点击右边的 “->”,填写完引用名后点击 “添加引用”。

WebService环境搭建及学习 - 图12

5.然后你会发现项目多了一个文件“Web References/引用名”。

WebService环境搭建及学习 - 图13

6.然后在代码中写入以下代码来调用Web Service服务,点击运行就OK啦。

  1. namespace WebServiceClient1
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. // 动态创建客户端
  8. // localhost.WebService1 service = new localhost.WebService1("SOAP", "​https://localhost:44344/WebService1.asmx​")
  9. localhost.WebService1 service = new localhost.WebService1();
  10. Console.WriteLine("HelloWorld返回值:" + service.HelloWorld());
  11. Console.WriteLine("sum返回值:" + service.sum(1, 2));
  12. int a = 0;
  13. Console.WriteLine("sum1返回值:" + service.sum1(3, 4, ref a) + " a的值为:" + a);
  14. Console.WriteLine("sum2返回值:" + service.sum2(5, 6));
  15. Console.ReadLine();
  16. }
  17. }
  18. }

WebService环境搭建及学习 - 图14

最后说一下服务路径的配置信息,在App.config文件下

WebService环境搭建及学习 - 图15

2. .Net Core web api应用

  1. 创建一个.net core web api项目
  2. 右击“Connected Services” -> “管理连接的服务”

WebService环境搭建及学习 - 图16

  1. 如图填写配置信息。

WebService环境搭建及学习 - 图17

  1. 就可以看到Connected Services下生成如下文件。

WebService环境搭建及学习 - 图18

  1. 最后写我们的代码就行了。
  1. public static void Main(string[] args)
  2. {
  3. WebService1SoapClient client =
  4. new WebService1SoapClient(WebService1SoapClient.EndpointConfiguration.WebService1Soap,
  5. "https://localhost:44344/WebService1.asmx");
  6. // 如果原方法类型返回类型为基本数据类型且参数不含ref,则调用方法如下
  7. int r1 = client.sumAsync(1, 2).Result;
  8. // 如果原方法返回类型为基本数据类型且参数含ref,则调用方法如下
  9. int c = 0;
  10. sum1Response r2 = client.sum1Async(new sum1Request(1, 2, c)).Result;
  11. Console.WriteLine(r2.c);
  12. Console.WriteLine(r2.sum1Result);
  13. // 如果原方法返回类型为 类 且参数不含ref,,则调用方法如下
  14. sum2Response r3 = client.sum2Async(1, 2).Result;
  15. Console.WriteLine(r3.Body.sum2Result);
  16. }

3. 前端Js调用

asmx默认的代码如下,若需要前端js调用需要将 允许ajax调用web服务下面一行代码 取消注释

  1. /// <summary>
  2. /// TestServer 的摘要说明
  3. /// </summary>
  4. [WebService(Namespace = "http://tempuri.org/")]
  5. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  6. [System.ComponentModel.ToolboxItem(false)]
  7. // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。
  8. // [System.Web.Script.Services.ScriptService]
  9. public class WebService1 : System.Web.Services.WebService
  10. {
  11. [WebMethod]
  12. public string HelloWorld()
  13. {
  14. return "Hello World";
  15. }
  16. }
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <title></title>
  6. <script src=" http://libs.baidu.com/jquery/1.11.1/jquery.min.js "></script>
  7. <script type="text/javascript">
  8. $(function () {
  9. $("#getdata").click(function () {
  10. $.ajax({
  11. type: 'POST',
  12. url: 'WebService1.asmx/HelloWorld',
  13. data: '{ id:"bb101"}',
  14. dataType: 'json',
  15. contentType: "application/json",
  16. success: function (data) {
  17. $("#data").append(data.d);
  18. }
  19. });
  20. });
  21. });
  22. </script>
  23. </head>
  24. <body>
  25. <a id="getdata" href="javascript:void(0);">获取webservice数据</a>
  26. <div id="data"></div>
  27. </body>
  28. </html>