我正在使用Log In Rescue从他们的web服务中提取一些报告(通过Visual 2010作为web引用使用)。
报告起作用了。
然而,当我尝试运行另一个报告时,它给了我一个:
getReport_PollRateExceeded我采访了救援技术支持人员,他们说这不是他们的API的问题,而是我正在使用的代码的问题。他们没有限制您可以从服务器上提取的报告数量(它们甚至允许您实时完成)。
我只查询了他们的服务器30秒左右,所以我不可能在.NET中超过任何我可以忽略的设置限制。
web服务API可以在这里找到:
https://secure.logmeinrescue.com/API/API.asmx他们的Wiki在这里:
http://logmeinwiki.com/wiki/Rescue:API我使用的代码是:
private void myReport_DoWork(object sender, DoWorkEventArgs e)
{
LMIR.getReportRet response = new LMIR.getReportRet();
while (response.ToString() != "getReport_OK")
{
response = proxy.getReport(iTechID, NODE_REF.NODE, sAuthCodes, out sReports);
}
}我不会再次调用该工作进程,直到用户请求它,我甚至禁用请求按钮以支持进度条,等待runworkercompleted()例程完成。
但是,可以肯定的是,如果我在30秒内请求,我就会收到pollRateExceeded。
所以我有点糊涂了。
这是可以在app.config文件中修复的东西吗?
从那以后,我创建了一个简短的程序:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net;
using System.Web;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;
using testLMIR.LMIR;
using System.Collections;
using System.Text.RegularExpressions;
namespace testLMIR
{
public partial class Form1 : Form
{
string sUser = "";
string sPass = "";
int iNodeID = 74249;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
LMIR.API proxy = new LMIR.API();
proxy.CookieContainer = new CookieContainer();
sUser = textBox1.Text.ToString();
sPass = textBox2.Text.ToString();
loginRet oLogin = proxy.login(sUser, sPass);
Console.WriteLine(oLogin.ToString());
string sAuthCode = "";
requestAuthCodeRet oAuthCodeReq = proxy.requestAuthCode(sUser, sPass, out sAuthCode);
string sReport = "";
getReportRet oGetReport = proxy.getReport(iNodeID,NODE_REF.NODE, sAuthCode, out sReport);
Console.WriteLine(oGetReport + "<br />");
Thread.Sleep(10000);
oGetReport = proxy.getReport(iNodeID, NODE_REF.NODE, sAuthCode, out sReport);
Console.WriteLine(oGetReport + "<br />");
Thread.Sleep(10000);
oGetReport = proxy.getReport(iNodeID, NODE_REF.NODE, sAuthCode, out sReport);
Console.WriteLine(oGetReport + "<br />");
Thread.Sleep(10000);
}
}
}此程序将从表单上的2个文本框中获取登录,并在按下按钮时采取行动。结果如下:
login_OK
getReport_OK<br />
getReport_PollRateExceeded<br />
getReport_PollRateExceeded<br />如果我正确地阅读了这些信息,即使30秒后,我仍然无法提取报告。
我很怀疑这是程序的限制,不是吗?
发布于 2011-10-21 17:57:16
根据LMIR工程团队的说法,超出的计票率确实存在;您不能在60秒内请求超过1条信息;只有PinCodes才会对此进行处理。任何其他事情都是每分钟1次请求。现在没办法了。
发布于 2011-03-26 20:28:50
像这样紧的循环,除了成功之外,没有任何终点,对我来说是个坏主意。例如,如果身份验证发生了更改,怎么办?你会尽你所能把服务打得更紧。如果我是你,我会有最高的重试限额。我还会在代码中添加一些日志,这样您就可以看到需要重试的次数。
然而,如果技术支持人员声称他们没有限制,但看起来是这样的,那么很容易找到答案:记录流量。使用Wireshark或费德勒记录请求和响应。如果您能够证明"PollRateExceeded“错误肯定来自于他们的服务,我当然希望他们会对此进行调查。
我建议你写一个简短的程序,把报告分开两次,十秒钟。如果这确实有效,那么您就需要在您的正常代码中找出它不适用于您的原因。如果它不能工作,发送给他们的代码,这应该是简短和完整的。同时给他们网络追踪。他们很难对此提出异议。
https://stackoverflow.com/questions/5445064
复制相似问题