2013-10-03 4 views
0

Я создал проект, который содержит службу windows (windowsservices.cs), и я добавил контракты wcf и файл службы в этом классе (windowservices.cs). его файл app.config содержитnet.tcp, соединение сокета было прервано

<service behaviorConfiguration="WindowsService1.Service1Behavior" 
    name="AgentSvcImpl"> 
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="" 
     name="nethttpendpoint" contract="IAgentWinService"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" 
     name="nethttpmetadataendpoint" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost:8011/AgentSvcImpl" /> 
     </baseAddresses> 
    </host> 
    </service> 

и в службе Windows OnStart метод я вошел следующий код:

ServiceHost serviceHost = null; 
     if (serviceHost != null) 
     { 
      serviceHost.Close(); 
     } 
     //Create a URI to serve as the base address 
     Uri httpUrl = new Uri("net.tcp://localhost:8011/AgentSvcImpl"); 
     //Create ServiceHost 
     serviceHost = new ServiceHost(typeof(WindowsService1.AgentSvcImpl), httpUrl); 
     //Add a service endpoint 
     serviceHost.AddServiceEndpoint(typeof(WindowsService1.IAgentWinService), new NetTcpBinding(), ""); 
     //Enable metadata exchange 
     ServiceMetadataBehavior smb = new ServiceMetadataBehavior(); 
     smb.HttpGetEnabled = false; 
     serviceHost.Description.Behaviors.Add(smb); 
     //Start the Service 
     serviceHost.Open(); 

, когда я начинаю эту услугу в services.msc, он начал хорошо. но когда я пытаюсь добавить ссылку на службу, она дает следующую ошибку.

Метаданные содержат ссылку, которая не может быть разрешена: 'net.tcp: // localhost: 8011/AgentSvcImpl'. Соединение сокета было прервано. Это может быть вызвано ошибкой обработки вашего сообщения или превышением времени приема удаленным хостом или проблемой сетевого ресурса. Локальный тайм-аут гнезда был «00: 04: 59.0054016». Существующее соединение было принудительно закрыто удаленным хостом Если служба определена в текущем решении, попробуйте создать решение и снова добавить ссылку на службу.

как решить это?

+2

Это может быть связано с неправильным подключением, но не может быть подтверждено. Чтобы получить четкое представление о том, что происходит, вам может потребоваться настроить трассировку как для клиента, так и для службы. Чтобы просмотреть трассировки, вы должны использовать SvcTraceViewer, который должен находиться в папке «Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin» или «Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin». Если вам нужно проследить как клиент, так и службу, вы можете открыть оба файла вместе в SvcTraceViewer с помощью меню «Файл/Добавить». – adityaswami89

ответ

0

Возможная проблема - имя службы и сжиматься без имен:

<service ... name="WindowsService1.AgentSvcImpl" ... contract="WindowsService1.IAgentWinService"> 

Если нет: попытаться создать новый таймер в рамках реализации службы WCF (AgentSvcImpl) Класс Scope с нек-бесконечным интервалом (1 сек для экс .) и пустой обработчик OnTimer. И Configure Tracing исследовать более

+0

Какова цель этого пустого таймера? – usr

0

Посмотрите на этот пост: What happens if I set HttpGetEnabled = false

Я думаю, и нужно будет активировать свойство HttpGetEnabled поведения:

smb.HttpGetEnabled = true; 

Надежда поможет.

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