首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的.Net带来的API问题

问C#中的.Net带来的API问题
EN

Stack Overflow用户
提问于 2015-08-24 12:35:27
回答 1查看 134关注 0票数 0

我是.net和API的新手,目前正在使用rest连接到.Net 4.5。我遇到的问题是,我在返回的xml中抛回了一个异常,上面写着“无法将请求转发到有名称的服务器”,“无法从连接中读取数据”,“连接重置”,下面是完整错误。

奇怪的是,这个脚本在较小的数据集上工作得很好,但是当响应足够大时,我会从服务器抛回异常。通过使用httpversion10和指定gzip和sendchunked,将keep alive设置为true。我正在使用高级rest客户端在chrome插件中测试服务器,它使用这些更大的数据集在那里返回数据。它不会使用下面的脚本。我怀疑我告诉服务器处理我的响应的方式与chrome插件的方式不同。对如何提高性能有什么建议吗?

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

​

这是我拥有的代码,它似乎需要更改以使其更好地处理请求/响应。

代码语言:javascript
复制
        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中得到的异常。

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

发布于 2015-08-24 14:18:42

问题出在DNS解析上。

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

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

您可以通过更新PC中的IP地址来修复此问题(请执行以下步骤)

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

​

​

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

​

​

步骤3:复制并粘贴原始文件夹(C:\Windows\System32\drivers\etc)中的hosts文件。

第四步:测试你的API。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32174499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档