2011-11-14 2 views
4

우리는 C# app에서 WCF (BasicHttpBinding)를 사용하여 약 300ms 걸리는 webservice를 호출합니다. 우리는 동일한 SOAP 호출이 SOAP UI에서 전송할 때 약 30ms 만 걸리는 것으로 나타났습니다.자바 대 순수한 HTTP 클라이언트 성능

이제 우리는 기본 WebClient를 통해 웹 서비스에 액세스하는 테스트를 구현하여 WCf의 DeSer 부분이이 추가 지연의 원인이 아닌지 확인했습니다. 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 헤더와 .NET에서의 해당 구현입니다. .NET 클라이언트는 서버에서 350ms를 기본으로 대기합니다. 이로 인해 지연이 발생합니다. 자바는

그냥 코드에서 초기 코드의 다음 줄을 추가합니다 ... 여기에 다른 기본값을 갖고있는 것 같아요 :

건배!

관련 문제