2010-05-11 106 views
3

我正嘗試創建一個WCF Web服務和本地數據服務之間共享的通用服務庫。但是,試圖通過點擊通過WCF服務將代理類轉換爲通用接口

項目,以利用該服務時 - >添加服務引用

,然後嘗試使用,而不是代理接口,我收到了鑄件的錯誤有以下的基本接口代碼:

IMyService _context = (IMyService)new ServiceReference.MyService(); 

這裏是項目/類的佈局:

公用庫拋出項目

[ServiceContract] 
public interface IMyService 
{ 
    [OperationContract] 
    void DoWork(); 
} 

Web服務項目

public partial class MyService : IMyService 
{ 
    public void DoWork() 
    { 
    //DO STUFF 
    } 
} 

客戶項目

IMyService _context = (IMyService)new ServiceReference.MyService(); 

運行時錯誤:無法施展對象。

IMyService _context = new ServiceReference.MyService(); 

編譯時錯誤拋出:顯式的轉換丟失。

(注意,客戶項目引用公共圖書館項目)

回答

3

如果您控制導線的兩側,也可以通過代碼生成動態代理。您可以通過添加Web引用來運行沒有生成的代理。對於我的公司來說,這個效果更好,因爲界面中的更改將在我們的構建服務器上編譯時直接顯示。當我們使用web引用時,這些接口中斷會在測試我們的應用程序時出現。

這是我們用來動態生成代理的。也許這也可以適用於你的場景。

private void CreateDynamicProxy() 
    { 
    var endPoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(TServerInterface)), new BasicHttpBinding(), new EndpointAddress(EndpointAddress)); 
    var channelFactory = new ChannelFactory<IMyInterface>(endPoint); 
    IMyInterface myInterface = channelFactory.CreateChannel(); 
    myInterface.MyMethod(); 
    ((IChannel) myInterface).Close(); 
    } 
+0

這似乎正是我所需要的。我需要進一步研究它,但是我能夠通過代碼獲得一個簡單的原型並運行。謝謝! – 2010-05-12 20:30:46

0

你不應該強制轉換爲返回的類實現了接口,只要將演員。

+0

我最初嘗試沒有強制轉換,但我得到一個編譯錯誤,指出存在明確的轉換。任何其他想法? – 2010-05-11 18:52:21