亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.NET創建Web服務之設計方針

2019-11-18 19:31:29
字體:
來源:轉載
供稿:網友

  使用asp.net構造一個簡單的xml Web服務是相對容易的,然而,XML Web服務的真正的強大的功能只有等你研究了基礎結構以后才能領悟。XML Web服務是建立在.NET框架和公共語言運行時間基礎上的。一個XML Web服務可以利用這些技術。例如,ASP.NET支持的性能、狀態管理和驗證全都可被用來構造XML Web服務。

  XML Web服務的基礎結構是構建來符合象SOAP、XML和WSDL這樣的行業標準,并且它允許其他的平臺的客戶端與XML Web服務互操作。只要一個客戶端可以發送符合標準的SOAP消息、依據格式化的服務描述,那么這個客戶端可以調用一個使用ASP.NET創建的XML Web服務(不管客戶端存在于何種平臺)。

  當你使用ASP.NET構造一個XML Web服務時,它自動支持客戶端使用SOAP、HTTP-GET和HTTP-POST協議通訊。即使HTTP-GET和HTTP-POST支持使用URL編碼的變量名/變量值對來傳送消息,支持這兩個協議的數據類型也沒有支持SOAP協議的數據類型豐富。在SOAP中,使用XML把數據傳送到XML Web服務或從XML Web服務取回消息,你可以使用支持豐富的數據類型集的XSD模式定義復雜的數據類型。使用ASP.NET構造一個XML Web服務的開發者不必明確地定義復雜的數據類型。他們可以只構造一個管理類。ASP.NET處理定義到一個XSD模式的映射類和到XML數據的映射對象實例,以便通過網絡傳輸。

  重要的是要注意XML Web服務并不能取代DCOM,我們應該說XML Web服務是跨越使用行業標準的平臺通信的一種消息傳遞基礎結構。

  因為ASP.NET提供了為XML Web服務內部工作的基礎結構,開發者可以集中精力來實現他們的特定的XML Web服務的功能。使用ASP.NET開發一個XML Web服務從下面三步開始:

  1. 創建一個帶有.asmx擴展名的文件。

  2. 在這個文件里面,使用一條指令聲明XML Web服務。

  3. 定義組成XML Web服務功能的XML Web服務方法。

  XML Web服務是一個強大的技術,用于提供可通過因特網變成訪問的服務。下面的建議將幫助你創建高效的XML Web服務:

  XML Web服務既支持同步的又支持異步的客戶端和存放XML Web服務的服務器之間的通信。在同步通信情況下,客戶端發送一個對服務的請求到服務主機服務器上等待響應。這防止客戶端在等待結果的時候,執行其它的操作。然而異步通信導致客戶端在等待相應的時候繼續處理其它的任務。客戶端在可用的時候響應服務請求的結果。

  當你使用Web服務描述語言工具(Wsdl.exe)來創建你的代理類的時候,它產生類中的方法的標準的、同步版本和異步版本。異步版本由兩個方法組成,稱為Begin和End。Begin方法用于初始化XML Web服務,而End方法取得結果。

  使用異步通信能夠改善系統使用率和避免客戶端在它等待XML Web服務結果的時候的延遲。

  下面的代碼示例顯示如何從一個客戶應用程序產生一個到XML Web服務的異步調用。

[C#]
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Net" %>
<html>
<script language="C#" runat="server">
void EnterBtn_Click(Object Src, EventArgs E)
{
MyMath.Math math = new MyMath.Math();
// Call to Add XML Web service method asynchronously
// and then wait for it to complete.
IAsyncResult result =
math.BeginAdd(Convert.ToInt32(Num1.Text),
Convert.ToInt32(Num2.Text),
null,
null);
// Wait for asynchronous call to complete.
result.AsyncWaitHandle.WaitOne();
// Complete the asynchronous call to Add XML Web service method.
float total = math.EndAdd(result);
// Display results in a Label control.
Total.Text = "Total: " + total.ToString();
}
</script>
<body>
<form action="MathClient.aspx" runat=server>
<font face="Verdana">
Enter the two numbers you want to add and then PRess
the Total button.
<p>
Number 1:
<asp:textbox id="Num1"
runat=server/>
+
Number 2:
<asp:textbox id="Num2"
runat=server/>
=
<asp:button id="Total_Button"
text="Total"
OnClick="EnterBtn_Click"
runat=server/>
<p>
<asp:label id="Total" runat=server/>
</font>
</form>
</body>
</html>
[Visual Basic]
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Net" %>
<html>
<script language="VB" runat="server">
Sub EnterBtn_Click(Src As Object, E As EventArgs)
Dim math As New MyMath.Math()
' Call to Add XML Web service method asynchronously
' and then wait for it to complete.
Dim result As IAsyncResult = _
math.BeginAdd(Convert.ToInt32(Num1.Text), _
Convert.ToInt32(Num2.Text), _
Nothing, _
Nothing)

' Wait for asynchronous call to complete.
result.AsyncWaitHandle.WaitOne()
' Complete the asynchronous call to Add XML Web service method.
Dim addtotal As Single = math.EndAdd(result)
' Display results in a Label control.
Total.Text = "Total: " & addtotal.ToString()
End Sub
</script>
<body>
<form action="MathClient.aspx" runat=server>
<font face="Verdana">
Enter the two numbers you want to add and then press
the Total button.
<p>
Number 1:
<asp:textbox id="Num1"
runat=server/>
+
Number 2:
<asp:textbox id="Num2"
runat=server/>
=
<asp:button id="Total_Button"
text="Total"
OnClick="EnterBtn_Click"
runat=server/>
<p>
<asp:label id="Total" runat=server/>
</font>
</form>
</body>
</html>

  想獲得更多關于異步通信的信息,請參閱后面的"和XML Web服務異步地通訊"。
  通過因特網產生許多服務請求可能影響客戶應用程序的性能。當設計你的XML Web服務時,通過創建把有關信息集中在一起的方法可以有效利用服務請求。例如,假定你有一個XML Web服務,用來檢索一本書的信息。我們可以創建一個在一條服務請求中返回所有的信息的方法,來代替單獨的檢索書名、作者和出版社的方法。一次傳送大塊的信息比多次傳送小塊的信息更有效率。

  下面的代碼示例解釋如何把有關信息組織到單個XML Web服務方法中。

[C#]
<%@ WebService Language="C#" Class="DataService" %>
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web.Services;
public class DataService {
[WebMethod]
public DataSet GetTitleAuthors() {
SqlConnection myConnection = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;server=localhost;database=pubs");
SqlDataAdapter myCommand1 = new SqlDataAdapter ("select * from Authors", myConnection);
SqlDataAdapter myCommand2 = new SqlDataAdapter("select * from Titles", myConnection);
DataSet ds = new DataSet();
myCommand1.Fill(ds, "Authors");
myCommand2.Fill(ds, "Titles");
return ds;
}
}
[Visual Basic]
<%@ WebService Language="VB" Class="DataService" %>
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.Services
Public Class DataService
<WebMethod> _
Public Function GetTitleAuthors() As DataSet
Dim myConnection As New SqlConnection("Persist Security Info=False;Integrated Security=SSPI;server=localhost;database=pubs")
Dim myCommand1 As New SqlDataAdapter("select * from Authors", myConnection)
Dim myCommand2 As New SqlDataAdapter("select * from Titles", myConnection)
Dim ds As New DataSet()
myCommand1.Fill(ds, "Authors")
myCommand2.Fill(ds, "Titles")
Return ds
End Function
End Class

  當設計你的XML Web服務時,請確保使用標準的面向對象編程操作。使用封裝來隱藏實現細節。對于更復雜的XML Web服務,你可以使用繼承和多態性來再次使用代碼并簡化你的設計。

  下面的代碼示例顯示如何使用繼承來創建一個執行數學計算的XML Web服務。

[C#]
<%@ WebService Language="C#" Class="Add" %>
using System;
using System.Web.Services;
abstract public class MathService : WebService
{
 [WebMethod]
 abstract public float CalculateTotal(float a, float b);
}
public class Add : MathService
{
 [WebMethod]
 override public float CalculateTotal(float a, float b)
 {
  return a + b;
 }
}
public class Subtract : MathService
{
 [WebMethod]
 override public float CalculateTotal(float a, float b)
 {
  return a - b;
 }
}
public class Multiply : MathService
{
 [WebMethod]
 override public float CalculateTotal(float a, float b)
 {
  return a * b;
 }
}
public class Divide : MathService
{
 [WebMethod]
 override public float CalculateTotal(float a, float b)
 {
  if (b==0)
   return -1;
  else
   return a / b;
 }
}
[Visual Basic]
<%@ WebService Language="VB" Class="Add" %>
Imports System
Imports System.Web.Services
MustInherit Public Class MathService : Inherits WebService
<WebMethod> _
Public MustOverride Function CalculateTotal(a As Single, _
b As Single) As Single
End Class
Public Class Add : Inherits MathService
<WebMethod> Public Overrides Function CalculateTotal(a As Single, b As Single) As Single
Return a + b
End Function
End Class
Public Class Subtract : Inherits MathService
<WebMethod> Public Overrides Function CalculateTotal(a As Single, b As Single) As Single
Return a - b
End Function
End Class
Public Class Multiply : Inherits MathService
<WebMethod> Public Overrides Function CalculateTotal(a As Single, b As Single) As Single
Return a * b
End Function
End Class
Public Class Divide : Inherits MathService
<WebMethod> Public Overrides Function CalculateTotal(a As Single, b As Single) As Single
 If b = 0 Then
  Return - 1
 Else
  Return a / b
 End If
End Function
End Class
 
  使用輸出緩沖來改善你的XML Web服務的性能。當輸出緩沖開啟時,服務請求的結果被保存在輸出緩沖中一段指定的時間。如果一個類似的XML Web服務請求被產生,結果可以從緩沖中取得,而不用重新計算。這樣就通過減少XML Web服務服務器所需的處理來改善了XML Web服務的反饋時間。高速緩存可在客戶端和服務器兩者上執行。Duration屬性允許你指定高速緩沖保存XML Web服務輸出的時間。

  在客戶端上使用輸出高速緩沖的指令是:

<%@ OutputCache Duration="60" %>

  下面的代碼示例顯示如何在客戶應用程序上使用Duration屬性來指定輸出高速緩沖為60秒。

[C#]
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Net" %>
<%@ OutputCache Duration="60" VaryByParam="none" %>
<html>
<script language="C#" runat="server">
void EnterBtn_Click(Object Src, EventArgs e)
{
 MyMath.Math math = new MyMath.Math();
 // Call the XML Web service.
 float total = math.Add(Convert.ToInt32(Num1.Text),
 Convert.ToInt32(Num2.Text));
 // Display the results in a Label control.
 Total.Text = "Total: " + total.ToString();
}
</script>
<body>
<form action="MathClient.aspx" runat=server>
<font face="Verdana">
Enter the two numbers you want to add and press
the Total button.
<p>
Number 1:
<asp:textbox id="Num1" runat=server/>
+ Number 2:
<asp:textbox id="Num2" runat=server/>
= <asp:button id="Total_Button" text="Total" OnClick="EnterBtn_Click" runat=server/>
<p>
<asp:label id="Total" runat=server/>
</font>
</form>
</body>
</html>
[Visual Basic]
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Net" %>
<%@ OutputCache Duration="60" VaryByParam="none" %>
<html>
<script language="VB" runat="server">
Sub EnterBtn_Click(Src As Object, e As EventArgs)
 Dim math As New MyMath.Math()
 ' Call the XML Web service.
 Dim addtotal As Single = math.Add(Convert.ToInt32(Num1.Text), Convert.ToInt32(Num2.Text))
 ' Display the results in a Label control.
 Total.Text = "Total: " & addtotal.ToString()
End Sub
</script>
<body>
<form action="MathClient.aspx" runat=server>
<font face="Verdana">
Enter the two numbers you want to add and press
the Total button.
<p>
Number 1:
<asp:textbox id="Num1" runat=server/>
+
Number 2:
<asp:textbox id="Num2" runat=server/>
= <asp:button id="Total_Button" text="Total" OnClick="EnterBtn_Click" runat=server/>
<p>
<asp:label id="Total" runat=server/>
</font>
</form>
</body>
</html>

  你還可以使用WebMethod屬性類的CacheDuration屬性來在服務器上允許高速緩沖。下面的代碼示例顯示如何在XML Web服務方法上使用CacheDuration屬性來指定輸出高速緩沖為60秒。

[C#]
<%@ WebService Language="C#" Class="MathService" %>
using System;
using System.Web.Services;
public class MathService : WebService {
[WebMethod(CacheDuration=60)]
public float Add(float a, float b)
{
return a + b;
}
[WebMethod(CacheDuration=60)]
public float Subtract(float a, float b)
{
return a - b;
}
[WebMethod(CacheDuration=60)]
public float Multiply(float a, float b)
{
return a * b;
}
[WebMethod(CacheDuration=60)]
public float Divide(float a, float b)
{
if (b==0) return -1;
return a / b;
}
}
[Visual Basic]
<%@ WebService Language="VB" Class="MathService" %>
Imports System
Imports System.Web.Services
Public Class MathService
Inherits WebService
<WebMethod(CacheDuration := 60)> _
Public Function Add(a As Single, b As Single) As Single
Return a + b
End Function

<WebMethod(CacheDuration := 60)> _
Public Function Subtract(a As Single, b As Single) As Single
Return a - b
End Function

<WebMethod(CacheDuration := 60)> _
Public Function Multiply(a As Single, b As Single) As Single
Return a * b
End Function

<WebMethod(CacheDuration := 60)> _
Public Function Divide(a As Single, b As Single) As Single
If b = 0 Then
Return - 1
End If
Return a / b
End Function
End Class

  當設計你的XML Web服務時,努力遵循如何格式化模式的結構。

  XML Web服務使用SOAP作為主要的傳送和序列化協議。一個SOAP消息由一個可選擇的頭體和消息體組成。頭部分包含可以被Web服務器體系結構處理的信息。SOAP沒有定義任何頭。消息體部分包含由應用程序處理的信息,例如用于XML Web服務的參數或返回值。

  提供用于你的XML Web服務的文檔,如一個靜態HTML文件,描述你的服務的操作和數據結構。還包括如何使用這個XML Web服務的示例。不要依靠服務描述或服務幫助頁面作為你唯一的文檔。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品在线第一页| 欧美激情亚洲综合一区| 欧美老女人xx| 亚洲国产成人精品久久| 精品激情国产视频| 韩国精品美女www爽爽爽视频| 欧美高清电影在线看| 91久久精品美女高潮| 久久精品国产精品| 精品国内亚洲在观看18黄| 欧美精品在线视频观看| 国产精品美女在线观看| 国产日韩在线视频| 欧美重口另类videos人妖| 亚洲欧美日韩国产精品| 91国产精品视频在线| 国产精品福利小视频| 91在线播放国产| 亚洲一区二区三区在线免费观看| 91精品国产自产在线老师啪| 成人亚洲激情网| 久久久久久噜噜噜久久久精品| 欧美一区二区大胆人体摄影专业网站| 亚洲人成在线播放| 亚洲日本中文字幕免费在线不卡| 国产欧美韩国高清| 91沈先生作品| 亚洲精品美女久久| 久久久精品国产亚洲| 国产成人精品电影久久久| 国产精品影片在线观看| 欧美日韩一区二区免费在线观看| 日韩免费av在线| 九九精品视频在线观看| 欧美性猛交xxxx免费看久久久| 国内精品小视频在线观看| 久久大大胆人体| 久久亚洲国产精品成人av秋霞| 国产成人精品视频在线观看| www.欧美三级电影.com| 日韩一区二区福利| 精品久久久久久中文字幕一区奶水| 日韩免费av片在线观看| 色噜噜国产精品视频一区二区| 91在线直播亚洲| 777精品视频| 成人在线激情视频| 日韩高清av一区二区三区| 欧美最猛性xxxxx亚洲精品| 精品成人久久av| 欧美视频在线观看免费网址| 中文字幕日韩视频| 九九精品在线视频| www.日韩视频| 亚洲97在线观看| 欧美日韩精品在线| 九九久久久久久久久激情| 欧美精品日韩www.p站| 亚洲欧美国产精品| 在线观看不卡av| 日韩h在线观看| 奇门遁甲1982国语版免费观看高清| 国产国语videosex另类| 国产成人高潮免费观看精品| 亚洲一区美女视频在线观看免费| 久久av在线播放| 久久久精品视频在线观看| 国产精品亚发布| 69精品小视频| 欧美视频不卡中文| 日韩精品日韩在线观看| 国产区亚洲区欧美区| 91亚洲精品在线观看| 欧美乱大交xxxxx| 欧美日韩激情视频8区| 亚洲国语精品自产拍在线观看| 欧美日韩一区二区精品| 久久综合网hezyo| 国产精品美女www| 久久久久久尹人网香蕉| 在线电影欧美日韩一区二区私密| 国产精品手机播放| 日韩av网址在线| 国产日韩av高清| 伊人伊成久久人综合网站| 九九久久久久99精品| 中文字幕日韩av综合精品| 欧美日韩国产999| 欧美专区在线播放| 国产精品视频99| 亚洲欧美一区二区三区情侣bbw| 国产精品麻豆va在线播放| 亚洲高清久久网| 中国人与牲禽动交精品| 国产精品久久久久77777| 91成人在线观看国产| 欧美性理论片在线观看片免费| 亚洲性av网站| 欧美性xxxx极品hd满灌| 亚洲电影免费观看| 都市激情亚洲色图| 欧美性在线视频| 亚洲国产天堂网精品网站| 中文字幕日韩免费视频| 91精品视频在线免费观看| 韩国一区二区电影| 亚洲色图在线观看| 日韩成人在线视频网站| 亚洲最大的成人网| 亚洲电影在线看| 日韩av三级在线观看| 国产精品一区=区| 成人激情视频在线播放| 亚洲成色www8888| 5252色成人免费视频| 国产精品电影在线观看| 亚洲午夜国产成人av电影男同| 97精品免费视频| 欧美高清videos高潮hd| 91青草视频久久| 国产精品99一区| 日韩在线国产精品| 久久久久久久色| www国产精品视频| 欧美电影免费观看| 日韩欧美亚洲成人| 日韩在线视频二区| 情事1991在线| 国产精品偷伦视频免费观看国产| 成人黄色免费在线观看| 亚洲影院色无极综合| 欧美诱惑福利视频| 亚洲欧美综合区自拍另类| 亚洲精品自拍偷拍| 亚洲成人av片在线观看| 欧美日韩一区二区三区在线免费观看| 日韩视频免费中文字幕| 操日韩av在线电影| 欧美激情精品久久久久久大尺度| 亚洲精品电影网在线观看| 色偷偷偷亚洲综合网另类| 亚洲欧美在线一区二区| 亚洲男女性事视频| 亚洲欧美激情另类校园| 精品视频在线观看日韩| 国产aⅴ夜夜欢一区二区三区| 国产成人精彩在线视频九色| 欧美极品在线播放| 国产91精品在线播放| 午夜免费在线观看精品视频| 日韩精品福利在线| 亚洲mm色国产网站| 欧美人在线观看| 国产精品视频26uuu| 欧美激情在线观看| 亚洲人成亚洲人成在线观看| 亚洲奶大毛多的老太婆| 久久精品这里热有精品| 久久精品色欧美aⅴ一区二区| 日韩成人在线视频| 欧美国产日产韩国视频| 日韩免费在线免费观看| 色综合久久精品亚洲国产| 国产在线视频欧美|