標籤:
基礎拾遺
基礎拾遺------webservice詳解
基礎拾遺------redis詳解
基礎拾遺------反射詳解
基礎拾遺------委託詳解
基礎拾遺------介面詳解
基礎拾遺------泛型詳解
前言
工作當中常用的服務介面有三個wcf,webservice和webapi.首先第一個接觸的就是webservice,今天大致總結一下。
1.webservice概念相關1.1.Web Service也叫XML Web Service WebService
是一種可以接收從Internet或者Intranet上的其它系統中傳遞過來的請求,輕量級的獨立的通訊技術。是:通過SOAP在 Web上提供的軟體服務,使用WSDL檔案進行說明,並通過UDDI進行註冊。
1.2.XML:(Extensible Markup Language)擴充型可標記語言。
面向短期的臨時資料處理、面向全球資訊網絡,是Soap的基礎。它被設計的宗旨是描述資料(XML),而非顯示資料(HTML)。後面單獨部落格進行詳細介紹。
1.3.Soap:(Simple Object Access Protocol)簡單對象存取協議。
是XML Web Service 的通訊協定。其指導理念是“唯一一個沒有發明任何新技術的技術”。當使用者通過UDDI找到你的WSDL描述文檔後,他通過可以SOAP調用你建立的Web服務中的一個或多個操作。SOAP是XML文檔形式的 調用方法的規範,它可以支援不同的底層介面,像HTTP(S)或者SMTP。
<?xml version="1.0"?><soap:Envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope"soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Header> <m:Trans xmlns:m="http://www.w3schools.com/transaction/" soap:mustUnderstand="1">234 </m:Trans></soap:Header> <soap:Body> <m:GetPrice xmlns:m="http://www.w3schools.com/prices"> <m:Item>Apples</m:Item> </m:GetPrice></soap:Body></soap:Envelope>
1.4.WSDL:(Web Services Description Language) Web服務描述語言
WSDL 檔案是一個 XML 文檔,用於說明一組 SOAP 訊息以及如何交換這些訊息。大多數情況下由軟體自動產生和使用。
1.5.UDDI (Universal Description, Discovery, and Integration)
是一個主要針對Web服務供應商和使用者的新項目。在使用者能夠調用Web服務之前,必須確定這個服務內包含哪些商務方法,找到被調用的介面定義,還要在服 務端來編製軟體,UDDI是一種根據描述文檔來引導系統尋找相應服務的機制。UDDI利用SOAP訊息機制(標準的XML/HTTP)來發布,編輯,瀏覽 以及尋找註冊資訊。它採用XML格式來封裝各種不同類型的資料,並且發送到註冊中心或者由註冊中心來返回需要的資料。
2. .net webservice
上面的理論知識就算您不清楚,想要使用webservice還是沒有任何難度的,不信您往下看。
2.1.建立webservice(vs2013) 2.1.1.建立一個webservice項目(檔案->建立->項目->C#->Web服務應用程式)
建完這個工程,我們將看到一個叫ServiceDome.asmx的檔案,就先常見webfrom一樣它類似與aspx,我們直接開啟cs代碼檔案即可,asmx檔案至今沒考慮過他有什麼用.如果你什麼都還沒做的話,將看見一個被注釋掉的helloworld的WebMethod,把注釋去掉,在運行,你就可以得 到最簡單的webservice運行執行個體了.點擊"helloworld"將執行其方法.顯然,這個函數對我們的意義只在於宏觀的瞭解了下web服務的寫 法.
2.1.2.WebMethodAttribute詳解
[WebMethod(Description="備忘資訊")] public string HelloWorld() { return "Hello World"; }
如上,WebMethodAttribute此特性是表示可以從遠程 網頁用戶端調用該方法。
其中WebMethod包括以下6個屬性
(1)Description:
是對webservice方法描述的資訊。就像webservice方法的功能注釋,可以讓調用者看見的注釋。
(2).EnableSession:
指示webservice否啟動session標誌,主要通過cookie完成的,預設false。
public static int i=0;[WebMethod(EnableSession=true)]public int Count(){i=i+1;return i;}
如上Count()回和儲存的session類似把資訊保留下來。
(3)MessageName:
主要實現方法重載後的重新命名.
[WebMethod]public int Add(int i, int j) {return i + j;}[WebMethod(MessageName="Add2")]public int Add(int i, int j, int k) {return i + j + k;}}
(4).TransactionOption:
指示 XML Web services 方法的事務支援。
(5).CacheDuration:
Web支援輸出快取,這樣webservice就不需要執行多遍,可以提高訪問效率,而CacheDuration就是指定緩衝時間的屬性。
public static int i=0;[WebMethod(EnableSession=true,CacheDuration=30)]public int Count(){i=i+1;return i;}
(6).BufferResponse:
配置WebService方法是否等到響應被完全緩衝完,才發送資訊給請求端。普通應用要等完全被緩衝完才被發送的!只有當已知 XML Web services 方法將大量資料返回到用戶端時,才需要將 BufferResponse 設定為 false。對於少量資料,將 BufferResponse 設定為 true 可提高 XML Web services 的效能。當 BufferResponse 為 false 時,將對 XML Web services 方法禁用 SOAP 延伸模組名。
2.2.實現webservice
特性說完就要說我們的webserviece服務介面的實現了,其實對於他的實現和我們實現一個類沒有太大的區別。、
[WebMethod] public string SynCardToDreams(int start, int end) { try { DateTime begin = DateTime.Now; UserSignService userService = new UserSignService(); bool ret = userService.SynChroCardToDreams(start, end); DateTime endTime = DateTime.Now; double total = (endTime - begin).TotalMinutes; string retmsg = ret ? "同步成功" : "同步失敗"; return "本次同步用時 " + total + "分鐘;" + retmsg; } catch (Exception ex) { return "同步失敗:" + ex.ToString(); } }
2.3.調用webservice
在要使用服務的項目處右擊加入服務參考
然後在程式當中直接執行個體化調用此方法即可:
//調用方法 TestServiceReference.TestServiceSoapClient testService = new TestServiceReference.TestServiceSoapClient(); int result = testService.Add(1, 2);
前端調用
<script type="text/javascript"> $(function () { $.ajax({ type: ‘POST‘, url: ‘TestService.asmx/ADD‘, data: ‘{ A: 4,B:4}‘, dataType: ‘json‘, contentType: "application/json", success: function (data) { alert(data.d); } }); });</script>
3.修改webservice服務地址:
3.1修改設定檔
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> </configSections> <system.serviceModel> <bindings> <basicHttpBinding> <binding name="PointStoreServiceSoap" /> </basicHttpBinding> </bindings> <client> <endpoint address="http://localhost:25548/WebServiceDom.asmx" binding="basicHttpBinding" bindingConfiguration="PointStoreServiceSoap" contract="PointStoreService.PointStoreServiceSoap" name="PointStoreServiceSoap" /> </client> </system.serviceModel> </configuration>
基礎拾遺------webservice詳解