2012-04-30 5 views
2

Я пытаюсь обернуть службу WCF, которая ранее была запущена в службе .asmx на панели задач, в консольное приложение.Служба WCF, работающая в ServiceHost (консольное приложение)

Вот код для подведению службы WCF:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Uri uri = new Uri("http://localhost:5000"); 

     using (ServiceHost host = new ServiceHost(typeof(CheckoutService), uri)) 
     { 
       Console.WriteLine("Prepping CheckoutService server"); 
       ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
       smb.HttpGetEnabled = true; 
       smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15; 
       host.Description.Behaviors.Add(smb); 

       host.Open(); 

       Console.Clear(); 
       Console.WriteLine("CheckoutService server up and running"); 
       Console.WriteLine("Press Return to stop service at any point"); 
       Console.ReadLine(); 
       host.Close(); 
     } 
    } 

Однако, клиентское приложение, которое должно получить эту услугу (который используется для работы до того, как сервис был завернут в консольном приложение) теперь сбой с ошибкой:

There was no endpoint listening at http://localhost:5000/CheckoutService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details.

конфигурация конечной точки для этого клиента в app.config является:

<endpoint 
    address="http://localhost:5000/CheckoutService.svc" 
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_ICheckoutService" 
    contract="CheckoutServiceServer.ICheckoutService" name="BasicHttpBinding_ICheckoutService" /> 

Я думаю, что, возможно, я пропускаю какую-либо форму файла .config в проекте консоли, на котором размещается служба WCF, но я могу ошибаться!

+0

Ненависть к капитану Очевидна, но похоже, что служба не работает. – JayC

+2

Вы открываете хост, очищая консоль, а затем сразу же закрываете хост ... как должен быть запущен сервис, если вы снова закроете хост? –

+0

Да, я пропустил Console.ReadLine(), который должен был держать его открытым, однако после добавления этого я все еще получаю ту же проблему. – Moza

ответ

3

Похоже, вы закрываете хост, не дожидаясь ввода пользователем. Вам не хватает Console.ReadLine()?

+0

+1 Я держу пари, что все это неправильно :-) –

+0

Я добавил, что линия теперь хорошо замечена, однако я получаю ту же проблему – Moza

0

Вы не настроили конечную точку для своего ServiceHost экземпляра. Файл конфигурации, на который вы ссылаетесь, не используется, но на основе этого файла вам необходимо настроить экземпляр ServiceHost для использования привязки BasicHttpBinding и вашего контракта CheckoutServiceServer.ICheckoutService, чтобы настроить конечную точку службы через метод ServiceHost.AddServiceEndpoint().

См. Статью this о помощи в организации услуги WCF.

Смежные вопросы