Класс 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")); 
Другие вопросы по тегам