One of the best documented reasons for a cab file upload to fail is due to timeout settings in IIS. For an overview of this please see http://blogs.technet.com/jenstr/archive/2008/02/28/uploading-of-a-cab-file-to-update-server-wss-site-fails-with-an-exception-and-the-message-thread-was-being-aborted.aspx. In the case of the timeout issue the upload will process for a while before the error is returned. However, there is another reason you may see the same error:
"The file upload was unsuccessful due to an unknown error. Please try again"
In this case the error will be thrown about 10 seconds after the upload process begins. If you check the corresponding debug logs (UpdateServer > Logs > Server > Debug > UpdatePackageHandler), you'll see the following:
Debug :
09/02/2008 07:08:52, Debug : -------------------------------------
09/02/2008 07:08:52, Debug : Started Upload Updates From Cab Call
09/02/2008 07:08:52, Debug :
#Sharepoint Server Path : http://wss.domain.com/sites/ucupdateserver/
#Updates Path : Updates/
#Approval Path : Server/DB/
#Temp Extract Path : C:\Program Files (x86)\Microsoft Office Communications Server 2007\Web Components\UC Device Updates\Management Console\LCS
#Log Path : Logs/Server/Debug/UpdatePackageHandler/
09/02/2008 07:08:52, Debug : Started Reading Cab file C:\Program Files (x86)\Microsoft Office Communications Server 2007\Web Components\UC Device Updates\Management Console\LCS/633559361262490130\UCUpdates.cab
09/02/2008 07:08:53, Debug : Extracted all files under temp location C:\Program Files (x86)\Microsoft Office Communications Server 2007\Web Components\UC Device Updates\Management Console\LCS\a7992c72-7fb3-4f6f-b4c3-a2494f984ad1
09/02/2008 07:08:53, Debug : Converted UpdatesInfo.xml into new format
09/02/2008 07:08:55, Exception : Exception: Exception While Uploading file Updates/CPE.nbtThe request failed with HTTP status 401: Unauthorized. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Microsoft.RTC.UCUPDATESSERVER.SHAREPOINTSERVICES.Service.UploadFileToSharepoint(String SPSiteUrl, String FolderPath, Boolean CreateFolder, String FileName, Byte[] content, Boolean Publish, Boolean CheckIn, Boolean overwrite)
at UPHService.UploadToSharepoint(String TempExtractedPath, DataSet dsUpdateInfo)
09/02/2008 07:08:57, Exception : Exception: Exception While Uploading file Updates/CPE.nbtThe request failed with HTTP status 401: Unauthorized. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Microsoft.RTC.UCUPDATESSERVER.SHAREPOINTSERVICES.Service.UploadFileToSharepoint(String SPSiteUrl, String FolderPath, Boolean CreateFolder, String FileName, Byte[] content, Boolean Publish, Boolean CheckIn, Boolean overwrite)
at UPHService.UploadToSharepoint(String TempExtractedPath, DataSet dsUpdateInfo)
09/02/2008 07:09:00, Exception : Exception: Exception While Uploading file Updates/CPE.nbtThe request failed with HTTP status 401: Unauthorized. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Microsoft.RTC.UCUPDATESSERVER.SHAREPOINTSERVICES.Service.UploadFileToSharepoint(String SPSiteUrl, String FolderPath, Boolean CreateFolder, String FileName, Byte[] content, Boolean Publish, Boolean CheckIn, Boolean overwrite)
at UPHService.UploadToSharepoint(String TempExtractedPath, DataSet dsUpdateInfo)
09/02/2008 07:09:02, Exception : Exception: Exception While Uploading file Updates/CPE.nbtThe request failed with HTTP status 401: Unauthorized. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Microsoft.RTC.UCUPDATESSERVER.SHAREPOINTSERVICES.Service.UploadFileToSharepoint(String SPSiteUrl, String FolderPath, Boolean CreateFolder, String FileName, Byte[] content, Boolean Publish, Boolean CheckIn, Boolean overwrite)
at UPHService.UploadToSharepoint(String TempExtractedPath, DataSet dsUpdateInfo)
09/02/2008 07:09:04, Exception : Exception: Exception While Uploading file Updates/CPE.nbtThe request failed with HTTP status 401: Unauthorized. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Microsoft.RTC.UCUPDATESSERVER.SHAREPOINTSERVICES.Service.UploadFileToSharepoint(String SPSiteUrl, String FolderPath, Boolean CreateFolder, String FileName, Byte[] content, Boolean Publish, Boolean CheckIn, Boolean overwrite)
at UPHService.UploadToSharepoint(String TempExtractedPath, DataSet dsUpdateInfo)
09/02/2008 07:09:06, Exception : Exception: Exception While Uploading file Updates/CPE.nbtThe request failed with HTTP status 401: Unauthorized. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Microsoft.RTC.UCUPDATESSERVER.SHAREPOINTSERVICES.Service.UploadFileToSharepoint(String SPSiteUrl, String FolderPath, Boolean CreateFolder, String FileName, Byte[] content, Boolean Publish, Boolean CheckIn, Boolean overwrite)
at UPHService.UploadToSharepoint(String TempExtractedPath, DataSet dsUpdateInfo)
09/02/2008 07:09:09, Exception : Exception: Exception While Uploading file Updates/CPE.nbtThe request failed with HTTP status 401: Unauthorized. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Microsoft.RTC.UCUPDATESSERVER.SHAREPOINTSERVICES.Service.UploadFileToSharepoint(String SPSiteUrl, String FolderPath, Boolean CreateFolder, String FileName, Byte[] content, Boolean Publish, Boolean CheckIn, Boolean overwrite)
at UPHService.UploadToSharepoint(String TempExtractedPath, DataSet dsUpdateInfo)
09/02/2008 07:09:11, Exception : Exception: Exception While Uploading file Updates/CPE.nbtThe request failed with HTTP status 401: Unauthorized. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
at Microsoft.RTC.UCUPDATESSERVER.SHAREPOINTSERVICES.Service.UploadFileToSharepoint(String SPSiteUrl, String FolderPath, Boolean CreateFolder, String FileName, Byte[] content, Boolean Publish, Boolean CheckIn, Boolean overwrite)
at UPHService.UploadToSharepoint(String TempExtractedPath, DataSet dsUpdateInfo)
09/02/2008 07:09:11, Debug : Completed Upload to sharepoint server
09/02/2008 07:09:11, Exception : Exception: UploadUnApprovedXMLToSharepoint Method Collection was modified; enumeration operation might not execute. at System.Data.RBTree`1.RBTreeEnumerator.MoveNext()
at UPHService.UploadUnApprovedXMLToSharepoint(String TempExtractedPath)
09/02/2008 07:09:11, Debug : Deleted all files under temp location C:\Program Files (x86)\Microsoft Office Communications Server 2007\Web Components\UC Device Updates\Management Console\LCS\a7992c72-7fb3-4f6f-b4c3-a2494f984ad1
09/02/2008 07:09:11, Debug : Calling Clear Cache for Image Updates
09/02/2008 07:09:11, Debug : End Upload Updates From Cab Call
09/02/2008 07:09:11, Debug : -------------------------------------
I've highlighted the relevant section above which you'll see is repeated a number of times. When the Sharepoint UC Update package is installed it creates a site called ucupdateserver that contains 2 document libraries - Logs and Updates. The issue in this case is that the ucupdateserver site has the appropriate permissions set, and these permissions are inherited by the Logs document library (which allowed for the above log to be created). However, the Updates document library is set to use custom permissions and there the cab file upload is failing.
To fix this I first set the appropriate permissions at the ucupdateserver site level (I gave full permissions to RTCComponentServices and read permissions to NT AUTHORITY\Authenticated Users). Next I navigated to the Updates library and clicked Settings/Document Library Settings. Now click Permissions for this document library. When the permissions appear click Actions -> Inherit Permissions. You will get a prompt verifying that you want to overwrite the custom permissions. Once you select OK you will see the page update with the permissions that are set at the site level. This fixes the upload problem and also enables you to make easy site-wide permissions changes in the future if necessary.