2009-11-12 151 views
0

我的內部網絡上有許多WCF服務,它們由IIS 6使用basicHttpBinding承載。有幾個現有的應用程序通過使用動態代理「CreateChannel()」方法來使用這些服務。WCF Http到Tcp代理

我正在構建一個移動應用程序,它運行在我們的網絡之外,使用蜂窩連接,重要的是儘量減少數據使用,所以我試圖使用netTcpBinding而不是任何http綁定。

我的想法是構建一個「WCF代理」,基本上是一個服務運行在暴露在外部的服務器上,使用net.tcp綁定進行偵聽,並將請求轉換/轉發給內部http服務。

眼下的代碼很簡單,它看起來大約是這樣的...

ChannelFactory factory=new System.ServiceModel.ChannelFactory<IFooService>("FooService",new System.ServiceModel.EndpointAddress("http://internalserver/FooService.svc"); 
IFooService fooService=factory.CreateChannel(); 

ServiceHost host = new ServiceHost(fooService, new Uri[] { new Uri("net.tcp://externalserver:50001/FooService")}); 

我知道這是很幼稚的代碼在這一點上,它不佔故障渠道等,但忍受着我。

我遇到的問題是調用fooService上的GetType()(這是由wcf生成的代理)返回IFooService,而不是代理的類。當創建一個新的服務主機時,WCF不喜歡這種情況,並且我得到錯誤「'這個'類型不能是一個接口本身。」在最後一行。

這只是一個可怕的想法?如果不是最好的方式讓它運行?我是否會被迫使用svcutil生成的代理?

回答

2

在當前的WCF 3.5,你必須自己做 - 看到優秀的兩部分的文章

由米歇爾·勒魯布斯塔曼特。

隨着WCF 4 - 將在.NET 4中發佈,大概在2010年3月 - 事情會變得更加容易,因爲WCF 4已經包含了一個基礎的「RoutingService」類 - 請參閱Ron Jacobs的關於此主題的Endpoint.TV video interview

Marc

+0

+1,優秀的帖子。 – 2009-11-12 12:41:38

+1

這看起來像我正在尋找。這是關於什麼是正確的搜索關鍵字!謝謝! – Brook 2009-11-12 13:03:14