我的内部网络上有许多WCF服务,这些服务由IIS 6使用basicHttpBinding托管。有几个现有的应用程序通过使用动态代理“CreateChannel()”方法来使用这些服务。
我正在构建一个在我们的网络之外运行的移动应用程序,使用蜂窝连接,最重要的是最小化数据使用,因此我尝试使用netTcpBinding而不是任何http绑定。
我的想法是构建一个“WCF代理”,基本上是在暴露给外部的服务器上运行的服务,使用net.tcp绑定进行侦听,并将请求转换/转发到内部http服务。 / p>
现在代码非常简单,它看起来像这样...
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生成的代理?
答案 0 :(得分:2)
在当前的WCF 3.5中,您必须自己完成这项工作 - 请参阅优秀的两部分文章
由Michele Leroux Bustamante撰写。
随着WCF 4 - 将在.NET 4上发布,大概在2010年3月 - 由于WCF 4已经包含一个基础“RoutingService”类,所以事情会变得容易多了 - 请参阅Ron Jacobs的Endpoint.TV video interview这个话题。
马克