У меня есть сервисная библиотека WCF, содержащая пять сервисных контрактов. Библиотека размещается через службу Windows. Большинство, если не вся моя конфигурация для библиотеки WCF является декларативной. Единственное, что я делаю в коде для конфигурации, это передаю тип класса, реализующего сервисные контракты, в ServiceHost. Затем я вызываю Open для каждой из служб во время события Windows Service OnStart. Вот сообщение об ошибке, которое я получаю:
Служба не может быть запущена. System.InvalidOperationException: служба '[Fubu.Conversion.Service1' имеет нулевые конечные точки приложений (не инфраструктурные). Это может быть связано с тем, что для вашего приложения не найден файл конфигурации, или из-за невозможности найти элемент службы, соответствующий имени службы, в файле конфигурации или из-за отсутствия конечных точек в элементе службы.
в System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (описание ServiceDescription)
в System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (описание ServiceDescription, ServiceHostBase serviceHost)
в System.ServiceModel.ServiceHostBase.InitializeRuntime ()
в System.ServiceModel.ServiceHostBase.OnBeginOpen ()
в System.ServiceModel.ServiceHostBase.OnOpen (время ожидания TimeSpan)
в System.ServiceModel.Channels.CommunicationObject.Open (время ожидания TimeSpan)
в System.ServiceModel.Channels.CommunicationObject.Open ()
at Fubu.RemotingHost.RemotingHost.StartServ ...
protected override void OnStart(string[] args)
{
// Uncomment to debug this properly
//System.Diagnostics.Debugger.Break();
StartService1();
StartService2();
StartService3();
StartService4();
StartService5();
}
Каждый из вышеперечисленных просто делает следующее:
private void StartSecurityService()
{
host = new ServiceHost(typeof(Service1));
host.Open();
}
Сервис Lib app.congfig резюме
<services>
<service behaviorConfiguration="DefaultServiceBehavior" name="Fubu.Conversion.Service1">
<endpoint address="" binding="netTcpBinding" bindingConfiguration="TCPBindingConfig"
name="Service1" bindingName="TCPEndPoint" contract="Fubu.Conversion.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexTcpBinding" bindingConfiguration=""
name="mexSecurity" bindingName="TcpMetaData" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:8025/Fubu/Conversion/Service1/" />
</baseAddresses>
</host>
</service>
...
Контракт составлен следующим образом:
пространство имен Fubu.Conversion.Service1
{
[ServiceContract(Namespace = "net.tcp://localhost:8025/Fubu")]
public interface IService1
{
Я искал «высоко и низко» решение без какой-либо удачи. Ответ очевиден? Решением этого, похоже, не является. Спасибо