通过HttpWebRequest发送客户端证书,间歇性地工作

时间:2010-10-07 20:52:36

标签: c# asp.net iis client certificate

我创建了一个Web应用程序,该应用程序调用需要客户端证书进行身份验证的Web服务。以下是我如何构建请求的片段:

            // Grab Certificate
            X509Certificate2 cert2 = new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory + GiftCardConfig.A2A_CertificateLocation, GiftCardConfig.A2A_CertificatePassword, X509KeyStorageFlags.MachineKeySet);

            // First Call Status Account
            StringBuilder urlStatus = new StringBuilder(GiftCardConfig.A2A_URL + "webservice.asp?");
            urlStatus.Append("userid=" + GiftCardConfig.A2A_UserID);
            urlStatus.Append("&pwd=" + GiftCardConfig.A2A_Password);
            urlStatus.Append("&sourceid=" + GiftCardConfig.A2A_SourceID);
            urlStatus.Append("&cardnum=" + cardNumber);
            urlStatus.Append("&purseno=" + GiftCardConfig.A2A_PurseID);

            urlStatus.Append("&status=ACTIVATE");

            // Build HTTP Request
            HttpWebRequest wrStatus = (HttpWebRequest)WebRequest.Create(urlStatus.ToString());
            wrStatus.KeepAlive = true;
            wrStatus.Method = "GET";
            wrStatus.Accept = "text/xml";
            wrStatus.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 1.0.3705; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)";
            wrStatus.ClientCertificates.Clear();
            wrStatus.ClientCertificates.Add(cert2);

这一切都有效,但只是间歇性的。大约每24小时,托管Web服务的服务器返回403:Forbidden错误。解决它的唯一方法是对运行Web应用程序的服务器进行iisreset。我们对此问题感到十分困惑,并想知道此问题是否与Web应用程序或托管服务器的配置有关。

非常感谢任何可能的解决方案或评论!

2 个答案:

答案 0 :(得分:1)

你可以尝试将keep alive设置为false,尽管这可能会影响性能。

答案 1 :(得分:0)

只是有机会遇到其他人。我们从来没有确定原因,但是在服务器上重新安装.NET框架似乎“解决”了这个问题。虽然不理想,但这是5年来第一次发生,因此我们现在的解决方案非常满意。