我创建了一个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应用程序或托管服务器的配置有关。
非常感谢任何可能的解决方案或评论!
答案 0 :(得分:1)
你可以尝试将keep alive设置为false,尽管这可能会影响性能。
答案 1 :(得分:0)
只是有机会遇到其他人。我们从来没有确定原因,但是在服务器上重新安装.NET框架似乎“解决”了这个问题。虽然不理想,但这是5年来第一次发生,因此我们现在的解决方案非常满意。