繁体   English   中英

Java与Net HTTP客户端性能

[英]Java vs. Net HTTP Client Performance

我们从C#app调用web服务,使用WCF(BasicHttpBinding)大约需要300ms。 我们注意到,从SOAP UI发送它时,相同的SOAP调用只需要大约30ms。

现在我们还实现了一个通过基本WebClient访问Web服务的测试,以确保WCF的DeSer部分不是这个额外延迟的原因。 使用WebClient类时,调用大约需要300毫秒。

关于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);
            });
    }

我在这里错过了什么吗? 任何想法都会有所帮助...... ;-)

亲切的问候,塞巴斯蒂安

我刚刚找到了原因。

它是100-Expect Continue HTTP Header以及.NET中的相应实现。 .NET客户端在服务器上默认等待350毫秒。 这导致延迟。 Java似乎在这里有其他默认值...

只需在代码中尽早添加以下代码行:

System.Net.ServicePointManager.Expect100Continue = false;

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM