Я создал службу 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" />
Не уверен, что служба ожидает те или что-то. В любом случае, он все равно не получает ответа, ни ошибки.
добавил запись в службу Windows, но это не ошибка –