2013-10-30 2 views
0

API에서 데모 URL을 통해 Docusign에서 문서를 업로드 할 때 Timeout 속성을 사용하려고했습니다. 그러나 때로는 API 호출이 "원격 서버가 오류를 반환했습니다 : (400) 잘못된 요청"을 반환합니다. 나는 fiddler 디버그 추적을 조사했습니다. XML은 2 가지 오류 코드와 메시지 "1. errorCode : HOURLY_APIINVOCATION_LIMIT_EXCEEDED 2. 메시지 : 최대 시간당 API 호출 수를 초과했습니다. 시간당 한계는 1000"입니다.. 그러나 계속 업로드 할 수있는 것은 약 15 ~ 20 건 정도 밖에 걸리지 않았습니다. 그 후에 나쁜 요청이 시작됩니다. 다시 한 번 업로드를 시작합니다. Fidler XML 이미지를 업로드 할 수 없습니다. 그것은 이미지를 게시하는 데 10 평판이 필요하다는 것을 보여주었습니다.Docusign 업로드 API 호출이 반환 됨 원격 서버에서 오류를 반환했습니다. (400) 잘못된 요청

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(); 
+0

질문을 업데이트하여 XML 요청의 전체 추적을 게시 할 수 있습니까? 위의 코드는 전체 요청을 표시하지 않으므로 오류의 원인을 정확히 알기가 어렵습니다. –

+0

때때로 "호출이 400 개의 잘못된 요청을 반환하는 경우"라고 말하면 때때로 호출이 성공하고 때때로 실패합니다. 그렇다면 실제로는 DocuSign의 서버에서 문제가 될 수 있으며 코드가 400 개라도 문제가되지는 않습니다. 이번 주 초에 서버 문제가 있어도 400 개가 반환되는 문제가있었습니다. 그것들은 지금 해결되었고, 제작은 데모 환경보다 항상 안정적이었습니다. ... – Ergin

+0

시간 내 주셔서 감사합니다. 나는 Fidler 추적을 통해 "최대 호출 시간 초과가 초과되었습니다 .1 시간 제한은 1000"과 같은 오류 메시지를 보았습니다. 그러나 나는 약 10-15 번의 전화를 연속적으로했다. 그 후 "나쁜 요청"메시지가 표시되기 시작했습니다. –

답변

1

가 DocuSign의 장소에서 API 호출 제한이 - 당신은 시간 당 계정 당 1000 API 호출로 제한됩니다. 이 한계를 치는 것처럼 보입니다. 드물기 때문에 1 시간 이내에 어떻게 그리고 왜 많은 전화를하는지 궁금합니다.

시간 창은 슬라이딩 창이 아니라 각 시간의 상단부터 다음 시간의 시작까지입니다. 따라서 예를 들어 오후 3시에서 4시 사이에 특정 계정에서 1000 개가 넘는 API 호출을 할 수 없습니다.

이것은 서명 요청 api 전화를위한 것이 아니라 DocuSign의 서버에 대해 ANY api 전화를 거는 것입니다. 따라서 Login API 호출을 통해 baseUrl과 accountId를 검색하면 하나의 호출로 간주됩니다. 그런 다음 후속 서명 요청이나 다른 api 호출에 해당 baseUrl을 사용하면 2로 계산됩니다.

1

Docusign이 귀하의 웹 사이트에 접속하려고 시도했지만 1 시간 동안 1000 회 이상 실패하여 한계에 도달했습니다. 해결하려면 사이트의 앱 풀을 다시 시작하고 새 시간이 시작된 후에 오류 로그를 다시 테스트하거나 다시 확인하십시오. 그 후에도 여전히 문제가 있으면 최신 웹 코드에서 오류를 확인하십시오.