【问题标题】:Docusign upload api call returns The remote server returned an error: (400) Bad RequestDocusign上传api调用返回远程服务器返回错误:(400) Bad Request
【发布时间】:2013-10-30 13:00:02
【问题描述】:

我尝试使用 Timeout 属性通过 API 的演示 url 在 Docusign 中上传文档。但有时 api 调用会返回“远程服务器返回错误:(400)错误请求”。我查看了提琴手调试跟踪。 XML 显示 2 件事是错误代码和消息 “1. errorCode : HOURLY_APIINVOCATION_LIMIT_EXCEEDED。2. 消息:已超过每小时 API 调用的最大数量。每小时限制为 1000”。。但我可以连续上传大约只有 15 到 20 个电话。之后,错误的请求将开始。一段时间后再次开始上传。我无法上传 Fiddler 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();

【问题讨论】:

  • 您能否更新您的问题以发布 XML 请求的完整跟踪? (您可以使用 Fiddler 或类似的工具轻松生成跟踪。)您上面显示的代码并未显示整个请求,因此很难确切知道导致错误的原因。
  • 你是说有时调用成功有时失败当你提到“但有时api调用返回400错误请求”?如果是这种情况,它实际上可能是 DocuSign 的服务器的问题,而不是你的代码,即使你得到了 400。本周早些时候有一些问题,即使服务器有问题,也会返回 400,我相信现在这些都解决了,生产总是比演示环境更稳定...
  • 感谢您抽出宝贵时间,金。我查看了 Fidler 跟踪,它显示错误消息,如“已超出每小时最大调用次数。每小时限制为 1000”。但我连续打了大约 10 到 15 个电话。之后它开始显示“错误请求”消息。
  • 感谢您抽空 Ergin。以前在上传文件的时候很少收到这个信息,因为我的网络上传速度非常慢。在过去的 2 到 3 周内,这种情况一直在发生。我也怀疑这是否是由于“沮丧”而发生的。我没有产品网址。

标签: c# docusignapi electronic-signature


【解决方案1】:

DocuSign 有 api 调用限制 - 您被限制为 每个帐户每小时 1000 次 api 调用。看起来你正在达到这个限制,这很少见,所以我很好奇你是如何以及为什么在不到 1 小时内拨打了这么多电话。

小时窗口不是滑动窗口,而是从每个小时的开始到下一个小时的开始。因此,例如,您不能在下午 3 点到 4 点之间在给定帐户中进行超过 1000 次 api 调用。

请注意,这不仅适用于签名请求 api 调用,还适用于您针对 DocuSign 的服务器进行的 ANY api 调用。因此,如果您进行 Login api 调用以检索您的 baseUrl 和 accountId,那么这将被视为一次调用。然后,如果您将该 baseUrl 用于后续签名请求或其他 api 调用,则计为 2,依此类推。

【讨论】:

    【解决方案2】:

    Docusign 正在尝试联系您的网站,但一小时内失败超过 1000 次,从而达到了限制。要解决此问题,请重新启动站点的应用程序池,并在新小时开始后重新测试或再次检查错误日志。如果之后仍然存在问题,请检查您最新的网络代码是否有错误。

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 1970-01-01
      • 2013-04-20
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      相关资源
      最近更新 更多