Я пытаюсь использовать средство интеграции Castle WCF в моем проекте WCF, но потерялся в пути. Не могли бы вы помочь мне?Замок WCF Facility | Windows Service Hosting
Итак, вот ситуация:
У меня есть службы WCF библиотека, которая размещена внутри службы Windows через TCP. Ниже то, что в моей службы WCF библиотеки: службы осущ:
[ServiceContract]
public interface ICalculatorService
{
[OperationContract]
int Add(int x, int y);
}
public class CalculatorService : ICalculatorService
{
public int Add(int x, int y)
{
return x + y;
}
}
Конфигурация:
<system.serviceModel>
<services>
<service name="namespace.CalculatorService">
<endpoint address="" binding="netTcpBinding" bindingConfiguration=""
contract="namespace.iCalculatorService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8732/CalculatorService/" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Контейнер конфигурации Это внутри проекта WCF были зарегистрировать все в замке (я не знаю, где должен регистрироваться объект wcf, должен ли он быть зарегистрирован из службы WCF или из службы Windows, на которой размещается служба WCF).
public class ConfigureContainerCastle
{
private readonly IWindsorContainer container;
public ConfigureContainerCastle(IWindsorContainer container)
{
this.container = container;
}
public void Configure()
{
// Any component registration.
container.Register(Component.For<ICalculatorService>().ImplementedBy<CalculatorService>());
//All other component registration.
}
}
Ниже то, что в моей службе Windows:
public class Host<T>:ServiceBase
{
private ServiceHost serviceHost = null;
protected override void OnStart(string[] args)
{
if (serviceHost != null)
{
serviceHost.Close();
}
// How do I call the DefaultServiceHostFactory and start the service?
// Should I call the WCF facility from here or from WCF service library?
// var container = new WindsorContainer();
// var configureContainer = new DataServicesConfigureContainer(container);
// var hostFactory = new DefaultServiceHostFactory(container.Kernel);
serviceHost = new ServiceHost(typeof (T));
serviceHost.Open();
}
protected override void OnStop()
{
if (serviceHost == null)
return;
serviceHost.Close();
serviceHost = null;
}
}
И моя конфигурация (app.config) для службы Windows такой же, как моя служба WCF, буквально построчно.
Теперь вопрос в том, как мне подключить все это вместе с установкой WCF? Я видел множество примеров с использованием http и global.asax, но ни один из них для служб Windows. Не могли бы вы помочь? Даже подходящая ссылка на него будет полезна.
Спасибо, -Mike