WebService 項目實踐筆記

來源:互聯網
上載者:User

註:筆記內容本來就這麼多,其他都應該屬於商業機密。

要點

1. WebService 類,如 Syc.asmx.cs 中的 class Syc ,即擁有 WebMethod 的類。
2. WebService 類,要繼承自 System.Web.Services.WebService。
3. WebService 類,要引用 System.Web.Services 命名空間
4. WebService 類,不需要每個方法都標為 [WebMethod] ,只是公開的介面方法需要。
5. 可序列化的實體物件,即作為 WebMethod 返回的對象實體類
6. 可序列化的實體物件,必須有 [Serializable] 標記
7. 可序列化的實體物件,要引用 System.Xml.Serialization 命名空間
8. 可序列化的實體物件,在經過 WebService 傳遞後,仍可按類執行個體使用它的屬性和方法
9. 可序列化的實體物件,可以擁有一對針對有價值內容的 getter / setter 方法
10. 壓縮除了為了節省傳輸資料量,也為了在一定程度上的資料保密
11. KEY 密鑰 和 Auth 驗證碼產生方法是為了通訊前的安全驗證。
12. 實體物件的編號 ID 屬性 通常是 32位 GUID。不僅保證唯一,也為了支援資料的分布式 Insert。
13. Web 服務提供端(響應端)僅僅需要編寫 *.asmx (.cs)  和 可序列化的實體物件。wsdl 文檔、SOAP 代理程式使用 Microsoft ASP.NET 工具自動產生。
14. 請求端在獲得包括了 WebService 代理類和可序列化對象實體類的 SOAP 代理程式檔案後,可以像調用本地類庫一樣使用這些代碼。
15. 對於不同版本的 ASP.NET 或者完全不同的運行環境,例如 Mono,交換的介面檔案應是 WSDL 文檔。

參考閱讀

Microsoft ASP.NET QuickStart 快速入門教程 Web 服務章節(xxxClient 即為服務要求端)
http://chs.gotdotnet.com/quickstart/aspplus/doc/writingservices.aspx 

Web Service 類聲明

[WebService(Namespace="http://www.abc123.com/WebService/")]
public class Syc
{
......
}

注意:不加標註也是可以的,加標註僅僅是為了聲明命名空間。

Web Service 方法聲明

[WebMethod(Description=".....")]
public  傳回值 方法名 ( 參數表 )
{

返回的對象必須是 序列化對象
對象有效資料可以是 DataSet ,
如果需要壓縮,則資料應該是 XML 或者常值內容 (位元組數組)

}

[Serializable]
對象實體類

(與 UI 同級)
WebService \ UsersEntity.cs

主要屬性:
屬性 Users - 位元組數組
int result
string ErrorString
string CRC
public void SetUserData (ds) —— ( ds --> xml --> ZIP 壓縮 )
public void SetResult ( resultCode)

同步介面
WebService \ Syc.asmx.cs  - 公用 WebService 方法 [WebMethod]

主要方法:
public string CreateAuth( string entityID, string entityName, string key  ) - 產生驗證碼

public bool CheckAuth( string auth ) - 檢查驗證碼

[WebMethod]
public UsersEntity GetOrgUsers (string  orgID, string auth )
方法主要流程:
checkAuth ( orgID, auth )
SetResult ( resultCode )
調用 DataProvider 做 select 返回 ds
調用 UsersEntity 設定資料 (ds)
返回 UsersEntity

資料介面(做 select 返回 ds)
類庫 \ Data \ DataProvider.cs

主要方法:
public DataSet GetOrgUsersRequest (string orgID)
{
DataSet ds = new DataSet();
dataHelper.FillDataSet ( ...., sql, ds, dtName );
return ds;
}

測試案例

1.
string key = "  n 位密鑰 ";  // 公開金鑰
Syc syc = new Syc(); // 載入同步介面
string auth = syc.CreateAuth (entityID, entityName, key);  // 產生驗證碼

2. Console.WriteLine( auth );  // 得到驗證碼(公開金鑰)

3.
WebService / UsersEntity res = syc.GetOrgUsers ("1", auth); // 調用同步介面的 WebMethod
byte[] r = Zip.DecompressData ( res.Users ); // 解壓 XML(DS)資料

4. Console.WriteLine (System.Text.Encoding.UTF8.GetString ( r ));  // 用 UTF8 輸出使用者結果資料(XML文本)

測試案例流程

1. 驗證碼:對公開金鑰 KEY  用目前時間 SHA1 加密
(請求方提供 明文要素 和 加密結果 給回應程式,回應程式看看用明文要素能不能產生發過來的加密結果)

2. 用同步介面 [WebMethod] 取資料(調用資料介面)

(返回)得到一個序列化的實體物件(.NET對象)

3. 從序列化對象方法取得位元組數組

4. 解壓(ZIP)

5. 得到(XML)文本

為服務要求端作準備-1. 產生 WSDL 介面文檔 (XML 格式介面 API)

1. 在瀏覽器地址欄輸入:

http://localhost/.........../Syc.asmx?WSDL

2. 把網頁另存新檔 XML 格式的 Syc.wsdl 檔案,在下一節會用到。

為服務要求端作準備- 2. 產生 SOAP  代理(提供給服務要求端的 C# 程式)

1. 開啟命令列方式

2. Microsoft WSDL 轉換工具的使用方法:

Microsoft (R) Web 服務描述語言工具 + 生產力
[Microsoft (R) .NET Framework,版本 1.1.4322.573]
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.


wsdl.exe -
    用於從 WSDL 協定檔案、XSD 架構和 .discomap 發現文檔,
    為使用 ASP.NET 的 Xml Web service 用戶端和 Xml Web services 產生代碼的實用工
具。
    此工具可以與 disco.exe 一起使用。

wsdl.exe <選項> <URL 或路徑> <URL 或路徑> 

     - 選項 -

<url or path> -
    WSDL 協定、XSD 架構或 .discomap 文檔的 URL 或路徑。

/nologo
    取消顯示著作權標誌。

/language:<language>
    用於產生的代理類的語言。從“CS”、
    “VB”、“JS”、“VJS”中選擇,或者為實現
    System.CodeDom.Compiler.CodeDomProvider 的類提供完整名稱。預設為“CS”

(CSharp)。縮寫為“/l:”。

/server
    基於協定,為使用 ASP.NET 的 Xml Web service 實現產生抽象類別。
    預設為產生用戶端代理類。

/namespace:<namespace>
    產生的代理或模板的命名空間。預設命名空間
    為全域命名空間。縮寫為“/n:”。

/out:<fileName>
    產生的代理代碼的檔案名稱。預設名稱是從
    服務名派生的。縮寫為“/o:”。

/protocol:<protocol>
    重寫要實現的預設協議。從“SOAP”、“SOAP12”、
“HttpGet”、“HttpPost”或設定檔中指定的自訂協議中選擇。

/username:<username>
/password:<password>
/domain:<domain>
    串連到要求身分識別驗證的
    伺服器時使用的憑據。縮寫為“/u:”、“/p:”和“/d:”。

/proxy:<url>
    用於 HTTP 請求的Proxy 伺服器的 URL。
    預設為使用系統代理程式設定。

/proxyusername:<username>
/proxypassword:<password>
/proxydomain:<domain>
    串連到要求身分識別驗證的Proxy 伺服器時使用的憑據。
    縮寫為“/pu:”、“/pp:”和“/pd:”。

/appsettingurlkey:<key>
    在代碼產生中用來讀取 URL 屬性的預設值的配置項。預設為不從配置
    檔案中讀取。縮寫為“/urlkey:”。

/appsettingbaseurl:<baseurl>
    計算 URL 段時使用的基 URL。
    還必須指定 appsettingurlkey 選項。URL 段是
    從 appsettingbaseurl 計算
     WSDL 文檔中的 URL 的相對 URL 的結果。縮寫為“/baseurl:”。

/parsableerrors
    輸出錯誤,其格式與編譯器報告的格式類似。

3. 在命令列執行 wsdl.exe 命令:

F:\WorkPlace\MyProject\WebService>"C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\wsdl.exe" /l:CS /n:SOAP代理類的命名空間 /out:SOAP代理類的C#檔案名稱.cs WSDL源檔案.wsdl

例如:

F:\WorkPlace\MyProject\WebService>"C:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\wsdl.exe" /l:CS /n:StephenCat.WebService.SycService /out:SycService.cs syc.wsdl

執行後的螢幕輸出內容:

Microsoft (R) Web 服務描述語言工具 + 生產力
[Microsoft (R) .NET Framework,版本 1.1.4322.573]
Copyright (C) Microsoft Corporation 1998-2002. All rights reserved.

正在寫入檔案“SycService.cs”。

所成生的 SOAP 代理檔案包含以下內容:

1. 與 WebService 類同名、擁有相同方法的代理類,如 class Syc
2. WebService 類中使用到的所有可序列化對象實體類,如 class UsersEntity
3. 以上所有類被包含在同一個命名空間中,該命名空間在命令列執行 wsdl 的參數中指定。

服務要求端調用 Syc 同步介面

參見《微軟 ASP.NET 快速入門教程 Web服務樣本》:
http://chs.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/services/DataTypes/DataTypesClient.src&file=CS\DataTypesClient.aspx&font=3

由 WDSL 產生的SOAP代理檔案:
http://chs.gotdotnet.com/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/services/DataTypes/DataTypesClient.src&file=CS\DataTypes.cs&font=3

其中:
DataTypes 是 SOAP 代理類
Order 是對象實體類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.