Если я вас правильно понимаю, у вас есть несколько "бэкэнд" сервисов, возможно, на разных компьютерах.Затем у вас есть один сервис «fontend», который в основном действует как прокси для бэкэнда, но полностью настраивается в коде.Мы делаем эту точную настройку с несколькими компьютерами в стойке.Наш интерфейс - IIS7, сервер - это набор служб wcf на нескольких машинах.
Один, будет ли он масштабироваться?Что ж, добавить больше вычислительной мощности на сервер очень легко, и написание некоторого кода с балансировкой нагрузки тоже не так уж плохо.Для нас проблема заключалась в том, что веб-интерфейс увязал, хотя он действовал только как прокси.Мы закончили тем, что добавили еще пару интерфейсных компьютеров, «брокеров», как вы их называете.Это работает очень хорошо.Люди предложили использовать Microsoft ForeFront для автоматической балансировки нагрузки, но я еще не исследовал его.
Два, следует ли кэшировать прокси?Я бы точно сказал, что да, но это отстой.Эти каналы ДЕЙСТВИТЕЛЬНО отказывают время от времени.У меня поток всегда работает в фоновом режиме.Каждые 3 секунды он просыпается, проверяет все wcf-сервисы и wcf-клиенты в приложении.Любые неисправные разрушаются и воссоздаются.
проверка каналов хоста: ...
while(true)
{
try{if(MyServiceHost.State!=System.ServiceModel.CommunicationState.Opened) {ReCreate();}} catch{}
System.Threading.Thread.Sleep(3000);
}
проверка каналов клиента: ...
private static ChannelFactory<IMath> mathClientFactory = new ChannelFactory<IMath>(bindingHttpBin);
while(true)
{
try
{
if(MyServiceClient.State==System.ServiceModel.CommunicationState.Faulted)
{
EndpointAddress ea = new EndpointAddress(ub.Uri);
ch = WcfDynamicLan.mathClientFactory.CreateChannel(ea);
}
}
catch{}
System.Threading.Thread.Sleep(3000);
}
На клиенте я не только кеширую канал, но итакже кэшируйте ChannelFactory.Это просто для удобства, чтобы сделать код для создания нового канала короче.