none
Метод UpdateListItems выдает исключение "Доступ к закрытому потоку невозможен." при попытке обновить элемент списка RRS feed

  • Общие обсуждения

  • Я пытаюсь обновить элемент списка, который НЕ содержит вложений, через Метод UpdateListItems.

    Для обновления использую следующий код:

    ListsServices.Lists listService = new ListsServices.Lists();
        listService.Credentials = CredentialCache.DefaultCredentials;
        ServiceDBEntities db = new ServiceDBEntities();
        XmlDocument xmlDoc = new XmlDocument();
        XmlElement elBatch = xmlDoc.CreateElement("Batch");
        elBatch.SetAttribute("OnError", "Continue");
        foreach (var person in db.PersonViews)
        {
            string updateQuery = "<Method ID='1' Cmd='Update'>" +
                 "<Field Name='ID'>" + personId + "</Field>" +
                 "<Field Name='Title'>" + person.LastName + " " + person.FirstName + 
                     " " + person.Patronymic + "</Field>" +
                 "<Field Name='PersonFullName'>" + person.LastName + " " + 
                     person.FirstName + " " + person.Patronymic + "</Field>" +
                 "<Field Name='PersonID'>" + person.Id + "</Field>" +
                 "<Field Name='EmployeeNumber'>" + person.EmployeeNumber + "</Field>" +
                 "<Field Name='NameFirst'>" + person.FirstName + "</Field>" +
                 "<Field Name='SecondName'>" + person.LastName + "</Field>" +
                 "<Field Name='Patronymic'>" + person.Patronymic + "</Field>" +
                 "<Field Name='BirthDate'>" + dateBirthday + "</Field>" +
                 "</Method>";
            elBatch.InnerXml = updateQuery;
            XmlNode ndReturn = listService.UpdateListItems(listName, elBatch);
        }

    При использовании

    <Method ID='1' Cmd='New'>

    элементы нормально создаются. В чем может быть проблема?


    18 ноября 2015 г. 9:25

Все ответы

  • Добрый день,

    а чему равно personId ?

    Проверьте вы точно тот элемент обновляете?

    18 ноября 2015 г. 10:18
  • personId получаю через GetListItems. personId точно совпадает с ID элемента в списке. Пробовал прописать:

    "<Field Name='ID'>1</Field>"

    элемент с этим ID точно есть. Результат тот же.

    Так получаю dateBirthday

    var dateBirthday = person.BirthDate != null ? person.BirthDate.Value.ToString("yyyy-MM-ddTHH:mm:ssZ") : person.BirthDate.ToString();




    • Изменено Sergey Sv 18 ноября 2015 г. 11:01
    18 ноября 2015 г. 10:27
  • Что в ULS логе (полный текст ошибки)?
    18 ноября 2015 г. 11:05
  • SOAP exception: System.ObjectDisposedException: Доступ к закрытому потоку невозможен.     в System.IO.__Error.StreamIsClosed()     в System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)     в System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)     в System.IO.StreamWriter.Dispose(Boolean disposing)     в System.IO.StreamWriter.Close()     в System.Xml.XmlTextWriter.Close()     в Microsoft.SharePoint.SoapServer.ListDataImpl.ConstructCaml(String strListName, String strXmlData, Boolean useHarmonicaKnowledge, Boolean useVersionHistory)     в Microsoft.SharePoint.SoapServer.ListDataImpl.UpdateListItems(String strListName, String strXmlData)     в Microsoft.SharePoint.SoapServer.Lists.UpdateListItems(String listName, SoapXmlElement updates)
    18 ноября 2015 г. 11:12
  • Попробуйте Fiddler'ом отловить запрос к сервису и его ответ.
    18 ноября 2015 г. 11:53