2011-12-29 10 views
1

Я создал службу WCF net.tcp и размещал его с помощью адаптера прослушивателя Net.Tcp, и он отлично работает - у меня есть набор сообщений а затем обратный вызов, чтобы служба обновила клиентский статус. Теперь я пытаюсь заставить его работать, приютили с помощью службы Windows, и все, что я делаю это создание ServiceHost, используя тот же класс, что оригинальные применения:Сервис net.tcp работает при размещении через адаптер Net.Tcp Listener, но не Windows Service

using System.Diagnostics; 
using System.ServiceModel; 
using System.ServiceProcess; 
using BuilderService; 

namespace BuilderWindowsService 
{ 
    public class BuilderWindowsService : ServiceBase 
    { 
     public ServiceHost ServiceHost = null; 
     public BuilderWindowsService() 
     { 
      ServiceName = ServiceNames.Builder; 
     } 

     public static void Main() 
     { 
      Run(new BuilderWindowsService()); 
     } 

     protected override void OnStart(string[] args) 
     { 
      if (ServiceHost != null) 
       ServiceHost.Close(); 
      ServiceHost = new ServiceHost(typeof(Builder)); 
      ServiceHost.Open(); 
     } 

     protected override void OnStop() 
     { 
      if(ServiceHost != null) 
      { 
       ServiceHost.Close(); 
       ServiceHost = null; 
      } 
     } 
    } 
} 

Я могу подключиться к службы и отправить запрос, но он никогда не отвечает и не истекает время. Я знаю, что нажимаю на службу Windows, потому что у меня есть это на другом порту (8002), и я могу добавить его в качестве ссылки, используя это.

My App.config для службы Windows в значительной степени идентичен Web.config оригинала. То же самое для клиента, которого я использую, за исключением того, что он указывает на конечную точку 8002 вместо 808. Кроме того, у меня уже есть эта работа для другой службы, которая выполняет ту же самую настройку, но по какой-то причине она никогда не отвечает.

UPDATE

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

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <bindings> 
      <netTcpBinding> 
       <binding name="NetTcpBinding_IBuilder" 
         closeTimeout="00:01:00" 
         openTimeout="00:01:00" 
         receiveTimeout="00:10:00" 
         sendTimeout="00:01:00" 
         transactionFlow="false" 
         transferMode="Buffered" 
         transactionProtocol="OleTransactions" 
         hostNameComparisonMode="StrongWildcard" 
         listenBacklog="10" 
         maxBufferPoolSize="2147483647" 
         maxBufferSize="2147483647" 
         maxConnections="10" 
         maxReceivedMessageSize="2147483647"> 
        <readerQuotas maxDepth="32" 
            maxStringContentLength="2147483647" 
            maxArrayLength="2147483647" 
            maxBytesPerRead="4096" 
            maxNameTableCharCount="2147483647" /> 
        <reliableSession ordered="true" 
            inactivityTimeout="00:10:00" 
            enabled="false" /> 
        <security mode="Message"> 
         <transport clientCredentialType="Windows" 
            protectionLevel="EncryptAndSign" /> 
         <message clientCredentialType="Windows" 
           algorithmSuite="Default" /> 
        </security> 
       </binding> 
      </netTcpBinding> 
     </bindings> 
     <client> 
      <endpoint address="net.tcp://localhost:8002/BuilderService/Builder.svc" 
         binding="netTcpBinding" 
         bindingConfiguration="NetTcpBinding_IBuilder" 
         contract="RGBRef.IBuilder" 
         name="NetTcpBinding_IBuilder"> 
       <identity> 
        <dns value="localhost" /> 
       </identity> 
      </endpoint> 
     </client> 
    </system.serviceModel> 
</configuration> 

который выглядит довольно нормальный для меня (примечание: я вручную увеличил значения длины буфера/строки до максимума). Только те вещи, которые отличаются от моей первоначальной конфигурации:

transferMode="Buffered" 
transactionProtocol="OleTransactions" 
listenBacklog="10" 
<transport clientCredentialType="Windows" 
      protectionLevel="EncryptAndSign" /> 

Не уверен, что служба ожидает те или что-то. В любом случае, он все равно не получает ответа, ни ошибки.

ответ

1

Возможно, сервис неисправен, поскольку он теперь работает под разными учетными данными как служба Windows. Напишите записи EventLog, чтобы отслеживать, где происходит ошибка. Я не верю, что это обратный вызов, я подозреваю, что это что-то еще в обслуживании.

+0

добавил запись в службу Windows, но это не ошибка –