2010-03-10 28 views
8

VS2008 .Net 3.5, SoapHttpClientProtocol devralma oluşturulan bir geleneksel C# web hizmeti istemcisi kullanıyorum. Bu Java'da yazılmış bir uzak web servisine bağlanıyor.HTTP istek üstbilgisini ve gövdesini paralel olarak göndermek için C# web hizmeti istemcisini nasıl yapılandırabilirim?

Tüm yapılandırma istemci başlatma sırasında kodunda yapılır ve aşağıda görülebilir:

 ServicePointManager.Expect100Continue = false; 
     ServicePointManager.DefaultConnectionLimit = 10; 

     var client = new APIService 
     { 
      EnableDecompression = true, 
      Url = _url + "?guid=" + Guid.NewGuid(), 
      Credentials = new NetworkCredential(user, password, null), 
      PreAuthenticate = true, 
      Timeout = 5000 // 5 sec 
     }; 

Her şey çalışıyor, ancak basit yöntem çağrısını yürütmek için geçen süre neredeyse iki katına ağ ping zamanıdır. Java Test istemci ağ ping süresi olarak kabaca aynı alır Oysa: Bir oturum için TCP trafiğini analiz ettikten sonra

C# client ~ 550ms 
Java client ~ 340ms 
Network ping ~ 300ms 

aşağıdaki keşfetti: Temelde

, C# istemci aşağıdaki sırayla TCP paketlerini gönderdi .

Client Send HTTP Headers in one packet. 
Client Waits For TCP ACK from server. 
Client Sends HTTP Body in one packet. 
Client Waits For TCP ACK from server. 

Java istemcisi, TCP paketlerini aşağıdaki sırayla gönderir.

Client Sends HTTP Headers in one packet. 
Client Sends HTTP Body in one packet. 
Client Revieves ACK for first packet. 
Client Revieves ACK for second packet. 
Client Revieves ACK for second packet. 

Java istemci göründüğü gibi paralel başlık/body göndermek için C# web hizmeti istemcisi yapılandırmak için yine de var mı?

Herhangi bir yardım veya işaretçiyi çok takdir ediyor.

+0

.Net isteği ve java isteği için http başlıklarını koklayabilir ve karşılaştırabilirsiniz? ı vekil deyince ben bir http vekil –

+0

üzgün (Ve Java Client aynı proxy kullanıyorsa tahmin) keman gibi bir http hata ayıklama proxy'si ve daha sonra paket içeriğini kokla. biraz bilgi almalısın. – Christopher

+0

düzenlenmiş metin 'vekil' için başvuruları kaldırın ve 'istemci' – Christopher

cevap

0

Sana SoapHttpClientProtocol kesmek için kalıtsal EndGetRequestStream yöntemi kullanabilirsiniz düşünüyorum. İstek tamamlanana kadar bunu bir ara belleğe kaydedin. Sonra kendi akışınızı yapın ve hepsini bir anda dışarı itin. cevapta Rob için

1

sayesinde sonunda ben varsayılan olarak yapar Servis Referans/WCF vekil nesil, ekleme kullanmayı tercih etti. Muhtemelen altında daha yeni HTTP kütüphaneleri kullanıyor.

I (nesneler dizisi iyi çalıştı içeren bir nesne dönen .: yani) karmaşık nesnelerin ham diziler dönmek soap yöntemleri ile birkaç WCF proxy üretimi sorunlar vardı. Bunu elde etmek için dizilerinizi nesnelerin içine sarmanız ya da SOAP sunucu yapılandırmasını RPC'den DOCUMENT'e (yaptığımız şey) geçirmeniz gerekir.

İlgili konular