2008-11-13 83 views
6

我有一些.NET遠程代碼,其中在某些服務器端類中實現的工廠方法將接口返回到具體對象,也在同一服務器上執行。 .NET遠程處理自動創建代理,並允許我將接口傳遞給客戶端,客戶端可以直接調用它們。從WCF服務返回接口

實例接口:

public interface IFactory 
{ 
    IFoo GetFoo(); 
} 

public interface IFoo 
{ 
    void DoSomething(); 
} 

示例客戶端代碼:

... 
IFactory factory = (IFactory) System.Activator.GetObject (typeof (IFactory), url); 
... 
IFoo foo = factory.GetFoo(); // the server returns an interface; we get a proxy to it 
foo.DoSomething(); 
... 

這一切的偉大工程。但是,現在我試圖將我的代碼遷移到WCF。我想知道是否有辦法傳遞接口,並讓WCF在客戶端上動態生成代理,就像最初的.NET遠程處理一樣。

而且我不想返回類實例,因爲我不想公開實際的類。並且序列化完整實例並在服務器和客戶端之間來回發送也不是一種選擇。我真的只想讓客戶端通過接口指針/代理與服務器對象通信。

任何想法?

回答

0

ChannelFactory類完全做到這一點,在給定接口的運行時動態生成代理。

1

對不起,jezell,我不明白這一點。

是的,我可以在客戶端上使用ChannelFactory創建代理IFactory,因爲該單例對象已被服務器通過ServiceHost上的URI「發佈」。

但服務器上的我的IFoo實例未與任何ServiceHost關聯;我只是想通過在客戶端上撥打我的IFactory代理來讓他們回來,並讓WCF對服務器IFactory進行調用,該服務器將提供一些IFoo,然後將其整理回客戶端並封裝到動態生成的代理中。我真的只想在我的客戶端上寫factory.GetFoo(); ...

與此同時,Brian指出我在MSDN上忽略了一個非常有趣的文檔,它解釋瞭如何模仿.NET Remoting接口編組使用會話和EndPointAddress10和...如您所寫,ChannelFactory獲取客戶端代理。

所以,現在我知道如何複製我的.NET遠程代碼,但支付相對較高的成本。 WCF所涉及的代碼複雜度比舊的.NET Remoting解決方案高很多。