Docusign upload api call return Удаленный сервер возвратил ошибку: (400) Bad Request

Я пытался использовать свойства Timeout для загрузки документа в Docusign через демонстрационный URL из API. Но иногда вызов API возвращает "Удаленный сервер возвратил ошибку: (400) Bad Request". Я посмотрел на трассировку отладки Fiddler. XML показывает две вещи: код ошибки и сообщение "1. errorCode: HOURLY_APIINVOCATION_LIMIT_EXCEEDED. 2. Сообщение: превышено максимальное количество часовых вызовов API. Часовой лимит равен 1000"., Но это было около 15-20 звонков, которые я мог непрерывно загружать. После этого начнется плохой запрос. Снова это начало загружать через некоторое время. Я не могу загрузить изображение Fidler XML. Это показало, что нужно 10 репутаций, чтобы разместить изображение.

string envdef = "<envelopeDefinition xmlns=\"http://www.docusign.com/restapi\">" + envDef;
string temp = Environment.ExpandEnvironmentVariables("%temp%");
FileStream fileStream = System.IO.File.OpenRead(path);

// build the multipart request body
string requestBodyStart = "\r\n\r\n--BOUNDARY\r\n" +
    "Content-Type: application/xml\r\n" +
    "Content-Disposition: form-data\r\n" +
        "\r\n" +
        envdef + "\r\n\r\n--BOUNDARY\r\n" + // our xml formatted envelopeDefinition
    "Content-Type: application/x-www-form-urlencoded\r\n" +
    "Content-Disposition: file; filename=\"CaptionBookmarkTest - 214744463.doc\"; documentId=1\r\n" +
    "\r\n";

string requestBodyEnd = "\r\n--BOUNDARY--\r\n\r\n";
// use baseURL value + "/envelopes" for url of this request
request.Timeout = 1000000;

request = (HttpWebRequest)WebRequest.Create(baseURL + "/envelopes");
request.Headers.Add("X-DocuSign-Authentication", authenticateStr);
request.ContentType = "multipart/form-data; boundary=BOUNDARY";
request.Accept = "application/xml";
request.ContentLength = requestBodyStart.ToString().Length + fileStream.Length + requestBodyEnd.ToString().Length;
request.Method = "POST";

// write the body of the request
byte[] bodyStart = System.Text.Encoding.UTF8.GetBytes(requestBodyStart.ToString());
byte[] bodyEnd = System.Text.Encoding.UTF8.GetBytes(requestBodyEnd.ToString());
Stream dataStream = request.GetRequestStream();
dataStream.Write(bodyStart, 0, requestBodyStart.ToString().Length);

// Read the file contents and write them to the request stream
byte[] buf = new byte[4096];
int len;
while ((len = fileStream.Read(buf, 0, 4096)) > 0)
{
    dataStream.Write(buf, 0, len);
}
dataStream.Write(bodyEnd, 0, requestBodyEnd.ToString().Length);
dataStream.Close();

// read the response
request.MaximumAutomaticRedirections = 4;
webResponse = (HttpWebResponse)request.GetResponse();
sr.Close();
responseText = "";
sr = new StreamReader(webResponse.GetResponseStream());
responseText = sr.ReadToEnd();
StreamWriter SW;
SW = System.IO.File.CreateText(temp + "\\upload.XML");
SW.WriteLine(responseText);
SW.Close();
sr.Close();

2 ответа

Решение

DocuSign имеет лимиты API-вызовов - вы ограничены 1000 API-вызовов на один аккаунт в час. Похоже, что вы достигаете этого предела, что редко, поэтому мне было бы интересно узнать, как и почему вы делаете столько звонков менее чем за 1 час.

Часовое окно - это не скользящее окно, а скорее от вершины каждого часа до начала следующего. Так, например, вы не можете совершать более 1000 вызовов API на данную учетную запись в период с 15:00 до 16:00.

Обратите внимание, что это не только для API-вызовов с запросом подписи, но и ЛЮБОГО API-вызова, который вы делаете на серверах DocuSign. Таким образом, если вы выполняете API-вызов Login для получения baseUrl и accountId, то это считается одним вызовом. Затем, если вы используете этот baseUrl для последующего запроса подписи или другого вызова API, это считается как 2, и так далее.

Docusign пытается связаться с вашим веб-сайтом, но в течение часа не удается более 1000 раз, тем самым достигая своего предела. Чтобы решить эту проблему, перезапустите пул приложений на своем сайте и повторно протестируйте или проверьте журналы ошибок после начала нового часа. Если после этого проблема остается, проверьте ваш последний веб-код на наличие ошибок.

Другие вопросы по тегам