首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >webService错误

webService错误
EN

Stack Overflow用户
提问于 2011-03-26 20:23:58
回答 2查看 195关注 0票数 0

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

报告起作用了。

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

代码语言:javascript
复制
getReport_PollRateExceeded

我采访了救援技术支持人员,他们说这不是他们的API的问题,而是我正在使用的代码的问题。他们没有限制您可以从服务器上提取的报告数量(它们甚至允许您实时完成)。

我只查询了他们的服务器30秒左右,所以我不可能在.NET中超过任何我可以忽略的设置限制。

web服务API可以在这里找到:

代码语言:javascript
复制
https://secure.logmeinrescue.com/API/API.asmx

他们的Wiki在这里:

代码语言:javascript
复制
http://logmeinwiki.com/wiki/Rescue:API

我使用的代码是:

代码语言:javascript
复制
 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文件中修复的东西吗?

从那以后,我创建了一个简短的程序:

代码语言:javascript
复制
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个文本框中获取登录,并在按下按钮时采取行动。结果如下:

代码语言:javascript
复制
login_OK
getReport_OK<br />
getReport_PollRateExceeded<br />
getReport_PollRateExceeded<br />

如果我正确地阅读了这些信息,即使30秒后,我仍然无法提取报告。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-21 17:57:16

根据LMIR工程团队的说法,超出的计票率确实存在;您不能在60秒内请求超过1条信息;只有PinCodes才会对此进行处理。任何其他事情都是每分钟1次请求。现在没办法了。

票数 0
EN

Stack Overflow用户

发布于 2011-03-26 20:28:50

像这样紧的循环,除了成功之外,没有任何终点,对我来说是个坏主意。例如,如果身份验证发生了更改,怎么办?你会尽你所能把服务打得更紧。如果我是你,我会有最高的重试限额。我还会在代码中添加一些日志,这样您就可以看到需要重试的次数。

然而,如果技术支持人员声称他们没有限制,但看起来是这样的,那么很容易找到答案:记录流量。使用Wireshark费德勒记录请求和响应。如果您能够证明"PollRateExceeded“错误肯定来自于他们的服务,我当然希望他们会对此进行调查。

我建议你写一个简短的程序,把报告分开两次,十秒钟。如果这确实有效,那么您就需要在您的正常代码中找出它不适用于您的原因。如果它不能工作,发送给他们的代码,这应该是简短和完整的。同时给他们网络追踪。他们很难对此提出异议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5445064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档