Я использую этот код из C# для вызова PHP веб-сервис, который крепится с помощью пользователя/пароля и сертификата:Вызов PHP WebService из .net с серт
string wsurl = ConfigurationManager.AppSettings["Url"];
string wsuser = ConfigurationManager.AppSettings["User"];
string wspass = ConfigurationManager.AppSettings["Pass"];
string url = string.Format(wsurl, param1, param2);
System.Net.CredentialCache oCredentialCache = new System.Net.CredentialCache();
oCredentialCache.Add(new System.Uri(url), "Basic",
new System.Net.NetworkCredential(wsuser, wspass));
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Timeout = TIMEOUT;
req.Credentials = oCredentialCache;
req.Method = "GET";
AttachCert(req);
//Get the data as an HttpWebResponse object
WebResponse resp = req.GetResponse();
Это работает, как ожидалось при запуске с моей машины разработки, но когда мы загружаем это на сервер, я получаю ошибку Timeout при вызове GetResponse().
Вызов AttachCert() - это то место, где я прикрепляю сертификат к запросу, и, если я прокомментирую эту строку, я не получаю таймаут, но правильная ошибка, говорящая, что вызов не может быть завершен из-за недостающего сертификата. Это код AttachCert:
public static void AttachCert(HttpWebRequest Request)
{
// Obtain the certificate.
string certpath = ConfigurationManager.AppSettings["CertPath"];
X509Certificate Cert = X509Certificate.CreateFromCertFile(certpath);
ServicePointManager.CertificatePolicy = new CertPolicy();
Request.ClientCertificates.Add(Cert);
}
Любая идея, почему это будет работать на моей машине, но не на сервере? Мы попытались удалить сертификат в веб-сервисе, и он работал, как ожидалось. Поэтому в этом вызове есть что-то странное, но я не могу понять, что.
Благодаря Vicenç
Можете ли вы проследить в AttachCert и посмотреть, какой вызов внутри вызывает таймаут? – TML
Я видел проблемы с брандмауэрами между разработчиком и производителем. Можете ли вы RDP на производственный сервер и подтвердить, что можете просматривать веб-службу PHP с помощью IE? –
Почему вы используете как базовую аутентификацию, так и сертификат? –