我有一个 Azure Web 服务,正在运行 1 个辅助角色和 1 个 Web 角色,这些角色设置为位于 Azure 专用网络中。
辅助角色与我们的数据库执行一些同步工作,从许多 API 和服务器下载报告文件,然后将它们同步到我们的数据库, 由于某种原因,1 个(共 10 个)API http 请求在云中返回 HTTP 错误 500,但是当我在我的计算机上调试它时,它可以工作,而且我在 EC2 (AWS) aspx 网站上运行的代码也相同对于在 AWS 上运行的数据库来说也是如此,效果很好。
以下是执行该任务的代码(失败的任务):
public void GenerateReport(DateTime start, DateTime end)
{
string URL = this._cj_url;
URL = string.Format(URL, start.ToString("yyyy-MM-dd"), end.ToString("yyyy-MM-dd"));
RequestState myRequestState = new RequestState();
myRequestState.request = (HttpWebRequest)WebRequest.Create(URL);
myRequestState.from = start;
myRequestState.to = end;
myRequestState.prefix = "CJ";
myRequestState.ext = "xml";
try
{
myRequestState.request.Headers.Add("authorization:" + _devKey);
myRequestState.request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1";
HttpWebRequest myHttpWebRequest = myRequestState.request;
myRequestState.response = (HttpWebResponse)myHttpWebRequest.GetResponse();
// Read the response into a Stream object.
Stream responseStream = myRequestState.response.GetResponseStream();
myRequestState.streamResponse = responseStream;
//' Get response
myRequestState.response = (HttpWebResponse)myRequestState.request.GetResponse();
//' Get the response stream into a reader
StreamReader reader = new StreamReader(myRequestState.response.GetResponseStream());
this.allFileRows = reader.ReadToEnd();
}
catch (Exception e1)
{
this.monitor.PushToErrors("CJ - error in downloading the file - " , e1,true);
}
}
这是 RequestState 类:
public class RequestState
{
// This class stores the State of the request.
const int BUFFER_SIZE = 1024;
public StringBuilder requestData;
public byte[] BufferRead;
public HttpWebRequest request;
public HttpWebResponse response;
public Stream streamResponse;
public DateTime from;
public DateTime to;
public string prefix;
public string ext;
public RequestState()
{
BufferRead = new byte[BUFFER_SIZE];
requestData = new StringBuilder("");
request = null;
streamResponse = null;
}
}
这是请求调用的 URL:
this._cj_url = "https://commission-detail.api.cj.com/v3/commissions?date-type=posting&start-date={0}&end-date={1}";
编辑:
出于某种原因,在我启用对服务实例的远程控制后,它得到了修复。 我真的很想知道我怎么会遇到这个问题......
最佳答案
一种想法是,当您在云中运行代码时,您是在他们的服务器上运行,这意味着您的约会可能会出现问题。我之前见过,您假设 DateTime.Now(或您正在做的任何事情)是您的时间,但实际上它是您在云中运行的虚拟机的服务器时间。可能是日期问题的原因是我看到您正在向 URL 传递日期参数,也许当您在云中运行时它们的格式错误?
关于c# - 在 Azure 辅助角色 http 请求中获取 http 500,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17132257/