澳门新葡萄京官网注册 6

澳门新葡萄京官网注册asp.net web services

  • Web Service-介绍
  • Web
    Service-创建
  • Web
    Service-使用
  • Web
    Service-扶持的数据类型
  • Web
    Service-安全

复杂类型

近期Internet正在持续地前行着,在网络使用刚最初的时候,大家浏览的网页只是静态的,不可相互的。而以往坐飞机技能的稳步发展,将提须要网页浏览者多个可编制程序的Web
站点。那些站点就要集体、应用、服务、驱动上进一层严密的三结合在一起,这几个站点将透过某个使用软件直接连接到另两个Web
站点,那一个可编制程序的Web
站点比较古板的web站点来讲,将变得更其能重复使用,也更为智能化!


若想传递有个别复杂的数据类型,例如有些自定义类型或组织,那么大家要显式告知ASP.NET
AJAX异步通信层为该服务器端类型更动对应的顾客端JavaScript类型。

  .net平台给我们提供了大器晚成种运涨势况,即公用语言运转条件(CLHighlander,Common
Language Runtime)。对
CLTucson来说,它提供了生机勃勃种内置机制来创设一个可编制程序的站点,、对于Web
程序开垦者和VB
程序猿来讲,那将是同一、熟识的。这种模型是足以重复使用,也能够再推而广之。
它包括了开放的Internet标准(HTTP, XML, SOAP,
SDL)。以便它能被网页浏览者访谈。
  ASP.NET 使用.asmx 文件来对Web Services的支持。.asmx
文件和.aspx文件风度翩翩律都归于文本文件。它包蕴在.aspx文件之中,成为ASP.NET应用程序的风度翩翩部分。

  • 在开始的一段时代的网页世界里,唯有静态的剧情,客商端只可以查看服务器端的提供的从头到尾的经过。
  • 再后来,客商端能够与劳动器端交互作用,比方网址内容管理种类、留言本、投票系统、论坛等。
  • Web Service 即 Web
    服务,相对前面的传教来讲,能够将其定义为劳动器端与劳动器端的相互。比方网站A 与网址 B 通过 Web Servce 来展开数据互换。

如下C#代码描述的Employee类就能够当做一个“复杂类型”,让大家以那些Employee类为例,表明在ASP.NET
AJAX异步通信层传递复杂类型的情势:

  上面大家将举二个轻便易行的例子来介绍.asmx文件,大家还是从”Hello,World”这些精粹的例证聊到,代码如下:

Web Service 协助开放的 Internet 规范,举例 HTTP、XML、SOAP
等,它可以被别的顾客端可能有所 Internet 作用的配备访问和接收。

public class Employee

{

    private int m_id;

    public int Id

    {

        get { return m_id; }

        set { m_id = value; }

    }

 

    private string m_name;

    public string Name

    {

        get { return m_name; }

        set { m_name = value; }

    }

 

    private string m_email;

    public string Email

    {

        get { return m_email; }

        set { m_email = value; }

    }

 

    private int m_salary;

    public int Salary

    {

        get { return m_salary; }

        set { m_salary = value; }

    }

 

    public Employee()

    {

    }

 

    public Employee(int id, string name, string email, int salary)

    {

        m_id = id;

        m_name = name;

        m_email = email;

        m_salary = salary;

    }

}
<!– 文件名:webservicesisam.asmx –>

<%@ WebService Language="VB" Class="HelloWorld" %>
Imports System.Web.Services
Public Class HelloWorld :Inherits WebService
Public Function <WebMethod( )> SayHelloWorld( ) As String
Return("Hello World")
End Function
End Class

能够用 ASP.NET 来轻松完毕 Web Service,ASP.NET Web Service 扩展名是
.asmx。

能够看来,该Employee类共富含4个国有属性:Id、Name、Email和Salary,分别表示职员和工人的号码、姓名、电子邮件地址甚至薪资。除了那4个国有属性之外,Employee类还提供了四个布局函数。但并不曾概念任何措施(即所谓的“退化类”。“退化类”与构造体相符,用来表示构造化的多少)。本小节以致随后的多少小节都将动用该Employee类,为深化印象,我们在那边给出了Employee类的类图,如图3-16所示。

 说明:

  • Web Service-介绍
  • Web
    Service-创建
  • Web
    Service-使用
  • Web
    瑟维斯-帮忙的数据类型
  • Web
    Service-安全

专心:若想让ASP.NET
AJAX异步通信层为服务器端类型自动生成相应的客商端版本,那么该类型必必要提供叁个无参数的构造函数,且该类全体的公有属性都应当提供getter和setter访谈器。其余,在依据劳动器端类型自动生成的客商端版本类型中,唯有原劳动器端类型的国有属性会被封存下去,原项目标章程和个人字段都将不会炫目到客商端对象中(公有字段会被映射到客商端对象中)。

  1.编码最先叶必需开展WebService注解,进而定义那几个文件为贰个Web
瑟维斯。而且,在同大器晚成行中安装好编制程序语言的类型。


澳门新葡萄京官网注册 1

  2.然后,引进名字空间System.Web.Services。注意,那一个名字空间归于最中央的因素,一定要含有它。

图3-16 Employee类的类图

  3.跟着,表明service中的功用模块,也正是类模块,这里的类名称为HelloWorld。这么些类来源于基类WebService,并且应当是public类型。

澳门新葡萄京官网注册,询问了Employee类之后,让大家因此贰个演示程序介绍怎样在ASP.NET
AJAX异步通信层传递该Employee类型。首先是服务器端的Web
Service代码,在那之中定义了七个艺术:CreateNewEmployee(卡塔尔国和SaveEmployee(卡塔尔,分别将赶回或收受二个Employee对象:

  4.最终,定义service的可访谈方法。在代表方法的标志前边,要设置好自定义属性。对应于C#言语,属性值正是[WebMethod];对应于VB,正是。若无安装这些天性,那么那个措施就无法从service中做客。八个局地应用能够动用其它的public类型的类,不过独有具有[WebMethod]的类才足以透过SOAP被远程地会见。

 

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[GenerateScriptType(typeof(Employee))]

[ScriptService]

public class PeopleManagementService : System.Web.Services.WebService

{

    [WebMethod]

    public Employee CreateNewEmployee()

    {

        return new Employee(0, string.Empty, string.Empty, 0);

    }

 

    [WebMethod]

    public bool SaveEmployee(Employee em)

    {

        // 保存到数据库中...

 

        return true;

    }

}

  当对service的乞请产生时,.asmx文件将活动地被ASP.NET运维条件所编写翻译。随后的伸手就能够由缓冲的预编写翻译类型对象实行。

CreateNewEmployee(卡塔尔和SaveEmployee(卡塔尔国方法都无法一气呵成什么具体的办事,仅仅起到示范效能。PeopleManagementService所应用的[GenerateScriptType(typeof(Employee))]天性(上述代码中的粗体部分)才是实现程序功效的严重性的地方,该属性定义于System.Web.Script.Services命名空间中。若大家希望让ASP.NET
AJAX异步通信层为某风姿洒脱长短不一类型改动客商端的JavaScript对应类型,以便变成服务器和客户端之间的报纸发表,则应该用GenerateScriptType属性显式证明。

web教程网

瞩目:实际上,对于“最外层”(即在Web
Service方法的参数或重回值现身过)的错综相连类型,[GenerateScriptType(typeof([TypeName]))]属性并不是威胁须要的。但只要最外层复杂类型中还嵌套有内层的错综复杂类型,比方Employee中有特性子指向的是另一个头晕目眩类型——Manager(那些Manager类型即为嵌套复杂类型),那么我们就必然要显式为Web
Service增加[GenerateScriptType(typeof([Manager]))]属性。或然某Web
Service方法的参数或再次来到值为List<Employee>(就要稍后介绍),那么大家也要为Web
瑟维斯增加[GenerateScriptType(typeof([Employee]))]属性。

  为了测量检验编写好的代码,大家需用三个支撑ASP.NET的Web服务器。即便这一个Web服务器的名字为做server1,其上有一个伪造目录test。请随行上边步骤伊始测验:

正是因为存在着如此的复杂,所以本书提议对于任何现身过的繁缛类型,均在Web
Service类中用[GenerateScriptType(typeof([TypeName]))]属性标出,以调整和减弱由超级大心招致的疏漏所带动特别的恐怕性。此外,[GenerateScriptType(typeof([TypeName]))]性情也能够加上到Web
Service方法上,效果与拉长到Web Service类上等同。

  1.将代码保存为HelloWorld.asmx

接下来在ASP.NET页面中增多ScriptManager控件以至相应的Web Service的引用:

  2.放到Web服务器Foo的杜撰目录Bar下

<asp:ScriptManager ID="sm" runat="server">

    <Services>

        <asp:ServiceReference Path="Services/PeopleManagementService.asmx" />

    </Services>

</asp:ScriptManager>

  3.开垦Internet
Explorer5,在地点栏输入

页面包车型大巴UI部分代码极度直观:

  那时候,大家将看见有关这一个Web
Service的公用方法-也便是那么些标志为WebMethod属性的字符,并搜查缉获调用那么些主意能够应用的商业事务,比如SOAP或然HTTP
GET。

<label for="tbId">Id</label><input id="tbId" type="text" /><br />

<label for="tbName">Name</label><input id="tbName" type="text" /><br />

<label for="tbEmail">Email</label><input id="tbEmail" type="text" /><br />

<label for="tbSalary">Salary</label><input id="tbSalary" type="text" /><br />

 

<input id="btnNew" type="button" value="Create New" 

    onclick="return btnNew_onclick()" />

<input id="btnSave" type="button" value="Save" 

    onclick="return btnSave_onclick()" />

  在Internet
Explorer的地点栏中输入
Description Language
:SDL)语法的有着同样消息的XML文件。那个SDL文件非常重大,客商纠正是接受它来访谈service。

前方多少个<input
/>分别将用来呈现有些Employee对象的Id、Name、Email以至Salary属性,并提供了对那一个属性的编纂效能。前面多个<input
/>作为按键,将分别调用前边Web
Service中定义的CreateNewEmployee(卡塔尔(قطر‎和SaveEmployee(卡塔尔国八个法子的客商端代理。

  从顾客端举行访谈:

btnNew_onclick(卡塔尔国事件管理函数以至对应的回调函数如下:

  除了允许开辟者使用的制造Web
Services的能力以外,Microsoft的.NET框架给客商端提供了生龙活虎套访谈并行使Web
Services的小巧且高深的工具和代码。由于Web
Services是依据如简单对象访谈左券SOAP(Simple Object Access
Protocol)和HTTP那样的开放合同正式的,进而,大家就足以应用这种顾客端本事应用非ASP.NET的Web
Services。当然,那也需用高水准地合成ASP.NET Web
Services和这种顾客端才具。

function btnNew_onclick() {

    PeopleManagementService.CreateNewEmployee(onCreated);

}

 

function onCreated(result) {

    employeeInEditing = result;

    $get("tbId").value = employeeInEditing.Id;

    $get("tbName").value = employeeInEditing.Name;

    $get("tbEmail").value = employeeInEditing.Email;

    $get("tbSalary").value = employeeInEditing.Salary;

}

互连网使用

在意回调函数中的result对象即ASP.NET AJAX异步通信层为C#
Employee类自动生成的客户端类型。图3-17出示了在Visual
Studio调节和测验器中察见到的result对象(类型为Employee)的构造。

  SDK中有叁个工具叫做WebServiceUtil.exe,大家得以行使它来下载多少个Web
Services的SDL描述语言,并创办表明这一个Service的代理类。举个例子,当大家输入以下命令,就能够创立二个名字为HelloWorld.cs的代理类:

澳门新葡萄京官网注册 2

   WebServiceUtil /c:proxy
/pa: 

图3-17 顾客端Employee类型的构造

  这些类看起来与前段时间创制的类特别雷同。它饱含二个措施SayHelloWorld,该格局重回叁个字符串。将那一个代理类编写翻译到三个应用程序中,然后调用那一个代理类的办法,结果正是:通过HTTP,那几个代理类包装SOAP乞求,然后选择SOAP编码响应,最终汇总成为多个字符串。

提示:在实际上支付中,大家也足以直接运用客户端Employee类的布局函数,在客商端间接协会出叁个Employee对象,而不用总是从服务器端拿到程序中要求的新指标,以便压实应用程序的完全质量:

  请看关于Web Service的七个顾客端例程:

var em = new Employee();

  顾客端访谈的文本:clint.aspx,内容如下:

上面代码中的employeeInEditing为全局变量,用来保存当前正被编辑的客商端Employee对象,定义在此三个函数之外:

<%@ Import Namespace="DataTypesService" %>

<html>
<style>
div
{
font: 8pt verdana;
background-color:cccccc;
border-color:black;
border-width:1;
border-style:solid;
padding:10,10,10,10; web教程网
}

</style>

<script language="VB" runat="server">

Public Sub Page_Load(Sender As Object, E As EventArgs)

Dim D As DataTypes = New DataTypes()
Message1.InnerHtml = D.SayHello()
Message1.InnerHtml = Message1.InnerHtml & D.SayHelloName("Bob")
Message3.InnerHtml = Message3.InnerHtml & D.GetMode()

Dim MyIntArray As Integer() = D.GetIntArray()
Dim MyString As String = "Contents of the Array:<BR>"

For I = 0 To MyIntArray.Length – 1
MyString = MyString & MyIntArray(I) & "<BR>"
Next

Message2.InnerHtml = Message2.InnerHtml & MyString

Dim MyOrder As Order = D.GetOrder()
Message4.InnerHtml = Message4.InnerHtml & "<BR>OrderID: " & MyOrder.OrderID
Message4.InnerHtml = Message4.InnerHtml & "<BR>Price: " & MyOrder.Price

Dim MyOrders As Order() = D.GetOrders()
Message5.InnerHtml = Message5.InnerHtml & "<BR>OrderID: " & MyOrders(0).OrderID web教程网
Message5.InnerHtml = Message5.InnerHtml & "<BR>Price: " & MyOrders(0).Price

End Sub

</script>

<body style="font: 10pt verdana">
<H4>Using DataTypes with Web Services</H4>

<h5>Methods that return a Primitive (String): </h5>
<div id="Message1" runat="server"/>

<h5>Methods that return an Array of Primitives (Integers): </h5>
<div id="Message2" runat="server"/>

<h5>Method that returns an Enum: </h5>
<div id="Message3" runat="server"/>

<h5>Method that returns a Class/Struct: </h5>
<div id="Message4" runat="server"/>

<h5>Method that returns an array of Classes/Structs: </h5>
<div id="Message5" runat="server"/>

</body>
</html>

var employeeInEditing = null;

  在客商端程序中,大家使用<%@ Import Namespace=”DataTypesService”
%>来引进DataTypesService那几个大家自定义的名字空间。然后在程序中只是调用了DataTypes瑟维斯中的方法。 

回调函数将服务器端新创立的Employee对象的4个属性值分别呈现在页面中的4个文本框中,供客商编辑。如图3-18所示。

澳门新葡萄京官网注册 3

图3-18 点击“Create
New”开关之后,程序将从劳动器端获得一个新的Employee对象

编排好那4个条文之后,点击“Save”按键,将触发btnSave_onclick(卡塔尔事件管理函数。btnSave_onclick(卡塔尔国事件管理函数以至对应的回调函数如下:

function btnSave_onclick() {

    employeeInEditing.Id = $get("tbId").value;

    employeeInEditing.Name = $get("tbName").value;

    employeeInEditing.Email = $get("tbEmail").value;

    employeeInEditing.Salary = $get("tbSalary").value;



    PeopleManagementService.SaveEmployee(employeeInEditing, onSaved);

}

 

function onSaved(result) {

    if (result) {

        alert("Employee Saved!");

    }

}

里面只是轻松地改进了顾客端Employee对象的4个属性,然后经过ASP.NET
AJAX异步通信层将其传递到劳动器端。图3-19来得了服务器端SaveEmployee(State of Qatar方法选取到的从客户端传入的Employee对象。

澳门新葡萄京官网注册 4

图3-19 SaveEmployee(卡塔尔方法接受到的从客商端传入的Employee对象

在服务器端SaveEmployee(卡塔尔国方法成功再次回到后,客商端onSaved(卡塔尔(قطر‎回调函数将要页面中弹出提示对话框。如图3-20所示。

澳门新葡萄京官网注册 5

图3-20 点击“Save”按键保存该Employee对象之后的程序分界面

稍加时候大家并不愿意将某些服务器端类型中有所的性质均揭露给顾客端对象。比如Employee类中的Salary属性,出于某个安全或隐秘方面包车型地铁设想,大家或许想让异步通信层在自动生成客商端对象(将在其类别化为JSON字符串)时大意该属性,即只在客商端对象中生成Id、Name和Email五个属性。

ASP.NET
AJAX异步通信层能够很好地支撑这么些须求,大家所要做的只是为Employee类中的Salary属性增多[System.Web.Script.Serialization.ScriptIgnore]属性,校正后的Salary属性如下,注意个中粗体部分:

private int m_salary;

[System.Web.Script.Serialization.ScriptIgnore]

public int Salary

{

    get { return m_salary; }

    set { m_salary = value; }

}

那时,ASP.NET
AJAX异步通信层为Employee类生成的顾客端JavaScript类型中就不再包括该Salary属性了。图3-21显得了在Visual
Studio调节和测验器中来看的顾客端Employee类型的协会。

澳门新葡萄京官网注册 6

图3-21 忽视Salary属性后客商端Employee类型的组织

总括:想要让ASP.NET
AJAX异步通信层为服务器端复杂类型自动生成相应的客商端JavaScript类型,并在调用进程中传递并选择该复杂类型,大家供给:

  1. 为Web Service类或Web
    Service中须求暴光给顾客端的法子加多[ScriptService]属性;
  2. 为Web Service中须求暴光给顾客端的主意加多[WebMethod]属性;
  3. Web Service类中的有个别方法的某部参数或再次回到值为该复杂类型;
  4. 为Web
    Service类增加若干个[GenerateScriptType(typeof([TypeName]))]属性,[TypeName]代表该复杂类型或其嵌套的复杂性类型的称谓;
  5. 该复杂类型必定要有三个无参数的布局函数;
  6. 该复杂类型的兼具国有属性应该提供getter和setter访谈器(即供给可读可写),除非如下两种情况:
    1. 该属性应用了[System.Web.Script.Serialization.ScriptIgnore]脾气,即让ASP.NET
      AJAX异步通信层在转换客商端JavaScript类型时大意该属性,那么其性质能够未有setter或getter。
    2. 该服务器端对象只是用来单向输出JSON字符串,那么其性质能够未有setter。
    3. 在顾客端传入的时候不会安装该属性的值,那么该属性能够未有setter。
  7. 在页面中的ScriptManager控件中加多对该Web Service的援用。

然后,ASP.NET
AJAX异步通信层在为某服务器端复杂类型退换客商端JavaScript类型时,将:

  1. 会把还未采取[System.Web.Script.Serialization.ScriptIgnore]的国有属性(property)或国有字段(田野先生)映射到客商端JavaScript类型中;
  2. 不会把该复杂类型的私人商品房字段映射到顾客端JavaScript类型中;
  3. 不会把该复杂类型的点子(method)映射到顾客端JavaScript类型中;

我们也足以应用如下语法在顾客端间接创制该复杂类型:

var myObj = new [NameSpace].[ClassName]();

发表评论

电子邮件地址不会被公开。 必填项已用*标注