将 webservice 部署到 iis 7.5 时出现错误

将 webservice 部署到 iis 7.5 时出现错误

编程部门要求我测试部署他们的一个应用程序。据我所知,该应用程序是一个用于 wpf 应用程序的 webservice wcf 代码 c#。他们确实告诉我,他们确实尝试将证书直接放在 webservice 中(以避免注册 ssl 证书并将其保存在每个客户端应用程序中的麻烦)。

到目前为止我还没遇到任何问题。但有一个小窍门。

我一直试图在 localhost 中部署这个东西(以确保执行该操作的过程),并且一切都很好(确实收到了带有此消息的成功 svc 加载页面):

成功了

svcutil.exe http://###deployment.eslan2.local/Service###.svc?wsdl

C#

class Test
{
    static void Main()
    {
       //how to blabla
       client.Close();
    }
}

但是当我尝试在我的 IIS Web 服务器(带有 IIS7.5 的 ws2K8R2)上部署 Web 服务时,我收到了这个令人讨厌的、没什么帮助的错误消息:

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

我花了三天时间在网上寻找答案,但到目前为止还没有任何有价值的结果。

我一直认为这不是来自我的服务器,而是错误来自的代码。

答案1

事实上,这是一个非常有用的错误信息。

本质上,应用程序无法启动,因为“密码”不正确。然而,密码是令人困惑的部分,因为这很可能是证书指纹,而不是真正的密码。第一个堆栈跟踪指向正在尝试读取 X509 证书的 .NET 加密提供程序。

您的 Web 服务似乎已配置为使用证书进行身份验证。可能在服务器和客户端之间,我不确定。无论如何,您似乎需要查看一下您的开发环境中是否确实使用了证书。可能此证书在您的生产环境中不受信任或未正确加载。

这就是我要开始的地方。很难确切地知道你正在尝试做什么或你的代码在做什么。总的来说,这看起来是一个应用程序设置问题,这个网站可能对解决这个问题有点帮助。如果最终没有获得证书,你可能想请版主将问题迁移到 StackOverflow,在那里你可能会得到更精确的 WCF 帮助。

相关内容