C# 操作超时错误

C# 操作超时错误,c#,asp.net-3.5,recaptcha,C#,Asp.net 3.5,Recaptcha,我正在用reCaptcha.net碰壁 一些背景- 我正在使用我从中获得的reCaptcha dotnet v1.0.5 我能够开发一个站点,并通过reCaptcha验证使其在本地工作。当我将其部署到服务器(该站点托管在1和1.com上)时,我得到以下错误- 操作已超时 描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源 异常详细信息:System.Net.WebException:操作已超时 出去 我查看了谷歌论坛,建议服务器允

我正在用reCaptcha.net碰壁

一些背景- 我正在使用我从中获得的reCaptcha dotnet v1.0.5

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

操作已超时

描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源

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

我查看了谷歌论坛,建议服务器允许从端口80进行出站连接。我试图向1和1.com上的支持人员解释这一点,但我认为他一点线索都没有

除了上面提到的以外,我还可以在代码方面做些什么来解决这个问题吗?有人想出了解决办法吗


感谢任何建议

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


此外,由于某些原因,使用reCaptcha控件的IWebProxy属性在代码中设置代理值不起作用。我必须在web.config中添加标记。

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

1-Web.config(仅当放在那里时有效!)


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 :)";
}
//取消已定义响应的操作
私有类gapi{public bool success{get;set;}}
public bool SendMail(string firstname、string lastname、string email、string message、string grecaptcha)
{
SmtpClient smtp=新的SmtpClient(“smtp.1和1.com”);
MailMessage mail=新的MailMessage();
mail.From=新邮件地址(电子邮件);
mail.To.Add(“mail@domain.com");
mail.Subject=firstname+“”+lastname;
mail.Body=消息;
尝试
{
使用(var client=new WebClient())
{
var values=新的NameValueCollection();
值[“secret”]=“6LcEnQYTAAAAAOWzB44-m0Ug9j4yem9XE4ARERUR”;
值[“响应”]=grecaptcha;
值[“remoteip”]=Request.UserHostAddress;
var response=client.UploadValues(“https://www.google.com/recaptcha/api/siteverify“,”职位“,价值观);
bool result=Newtonsoft.Json.JsonConvert.DeserializeObject((Encoding.Default.GetString(response)as string)).success;
如果(!result)返回“有问题)”;
}
//…验证其他字段是否正常并发送邮件:)
smtp.发送(邮件);
}
catch(异常e){return“Something is missed)”;}
返回“好的:)”;
}

希望这有帮助。

您确定可以从部署到的服务器访问recaptcha网站吗?@M.Babcock我如何才能确认这一点?我看到了reCaptcha控件,所以我认为它是可访问的。您添加的代理是什么?你能分享一下吗。。。我也面临着类似的问题,试图向android发送通知。。。。
// 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 :)";
}