WSUS 同期が SoapException で失敗する

この記事は、使用停止されたエンドポイントが原因でWindows Server Update Services (WSUS) 同期が失敗する問題を解決するのに役立ちます。

元の製品バージョン:WSUS - すべてのバージョン、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012
元の KB 番号: 4482416

現象

WSUS 同期が失敗し、次のエラー メッセージが表示されます。

SoapException: エラーが発生しました
at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage メッセージ, WebResponse 応答, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] パラメーター)
at Microsoft.UpdateServices.ServerSyncWebServices.ServerSync.ServerSyncProxy.GetUpdateData(Cookie Cookie, UpdateIdentity[] updateIds)
at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.WebserviceGetUpdateData(UpdateIdentity[] updateIds, List'1 allMetadata, List'1 allFileUrls, Boolean isForConfig)
at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.GetUpdateDataInChunksAndImport(List'1 neededUpdates, List'1 allMetadata, List'1 allFileUrls, Boolean isConfigData)
at Microsoft.UpdateServices.ServerSync.Cat

さらに、WSUS サーバーの WSUS ログ ファイル (%ProgramFiles%\Update Services\LogFiles\SoftwareDistribution.log) には、次のようなエラー メッセージが記録されます。

<Date> <Time> Error WsusService.25 SoapUtilities.LogException USS ThrowException: Actor = https://fe2.update.microsoft.com/v6/ServerSyncWebService/ServerSyncWebService.asmx, Method = "http://www.microsoft.com/SoftwareDistribution/GetUpdateData", ID=<ID>, ErrorCode=InternalServerError, Message=  
   at Microsoft.UpdateServices.Internal.SoapUtilities.LogException(SoapException e)
   at Microsoft.UpdateServices.Internal.WebServiceCommunicationHelper. ProcessWebServiceProxyException(SoapHttpClientProtocol& webServiceObject, Exception exceptionInfo)
   at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.WebserviceGetUpdateData(UpdateIdentity[] updateIds, List\1 allMetadata, List\1 allFileUrls, List\`1& updatesWithSecureFileData, Boolean isForConfig)
   at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.GetUpdateDataInChunksAndImport(List\1 neededUpdates, List\1 allMetadata, List\1 allFileUrls, Boolean isConfigData)
   at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.GetAndSaveUpdateMetadata(List\1 updates)
   at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.ExecuteSyncProtocol(Boolean allowRedirect)  
   at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.CatalogSyncThreadProcess()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
<Date> <Time> Error WsusService.25 SoapUtilities.LogException USS ThrowException: Actor = https://fe2.update.microsoft.com/v6/ServerSyncWebService/ServerSyncWebService.asmx, Method = "http://www.microsoft.com/SoftwareDistribution/GetUpdateData", ID=\<ID>, ErrorCode=InternalServerError, Message=  
   at Microsoft.UpdateServices.Internal.SoapUtilities.LogException(SoapException e)
   at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.ExecuteSyncProtocol(Boolean allowRedirect)
   at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.CatalogSyncThreadProcess()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

原因

この問題は、WSUS サーバーが古い同期エンドポイント を使用するように構成されている場合に発生します https://fe2.update.microsoft.com/v6。 このエンドポイントは完全に使用停止され、2019 年 7 月 8 日以降は到達できません。

解決方法

この問題を解決するには、WSUS 構成の同期エンドポイントを に https://sws.update.microsoft.com変更します。

これを行うには、WSUS 階層内のルート WSUS サーバーなど、Microsoft Update に直接接続する最上位の WSUS サーバーで次の手順を実行します。

  1. すべての WSUS コンソールを閉じます。

  2. 管理者特権の PowerShell コマンド プロンプトで、次の PowerShell スクリプトを実行します。

    注:

    最上位サーバーではない WSUS サーバーでスクリプトを実行しないでください。 サーバーがインターネットに接続されていない場合、同期が失敗する可能性があります。

    WSUS バージョン 3.x の場合:

    [void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
    $server = [Microsoft.UpdateServices.Administration.AdminProxy]::GetUpdateServer()
    $config = $server.GetConfiguration()
    # Check current settings before you change them
    $config.MUUrl
    $config.RedirectorChangeNumber
    # Update the settings if MUUrl is https://fe2.update.microsoft.com/v6
    $config.MUUrl = "https://sws.update.microsoft.com"
    $config.RedirectorChangeNumber = 4002
    $config.Save();
    iisreset
    Restart-Service *Wsus* -v
    

    Windows Server 2008 (最新の更新プログラムなし) または以前のバージョンを実行している WSUS サーバーは、 または https://www.update.microsoft.com 同期エンドポイントをhttps://update.microsoft.com/v6使用している可能性があります。 これらのバージョンの Windows では SHA256 証明書認証がサポートされていないため、PowerShell スクリプトで次の設定を使用します。

    $config.MUUrl = " https://sws1.update.microsoft.com"
    $config.RedirectorChangeNumber = 3011
    

    Windows Server 2012以降のバージョンの WSUS の場合:

    $server = Get-WsusServer
    $config = $server.GetConfiguration()
    # Check current settings before you change them 
    $config.MUUrl
    $config.RedirectorChangeNumber
    # Update the settings if MUUrl is https://fe2.update.microsoft.com/v6
    $config.MUUrl = "https://sws.update.microsoft.com"
    $config.RedirectorChangeNumber = 4002
    $config.Save()
    iisreset
    Restart-Service *Wsus* -v
    
  3. WSUS 同期が成功したことを確認します。

詳細

PowerShell スクリプトを実行する方法の詳細については、「 PowerShell とは」を参照してください。