2011-11-14 10 views
4

私たちはC#アプリケーションからWCF(BasicHttpBinding)を使用して約300msかかるWebサービスを呼び出します。私たちは、同じSOAP呼び出しがSOAP UIから送信するときに約30msしかかからないことに気付きました。Java対ネットHTTPクライアントのパフォーマンス

また、WCfのDeSer-partがこの追加遅延の理由でないことを確認するために、基本WebClient経由でWebサービスにアクセスするテストも実装しました。 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の同じプログラム内の同じサービスへのその後の呼び出しにはどのくらいの時間がかかりますか? 1つのことを1回行う時間の長さを確認することは、パフォーマンスの信頼できるテストではありません。 –

+0

最初のWCF呼び出しはさらに遅くなりますが、その後のWCFおよび通常のWebClient呼び出しでは、対応するJavaクライアント(またはSoapUI)より約10倍遅いです。私は平均的なケースを測定するためにテストをループで実行しました... –

答えて

8

は、私はちょうどその理由を見つけました。

これは100-Expect Continue HTTPヘッダーとそれに対応する.NETの実装です。 .NETクライアントは、サーバー上でデフォルトで350ms待機します。これにより遅延が発生します。

乾杯:Javaはただ非常に早く、あなたのコード内で次のコード行を追加します

...ここに他のデフォルト値を持っているようです!

関連する問題