基礎拾遺
基礎拾遺------特性詳解
基礎拾遺------webservice詳解
基礎拾遺------redis詳解
基礎拾遺------反射詳解
基礎拾遺------委托詳解
基礎拾遺------接口詳解
基礎拾遺------泛型詳解
基礎拾遺-----依賴注入
基礎拾遺-----數據注解與驗證
基礎拾遺-----mongoDB操作
基礎拾遺----RabbitMQ
前言
工作當中常用的服務接口有三個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:Envelope xmlns: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 消息以及如何交換這些消息。大多數情況下由軟件自動生成和使用。
- Types - 數據類型定義的容器,它使用某種類型系統(一般地使用XML Schema中的類型系統)。
- Message - 通信消息的數據結構的抽象類型化定義。使用Types所定義的類型來定義整個消息的數據結構。
- Operation - 對服務中所支持的操作的抽象描述,一般單個Operation描述了一個訪問入口的請求/響應消息對。
- PortType - 對于某個訪問入口點類型所支持的操作的抽象集合,這些操作可以由一個或多個服務訪問點來支持。
- Binding - 特定端口類型的具體協議和數據格式規范的綁定。
- Port - 定義為協議/數據格式綁定與具體Web訪問地址組合的單個服務訪問點。
- Service- 相關服務訪問點的集合。
-
WSDL?描述了 Web服務的三個基本屬性:
(1)服務所提供的操作
(2)如何訪問服務
(3)服務位于何處(通過 URL 來確定就 OK 了)
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此特性是表示可以從遠程 Web 客戶端調用該方法。
其中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>
?