WCF Http to Tcp Proxy - PullRequest
       24

WCF Http to Tcp Proxy

0 голосов
/ 12 ноября 2009

У меня есть несколько служб 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")});

Я понимаю, что на данный момент это очень наивный код, он не учитывает неисправные каналы и т. Д., Но терпите меня.

Проблема, с которой я сталкиваюсь, заключается в том, что вызов GetType () для fooService (который здесь является прокси, сгенерированным wcf) возвращает IFooService, а не класс прокси. WCF не нравится это при создании нового хоста службы, и я получаю сообщение об ошибке «этот тип не может быть интерфейсом сам по себе». на последней строке.

Это просто ужасная идея? Если нет, каков наилучший способ запустить его? Я буду вынужден использовать сгенерированные svcutil прокси?

1 Ответ

2 голосов
/ 12 ноября 2009

В текущем WCF 3.5 вы должны сделать это самостоятельно - см. Отличную статью из двух частей

Мишель Леру Бустаманте.

С WCF 4 - будет выпущен с .NET 4, предположительно в марте 2010 года - все станет намного проще, так как WCF 4 уже будет включать базовый класс "RoutingService" - см. видеоинтервью Endpoint.TV от Рона Джейкобса на эту тему.

Марк

...