Я пытаюсь настроить некоторые тесты, чтобы увидеть, как работают службы WCF. У меня есть код, подобный этому для basicHttp, netTcp, привязок netPipe, вызывающих службу WCF с этими привязками.Wcf Service net.tcp вызывает ошибки
using (_log = new StreamWriter(@"C:\TestRunnerLog.txt", true))
{
var methodCallInformation = new MethodCallInformation { Method = NetPipeServiceCall, TotalTimeTakenForAllMethodCalls = new TimeSpan(), TotalNumberOfTimesMethodCalled = 0, TimesErrored = 0 };
for (var i = 0; i < 25000; i++)
{
try
{
var stopwatch = new Stopwatch();
stopwatch.Start();
using(var channelFactory = new ChannelFactory<IChatHub>(new NetTcpBinding { Security = new NetTcpSecurity { Mode = SecurityMode.None } }, "net.tcp://localhost/test/test.svc"))
{
var channel = channelFactory.CreateChannel();
await channel.GetPeople();
}
stopwatch.Stop();
return stopwatch.Elapsed;
methodCallInformation.TotalTimeTakenForAllMethodCalls += stopwatch.Elapsed;
}
catch (Exception e)
{
methodCallInformation.TimesErrored++;
}
methodCallInformation.TotalNumberOfTimesMethodCalled++;
}
await _log.WriteLineAsync(string.Format("net.tcp:\tTimesCalled:{0}\tTotalTime:{1}\tAverageTime:{2}\tErrors:{3}", methodCallInformation.TotalNumberOfTimesMethodCalled, methodCallInformation.TotalTimeTakenForAllMethodCalls, new TimeSpan(methodCallInformation.TotalTimeTakenForAllMethodCalls.Ticks/methodCallInformation.TotalNumberOfTimesMethodCalled), methodCallInformation.TimesErrored));
}
Я смущен результатами, которые я получаю. Я выполняю все итерации локально и имею службу и клиент, все из которых выполняются локально на моей машине. Основываясь на моих исследованиях, netPipe должен быть самым быстрым, за ним следует netTcp, а затем basicHttp. Код, который я произволью для этих вызовов, вместо каждого цикла вызывает только одно связывание для всех итераций, как в примере выше.
----------------------------------------------------------------------------------------------
http: TimesCalled:24981 TotalTime:00:00:46.0452454 AverageTime:00:00:00.0018432 Errors:0
net.tcp: TimesCalled:25168 TotalTime:00:00:16.7776697 AverageTime:00:00:00.0006666 Errors:17593
net.pipe: TimesCalled:24786 TotalTime:00:00:50.5698790 AverageTime:00:00:00.0020402 Errors:0
Я пытаюсь выяснить, что я делаю неправильно, чтобы получить все эти ошибки с net.tcp и почему сроки кажется настолько медленным для net.pipe.
Вот привязок я настроил на обслуживание:
<bindings>
<basicHttpBinding>
<binding name="basicHttpDefaultBinding" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647" maxBufferSize="2147483647">
<readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
<netTcpBinding>
<binding name="netTcpDefaultBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" />
<message clientCredentialType="None" />
</security>
</binding>
</netTcpBinding>
<netNamedPipeBinding>
<binding name="netNamedPipeDefaultBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
<readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" maxDepth="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
</security>
</binding>
</netNamedPipeBinding>
</bindings>
Любая помощь будет высоко ценится.
Просьба дать обратную связь. Почему голос? – peinearydevelopment
вы на самом деле не задали вопрос. –
Извините, если это не было очевидно, но у меня было это в сообщении: я пытаюсь выяснить, что я делаю неправильно, чтобы получить все эти ошибки с net.tcp и почему время кажется таким медленным для net.pipe. Чтобы добавить к этому. Я не правильно создаю связи или распоряжаюсь ими? Почему я должен видеть это поведение? – peinearydevelopment