Здесь я снова отвечаю на свой вопрос: -S
Я решил это, написав NetTcpServiceLocator ...
public interface INetTcpServiceLocator
{
EndpointAddress GetAddress(Type serviceType);
}
... вместе с пользовательским обработчиком раздела конфигурации, которыйтакже реализует вышеуказанный интерфейс и читает в следующем разделе конфигурации ...
<services>
<service contract="My.Services.TestService.Contracts.ITestService" address="net.tcp://localhost/TestService" />
</services>
Затем я создал прокси для каждой службы ...
public class TestServiceProxy : ITestService
{
public SomeInformation GetSomeInformation(SomeParams @params)
{
using (var factory = new NetTcpServiceFactory<ITestService>())
{
var service = factory.Service;
return service.GetSomeInformation(@params);
}
}
}
Мой контроллер зависит отСервис, который зависит от ITestService.Все это склеено вместе с Castle Windsor и с помощью внедрения зависимости свойств.
Итак, мой контроллер вызывает его Service, который, в свою очередь, вызывает ITestService (в данном случае прокси, который получает свою конечную точку из пользовательского раздела).обработчик).
Пользовательский обработчик раздела (который также является INetTcpServiceLocator) имеет виндзорский образ жизни «perWebRequest», поэтому он вызывается платформой, а web.config считывается в массив в памяти.Когда вызывается прокси-сервер службы, он просто извлекает соответствующую конечную точку в зависимости от типа контракта.
Все это зависит от типа контракта, поэтому больше не нужно иметь никаких переменных в web.config..
Я выбрал решение на основе кода, поскольку я не использую процесс сборки локально, только когда я отправляю свой код в Subversion, процесс сборки запускается на нашем сервере сборки.