Web Services 和WCF技術分析之反射

2021-08-10 12:31:46 字數 4888 閱讀 5498

1,兩者的區別。

wcf可以不依賴於iis。

wcf可以配置成basichttpbinding來相容(或者說變身成)ws。

wcf可以基於tcp或者messegequeue來傳輸資料。

wcf的可配置性比ws強,比如安全性。

wcf可以是有狀態的,並支援事務。

wcf 支援多種通訊協議 http/https 、tcp/udp、msmq、命名管道、對等網、

訊息可達性、事務流等。

wcf 可以與asp.net 整合、共享乙個上下文(httpcontext)。

wcf 支援多種訊息傳輸格式 :text,binary,mtom,json 等。

wcf 安全性要強:支援對稱安全、非對稱安全、訊息安全、傳輸安全、

ssl 流安全、windows 流安全等。

wcf 支援多種會話模式:單向、雙向、請求/響應。

wcf 支援rest 。

wcf 支援多種格式化方式。datacontractserializer、xmlserializer、 

datacontractjsonserializer 等。

wcf 支援 was hosting、windows 服務 hosting、self-hosting、iis hosting 等。

wcf 支援多種併發模式:單例、單調、會話 

2,這裡要講的是通過純執行時**實現方法的呼叫。主要用到的技術是反射。

一,web services

private object agent;

private type agenttype;

private const string code_namespace = "demo";

///
/// 建構函式  

///
///
public webserviceagent(string url)

catch (exception ex)

}

實現思路:利用wsdl生成xml文件,利用反射生成客戶端** agent = activator.createinstance(agenttype);

二,wcf,引用wcf服務,網上能夠找到詳細的例子,但都集中於兩種方式,1,新增服務引用,這樣每次服務變更,需要更新一下引用。2,通過channelfactory快速繫結乙個終結點,但也需要客戶端**(契約)。wcf乙個好處是它是基於契約的,意思是我不管裡面如何實現,客戶端只關心契約的結果。在構建複雜應用場景中,如何讓我們**高內聚,低耦合,有同學說了可以面向介面程式設計呀,誠然,wcf實現了,這是終極解決方案麼?當然不是,假如介面變動了麼?相信這是所有程式設計師的噩夢。.net用反射機制來解決此類問題,所有操作動態生成,這樣,我們不用在關心服務端的變更會影響到客戶端。只需閱讀介面文件,這樣我們關心的問題轉移到配置檔案。這種方式會犧牲一些效能(反射),這裡我們需要在效能和便於維護之前平衡了。

public webserviceagent(string url,string aa)

throw new exception(sb.tostring());

}

//生成**例項

原理同web services。

3,通過**呼叫方法,這裡主要介紹wcf,因為沒有親自編碼,後面不對webservices在做介紹。

public object invoke(string methodname, params object args)

catch (exception e)

}

這裡我預設返回是乙個集合,因為客戶端不清楚返回集合的結構,而我們又不想編寫多餘的客戶端指令碼,這裡通過datacontractjsonserializer實現到json的轉換。這個前提是服務端實體類通過[datacontract]標記為可被序列化。

///
///呼叫指定方法  

///
///
///
///
public object invoke(methodinfo method, params object args)

catch (exception e)

}

4,關於wcf傳遞引數問題,由於沒有客戶端**是動態建立的,我們用 object args存放引數。

服務端**:

[operationcontract]

logincheckresult checklogin(string username, string authorizationcode);

客戶端呼叫:

object args = new object[2];

// args[0] = rtbsend.text;

args[0] = "superadmin";

args[1] = "aaa";

var  receive =  service.invoke(methodname, args).tostring() ;

這裡service是上面我們動態生成的**,methodname是我們動態解析出來的方法名--checklogin

近年來rest風格服務非常流行,這種鬆散的介面是前端界的一股清流,所到之處,無不誇讚,傳統的web services和wcf備受歧視,輕量級和安全將是未來主導面向服務程式設計的兩大特性

理解Web Services附件

使用xml來傳遞訊息會給您的應用程式帶來許多好處 通過它您可以利用大量的api 跨平台支援 以及用來描述和操縱xml 例如xquery,xslt,xpath和xml schema 的通用工具。你不想關心的許多細節問題也可以由xml來處理 比如行結束 字元編碼 結構化資料和分界 這使您只需將精力集中於...

Web Services 摘要資訊

標準化是制約技術發展的乙個重要因素,也是人們在經歷了大量的異構 不相容問題後的深切體會。目前,eai 是企業進行資訊化改造的主要方法。web services 技術建立在標準性與開放性基礎之上。傳統的安全認證 訪問控制體系結構框架的不一致性使得整個安全認證 訪問控制體系的標準化難以得到控制。服務是封...

Remoting與Web Services的區別

概括的說remoting與web services的區別是 1 既支援tcp通道又支援http通道,傳輸速度快 2 即可傳輸xml的soap包又可傳輸二進位製流,效率高 3 remoteing主要用於c s結構專案 4 不一定要依賴iis伺服器 其實現的原理並沒有本質的區別,在應用開發層面上有以下區...