2013-08-02 38 views
1

我們的應用程序是部署在分佈式環境中的企業應用程序。 這是一個連接到另一臺服務器上的WCF項目的ASP.NET MVC 2.0項目。 我們需要的是使我們的業務模塊可重用和可測試。我應該如何使用WCF模塊化設計?

那麼什麼是最好的解耦方法,當涉及到WCF?它是城堡溫莎WCF設施?或者我應該使用Common Service Locator的方法?爲什麼?

+2

你問了太多問題,這使得你的問題非常廣泛,你的問題的答案將是非常基於觀點的。我可以指出的一點是[本文](http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=95),它描述了一種類型的體系結構(基於消息的體系結構),它將使您的應用程序更加靈活,模塊化和可擴展。如果您使用此體系結構,則不再需要您的容器的WCF工具。 – Steven

+1

謝謝你的建議,但是在創建命令和commandHandler時,除非更新服務引用,否則它不起作用。你建議任何動態代理解決方案嗎?或者我在解決方案中缺少一些東西? – HEH

+1

如果您的命令是合同的一部分,則添加新命令意味着您需要更新服務參考。如果您需要更多靈活性,請嘗試將命令從合同中解脫出來;例如讓WCF服務有一個'Execute(string commandType,string commandData)'方法。您可以將該命令序列化爲JSON或xml,並將其作爲文本發送給可以將其反序列化的WCF服務。這樣WCF對你的命令一無所知,你的WCF契約不會改變。非常靈活。 – Steven

回答

1

下面是如何創建Execute(string type, string json)方法的一個示例:

[OperationContract] 
public void Execute(string type, string json) 
{ 
    Type commandType = Type.GetType(commandType); 

    Type commandHandlerType = typeof(ICommandHandler<>).MakeGenericType(commandType); 

    dynamic commandHandler = Bootstrapper.GetInstance(commandHandlerType); 

    dynamic command = JsonConvert.DeserializeObject(json, commandType); 

    commandHandler.Handle(command); 
} 

該代碼示例使用JSON.NET到JSON反序列化的對象。如果您更喜歡XML,您也可以使用XmlSerializer類。

+0

Thx一百萬。你一直在幫助很大。 –