2011-04-17 81 views
2

我已經在我的服務中創建了三個自定義類中的一些成員函數。我的目標是在客戶端使用這些自定義類來訪問服務中的成員函數。我如何將這些類中的所有成員方法公開給客戶端?通過WCF公開自定義類中的成員函數

我在我的服務中創建了這三個類,並將它們標記爲「DataContract」,成員函數爲「OperationContract」。我創建了一個Interface,它將這些自定義類定義爲OperationContracts,通過在單獨的類上實現它們來返回每個類的對象。

不幸的是,我無法實現我的目標,因爲兩個類有一個構造函數需要一些參數,而沒有構造函數的類可以在客戶端訪問,但我看不到類中的成員方法。

我需要你的提示,該怎麼做。

回答

0

這並不容易。一種方法是在WCF服務器及其客戶端之間共享DataContract -decorated類型,即在客戶端項目中添加對服務程序集的引用,並將服務引用綁定到該程序集引用。

但是,這破壞了契約實現的獨立性,因爲完全相同的服務程序集將需要存在於客戶端和服務器上,並且每次更改時都要保持同步。

有關更多詳細信息,請參見here

0

默認情況下,通過設計,WCF將僅在客戶端和服務器之間共享合同,例如,你的服務([ServiceContract]),他們的方法([OperationContract])和他們操作的數據結構([DataContract])。

WCF是一個消息傳遞系統,所以所有的客戶端和服務器共享傳遞的數據是XML序列化的消息格式。添加服務引用時,客戶端代理將爲每個[DataContract]生成一個類,這些類在XML序列化格式中看起來完全相同 - 只有數據正在來回移動 - 沒有行爲(無方法)。

基本上,如果你想公開功能,你需要有一個服務方法裝飾[OperationContract]屬性。對您的數據類的方法從不對客戶端可見 - 這是設計。

如果你控制通信的兩端都是基於.NET的,你可以「欺騙」自己的方式來解決此限制:

  • 把所有的服務和數據合同到一個單獨的類庫裝配
  • 使用引用到公共的共享組件
  • 之前創建的服務,你做一個Add Service Reference,您的客戶端添加到常用程序集的引用

在這種情況下,WCF運行時將重新使用該常見程序集中的現有類型,而不是從服務描述中重新創建它們。由於該程序集包含服務器也使用的共享代碼,因此您的類也有其方法。

它只適用於.NET的情況下可以正常工作,但它確實是適當的服務分離門面背後的骯髒竅門。

相關問題