我的内部网络上有许多 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 生成的代理吗?