当前位置:   article > 正文

Asp.Net操作WebServices

Asp.Net操作WebServices

主要包括.net平台下创建services服务、后台访问和前端Ajax访问三部分

 

了解定义:

WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。 WebService实现不同语言间的调用,是依托于一个标准,webservice是需要遵守WSDL(web服务定义语言)/SOAP(简单请求协议)规范的。 WebService=WSDL+SOAP+UDDI(webservice的注册) Soap是由Soap的part和0个或多个附件组成,一般只有part,在part中有Envelope和Body。 Web Service是通过提供标准的协议和接口,可以让不同的程序集成的一种SOA架构。 Web Service的优点 (1) 可以让异构的程序相互访问(跨平台)(2) 松耦合 (3) 基于标准协议(通用语言,允许其他程序访问) Web Service的基本原理 (1) Service Provider采用WSDL描述服务 (2) Service Provider 采用UDDI将服务的描述文件发布到UDDI服务器(Register server) (3) Service Requestor在UDDI服务器上查询并 获取WSDL文件 (4) Service requestor将请求绑定到SOAP,并访问相应的服务。

领悟:它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,现在我们所做的费控产品是直接在IIS中配置的直接访问调用的。

一、创建webServices服务。

1、打开vs(本人2012),新建项目—>Web—>ASP.NET空Web空应用程序。

2、在项目上右击选择“添加新建项目”--->Web->Web服务。

3、添加两个方法:

    1>根据阿拉伯数字获得大写的文字

    2>获得用户列表

代码和普通的C#代码一样整体代码下:

using System.Collections.Generic;
using System.Web.Services;

namespace WebServices
{
[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 GetBigString : WebService
{
/// <summary>
/// 根据阿拉伯数字或得大写
/// </summary>
/// <param name="number"></param>
/// <returns></returns>
[WebMethod]
public string ConvertBit(int number)
{
string str;
switch (number)
{
case 1:
str = "一";
break;
case 2:
str = "二";
break;
case 3:
str = "三";
break;
default:
str = "请输入正确的一位数字";
break;
}
return str;
}

/// <summary>
/// 获得学生集合
/// </summary>
/// <param name="stringId"></param>
/// <returns></returns>
[WebMethod]
public List<Studnet> GetStudentList(string stringId)
{
var list = new List<Studnet>();
var t = new Studnet { Address = "湖北省通城县咸宁市隽水镇", Age = 10, Name = "张三" };
var t2 = new Studnet { Address = "北京市海淀区", Age = 10, Name = "李四" };
list.Add(t);
list.Add(t2);
return list;
}
}

public class Studnet
{
public string Name { get; set; }

public int Age { get; set; }

public string Address { get; set; }

}
}


复制代码
 1 using System.Collections.Generic;
 2 using System.Web.Services;
 3 
 4 namespace WebServices
 5 {
 6     [WebService(Namespace = "http://tempuri.org/")]
 7     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
 8     [System.ComponentModel.ToolboxItem(false)]
 9     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
10     [System.Web.Script.Services.ScriptService]
11     public class GetBigString : WebService
12     {
13         /// <summary>
14         /// 根据阿拉伯数字或得大写
15         /// </summary>
16         /// <param name="number"></param>
17         /// <returns></returns>
18         [WebMethod]
19         public string ConvertBit(int number)
20         {
21             string str;
22             switch (number)
23             {
24                 case 1:
25                     str = "一";
26                     break;
27                 case 2:
28                     str = "二";
29                     break;
30                 case 3:
31                     str = "三";
32                     break;
33                 default:
34                     str = "请输入正确的一位数字";
35                     break;
36             }
37             return str;
38         }
39 
40         /// <summary>
41         /// 获得学生集合
42         /// </summary>
43         /// <param name="stringId"></param>
44         /// <returns></returns>
45         [WebMethod]
46         public List<Studnet> GetStudentList(string stringId)
47         {
48             var list = new List<Studnet>();
49             var t = new Studnet { Address = "湖北省通城县咸宁市隽水镇", Age = 10, Name = "张三" };
50             var t2 = new Studnet { Address = "北京市海淀区", Age = 10, Name = "李四" };
51             list.Add(t);
52             list.Add(t2);
53             return list;
54         }
55     }
56 
57     public class Studnet
58     {
59         public string Name { get; set; }
60 
61         public int Age { get; set; }
62 
63         public string Address { get; set; }
64 
65     }
66 }
复制代码

     将该asmx文件设为启动项,运行项目,就能看到该services的说明文件,如:”支持下列操作。有关正式定义,请查看”服务说明“字样。 点击在地址栏加上“?WSDL”或者点击“服务说明”,既可查看该webservices的说明文档,如:http://localhost:4828/GetBigString.asmx?WSDL。总之,能看到该页面,既说明服务启动成功。为了等下客户端调用方便,可将该程序部署到IIS中。

二、在程序中通过引用服务的方式调用

1、另外新建一个web项目。

2、在"引用"上右击选择:”添加服务引用...“

3、输入刚才浏览器中运行的服务地址,点击”转到“。(如果没有部署的IIS上,那么在添加引用的时候,需要将该服务项目运行起来,否则不能添加引用)

4、输入自定义命名空间,点击确定即可。项目中即出现"Service References"文件夹。

5、在项目中,通过实例化类的方式,调用服务。

我在web项目中添加了一个aspx文件,在后台cs代码中添加如下代码:

using System;
using System.Web.UI;
using WebServices;

namespace Client
{
public partial class Index : Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 调用WebServices,将结果赋值给页面控件
TextBox1.Text = GetNumberString(1);
}

private string GetNumberString(int numner)
{
// 实例化服务类
var g = new GetBigString();
var str = g.ConvertBit(numner);
return str;
}
}
}


复制代码
 1 using System;
 2 using System.Web.UI;
 3 using WebServices;
 4 
 5 namespace Client
 6 {
 7     public partial class Index : Page
 8     {
 9         protected void Page_Load(object sender, EventArgs e)
10         {
11             // 调用WebServices,将结果赋值给页面控件
12             TextBox1.Text = GetNumberString(1);
13         }
14 
15         private string GetNumberString(int numner)
16         {
17             // 实例化服务类
18             var g = new GetBigString();
19             var str = g.ConvertBit(numner);
20             return str;
21         }
22     }
23 }
复制代码

页面代码如下:

<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</div>
</form>
</body>


复制代码
1 <body>
2     <form id="form1" runat="server">
3         <div>
4             <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
5         </div>
6     </form>
7 </body>
复制代码

运行该web项目,页面即可出现相应的结果。显示:”一“

主意:在运行web客户端项目的时候,WebServices项目需要启动。

三、用ajax的方式调用WebServices

还是上面的WebServices服务,我们通过前端ajax调用,js代码如下:

<script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "post", //访问WebService使用Post方式请求
url: "http://localhost:8066/GetBigString.asmx/GetStudentList"//WebService的地址和方法名称组合
data: "{stringId:'1'}", //Email参数
contentType: "Application/Json", // 发送信息内容编码类型
success: function (data) {
console.log(data.d);
}
});
});
</script>


复制代码
 1 <script type="text/javascript">
 2         $(document).ready(function () {
 3             $.ajax({
 4                 type: "post", //访问WebService使用Post方式请求
 5                 url: "http://localhost:8066/GetBigString.asmx/GetStudentList"//WebService的地址和方法名称组合
 6                 data: "{stringId:'1'}", //Email参数
 7                 contentType: "Application/Json", // 发送信息内容编码类型
 8                 success: function (data) {
 9                     console.log(data.d);
10                 }
11             });
12         });
13     </script>
复制代码

即可在控制台输出WebServices中的list数据对应的json数据了。

 

四、需要主意的几点:

1、在通过添加服务引用,或者通过ajax调用的过程中,WebServices项目相应是运行状态。

2、我们在GetStudentList方法中,定义了一个string类型的参数,虽然项目中没有用到,但是在ajax调用的时候,必须传参,否则报错。

3、在传递参数的时候,需要把整个参数部分用单引号括起来。

4、如需要ajax调用,需要取消WebServices类文件的第一行注释代码:

// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
[System.Web.Script.Services.ScriptService]

5、在ajax调用中,会出现ajax请求跨域的问题。

已阻止跨源请求:同源策略禁止读取位于 **** 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。
 解决方案参考: 解决ajax请求cors跨域问题

转载于:https://www.cnblogs.com/zhouss/p/4915799.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/610500
推荐阅读
相关标签
  

闽ICP备14008679号