On Errors
This morning (November 12, 2007) a rash of reports are floating around the net about problems viewing the Monitoring report on SBS servers. This appears to be an issue with SBS R2 servers with the R2 WSUS installed. Several factors indicate the problem:
-
The daily monitoring e-mail shows the following instead of the normal performance report:
|
The page cannot be displayed |
| An error occurred on the page you are trying to view. |
|
To work around this problem, perform the following steps. After each step, try again to access the page.
- Ensure that the MSSQL$SBSMONITORING service is started.
- Ensure that the server is not low on memory or disk space.
- Restart the server.
- Verify that the server is functional and that there are no system-wide problems.
- Run the Set Up Monitoring Reports and Alerts task in the Server Management Monitoring and Reporting taskpad.
|
- You will see the same verbage when you open the Monitoring node in the Server Management console on the server.
- When you look in the event logs, you will see an error similar to:
Event Type: Error
Event Source: ServerStatusReports
Event Category: None
Event ID: 1
Date: 11/12/2007
Time: 6:00:15 AM
User: N/A
Computer: SERVER
Description:
Server Status Report:
URL: http://localhost/monitoring/perf.aspx?reportMode=1&allHours=1
Error Message: The specified string is invalid.
Parameter name: Title
Stack Trace: at Microsoft.UpdateServices.Internal.BaseApi.UpdateContainer..ctor(GenericReadableRow row)
at Microsoft.UpdateServices.Internal.BaseApi.UpdateCategory..ctor(GenericReadableRow row)
at Microsoft.UpdateServices.Internal.BaseApi.UpdateCategory.BuildUpdateCategoryCollection(GenericReadableRow[] categoryRows)
at Microsoft.UpdateServices.Internal.BaseApi.UpdateCategory.GetAll(DateTime fromSyncDate, DateTime toSyncDate)
at Microsoft.UpdateServices.Internal.BaseApi.UpdateServer.GetUpdateCategories(DateTime fromSyncDate, DateTime toSyncDate)
at Microsoft.UpdateServices.Internal.BaseApi.UpdateServer.GetUpdateCategories()
at Microsoft.SBS.UpdateServices.DataProvider.GetScheduledUpdates()
at Microsoft.SBS.UpdateServices.StatusPage.Utility.GetStatusItems()
at usage.frmPerf.PopulateStatusItems()
at usage.frmPerf.renderReportWorker()
at usage.frmPerf.renderReport()
For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
- When you try to open the Update Services node in the Server Management console, you will see a page similar to the following:
Server Error in '/UpdateServices' Application.
--------------------------------------------------------------------------------
The specified string is invalid. Parameter name: Title
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.ArgumentException: The specified string is invalid. Parameter name: Title
Source Error:
Line 194: </div>
Line 195: <%Response.Flush();
Line 196: RenderPage();%>
Line 197: <div id="divForm" style="display: none">
Line 198: <form id="formMain" method="post" runat="server">
Source File: c:\inetpub\UpdateServices\Home.aspx Line: 196
Stack Trace:
[ArgumentException: The specified string is invalid.
Parameter name: Title]
Microsoft.UpdateServices.Internal.StringValidation.ValidateUpdateContainerTitleString(String paramName, String value) +256
Microsoft.UpdateServices.Internal.BaseApi.UpdateContainer.set_Title(String value) +19
Microsoft.UpdateServices.Internal.BaseApi.UpdateContainer..ctor(GenericReadableRow row) +182
[WsusInvalidDataException: The specified string is invalid.
Parameter name: Title]
Microsoft.UpdateServices.Internal.BaseApi.UpdateContainer..ctor(GenericReadableRow row) +397
Microsoft.UpdateServices.Internal.BaseApi.UpdateCategory..ctor(GenericReadableRow row) +24
Microsoft.UpdateServices.Internal.BaseApi.UpdateCategory.BuildUpdateCategoryCollection(GenericReadableRow[] categoryRows) +418
Microsoft.UpdateServices.Internal.BaseApi.UpdateCategory.GetAll(DateTime fromSyncDate, DateTime toSyncDate) +134
Microsoft.UpdateServices.Internal.BaseApi.UpdateServer.GetUpdateCategories(DateTime fromSyncDate, DateTime toSyncDate) +23
Microsoft.UpdateServices.Internal.BaseApi.UpdateServer.GetUpdateCategories() +52
Microsoft.SBS.UpdateServices.DataProvider.GetScheduledUpdates() +140
Microsoft.SBS.UpdateServices.StatusPage.Utility.GetStatusItems(Boolean waitingForSyncStart) +3199
Microsoft.SBS.UpdateServices.StatusPage.formHome.RenderPage() +23
ASP.Home_aspx.__Render__control1(HtmlTextWriter __output, Control parameterContainer) in c:\inetpub\UpdateServices\Home.aspx:196
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +27
System.Web.UI.Control.Render(HtmlTextWriter writer) +7
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
System.Web.UI.Page.ProcessRequestMain() +1926
--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:1.1.4322.2407; ASP.NET Version:1.1.4322.2407
[Edited at 3:00pm CST]
I think there's a workable resolution for this now. I've done this on a couple of my sites, and it's resolved the issue. Here are the step-by-step instructions that got this working:
- Open a command prompt.
- Type the following at the prompt and hit Enter:
osql -E -S %COMPUTERNAME%\WSUS
- Type the following lines at the prompt and press Enter after each one:
use SUSDB
Update tbPrecomputedCategoryLocalizedProperty
Set Title = Replace(Title, '"', '')
Where Title like '%"%'
go
[note that in the Set Title line, the characters are single-quote, double-quote, single-quote following Title and two single-quotes before the close parenthesis; also, in the Where Title line, the characters are single-quote, percent, double-quote, percent, single-quote]
- After you enter the "go" line, you should get a response that tells you how many rows were affected.
- Type the following lines at the prompt and press Enter after each one:
Update tbPreComputedLocalizedProperty
Set Title = Replace(Title, '"', '')
Where Title like '%"%'
go
[note that the Set Title and Where Title lines are exactly the same as the first set of commands you entered]
- After you enter the "go" line, you should get a response that tells you how many rows were affected. It may take a little longer for this one to process.
- Type "quit" and press Enter to get out of OSQL.
Once you finish this, you should be able to go back into the Update Services node of Server Management and click Refresh to bring up the WSUS status again. Please note that I personally have only done this work for a couple of systems, and it resolved the issue (for the time being) on those boxes. This is NOT a permanent fix and could well break again if Microsoft issues another update that includes doulbe-quotes in the update title.
More information about the behind-the-scenes reasons for these issues were found in a thread at forums.techarena.in and another at SANS. At the time of this edit, there has been no info posted at the WSUS team blog.
[Edited at 3:40pm CST]
I have been informed that the faulty information that was pushed into WSUS yesterday has been updated and *should* automatically get pulled in during the next scheduled WSUS update. WSUS 3.0 can do a manual sync to get the update now, and WSUS 2.0 should get it at 10pm local time tonight. A post is expected from the Official SBS Blog later today. I plan to leave one of my servers in this state to confirm that this operation works as expected tonight, but will manually run the osql steps tomorrow if it does not.