操作超时错误

时间:2011-12-22 00:44:40

标签: c# asp.net-3.5 recaptcha

我正在用reCaptcha.net打一堵墙

一些背景 - 我正在使用从http://code.google.com/p/recaptcha/downloads/list?q=label:aspnetlib-Latest获得的reCaptcha-dotnet v1.0.5。

我能够开发一个网站,并通过reCaptcha验证使其在本地工作。当我将它部署到服务器(该站点托管在1and1.com上)时,我收到以下错误 -

  

操作已超时

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.Net.WebException:操作已定时   出

我已经检查了谷歌论坛,建议让服务器允许来自端口80的出站连接。我试图向1and1.com的支持人员解释这个,但我认为他根本没有线索。

除了上述内容之外,还有什么我可以通过代码来解决这个问题吗?有没有人为此找到解决方案?

欣赏任何建议!

2 个答案:

答案 0 :(得分:1)

这是我用于邮件配置的代码和用于1and1上托管的网站的Recaptcha代理:

1- Web.config(只有放在那里才有效!)

<system.net>
    <mailSettings>
         <smtp from="mail@domain.com">
            <network host="smtp.1and1.com" port="25" userName="mymail@domain.com" password="mypassword"/>
         </smtp>
    </mailSettings>
    <defaultProxy>
        <proxy usesystemdefault = "false" bypassonlocal="false" proxyaddress="http://ntproxyus.lxa.perfora.net:3128" />
    </defaultProxy>
</system.net>

2-在mycontroller中的专门动作中:

// ouside the action I've defined the response
private class gapi {public bool success{get;set;}}

public bool SendMail(string firstname, string lastname, string email, string message, string grecaptcha)
{
    SmtpClient smtp = new SmtpClient("smtp.1and1.com");
    MailMessage mail = new MailMessage();
    mail.From = new MailAddress(email);
    mail.To.Add("mail@domain.com");
    mail.Subject = firstname + " " + lastname;
    mail.Body = message;
    try
    {
        using (var client = new WebClient())
        {
            var values = new NameValueCollection();
            values["secret"] = "6LcEnQYTAAAAAOWzB44-m0Ug9j4yem9XE4ARERUR";
            values["response"] = grecaptcha;
            values["remoteip"] = Request.UserHostAddress;

            var response = client.UploadValues("https://www.google.com/recaptcha/api/siteverify","POST", values);
            bool result = Newtonsoft.Json.JsonConvert.DeserializeObject<gapi>((Encoding.Default.GetString(response) as string)).success;
            if(!result) return "Something is wrong)";
        }
        //... verify that the other fields are ok and send your mail :)
        smtp.Send(mail);
    }
    catch (Exception e) { return "Something is wrong)"; }

    return "Okey :)";
}

希望这有帮助。

答案 1 :(得分:0)

终于得到了解决方案,我从1and1获得了正确的代理服务器地址并使用了它。 reCaptcha现在很有用。

另外,由于某种原因,使用reCaptcha控件的IWebProxy属性在代码中设置代理值不起作用。我不得不在web.config下添加标签。