SharePoint 2010: Cum pentru a încărca un fișier de dimensiune de 1 GB utilizarea modelului de obiect client


Simptome


Când utilizați SharePoint Client OM pentru a încărca fișiere în biblioteca de documente SharePoint 2010, încărcarea de fişiere mai mare decât 3 MB fail cu următorul mesaj de eroare:

Serverul la distanță a returnat o eroare: Solicitare eronată (400).

Stack trace:

System.Net.WebException a fost netratate
Mesaj = serverul la distanță a returnat o eroare: Solicitare eronată (400).
 Source=System
StackTrace:
at System.Net.HttpWebRequest.GetResponse()
la Microsoft.SharePoint.Client.SPWebRequestExecutor.Execute()
la Microsoft.SharePoint.Client.ClientRequest.ExecuteQueryToServer (ChunkStringBuilder sb)
la Microsoft.SharePoint.Client.ClientRequest.ExecuteQuery()
la Microsoft.SharePoint.Client.ClientRuntimeContext.ExecuteQuery()
la Microsoft.SharePoint.Client.ClientContext.ExecuteQuery()
la SPClientOMConsoleApp.Program.Main (String [] args) în C:\SPClientOMConsoleApp\SPClientOMConsoleApp\Program.cs:line 32
la System.AppDomain._nExecuteAssembly (asamblare asamblare, String [] args)
la Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
la System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback apelare inversă, stare de obiecte)
la System.Threading.ThreadHelper.ThreadStart()
InnerException:

Eșantion programul utilizat pentru a încărca fișierul utilizând SharePoint 2010 Client OM:

ClientContext clientContext = noi ClientContext("site-uri/http://server:10000/sitetest");
Web web = clientContext.Web;
clientContext.Load(web);
Listă docLib = web. Lists.GetByTitle ("doclib");
clientContext.Load(docLib);
clientContext.ExecuteQuery();
Byte bFile [] = System.IO. Fișier. ReadAllBytes (@"C:\largeFile.docx");
Fișier FileCreationInformation = noi ( FileCreationInformation);
fișier. Conținut = bFile;
fișier. URL = "http://server:10000/site-uri/sitetest/doclib/" + "test.docx";
Microsoft.SharePoint.Client. Fișier nou = docLib.RootFolder.Files.Add(file);
clientContext.Load(newFile);
clientContext.ExecuteQuery();

Cerințe:

Cum să încărcați fișierele cu dimensiuni mai mari, de exemplu, până la 1 Go sau mai multe, folosind Client Object Model din SharePoint 2010.

Cauza


Restricții internă implicită pe dimensiunile și setările de expirare oprească încărcarea fișierelor mai mari utilizarea modelului de obiect Client în SharePoint.

Rezolvare


Să ia în considerare că avem nevoie pentru a încărca un fișier care este aproape de dimensiunea maximă de încărcare permise de infrastructură de SharePoint. Pentru a realiza acest lucru, mai întâi trebuie să modificare valorile implicite legată de fișierul încărcați procesul respectiv fișierul maxime permise de dimensiuni în SharePoint 2010, dimensiunea maximă mesajul primit în solicitare Client service setările pentru SharePoint 2010 și expirarea Setări specificat în web.config al aplicaţiei web SharePoint. Găsiți detaliile de mai jos:

Creștere maximă permisă dimensiunea fișierului pentru a încărca SharePoint 2010 biblioteci folosind paşii de mai jos:

  1. Navigaţi la site-ul Administrare centrală SharePoint 2010 -> Gestionare aplicații -> Gestionare aplicaţii Web (< CentralAdminURL > / _admin/WebApplicationList.aspx) -> selectaţi aplicația Web unde doriți să încărcați fișiere de mari dimensiuni -> selectaţi Setări generale din meniul de panglică.
  2. O dată pe pagina "Web Application General Settings", defilați în jos pentru a găsi secțiunea "Dimensiunea maximă de încărcare".
  3. Modificați valoarea pentru "Dimensiune maximă de încărcare" la 2047 MB (2 GB este maximă permisă valoare în această secțiune)
  4. Faceți clic pe OK pentru a confirma și Salvați modificările setare.

Măriți setările de expirare în fișierul web.config al aplicaţiei web:

  1. Pe calculatorul server SharePoint 2010, răsfoiți la folderul "C:\inetpub\wwwroot\wss\VirtualDirectories" și selectați folderul sursă legată de aplicația web de mai sus.
  2. În acest folder, ar trebui să găsiți fișierul web.config aplicații.
  3. Deschideți fișierul web.config într-un editor de text, cum ar fi Notepad și găsiți elementul faptul (va exista mai multe elemente faptul în acest fișier pentru a face modificări în).
  4. Acum set maxRequestLength = "2097151" și executionTimeout = "1800000"
  5. De asemenea, găsiți elementul jsonSerialization și setați valoarea la "2146435072"
  6. Salvați și Închideți fișierul web.config.

Măriți solicitare Client service setările pentru SharePoint 2010:

Executați codul într-o aplicație de consolă pentru a mări valoarea pentru această setare de mai jos:

utilizarea Sistem;
utilizarea System.Collections.Generic;
utilizarea System.Text;
utilizarea Microsoft.SharePoint.Client;
utilizarea Microsoft.SharePoint;
utilizarea Microsoft.SharePoint.Administration;
utilizarea System.IO;

spațiu de nume SPClientOMConsoleApp

{
clasă Program
{
static Void Main (string[] args)
{
SPWebService ws = SPWebService. ContentService;

SPClientRequestServiceSettings clientSettings = ws. ClientRequestServiceSettings;

clientSettings.MaxReceivedMessageSize = 2146435072;

WS. Update();

Consolă. WriteLine(clientSettings.MaxReceivedMessageSize);

}
}
}

Acum, după ce vă au crescut valorile de setare, folosim două cod opțiunile specificate mai jos pentru a încărca fişiere mai mari utilizând SharePoint 2010 Client Object Model:

Opţiunea 1:

Așa cum am menționat mai sus, utilizează Microsoft.SharePoint.Administration.SPClientRequestServiceSettings API pentru a seta MaxReceivedMessageSize la valori mai mari, de exemplu 2 Go. Rețineți că valoarea proprietății MaxReceivedMessageSize trebuie să fie setată o singură dată și nu trebuie să fi executat de fiecare dată când clientul OM bazat pe codul de încărcare fișier se declanșează:

(Pentru a vă asigura că această opțiune funcționează setați proprietăți de proiect pentru a utiliza .NET Framework 3.5 și platforma ţintă ca "Orice CPU")

utilizarea Sistem;
utilizarea System.Collections.Generic;
utilizarea System.Linq;
utilizarea System.Text;
utilizarea Microsoft.SharePoint.Client;
utilizarea System.IO;

spațiu de nume SPClientOMConsoleApp
{
clasă Program
{
static Void Main (string[] args)
{
ClientContext clientContext = noi ClientContext("site-uri/http://server:10000/sitetest");
Web web = clientContext.Web;
clientContext.Load(web);
Listă docLib = web. Lists.GetByTitle ("doclib");
clientContext.Load(docLib);
clientContext.ExecuteQuery();  

Byte bFile [] = System.IO. Fișier. ReadAllBytes (@"C:\largeFile.docx");
Fișier FileCreationInformation = noi ( FileCreationInformation);
fișier. Conținut = bFile;
fișier. URL = "http://server:10000/site-uri/sitetest/doclib/" + "test.docx";
Microsoft.SharePoint.Client. Fișier nou = docLib.RootFolder.Files.Add(file);
clientContext.Load(newFile);
clientContext.ExecuteQuery();
}
}
}

Opțiunea 2:

Utilizând HTTP DAV ne trimite date binare brute prin fir și nu trebuie să creșteți dimensiunea mesajul primit.  Aceasta este metoda preferată de încărcare atunci când se utilizează modelul de obiect client gestionate.

utilizarea Sistem;
utilizarea System.Collections.Generic;
utilizarea System.Linq;
utilizarea System.Text;
utilizarea Microsoft.SharePoint.Client;
utilizarea System.IO;

spațiu de nume SPClientOMConsoleApp
{
clasă Program
{
static Void Main (string[] args)
{
ClientContext context = nou ClientContext("site-uri/http://server:10000/sitetest");
utilizarea (FileStream fs = nou FileStream(@"C:\largeFile.docx", FileMode. Deschiderea))
{
Microsoft.SharePoint.Client. Fișier. SaveBinaryDirect (context, "/ sites/testSite/doclib/test.docx", fs, true);
}
}
}
}

Ambele opțiunile de mai sus au fost testate pentru o încărcare reușită a unui fișier de dimensiuni până la 1 Go. Pentru valori mai mari (spune un fișier de dimensiunea 1,8 GO), utilizați opțiunea 2 (HTTP DAV) de mai sus.

Mai multe informații


Uneori, este posibil să vedeți că operațiunea de încărcare returnează o excepție de expirare, dar acest lucru este critic numai pentru dimensiunile foarte mari care sunt aproape de 2 Go. În caz contrar, poate fi ignorat folosind un try-catch bloc și ar trebui să vedeți că fișierul luat încărcat cu succes.