webService错误

时间:2011-03-26 20:23:59

标签: c# api service

我正在使用Log Me In Rescue API从他们的Web服务中提取一些报告(通过Visual Studio 2010作为Web引用使用)。

报告有效。

然而,当我尝试运行另一份报告时,它给了我一个:

getReport_PollRateExceeded

我采访了Log Me In Rescue技术支持人员,他们表示这不是他们的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秒后,我仍然无法提取报告。

我非常怀疑这是程序的限制,不是吗?

2 个答案:

答案 0 :(得分:0)

除了成功之外没有任何终止点的紧密循环看起来对我来说是一个坏主意。例如,如果身份验证已更改,该怎么办?你尽可能地努力锤击服务。如果我是你,我会有最大的重试限制。我还会在您的代码中添加一些日志记录,以便您可以查看 需要重试的频率。

但是,如果技术支持人员声称他们没有限制,但看起来像你这样做,那么很容易找到确定:记录流量。使用WiresharkFiddler记录请求和响应。如果您可以证明“PollRateExceeded”错误肯定来自他们的服务,我当然希望他们能够调查。

我建议你写一个简短的程序 拉两次报告,相隔10秒。如果 工作,那么你需要弄清楚为什么它在普通代码中不适合你。如果工作,请向他们发送该代码,该代码应该简短且完整。同时为他们提供网络跟踪。他们很难与之争辩。

答案 1 :(得分:0)

根据LMIR工程团队的说法,确实存在已经存在的民意调查;您不能在60秒内请求超过1条信息;只有PinCodes可以使用它。其他任何事情都是每分钟1个请求。在这个时候没办法。