【问题标题】:API woes with .Net in C#C# 中 .Net 的 API 问题
【发布时间】:2015-08-24 04:35:26
【问题描述】:

我是 .net 和 API 的新手,目前正在使用 .Net 4.5 使用 rest 连接到 API。我遇到的问题是我在返回 xml 中抛出一个异常,上面写着“无法将请求转发到具有名称的服务器”、“无法从连接中读取数据”、连接重置”,下面是完整错误。
奇怪的是,这个脚本在较小的数据集上运行良好,但是当响应足够大时,我会从服务器抛出异常。使用 httpversion10 并指定 gzip 和 sendchunked 有助于将 keep alive 设置为 true。我正在使用高级休息客户端在 chrome 插件中测试服务器,并使用这些更大的数据集返回数据。它不会与下面的脚本一起使用。我怀疑我告诉服务器处理我的响应的方式与 chrome 插件的方式有所不同。关于如何提高性能的任何建议?

这是适用于 Chrome 插件的高级 REST 客户端设置。

这是我的代码,似乎需要更改才能更好地处理请求/响应。

        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"magicalwebsite");


        req.KeepAlive = true;
        req.ProtocolVersion = HttpVersion.Version10;
        req.ServicePoint.ConnectionLimit = 24;
        req.Timeout = 2000000000;
        req.Method = "Post";
        req.Accept = "*/*";
        req.SendChunked = true;
        req.AutomaticDecompression = DecompressionMethods.GZip;
        //Xml request file for data
        string postData = System.IO.File.ReadAllText(@"C:\Users\yo\Desktop\testtest.txt");

        //sending header and content
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        req.ContentType = "text/xml";
        req.ContentLength = byteArray.Length;
        req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("xxxx:xxxxx"));


        Stream dataStream = req.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();

        //Requesting response of data
        HttpWebResponse resp = req.GetResponse() as HttpWebResponse;

       //Grabbing response
        using (Stream stream = resp.GetResponseStream())
        {
            StreamReader reader = new StreamReader(stream, Encoding.UTF8);

            String responseString = reader.ReadToEnd();
        }

这是我在被抛出的 xml 中遇到的异常。

<?xml version="1.0" encoding="UTF-8"?>
<response success="false">
  <messages>
    <message key="exception-caught">Caught Exception: Caught Exception:
 Cannot forward request to server with name=prod-euapp01

com.magicalpony.exception.APException: Cannot forward request to server with name=prod-euapp01

    at com.magicalpony.webservices.APIForwarder.forward(APIForwarder.java:105)
    at com.magicalpony.webservices.APIServlet.forwardRequest(APIServlet.java:270)

    at com.magicalpony.webservices.APIServlet.wrongServer(APIServlet.java:253)
    at com.magicalpony.webservices.APIServlet.service(APIServlet.java:124)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java:210)
    at com.magicalpony.system.WebServiceMonitor.doFilter(WebServiceMonitor.java:61)
    at org.apache.catalina.core.
ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at com.magicalpony.system.HitTracer.doFilter(HitTracer.java:133)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)

    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)

    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:399)
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:303)

at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:183)
    at org.apache.coyote.ajp.AjpProtocol$AjpConnectionHandler.process(AjpProtocol.java:169)

    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:311)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.magicalpony.exception.APException:
 Cannot read data from connection
    at com.magicalpony.webservices.NetUtil.readData(NetUtil.java:61)
    at com.magicalpony.webservices.APIForwarder.forward(APIForwarder.java:102)

    ... 26 more
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:196)
    at 
java.net.SocketInputStream.read(SocketInputStream.java:122)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)

at java.io.BufferedInputStream.read1(BufferedInputStream.java:275)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334)

at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:633)

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1323)
    at com.magicalpony.webservices.NetUtil.readData(NetUtil.java:58)

... 27 more</message>
  </messages>
</response>

【问题讨论】:

  • 我只能访问这个客户端,所以我不能用它做很多事情。我们正在连接到第二方服务。

标签: c# .net api exception connection


【解决方案1】:

问题在于 DNS 解析。

第 1 步:在浏览器中输入您的域名,查看服务器是否可用。

第 2 步:如果服务器可用域名,那么您必须修复 IP 地址或 DNS 解析。

您可以通过更新 PC 中的 IP 地址来解决此问题(按照以下步骤操作)

转到一个文件夹:C:\Windows\System32\drivers\etc

将“hosts”文件复制并粘贴到桌面。 使用您的 IP 地址和域名更新您的主机文件。

第 3 步:将 hosts 文件复制并粘贴到原始文件夹 (C:\Windows\System32\drivers\etc)。

第 4 步:测试您的 API。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2011-04-21
    • 1970-01-01
    • 2021-12-27
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多