У меня есть лазурная веб-служба, в которой запущена 1 рабочая роль и 1 веб-роль, роли установлены в частной сети лазури.
Рабочая роль выполняет некоторую работу по синхронизации с нашей базой данных, которая загружает файлы отчетов со многих API и серверов, а затем синхронизирует их с нашей базой данных. По какой-то причине 1 (из 10) HTTP-запрос API возвращает ошибку HTTP 500 в облаке, но когда я отлаживаю его на своей машине, он работает, а также у меня есть тот же код, работающий на веб-сайте aspx EC2 (AWS), который делает то же самое с базой данных, работающей на 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}";
РЕДАКТИРОВАТЬ :
По какой-то причине после того, как я включил удаленное управление экземплярами службы, оно было исправлено. Я действительно задаюсь вопросом, как вышло, что у меня возникла эта проблема...