对于我的最新项目,我想使用.NetCore实现SOAP客户端,以通过ONVIF标准与网络摄像头进行通信。
这对我来说很好,直到我怀疑自己的表现不佳。使用Wireshark,我可以发现性能问题与网络或摄像机无关,因为凸轮会在预期的时间内响应。但是在获得响应和发送下一个请求之间,我损失了几乎1s的时间。 (参见图片)
.Net 4.6.1 (fast)
.NetCore 2.1 (1s delay between requests)
经过一些调试,检查了我的代码是否缺失后,我已经用.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上进行了测试
提前感谢您的建议