Класс wcf, реализующий несколько сервисных контрактов
У меня есть класс TestService
который реализует два контракта на обслуживание под названием IService1
а также IService2
, Но я сталкиваюсь с трудностями в реализации. Мой код выглядит следующим образом:
Uri baseAddress = new Uri("http://localhost:8000/ServiceModel/Service");
Uri baseAddress1 = new Uri("http://localhost:8080/ServiceModel/Service1");
ServiceHost selfHost = new ServiceHost(typeof(TestService));
selfHost.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), baseAddress);
selfHost.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), baseAddress1);
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
selfHost.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate service.");
Console.WriteLine();
Console.ReadLine();
selfHost.Close();
Я получаю ошибку во время выполнения как:
Свойство HttpGetEnabled ServiceMetadataBehavior имеет значение true, а свойство HttpGetUrl является относительным адресом, но базовый адрес http отсутствует. Либо укажите базовый адрес http, либо установите абсолютный адрес HttpGetUrl.
Что мне с этим делать? Мне действительно нужны две отдельные конечные точки? Благодарю.
2 ответа
Решение
Вы можете исправить это двумя способами
1)
Uri baseAddress = new Uri("http://localhost:8000/ServiceModel");
ServiceHost selfHost = new ServiceHost(typeof(TestService), baseAdress);
selfHost.AddServiceEndpoint(typeof(IService1), new WSHttpBinding(), "Service");
selfHost.AddServiceEndpoint(typeof(IService2), new WSHttpBinding(), "Service1");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
2)
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.HttpGetUrl = new Uri("http://localhost:8000/ServiceModel");
selfHost.Description.Behaviors.Add(smb);
Все, что вам нужно сделать, это добавить базовый адрес. у вас все еще есть две отдельные конечные точки.
ServiceHost selfHost = new ServiceHost(typeof(TestService), new Uri ("http://localhost:8080/ServiceModel"));