2013-10-30 96 views
0

我試圖通過Timeout屬性在API中通過演示網址在Docusign中上傳文檔。但有時api調用會返回「遠程服務器返回錯誤:(400)錯誤請求」。我看着小提琴手的調試軌跡。 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請求追蹤? (您可以使用Fiddler或類似方法輕鬆生成跟蹤。)上面顯示的代碼不會顯示整個請求,因此很難確切知道導致錯誤的原因。 –

+0

你是說有時候這個調用成功了,有時候當你提到「但是有時候api調用會返回400個錯誤的請求」,它有時會失敗嗎?如果是這樣的話,它可能實際上是DocuSign服務器的一個問題,而不是你的代碼,即使你得到了400.本週早些時候有一些問題,即400個服務器出現問題,但我相信那些現在解決了,生產總是比演示環境更穩定... – Ergin

+0

感謝您的時間金。我查看了Fidler跟蹤,它顯示錯誤消息,如「每小時調用的最大數量已超出,小時限制爲1000」。但我連續做了10到15個電話。之後,它開始顯示「壞請求」消息。 –

回答

1

的DocuSign已制定API調用限制 - 你被限制到每小時每個帳戶1000 API調用。看起來你正在達到這個極限,這很少見,所以我會好奇你在不到1個小時內如何以及爲什麼要打這麼多電話。

小時窗口不是一個滑動窗口,而是從每小時的頂部到下一個的開始。因此,例如,在下午3點到4點之間,您無法在給定賬戶中進行超過1000個API的呼叫。

請注意,這不僅適用於簽名請求api調用,但ANY API調用您對DocuSign的服務器。因此,如果您通過Login API調用來檢索您的baseUrl和accountId,那麼這就是一次調用。然後,如果您將該baseUrl用於後續簽名請求或其他api調用,則計爲2,依此類推。

1

Docusign正試圖聯繫您的網站,但一小時內失敗超過1000次,從而達到其限制。要解決此問題,請重新啓動網站的應用程序池,並在新的小時開始後重新測試或檢查錯誤日誌。如果之後仍然存在問題,請檢查您的最新網頁代碼是否有錯誤。

相關問題