Отдел программирования попросил меня протестировать развертывание одного из их приложений. Насколько я знаю о приложении, это то, что это код c # веб-службы wcf для приложения wpf. Они сказали мне, что они пытались поместить сертификат непосредственно в веб-сервис (чтобы избежать головной боли при регистрации сертификата ssl и сохранении его в каждом клиентском приложении).
Пока со мной проблем нет. Но есть маленькая хитрость.
Я пытался развернуть эту вещь на локальном хосте (чтобы быть уверенным в том, как это сделать), и все хорошо (я получил страницу успешной загрузки svc с этим сообщением):
блабла успех
svcutil.exe http://###deployment.eslan2.local/Service###.svc?wsdl
C #
class Test
{
static void Main()
{
//how to blabla
client.Close();
}
}
но когда я пытаюсь развернуть веб-сервис на своем веб-сервере IIS (ws2K8R2 с IIS7.5), я получаю это неприятное и не очень полезное сообщение об ошибке:
Server Error in '/' Application.
The specified network password is not correct.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Security.Cryptography.CryptographicException: The specified network password is not correct.
Ошибка источника:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[CryptographicException: The specified network password is not correct.]
System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) +41
System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob(Byte[] rawData, IntPtr password, UInt32 dwFlags, Boolean persistKeySet, SafeCertContextHandle& pCertCtx) +0
System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromBlob(Byte[] rawData, Object password, X509KeyStorageFlags keyStorageFlags) +335
System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(Byte[] rawData) +101
Effect.ServiceModel.ServiceBehaviorHandlerAttribute.ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) +623
[ServiceModelException: An error occurs during service management.]
Effect.ServiceModel.ServiceBehaviorHandlerAttribute.ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase) +1782
System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) +3565
System.ServiceModel.ServiceHostBase.InitializeRuntime() +82
System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) +64
System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) +789
System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +287
System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +1132
Я потратил 3 дня на поиски ответа в сети, но пока ничего ценного.
Я думал, что это не с моего сервера, а код ошибки.
На самом деле это довольно полезное сообщение об ошибке.
По сути, приложение не запускается из-за неправильного «пароля». Однако пароль сбивает с толку, потому что это, скорее всего, отпечаток сертификата, а не настоящий пароль. Первая трассировка стека указывает на поставщика криптографии .NET, который пытается прочитать сертификат X509.
Похоже, ваша веб-служба настроена на использование сертификатов для аутентификации. Возможно, между сервером и клиентом, в чем я не могу быть уверен. Независимо от того, похоже, вам нужно взглянуть и посмотреть, действительно ли сертификат используется в вашей среде разработки. Возможно, этот сертификат не является доверенным на вашем производственном компьютере или неправильно загружен.
Вот с чего я бы начал и продолжил. Трудно точно знать, что вы пытаетесь сделать или что делает ваш код. В целом, это похоже на проблему с настройкой приложения, и этот сайт может быть минимально полезен для решения. Если он не является сертификатом, вы можете попросить модератора перенести вопрос в StackOverflow, где вы можете получить более точную помощь WCF.