В настоящее время у нас есть служба WCF, которая начинает выходить за пределы производительности.
Мы решили добавить еще один сервер, на котором будет размещен еще один экземпляр службы WCF.
У нас есть веб-приложения, которые должны взаимодействовать с конкретным сервером в зависимости от контекста ... например, Если веб-приложение имеет дело с объектами из ServiceInstance1, то запросы должны быть направлены в EndPoint ServiceInstance1. Если веб-приложение имеет дело с объектами из ServiceInstance2, то запросы должны быть направлены в EndPoint ServiceInstance2.
Первоначально я думал, что можно создать «Промежуточную службу» или «Диспетчер служб», ссылка на службу веб-приложения будет обновлена с отдельного экземпляра службы до «Промежуточной службы» или «Диспетчер служб», и указанная служба будет действовать. в качестве «брокера» для различных экземпляров обслуживания.
Как это достигается?
В настоящее время я добавил ServiceReference к каждой службе из диспетчера, однако кажется, что после того, как служба «ссылается», ее типы становятся специфичными для типа ServiceReference, например.
Типами ServiceInstance1 являются все {ServiceInstance1}.
Все типы ServiceInstance2 являются {ServiceInstance2}.
Мне нужно, чтобы типы были одинаковыми на стороне веб-приложения, так что, очевидно, это неправильный способ сделать это.
Мне также хотелось бы, чтобы при вызове методов на клиенте, сгенерированном из ссылок на «Промежуточную службу» или «Менеджер службы», вызывался правильный экземпляр службы, например,
IServiceManager.GetProjectById( {GUID} ) ->
возвращается в ServiceManager ->
Определяет, какой хост имеет проект и возвращает ProjectObject из правильного ServiceInstance.
Где ProjectObject - это тип, определенный в ServiceInstance1 и ServiceInstance2.
Я думаю, что исходный сервис должен иметь некоторые извлеченные библиотеки DLL, чтобы на них можно было ссылаться со стороны веб-приложения, и можно создать ServiceManager и клиент GenericWCF.
Если я прав Ура для меня Если кто-то может указать мне правильное направление, я был бы признателен. Если я ошибаюсь, может кто-нибудь, пожалуйста, ругайте меня и покажите, как это правильно сделать!