2010-10-03 65 views
1

我有我的應用程序服務使用我的花哨類的說明(ServiceDescription類包含收集ServiceMethod說明,爲了簡化)。傳播應用程序服務作爲WCF服務

現在,我想公開一個應用服務作爲一個WCF服務(一個合同)。目前的解決方案非常蹩腳 - 我的控制檯應用程序爲每個應用程序服務生成* .svc文件(ServiceDescription)。有一種方法(操作)爲一個ServiceMethod生成。

這工作得很好,但我想讓它變得更好。它可以使用T4模板進行改進,但我相信在WCF中還有更好的方法。

我仍然想每個應用程序服務有一個* .svc文件,但我不想生成方法(對應的應用程序服務方法)。 我確定必須有一些接口允許在運行時動態地發現操作。也許IContractBehavior ...

謝謝。

EDIT1: 我不想使用通用操作合同,因爲我希望能夠使用所有操作生成服務代理。

我確定,如果我手動編寫WCF服務和操作,那麼WCF將使用反射來發現服務中的操作。 現在,我想定製這一點,以便不使用反射,而是使用我的「操作發現代碼」。

回答

0

我認爲這種情況下靜態代碼生成沒有任何問題。在我看來,這是一個比動態生成合同更好的解決方案。請記住,您的合同是您擁有/提供服務託管特定集合操作的唯一證據。

我看到關於動態方法的主要問題是關於版本控制和兼容性問題。如果所有內容都是動態生成的,那麼最終可能會透明地將重大更改推向系統,並對現有客戶端造成一些問題。

如果您計劃在應用程序服務中實施某些更改時有代碼生成器,那麼記住您對這些服務所做的更改可能會產生巨大影響。

但是,如果您確實想要動態處理消息,則可以使用通用操作協定(將操作屬性設置爲*),然後手動將消息路由到應用程序服務。 請記住,您將失去從服務生成包含可用操作列表的代理的能力。

+0

謝謝你的迴應。我正在處理Intranet應用程序,我正在處理服務器和客戶端,並且我有集成測試來檢查要部署的客戶端和服務器是否是最新的。所以我希望對我而言,動態的方法是可以的。我不想使用通用操作合同,因爲我希望能夠通過所有操作生成服務代理。我確信,如果我手動編寫WCF服務和操作,那麼WCF將使用反射來發現服務中的操作。現在,我想定製這一點,以便不使用反射。 – Augi 2010-10-04 13:39:14

相關問題