получение ComException при чтении документа в SharePoint 2010 - PullRequest
2 голосов
/ 13 октября 2010

Я развернул веб-часть в семействе сайтов.

Эта веб-часть пыталась прочитать содержимое документа в библиотеке документов.Он отлично работает в SharePoint 2007. Но это не работает в SharePoint 2010. Если размер документа небольшой, он работает нормально.в противном случае я получаю следующее исключение.

<code>
Microsoft.SharePoint.SPException: Cannot open file "Document library/MyDoc-FAQ.doc". ---> System.Runtime.InteropServices.COMException (0x81070211): Cannot open file "Document library/MyOffice-FAQ.doc". at Microsoft.SharePoint.Library.SPRequestInternalClass.GetFileAsStream(String bstrUrl, String bstrWebRelativeUrl, Boolean bHonorLevel, Byte iLevel, OpenBinaryFlags grfob, String bstrEtagNotMatch, String& pEtagNew, String& pContentTagNew) at Microsoft.SharePoint.Library.SPRequest.GetFileAsStream(String bstrUrl, String bstrWebRelativeUrl, Boolean bHonorLevel, Byte iLevel, OpenBinaryFlags grfob, String bstrEtagNotMatch, String& pEtagNew, String& pContentTagNew) --- End of inner exception stack trace --- at Microsoft.SharePoint.SPGlobal.HandleComException(COMException comEx) at Microsoft.SharePoint.Library.SPRequest.GetFileAsStream(String bstrUrl, String bstrWebRelativeUrl, Boolean bHonorLevel, Byte iLevel, OpenBinaryFlags grfob, String bstrEtagNotMatch, String& pEtagNew, String& pContentTagNew) at Microsoft.SharePoint.SPFile.GetFileStreamCore(OpenBinaryFlags openOptions, String etagNotMatch, String& etagNew, String& contentTagNew) at Microsoft.SharePoint.SPFile.GetFileStream(OpenBinaryFlags openOptions, String etagNotMatch, String& etagNew, String& contentTagNew) at Microsoft.SharePoint.SPFile.OpenBinaryStream() at MyComp.Plugin.Office.MyOffice.handleEdit(HtmlTextWriter writer, NameValueCollection querystring)Message isCannot open file "Document library/MyDoc-FAQ.doc". source is Microsoft.SharePoint 

Пример кода



  using (SPSite siteCol = new SPSite(siteurl))
            {
                using (SPWeb oWebsite = siteCol.OpenWeb())
                {
                    oWebsite.AllowUnsafeUpdates = true;

                    SPFolder folder = oWebsite.GetFolder(folderurl);
                    SPFileCollection files = folder.Files;

                    SPFile file = files[filename];
                     Stream stream = file.OpenBinaryStream();
                     byte[] content = null;
                     BinaryReader reader = new BinaryReader(stream);

                     content = reader.ReadBytes((int)file.Length);//If the document size is higher, i am getting exception

                     oWebsite.AllowUnsafeUpdates = false;

                  }


            }    

Ошибка возникает, когда размер файла превышает 100 КБ.Пожалуйста, помогите мне решить эту проблему

В журнале SharePoint я получил следующее исключение


   at Microsoft.SharePoint.CoordinatedStreamBuffer.SPBackgroundSqlFileFiller.StartNextFill(SPInterval iNext)     at Microsoft.SharePoint.CoordinatedStreamBuffer.SPBackgroundFileFiller.DoNextOperation()     at Microsoft.SharePoint.CoordinatedStreamBuffer.SPBackgroundFileFiller.Fill()     at Microsoft.SharePoint.CoordinatedStreamBuffer.SPCoordinatedStreamBufferFactory.CreateFromDocParams(SqlSession session, Guid guidSiteId, Int32 grfDocFlags, Int64 cbContent, SPChunkedArray`1 rgbContent, Byte[] rgbRbsId, Guid guidDoc, Int32 iInternalVersion, Int32 pageSize, Boolean bStartFilling)     at Microsoft.SharePoint.CoordinatedStreamBuffer.SPCoordinatedStreamBufferFactory.CreateFromDocumentRowset(SqlSession session, Object[] row, SPDocumentBindRequest& dbreq, SPDocumentBindResults& dbres)     at Micr... 1cc7f9da-32ed-4446-aaa7-8bc6dd4cd635
10/14/2010 19:27:18.77* w3wp.exe (0x1F28)                           0x1ED0  SharePoint Foundation           Database                        fa46    High        ...osoft.SharePoint.Library.SPRequestInternalClass.GetFileAsStream(String bstrUrl, String bstrWebRelativeUrl, Boolean bHonorLevel, Byte iLevel, OpenBinaryFlags grfob, String bstrEtagNotMatch, String& pEtagNew, String& pContentTagNew)     at Microsoft.SharePoint.Library.SPRequest.GetFileAsStream(String bstrUrl, String bstrWebRelativeUrl, Boolean bHonorLevel, Byte iLevel, OpenBinaryFlags grfob, String bstrEtagNotMatch, String& pEtagNew, String& pContentTagNew)     at Microsoft.SharePoint.SPFile.GetFileStreamCore(OpenBinaryFlags openOptions, String etagNotMatch, String& etagNew, String& contentTagNew)     at Microsoft.SharePoint.SPFile.GetFileStream(OpenBinaryFlags openOptions, String etagNotMatch, String& etagNew, String& contentTagNew)     at Microsoft.SharePoint.SPFile.OpenBinary(SPOpenBinary...  1cc7f9da-32ed-4446-aaa7-8bc6dd4cd635
10/14/2010 19:27:18.77* w3wp.exe (0x1F28)                           0x1ED0  SharePoint Foundation           Database                        fa46

Ответы [ 3 ]

1 голос
/ 11 января 2013

У меня была такая же проблема ... оказалось, что это был призрак.Я мог видеть файл в библиотеке документов (в данном случае xslt), и я мог видеть его в Управлении всем контентом, но IIS не обслуживал файл, когда я переходил к нему с помощью URL-адреса.Я являюсь администратором на сервере, поэтому это не должно быть проблемой с разрешениями.

Я решил эту проблему, просто повторно загрузив файл (с тем же именем и свойствами) - внезапно мое исключение System.Runtime.InteropServices.COMException (0x81070211): Невозможно открыть файл. Ошибка исчезла.

Отпустите ее и дайте мне знать, если она сработала для вас.

Rich

0 голосов
/ 18 октября 2010

Попробуйте проверить файл перед открытием.Также утилизируйте поток, как указано выше.

0 голосов
/ 13 октября 2010

Две вещи:

  1. Убедитесь, что вы удалили поток ( см. Этот пост )
  2. Вы пытались извлечь file.length из потока?

В качестве альтернативы просто используйте следующий код (сверху моей головы)

byte[] content = file.OpenBinary();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...