Я пытаюсь использовать средство интеграции Castle WCF в своем проекте WCF, но заблудился на этом пути. Не могли бы вы мне помочь?
Итак, вот ситуация:
У меня есть библиотека службы WCF, которая размещена внутри службы Windows через TCP. Вот что находится в моей библиотеке сервисов WCF: Service Impl:
[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. Не могли бы вы помочь? Даже соответствующая ссылка на него будет полезна.
Спасибо, -Майк