У меня есть WCF-сервис и консольное приложение (хост). Код хоста:
private static void StartHost()
{
Uri baseAddress = new Uri("http://localhost:8873/MyWCF/");
using (ServiceHost selfHost = new ServiceHost(typeof(MyWCF), baseAddress))
{
selfHost.AddServiceEndpoint(typeof(WcfService.IMyWCF), new WSHttpBinding(), "MyWCF");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
selfHost.Open();
Console.WriteLine("Press <ENTER> to terminate service.");
Console.ReadLine();
selfHost.Abort();
selfHost.Close();
}
}
Это работает, я могу отправлять сообщения моему сервисe через клиентское приложение.
Но если я нажимаю Enter и закрываю хост, то WCF-служба продолжает работать! Запросы от клиента проходят, ответы возвращаются.. В диспетчере задач я вижу запущенный процесс IIS Express, в трее в списке запущенных сайтов с IIS я так же вижу свой сервис.. Почему так происходит, ведь я использую конструкцию using и даже вызываю методы Abort() и Close().. Как я могу полностью остановить сервис? Проблема в том, что сервис использует некоторые dll из решения, служба их не "отпускает". Спасибо за любую помощь, ссылки
Клиентский код:
Uri baseAddress = new Uri("http://localhost:8873/MyWCF/");
BasicHttpBinding binding = new BasicHttpBinding();
var wcf = ChannelFactory<IMyWCF>.CreateChannel(binding, new EndpointAddress(baseAddress));
Сборка персонального компьютера от Artline: умный выбор для современных пользователей