Я использую Log Me In Rescue API для извлечения некоторых отчетов из их веб-службы (используется в качестве веб-ссылки через Visual Studio 2010).
отчет работает.
Однако, когда я пытаюсь запустить другой отчет, он дает мне:
getReport_PollRateExceeded
Я говорил с сотрудниками службы технической поддержки Log Me In Rescue, и они заявили, что это не проблема их API, а проблема с кодом, который я использую. У них не было ограничений на количество отчетов, которые вы можете получать с сервера (они даже позволяют вам делать это в режиме реального времени).
Я запрашиваю их сервер только раз в 30 или около того, поэтому я не могу превысить установленный предел в .NET, который я могу придумать.
API веб-сервиса можно найти здесь:
https://secure.logmeinrescue.com/API/API.asmx
Их вики здесь:
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 секунд я все еще не могу получить отчет.
Я очень сомневаюсь, что это ограничение программы, нет?