2011-11-14 166 views
4

我們使用WCF(BasicHttpBinding)從我們的C#應用​​程序中調用約300ms的webservice。我們注意到,從SOAP UI發送它時,相同的SOAP調用只需要約30ms。Java與網絡HTTP客戶端性能

現在我們還通過基本的WebClient實現了訪問webservice的測試,以確保WCf的DeSer-part不是造成這種額外延遲的原因。當使用WebClient類時,通話也需要大約300ms。

關於爲什麼Java與C#相比,在這方面速度快10倍的任何想法?有沒有可能在.NET的一面進行某種調整?

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     executeTest(() => 
      { 
       var resultObj = client.getNextSeqNr(new WcfClient() 
       { 
        domain = "?", 
        hostname = "?", 
        ipaddress = "?", 
        loginVersion = "?", 
        processId = "?", 
        program = "?", 
        userId = "?", 
        userIdPw = "?", 
        userName = "?" 
       }, "?", "?"); 
      }); 
    } 

    private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     WebClient webClient = new WebClient(); 

     executeTest(()=> 
      { 
       webClient.Proxy = null; 
       webClient.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore); 
       webClient.Headers.Add("Content-Type", "application/xml"); 
       webClient.Encoding = Encoding.UTF8; 
       var data = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"SomeNamespace\">" + 
          " <soapenv:Header/>" + 
          " <soapenv:Body>" + 
          "  <ser:getNextSeqNr>" + 
          "   <!--Optional:-->" + 
          "   <clientInfo>" + 
          "   <!--Optional:-->" + 
          "   <domain>?</domain>" + 
          "   <!--Optional:-->" + 
          "   <hostname>?</hostname>" + 
          "   <!--Optional:-->" + 
          "   <ipaddress>?</ipaddress>" + 
          "   <!--Optional:-->" + 
          "   <loginVersion>?</loginVersion>" + 
          "   <!--Optional:-->" + 
          "   <processId>?</processId>" + 
          "   <!--Optional:-->" + 
          "   <program>?</program>" + 
          "   <!--Optional:-->" + 
          "   <userId>*</userId>" + 
          "   <!--Optional:-->" + 
          "   <userIdPw>?</userIdPw>" + 
          "   <!--Optional:-->" + 
          "   <userName>?</userName>" + 
          "   </clientInfo>" + 
          "   <!--Optional:-->" + 
          "   <name>?</name>" + 
          "   <!--Optional:-->" + 
          "   <schema>?</schema>" + 
          "  </ser:getNextSeqNr>" + 
          " </soapenv:Body>" + 
          "</soapenv:Envelope>"; 
       string result = webClient.UploadString("http://server:8080/service", "POST", data); 
      }); 
    } 

我在這裏錯過了什麼嗎?任何想法將是有益的... ;-)

親切的問候, 塞巴斯蒂安

+3

在WCF下的相同程序中,隨後調用相同服務需要多長時間?檢查一次做一件事的時間長短並不是對性能的可靠測試 - 要多做很多次。 –

+0

第一次WCF調用更慢,但後續調用WCF和普通WebClient調用的速度仍比對應的Java客戶端(甚至SoapUI)慢10倍左右。我確實在循環中運行測試以確保測量一般情況... –

回答

8

我才發現這樣做的原因。

這是100-Expect Continue HTTP Header和.NET中的相應實現。 .NET客戶端在服務器上默認等待350毫秒。這會導致延遲。 Java的似乎這裏有其他默認值...

只需添加以下代碼行很早就在你的代碼:

乾杯!