2015-12-15 2 views
0

Я пытаюсь зарегистрировать свои службы WCF с помощью Castle Windsor на моем клиенте WinForms, используя WCFFacility. я легко могу это сделать по одному за раз, используяКак использовать Castle Windsor для регистрации нескольких служб WCF на конце клиента

container.Register(Component.For<IMyService>() 
    .AsWcfClient(new DefaultClientModel 
    { 
     Endpoint = WcfEndpoint.BoundTo(new BasicHttpBinding { MaxReceivedMessageSize = 3000000 }) 
      .At("http://localhost:51324/MyService.svc") 
    })); 

Однако у меня есть сотни так старались следовать this answer

Я использовал этот код:

container.Register(
    Types 
     .FromAssemblyContaining<IMyService>() 
     .Pick() 
     .If(s => s.Name.EndsWith("Service")) 
     .Configure(
      configurer => configurer.Named(configurer.Implementation.Name) 
       .AsWcfClient(new DefaultClientModel 
       { 
        Endpoint = WcfEndpoint.BoundTo(new BasicHttpBinding { MaxReceivedMessageSize = 3000000 }) 
         .At(string.Format("http://localhost:{0}/{1}.svc", Port, configurer.Name.Substring(1))) 
       }))); 

К сожалению, это дает мне следующую ошибку при попытке разрешить мою службу: «Тип MyNamespace.IMyService является абстрактным. Таким образом, невозможно реализовать его как реализацию сервиса« IMyService ». Вы забыли прокси-сервер?»

ответ

0

Исправлено! Я думаю, что проблема состояла в том, что некоторые другие классы, не связанные с обслуживанием, бросали исключения, из-за которых регистрация прерывалась. Я не включил звонок, чтобы добавить WcfFacility!

Container.Kernel.AddFacility<WcfFacility>(); 

Предположительно, регистрация просто не удалась, в результате чего Виндзор зарегистрировал интерфейс как класс реализации.