欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

運用C#創(chuàng)建一個.Net下的Web Service

系統(tǒng) 2768 0

 微軟在其.net戰(zhàn)略中,對其主推的Web Service做了大肆的宣揚。現(xiàn)在,Web Service正如火如荼地發(fā)展著,相關的各項新技術層出不窮。Web Service的發(fā)展正構(gòu)筑著互聯(lián)網(wǎng)時代美好的明天。在本文中,我將向大家介紹Web Service的一些基本知識、如何用C#建立一個Web Service。通過文章,我們還將對WSDL、UDDI以及未來的Web Service有一個大致的了解。

為什么需要Web Service?

  以前,分布式的應用程序邏輯需要使用分布式的對象模型,通過使用DCOM、CORBA、RMI之類的基本結(jié)構(gòu),開發(fā)人員仍可擁有使用本地模型所提供的豐富資源和精確性,并可將服務置于遠程系統(tǒng)中。

  當已經(jīng)有中意的中間件平臺(RMI、Jini、CORBA、DCOM 等等)時,我們?yōu)槭裁催€要為Web而煩惱呢?中間件確實提供了強大的服務實現(xiàn)手段,但是,這些系統(tǒng)有一個共同的缺陷,那就是它們無法擴展到互聯(lián)網(wǎng)上:它們 要求服務客戶端與系統(tǒng)提供的服務本身之間必須進行緊密耦合,即要求一個同類基本結(jié)構(gòu)。然而這樣的系統(tǒng)往往十分脆弱:如果一端的執(zhí)行機制發(fā)生變化,那么另一 端便會崩潰。例如,如果服務器應用程序的接口發(fā)生更改,那么客戶端便會崩潰。為了能擴展到互聯(lián)網(wǎng)運用,我們需要一種松散偶合的基本結(jié)構(gòu)來解決這個問題。如 此的情況下就迎來了Web Service的誕生。

什么是Web Service?

  Web Service 是一種新的Web應用程序分支,他們是自包含、自描述、模塊化的應用,可以發(fā)布、定位、通過Web調(diào)用。Web Service可以執(zhí)行從簡單的請求到復雜商務處理的任何功能。一旦部署以后,其他Web Service應用程序可以發(fā)現(xiàn)并調(diào)用它部署的服務。

  Web Service是一種應用程序,它運用了Web網(wǎng)絡技術和基于組件開發(fā)的精華成分。可以使用標準的互聯(lián)網(wǎng)協(xié)議,像超文本傳輸協(xié)議(HTTP)和XML,將 功能綱領性地體現(xiàn)在互聯(lián)網(wǎng)和企業(yè)內(nèi)部網(wǎng)上。像DCOM、RMI、IIOP等基于組件的對象模型已經(jīng)流行了較長一段時間了。然而這些模型都是依賴于一個特定 的對象模型協(xié)議。Web Service擴展了這些模型,使之可以和簡單對象訪問協(xié)議(Simple Object Access Protocol,SOAP)以及XML通信以根除特定對象模型協(xié)議帶來的障礙。可將WebService視作Web上的組件編程。(參見如圖1)

  Web Service基本上是利用超文本傳送協(xié)議(HTTP)和SOAP來使商業(yè)數(shù)據(jù)可以在網(wǎng)上獲得。它將商業(yè)對象(COM對象、Java Beans等)顯露給在HTTP上的SOAP調(diào)用并執(zhí)行遠程功能調(diào)用。因此,Web Service的使用者可以在遠程對象上通過SOAP和HTTP在Web上進行方法調(diào)用。

  圖1

  SOAP調(diào)用是一類能引起在位置B上的Web Service組件程序執(zhí)行的調(diào)用。之后,程序執(zhí)行的結(jié)果就以XML文檔的形式返回給在位置A上的用戶。

  在圖1中,在位置A的用戶怎么知道在位置B的用戶的一些情況的呢?這個就要涉及到一個通用標準。服務描述語言(Service Description Language, SDL),SOAP契約語言(SOAP Contract Language,SCL)以及網(wǎng)絡可訪問性規(guī)格語言(Network Accessible Specification Language,NASSL)都是為了這個目的而建立的XML類語言。然而,IBM和微軟最近同意將Web服務描述語言(Web Service Description Language,WSDL)作為Web Service的標準。

  Web Service組件的結(jié)構(gòu)是通過Web服務描述語言來顯露的。

面臨的任務

  學會Web Service的最好方法就是自己動手做一個實例。我們都熟悉股票報價服務,納斯達克、道瓊斯都是很著名的例子。它們都提供一個輸入公司代號并取得最新的股票價格的接口。本文我們就設法設計出同樣的功能。

創(chuàng)建Web Service的工具

  本文我們通過MS.Net Framework SDK來實現(xiàn)這個程序。

  創(chuàng)建Web Service的比較好的集成開發(fā)環(huán)境(IDE)是Visual Studio.Net。然而,你也可以很容易的用任何文本編輯器(記事本、寫字板、Visual Studio 6.0)來創(chuàng)建一個Web Service文件。

  還有,你必須熟悉以下概念:

  Net平臺的基礎知識

  C#的基礎知識

  面向?qū)ο蟾拍畹幕A知識

創(chuàng)建一個Web Service

  下面,我們將用C#建立一個名為“SecurityWebService”的Web Service。一個Web Service文件將含有形式為.asmx的擴展名。(就像Asp.net的文件擴展名為.aspx)

<%@ WebService Language="C#" class="SecurityWebService" %>   <%@ WebService Language="C#" class="SecurityWebService" %>

  這條語句將告訴編譯器程序?qū)⑦\行在Web Service模式下以及C#類的名稱。同時我們要訪問Web Service的名字空間。還有,最好添加一個對System名字空間的引用。

using System;using System.Web.Services;

  該SecurityWebService的類應該繼承Web Service類的功能。因此,我們添加了下面這行代碼:

public class SecurityWebService : WebService

  現(xiàn)在我們來運用我們的面向?qū)ο蟮募记删帉懸粋€C#類。C#的類和C++、Java的類非常相象,如果你有C++和Java的基礎,這個就是小菜一碟了。

  .Net下的Web Service能夠設定一些基本的數(shù)據(jù)類型。因此,如果我們返回“int”、“float”或是“string”等數(shù)據(jù)類型的話,它能自動將它們轉(zhuǎn)化為標 準的XML輸出。然而不巧的是在大多數(shù)的情況下,我們需要同一個實體的一類數(shù)據(jù)集。下面我先舉個例子。我們的SecurityWebService股票報 價服務要求用戶輸入一個公司的代號,然后它會給出公司的全名以及當前的股票價格。由此,我們需要一個公司的三條信息:

  公司代號(數(shù)據(jù)類型:string)
公司全名(數(shù)據(jù)類型:string)
股票價格(數(shù)據(jù)類型:double)

  我們需要將單個股票報價的數(shù)據(jù)信息分解開。可以有很多方法完成此項工作,我們這里用了最好的枚舉數(shù)據(jù)類型。我們在C#中用了“structs”,和C++中的structs一樣。代碼如下:

public struct SecurityInfo
{
public string Code;
public string CompanyName;
public double Price;
}

  現(xiàn)在我們已經(jīng)完成所有建立Web Service所需的模塊了。因此,所有的代碼如下:

<%@ WebService Language="C#" class="SecurityWebService" %>

using System;
using System.Web.Services;

public struct SecurityInfo
{
public string Code;
public string CompanyName;
public double Price;
}

public class SecurityWebService : WebService
{
private SecurityInfo Security;

public SecurityWebService()
{
Security.Code = "";
Security.CompanyName = "";
Security.Price = 0;
}

private void AssignValues(string Code)
{
// 在這里使用商業(yè)組件
// 方法調(diào)用就是用來獲得所需的數(shù)據(jù)的
// 本程序中我給相應的代碼添加了一個對應的字符串以方便顯示
// 同時,我使用了隨機數(shù)產(chǎn)生器來生成股票價格

Security.Code = Code;
Security.CompanyName = Code + " Pty Ltd";
Random RandomNumber = new System.Random();
Security.Price = double.Parse(new System.Random(RandomNumber.Next(1, 10)).NextDouble().ToString("##.##"));
}

[WebMethod(Description="This method call will get the company name and the price for a given security code.",EnableSession=false)]
public SecurityInfo GetSecurityInfo(string Code)
{
AssignValues(Code);
SecurityInfo SecurityDetails = new SecurityInfo();
SecurityDetails.Code = Security.Code;
SecurityDetails.CompanyName = Security.CompanyName;
SecurityDetails.Price = Security.Price;
return SecurityDetails;
}
}

  請記住,這個Web Service能通過Http做任何使用。我們也許會在代碼中涉及到一些很敏感的商業(yè)數(shù)據(jù),但是卻不想它落入他人之手。那解決的方案就是保護一些邏輯函 數(shù),使用戶只能訪問到一些用來顯示數(shù)據(jù)的函數(shù)。為了達到這個目的,我們使用了關鍵字“[Web Method]”。下面就是示例代碼:

[WebMethod(Description="This......",EnableSession=false)]

public SecurityInfo GetSecurityInfo(string Code)

  這個函數(shù)的訪問類型是公有型的。標簽“Description”是用來描述這個Web Service的功能的。因為我們不必儲存任何session數(shù)據(jù),所以我們將session狀態(tài)設置為false。

private void AssignValues(string Code)

  這是一個應該被邏輯保護的函數(shù)。因為我們不希望我們的商業(yè)機密數(shù)據(jù)能在Web被輕易的獲得,所以我們將函數(shù)的訪問類型設為private(注: 在這里,即使你將函數(shù)的訪問類型設為public,這個函數(shù)還是不能被公共地訪問到,原因是關鍵字“[Web Method]”沒有被用到)。

  到此,我們可以用GetSecurityInfo(string)函數(shù)來獲得最新的股票價格。同時,為了方便起見,我給公司代碼添加了相應公司的名字。還有,股票的價格是隨機產(chǎn)生的。

  最后,我們將該文件保存在一個由IIS控制的目錄下,文件名為“SampleService.asmx”。運行后的圖示如下:

圖2

  以上是一個由.Net Framework生成的Web頁面,我們并沒有創(chuàng)建這個頁面(它是由系統(tǒng)自動產(chǎn)生的,所以我并不需要寫任何代碼來創(chuàng)建該頁面)。這個功能使我們的工作量 相對減輕了不少。同樣,你也可以通過運用Asp.net的Pagelets功能或修改網(wǎng)頁文件使頁面以不同的方式顯示其中的內(nèi)容。

如何使用這個Web Service?

  現(xiàn)在我們來使用這個Web Service。我們先輸入一些值來獲得股票示例價格。

  圖3

  按下Invoke按鈕,我們就可以獲得以下的XML文檔:

  這樣,這個Web Service就給用戶提供了其所需的信息了。因為是XML格式的文檔,我們需要寫客戶端來析取這個XML文檔。客戶端可以為以下幾類:

  1.一個Web頁面
2.一個控制臺或是Windows下的運用程序
3.一個用WML語言描述的手機程序
4.一個運用在PDA上的Palm或Win CE程序

  你可以直接用Http Get方法來調(diào)用這個Web Service。這樣的話就不會出現(xiàn)第一個頁面了,也不需要用戶去點擊Invoke按鈕了。具體方法:

  http://server/webServiceName.asmx/functionName?parameter=parameterValue

  調(diào)用我們的Web Service的方法就是:

  http://localhost/work/aspx/SampleService.asmx/GetSecurityInfo?Code=IBM

  到此為止,我們已經(jīng)知道如何用C#創(chuàng)建并使用一個Web Service,但是任務并沒有完全完成。我們需要知道如何在Internet上找到我們的Web Service,我們的Web Service能不能也被收入在個大搜索引擎。為了解決這個問題,我們就需要建立一個“discovery”文件。

創(chuàng)建發(fā)現(xiàn)文件

  在訪問一個已有的Web Service以前,你必須先得找到并整合這個Web Service,這個過程就是Web Service的發(fā)現(xiàn)過程。通過這個發(fā)現(xiàn)過程,你才知道這個Web Service能為你提供什么樣的服務以及你怎么和它實現(xiàn)互動。發(fā)現(xiàn)文件是一個以.DISCO為擴展名的XML文件。在實際運用中,你是不必為每一個 Web Service創(chuàng)建發(fā)現(xiàn)文件的。以下就是一個發(fā)現(xiàn)文件的例子:

<?xml version="1.0" ?>
<disco:discovery xmlns:disco="http://schemas.xmlsoap.org/disco/">
<scl:contractRef ref="http://localhost/work/aspx/SampleService.asmx?SDL"/>
</disco:discovery>

  我們先將這個文件命名為“SampleService.disco”,并將它保存在該Web Service的目錄下。如果我們是在“/work/aspx”目錄下創(chuàng)建Web Service的話,我們就可以運用更靈活的“動態(tài)發(fā)現(xiàn)”了。“動態(tài)發(fā)現(xiàn)”能自動為我們檢測“/work/aspx”目錄以及子目錄下的所 有*.DISCO文件的,這樣就省了我們不少功夫。

<?xml version="1.0" ?>
<dynamicDiscovery xmlns="urn:schemas-dynamicdiscovery:disco.2000-03-17">
</dynamicDiscovery>

  你可以在http://services3.xmethods.net/dotnet/default.disco獲得一份能使用的發(fā)現(xiàn)文件。 通過分析發(fā)現(xiàn)文件,我們可以找到所需的Web Service。然而,在得到發(fā)現(xiàn)文件前你必須知道這個發(fā)現(xiàn)文件的確切的URL。否則你還是找不到你要的發(fā)現(xiàn)文件的,那么你當然就不能找到你要的Web Service了。這樣,我們現(xiàn)在就要用到一項新技術了――通用發(fā)現(xiàn),描述和整合(Universal Description,Discovery,and Integration,UDDI)來為已存在的Web Service做宣傳了。UDDI是公開的,基于Internet的。這項技術目前還處于起初階段,所以正不斷發(fā)展著。你可以在 http://uddi.microsoft.com/ 獲得有關UDDI的參考。

發(fā)布這個Web Service

  發(fā)布Web Service是很簡單的。和Asp.net的程序差不多,你只要將.asmx文件和.disco文件拷貝到相應的目錄,這樣如果一切正常,這個Web Service就可以工作了。

展望Web Service的未來

  Web Service技術的前途是相當光明的。在推動Web Service技術向前發(fā)展的道路上,不僅微軟注入了很大的投資,Sun、IBM等也表示很大的興趣。同時,網(wǎng)上還有為Apache和Java Web開發(fā)的SOAP工具包。然而,Web Service起步不久,還需要很多的工作要做。特別在國內(nèi),Web Service技術起步比國外有晚了一步,所以更要抓緊時間、迎接挑戰(zhàn)。

運用C#創(chuàng)建一個.Net下的Web Service


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久人人爽人人爽 | 亚洲伦理中文字幕 | 亚洲国产成a人v在线 | 中文字幕视频在线 | 影音先锋中文字幕在线 | 亚洲国产黄色 | 天天影视免费在线观看入口 | 91精品国产一区二区 | 天天操天天操天天操香蕉 | 欧洲成人一区 | 国产高清无专砖区2021 | 国产成人精品一区二区三区四区 | 精品欧美乱码久久久久久1区2区 | 精品国产福利片在线观看 | 色婷婷久久久久swag精品 | 日本一区二区三区四区高清视频 | 成人av免费在线观看 | 一区二区三区四区精品 | 91久久精品一区二区二区 | 国产欧美日韩在线观看 | 大伊香蕉精品视频在线天堂 | 人人草草| 日日摸夜夜摸狠狠摸日日碰夜夜做 | 精品国产一区二区三区久久久蜜月 | 日本动漫三级 | 国产精品揄拍100视频最近 | 一区二区三区网站在线免费线观看 | 国产一区精品 | 91久久国产精品 | 午夜爱爱爱爱爽爽爽网站免费 | 色九月| 精品一区久久 | 我爱我色成人网 | 欧美激情一区二区亚洲专区 | 天堂成人在线 | 电视剧全部免费观看 | 波多野结衣全部系列在线观看 | 国产精品久久久久久久久久 | 琪琪五月天综合婷婷 | 91高清在线观看 | 国产污网站在线观看 |