2011-04-29 91 views
0

可能重複:
WCF wrap proxy clientWCF包的客戶端(靜態方法,其包裹服務方法調用)

我在服務很多web方法在我的項目使用客戶端應用程序。

我不想寫代碼是這樣的:

using(ServiceClient sc = new ServiceClient()) 
    { 
     //Invoke service methods   
     sc.Method1(); 
    } 

相反的,我想寫:ServiceClient.Method1(); (例如) - 在這種情況下,引用代理的所有常見操作(初始化,調用方法,處置,異常處理)都將位於ServiceClient內。當然,我可以使用類似代碼來包裝我的任何Web方法,或者使用反射來按名稱檢索方法,但也許有其他方法存在?

+0

您未註冊的賬戶合併,你現在有你原來的問題的控制。 – 2011-09-01 18:41:55

回答

0

如果您願意,您可以編寫一個Singleton實現,它包裝所有客戶端操作並在內部維護一個初始化的客戶端。

然後,將您想要的方法公開爲單例類的靜態成員。由於大部分過載都是代理的創建(合同加載,綁定初始化和客戶端設置),所以這帶來了加速服務通信的額外好處。

+0

但是如何處置呢?請致電 – Yury 2011-04-29 11:42:00

1

這個怎麼樣一個靜態方法:

public static TResult Execute<TResult>(Func<ServiceClient, TResult> proxy) 
{ 
    using (var client = new ServiceClient()) 
    { 
     return proxy(client); 
    } 
} 

然後:

string result1 = Execute(proxy => proxy.Method1()); 
int result2 = Execute(proxy => proxy.Method2("some param", 123)); 
+0

後關閉客戶頻道好主意!謝謝! – Yury 2011-04-29 11:44:24

+0

順便說一句。這種配置代理不應該使用:http://weblogs.asp.net/cibrax/archive/2009/06/26/disposing-a-wcf-proxy.aspx – 2011-04-29 11:49:59

+0

@Ladislav Mrnka,好點。代碼可以很容易地用來代替'using'語句來簡單地處理通道。 – 2011-04-29 11:54:30

相關問題