Я генерирую прокси-классы для клиентов. Java webservice wsdls и xsd файлы с помощью svcutil. Первый вызов каждого прокси-класса службы занимает очень много времени. Я надеялся ускорить это, создав собственную сборку XmlSerializer (основываясь на статье Как: улучшить время запуска клиентских приложений WCF с помощью XmlSerializer ), но когда я делаю первый вызов для каждой службы по-прежнему занимает столько же времени. Вот шаги, которые я выполняю:
//generate strong name key file
sn -k Blah.snk
//generate the proxy class file
svcutil blah.wsdl blah2.wsdl blah3.wsdl ... base.xsd blah.xsd ... /UseSerializerForFaults /ser:XmlSerializer /n:*,SomeNamespace /out:Blah.cs
//compile the class into an assembly signing it with the strong name key file
csc /target:library /keyfile:Blah.snk /out:Blah.dll Blah.cs
//generate the XmlSerializer code this will give us Blah.XmlSerializers.dll.cs
svcutil /t:xmlSerializer Blah.dll
//compile the xmlserializer code into its own dll using the same key to sign it and referencing the original dll
csc /target:library /keyfile:Blah.snk /out:Blah.XmlSerializers.dll Blah.XmlSerializers.dll.cs /r:Blah.dll
Затем я создаю стандартное консольное приложение, которое ссылается на Blah.dll
и Blah.XmlSerializers.dll
. Затем я попробую что-то вроде:
//BlahProxy is one of the generated service proxy classes
BlahProxy p = new BlahProxy();
//this call takes 30ish seconds
p.SomeMethod();
BlahProxy p2 = new BlahProxy();
//this call takes < 1 second
p2.SomeMethod();
//BlahProx2y is one of the generated service proxy classes
BlahProxy2 p3 = new BlahProxy2();
//this call takes 30ish seconds
p3.SomeMethod();
BlahProxy2 p4 = new BlahProxy2();
//this call takes < 1 second
p4.SomeMethod();
Я знаю, что проблема не в серверной части, потому что я не вижу запроса, сделанного в Fiddler, около 29 секунд. Последующие вызовы каждой службы занимают <1 секунды, поэтому я надеялся, что основным замедлением была среда выполнения .net, которая генерировала сам код xmlserializer, компилировал его и загружал сборку. Я подумал, что это будет причиной того, что первый вызов к каждой службе медленный, а остальные быстрые. К сожалению, сам генерация кода ничего не ускоряет. Кто-нибудь видит, что я делаю не так? </p>