для моего последнего проекта я хочу реализовать SOAP-клиент с .NetCore для связи через веб-камеру через стандарт ONVIF.
Это работало нормально для меня, пока я не задумался о своей плохой работе. С Wireshark я мог выяснить, что проблема с производительностью не связана с моей сетью или камерой, потому что камера реагирует в ожидаемое время. Но я теряю почти ТОЧНО 1с между получением ответа и отправкой следующего запроса. (см. рисунки)
.Net 4.6.1 (быстрый)
.NetCore 2.1 (задержка 1 с между запросами)
После некоторой отладки, когда я проверял, не хватает ли мне моего кода, я проверил свой код на .Net 4.6.1 и, к удивлению, повышение производительности было безумным.
Это мой очень сокращенный код для тестирования:
static void Main(string[] args)
{
//PREPARATION START
var messageElement = new TextMessageEncodingBindingElement()
{
MessageVersion =
MessageVersion.CreateVersion(EnvelopeVersion.Soap12,
AddressingVersion.None)
};
HttpTransportBindingElement httpBinding = new
HttpTransportBindingElement()
{
AuthenticationScheme = AuthenticationSchemes.Digest
};
var binding = new CustomBinding(messageElement, httpBinding);
var factory = new ChannelFactory<Device>(binding, new
EndpointAddress("http://1x.x.x.x/onvif/device_service"));
//create Onvif device client
var client = factory.CreateChannel();
//PREPARATION END
var start = DateTime.Now;
Console.WriteLine($"Starting ...");
//PERFORMANCE TEST (just ask 50 times for capabilities)
for (int i = 0; i < 50; i++)
client.GetCapabilities(new GetCapabilitiesRequest(new
CapabilityCategory[] { CapabilityCategory.All }));
Console.WriteLine($"Finished task... it took {DateTime.Now-start}");
}
Итак, мои вопросы: как я могу улучшить мою реализацию для .NetCore? Есть ли что-то, что не работает должным образом с .NetCore?
Подсказка: я очень новичок в SOAP / WCF
Подсказка 2: протестировано с Win10 (Core и 4.6.1) и Ubuntu 18.04
Заранее спасибо за ваши предложения