Я получаю результаты производительности, которые не могу объяснить при сравнении клиента, который использует службу REST и службу SOAP.Я создал сервисный прокси следующим образом:
REST:
WebHttpBinding webBinding = new WebHttpBinding();
webBinding.AllowCookies = true;
webBinding.MaxReceivedMessageSize = int.MaxValue;
CustomBinding custom = new CustomBinding(webBinding);
WebMessageEncodingBindingElement webMEBE = custom.Elements.Find<WebMessageEncodingBindingElement>();
webMEBE.ContentTypeMapper = new MyMapper();
webMEBE.ReaderQuotas.MaxArrayLength = int.MaxValue;
var factory = new WebChannelFactory<ITest>(custom, new Uri("http://localhost/Test"));
var proxy = factory.CreateChannel();
SOAP:
endPointAddr = "net.tcp://" + textBox2.Text +
":8909/MyService";
tcpBinding = new NetTcpBinding();
tcpBinding.MaxReceivedMessageSize = int.MaxValue;
tcpBinding.ReaderQuotas.MaxArrayLength = int.MaxValue;
tcpBinding.TransactionFlow = false;
tcpBinding.Security.Transport.ProtectionLevel =
System.Net.Security.ProtectionLevel.EncryptAndSign;
tcpBinding.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Windows;
tcpBinding.Security.Mode = SecurityMode.None;
endpointAddress =
new EndpointAddress(endPointAddr);
IService1 proxy =
ChannelFactory<IService1>.CreateChannel(tcpBinding, endpointAddress);
Оба IService1
и ITest
имеют один методчто я использую, GetRequest()
, который возвращает объект ~ 300Kb.IService1.GetRequest () - это OperationContract, ITest.GetRequest () - это WebGet.
Как только я открываю каналы в обоих случаях, я запускаю узкий цикл proxy.GetRequest (), чтобы выяснить, сколько запросов/ с каждый может справиться.В результате тест проводился на локальном компьютере, где SOAP превосходил REST со скоростью 5: 1, а по сети SOAP все еще превосходил REST примерно на 50%.
Я не понимаю, почему существует такая большая разница.