Situatie:
Een Delphi 5 COM dll met C# web service wrapper omgezet naar een D6 web service. Eerst als ISAPI dll onder IIS, daarna als stand-alone exe met Indy's IdHTTPServer component, en in beide gevallen is 't veel trager dan de oude oplossing.
Vanuit een ASP.NET C# client kostte 100 aanroepen van 2 simpele methods (1x genereren van een nieuwe GUID, en 1x 2 records uit een MSSQL tabel halen) zo'n 2 seconden, maar met diezelfde client kost dat op de Delphi6 versie ruim 40 seconden.
OK, testclient geschreven in Delphi6 die hetzelfde doet, en wanneer die de web service aanroept met WSDL, duurt die lus ook zo'n 40 seconden. Zonder WSDL loopt dat terug naar ruim 4 seconden. Geen snelheidsverbetering t.o.v. de oude situatie dus, maar heel erg acceptabel.
Alleen krijg ik dit bij de C# client niet voor elkaar.
Het probleem zit 'm in het feit dat bij de C# client tussen de connectie met IdHTTPServer en het starten van de dispatcher altijd gemiddeld zo'n 0.15 seconden zit (x 200 aanroepen = 30 sec), terwijl dit bij de Delphi client niet of nauwelijks meetbaar is met een standaard TDateTime.
Toen maar en HTTP sniffer op de client gezet, en het verschil lijkt 'm te zitten in de SOAPRequest packets. De Delphi client stuurt nette volledige XML requests, terwijl de C# client HTTP POST pakketten verstuurt.
In web.config van die C# client al geprobeerd om de protocollen HttpPost en HttpGet uit te zetten, maar hij bleef gewoon HTTP POST requests sturen...
2 Vraagjes:
• Kan het verschil in request formaten zo'n groot performance verschil uitmaken, of zit ik helemaal verkeerd?
• Hoe krijg ik C# zo gek dat 'ie ook nette SOAP XML requests stuurt?
Een Delphi 5 COM dll met C# web service wrapper omgezet naar een D6 web service. Eerst als ISAPI dll onder IIS, daarna als stand-alone exe met Indy's IdHTTPServer component, en in beide gevallen is 't veel trager dan de oude oplossing.
Vanuit een ASP.NET C# client kostte 100 aanroepen van 2 simpele methods (1x genereren van een nieuwe GUID, en 1x 2 records uit een MSSQL tabel halen) zo'n 2 seconden, maar met diezelfde client kost dat op de Delphi6 versie ruim 40 seconden.
OK, testclient geschreven in Delphi6 die hetzelfde doet, en wanneer die de web service aanroept met WSDL, duurt die lus ook zo'n 40 seconden. Zonder WSDL loopt dat terug naar ruim 4 seconden. Geen snelheidsverbetering t.o.v. de oude situatie dus, maar heel erg acceptabel.
Alleen krijg ik dit bij de C# client niet voor elkaar.
Het probleem zit 'm in het feit dat bij de C# client tussen de connectie met IdHTTPServer en het starten van de dispatcher altijd gemiddeld zo'n 0.15 seconden zit (x 200 aanroepen = 30 sec), terwijl dit bij de Delphi client niet of nauwelijks meetbaar is met een standaard TDateTime.
Toen maar en HTTP sniffer op de client gezet, en het verschil lijkt 'm te zitten in de SOAPRequest packets. De Delphi client stuurt nette volledige XML requests, terwijl de C# client HTTP POST pakketten verstuurt.
In web.config van die C# client al geprobeerd om de protocollen HttpPost en HttpGet uit te zetten, maar hij bleef gewoon HTTP POST requests sturen...
2 Vraagjes:
• Kan het verschil in request formaten zo'n groot performance verschil uitmaken, of zit ik helemaal verkeerd?
• Hoe krijg ik C# zo gek dat 'ie ook nette SOAP XML requests stuurt?