класс wcf, реализующий несколько сервисных контрактов - PullRequest
0 голосов
/ 12 мая 2010

У меня есть класс 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 ]

2 голосов
/ 12 мая 2010

вы можете исправить это двумя способами

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);
1 голос
/ 12 мая 2010

Все, что вам нужно сделать, это добавить базовый адрес. у вас все еще есть две отдельные конечные точки.

ServiceHost selfHost = new ServiceHost(typeof(TestService), new Uri ("http://localhost:8080/ServiceModel")); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...