2009-11-12 40 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