Windows-Server-2008-R2

將 web 服務部署到 iis 7.5 時出錯

  • October 8, 2012

程式部門要求我測試部署他們的一個應用程序。據我所知,它是一個用於 wpf 應用程序的 web 服務 wcf 程式碼 c#。他們確實告訴我他們確實嘗試將證書直接放在 web 服務中(以避免註冊 ssl 證書並將它們保存在每個客戶端應用程序中的痛苦)。

到目前為止,我沒有問題。但是有一個小技巧。

我一直在嘗試在 localhost 中部署該東西(以確保執行此操作的過程),並且一切都很好(確實通過此消息獲得了成功的 svc 載入頁面):

哈哈哈成功

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

C#

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

但是當我嘗試在我的 IIS 網路伺服器(帶有 IIS7.5 的 ws2K8R2)上部署網路服務時,我得到了這個令人討厭且沒有真正幫助的錯誤消息:

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 天時間在網上尋找答案,但到目前為止沒有任何有價值的東西。

我一直認為這不是來自我的伺服器,而是來自錯誤的程式碼。

實際上,這是一個非常有用的錯誤消息。

本質上,應用程序沒有啟動,因為“密碼”不正確。但是,密碼是令人困惑的部分,因為這很可能是證書指紋而不是真正的密碼。第一個堆棧跟踪指向嘗試讀取 X509 證書的 .NET 加密提供程序。

您的 Web 服務似乎已配置為使用證書進行身份驗證。可能在伺服器和客戶端之間,我無法確定。無論如何,您都需要查看一下您的開發環境中是否確實有證書正在使用。該證書可能在您的生產盒上不受信任或未正確載入。

這就是我要開始和從那裡去的地方。很難確切地知道您正在嘗試做什麼或您的程式碼在做什麼。總的來說,雖然它看起來是一個應用程序設置問題,但這個站點可能對解決它的幫助很小。如果它最終沒有成為證書,您可能需要請版主將問題遷移到 StackOverflow,在那裡您可以獲得更精確的 WCF 幫助。

引用自:https://serverfault.com/questions/419289