2012-05-01 2 views
0

У меня очень простой сервис, который отлично работает, когда вы не используете Castle (что показывает, что другие коды верны). Я изменил мой файл SVC к следующему:Регистрация службы wcf с замком Windsor

<%@ ServiceHost Service="Reporting.WebService.ReportingWebService" Factory="Castle.Facilities.WcfIntegration.DefaultServiceHostFactory, Castle.Facilities.WcfIntegration" %> 

и зарегистрировать услугу с помощью XML следующим образом:

<component id="Reporting.WebService.ReportingWebService" 
      service="Reporting.WebService.IReportingWebService, Reporting.WebService" 
      type="Reporting.WebService.ReportingWebService, Reporting.WebService"> 
</component> 

Но я получаю следующее сообщение об ошибке:

[InvalidOperationException: Could not find a component with name Reporting.WebService.ReportingWebService, did you forget to register it?] Castle.Facilities.WcfIntegration.WindsorServiceHostFactory`1.CreateServiceHost(String constructorString, Uri[] baseAddresses) 
.... 

Любая идея почему он не зарегистрирован? ?

---- обновление ----

У меня есть это в конфигурации Виндзоре:

<facilities> 
    <facility id='wcf' 
      type='Castle.Facilities.WcfIntegration.WcfFacility, 
       Castle.Facilities.WcfIntegration' /> 
</facilities> 

и ReportingWebService является implimented в другой сборке.

+0

Является ReportingWebService в той же сборке, как веб-сайт или в отдельной сборке? Вы зарегистрировали WcfFacility? – Bronumski

+0

См. Обновление до вопроса. – mans

+0

Подумайте, вы что-то пропустили в обновлении :). Ничего, я думаю, что это дало мне представление. – Bronumski

ответ

2

Я не вижу ничего плохого в подключении провода, что заставляет меня думать, что либо он не может найти вашу сборку, либо, возможно, тип не был загружен. Поскольку ваш веб-сервис ссылается в другой сборке, убедитесь, что он указан в веб-проекте. В качестве альтернативы переключиться на ваш провод делать в вашем Global.asax в коде, который заставит вас сослаться на сборку и загрузить тип:

var container = new WindsorContainer(); 
container.AddFacility<WcfFacility>() 
     .Register(Component.For<IReportingWebService>().ImplementedBy<ReportingWebService>()); 

//Additional wire up 

//If you are using Windsor 3.0 and above then the following is not needed 
DefaultServiceHostFactory.RegisterContainer(container.Kernel); 
+0

Спасибо. Есть ли способ добавить некоторые сборки в конфигурацию таким образом, что они напрямую не ссылаются на мой проект, но окна загружают их и используют obkects? – mans

+0

@ user654019 Вы хотите отбросить DLL вручную и обновить конфигурацию, чтобы использовать новую dll. – Bronumski

+0

Да, я хочу убедиться, что нет ссылки на мою сервисную реализацию, только ссылку на проект, который имеет определение интерфейса. – mans