C# 中 .Net 的 API 问题

问题描述 投票:0回答:1

我是 .net 和 API 的新手,目前正在使用 .Net 4.5 通过 Rest 连接到 API。我遇到的问题是在返回 XML 中抛出一个异常,其中显示:

“无法将请求转发到具有名称的服务器”,“无法从连接读取数据”,连接重置”,

下面有完整错误。
奇怪的是,这个脚本在较小的数据集上运行良好,但是当响应足够大时,我会从服务器返回异常。使用 httpversion10 并指定

gzip
sendchunked
有助于将保持活动状态设置为 true。我正在使用高级休息客户端来测试 Chrome 插件中的服务器,它会通过这些较大的数据集返回良好的数据。它不会与下面的脚本一起使用。我怀疑我告诉服务器处理我的响应的方式与 chrome 插件的方式有所不同。关于如何提高其性能有什么建议吗?

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

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

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 exception connection
1个回答
0
投票

问题出在 DNS 解析上。

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

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

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

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

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

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

第 4 步:测试您的 API。

© www.soinside.com 2019 - 2024. All rights reserved.