0

我的内部网络上有许多 WCF 服务,这些服务由 IIS 6 使用 basicHttpBinding 托管。有几个现有的应用程序通过使用动态代理“CreateChannel()”方法来使用这些服务。

我正在构建一个在我们的网络之外运行的移动应用程序,它使用蜂窝连接,其中最大限度地减少数据使用很重要,所以我尝试使用 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(这里是由 wcf 生成的代理)上调用 GetType() 返回 IFooService,而不是代理的类。WCF 在创建新服务主机时不喜欢这样,并且我收到错误“'this' type cannot be an interface itself。” 在最后一行。

这只是一个可怕的想法吗?如果不是,让它运行的最佳方法是什么?我会被迫使用 svcutil 生成的代理吗?

4

1 回答 1

2

在当前的 WCF 3.5 中,您必须自己执行此操作 - 请参阅优秀的两部分文章

米歇尔·勒鲁·布斯塔曼特(Michele Leroux Bustamante)。

随着 WCF 4 - 与 .NET 4 一起发布,大概在 2010 年 3 月 - 事情会变得容易得多,因为 WCF 4 已经包含一个基本的“RoutingService”类 - 请参阅 Ron Jacobs 对这个主题的Endpoint.TV 视频采访

马克

于 2009-11-12T12:36:41.263 回答