Partager via


Augmentation de la taille maximale de message

Dernière modification : jeudi 1 septembre 2011

S’applique à : SharePoint Foundation 2010

Disponible dans SharePoint Online

Lorsque vous effectuez une demande volumineuse par le biais du modèle objet client, vous risquez d’obtenir une erreur indiquant que la demande est défectueuse. Si tel est le cas, vous pouvez utiliser le modèle objet serveur pour augmenter la taille maximale des messages autorisée par le service WCF (Windows Communication Foundation), Client.svc, qui prend en charge le modèle objet client SharePoint Foundation. Une autre option consiste à utiliser la technologie DAV (Distributed Authoring and Versioning) pour effectuer une demande PUT.

Le modèle objet serveur fournit deux propriétés qui permettent d’augmenter la taille maximale des messages. Vous pouvez définir la propriété MaxReceivedMessageSize sur la classe SPWcfServiceSettings ou la propriété MaxReceivedMessageSize sur la classe SPClientRequestServiceSettings. Vous pouvez accéder à ces propriétés par le biais de l’objet SPWebService actuel d’une des façons suivantes : SPWebService.ContentService.ClientRequestServiceSettings ou SPWebService.ContentService.WcfServiceSettings["Client.svc"]. La valeur de la propriété sur l’objet SPClientRequestServiceSettings détermine si SharePoint Foundation utilise la propriété sur l’objet SPWcfServiceSettings :

  • Si la valeur de SPWebService.ContentService.ClientRequestServiceSettings.MaxReceivedMessageSize est supérieure à zéro, SharePoint Foundation utilise cette valeur comme paramètre de propriété.

  • Si la valeur de SPWebService.ContentService.ClientRequestServiceSettings.MaxReceivedMessageSize est égale à zéro, SharePoint Foundation utilise la valeur par défaut comme paramètre.

  • Si la valeur de SPWebService.ContentService.ClientRequestServiceSettings.MaxReceivedMessageSize est égale à -1, SharePoint Foundation utilise la valeur SPWcfServiceSettings comme paramètre à condition qu’elle soit définie, sinon SharePoint Foundation utilise 64 Ko.

Augmentation de la valeur du paramètre WCF MaxReceivedMessageSize

L’extrait suivant montre comment utiliser la propriété MaxReceivedMessageSize de l’objet SPClientRequestServiceSettings pour modifier le paramètre de la taille des messages.

Public Shared Sub IncreaseMaxReceivedMessageSize()
    Dim contentService As SPWebService = SPWebService.ContentService
    contentService.ClientRequestServiceSettings.MaxReceivedMessageSize = 10485760  ' 10MB
    contentService.Update()
End Sub
public static void IncreaseMaxReceivedMessageSize()
{        
    SPWebService contentService = SPWebService.ContentService;
    contentService.ClientRequestServiceSettings.MaxReceivedMessageSize = 10485760;  // 10MB
    contentService.Update();
}

L’extrait suivant montre comment utiliser la propriété MaxReceivedMessageSize de l’objet SPWcfServiceSettings pour modifier le paramètre. L’exemple doit d’abord attribuer la valeur -1 à la propriété sur SPClientRequestServiceSettings.

Public Shared Sub IncreaseMaxReceivedMessageSize()
    Dim contentService As SPWebService = SPWebService.ContentService
    
    ' Must set this to -1, else, the MaxReceivedMessageSize value for
    ' SPWebService.ContentService.WcfServiceSettings["client.svc"] will not be used.
    contentService.ClientRequestServiceSettings.MaxReceivedMessageSize = -1
    
    ' SPWcfServiceSettings has other Properties that you can set.
    Dim csomWcfSettings As New SPWcfServiceSettings()
    csomWcfSettings.MaxReceivedMessageSize = 10485760  ' 10MB
    contentService.WcfServiceSettings("client.svc") = csomWcfSettings
    
    contentService.Update()
End Sub
public static void IncreaseMaxReceivedMessageSize ()
{
    SPWebService contentService = SPWebService.ContentService;

    /* Must set this to -1, else, the MaxReceivedMessageSize value for
    SPWebService.ContentService.WcfServiceSettings["client.svc"] will not be used.*/
    contentService.ClientRequestServiceSettings.MaxReceivedMessageSize = -1;

    // SPWcfServiceSettings has other Properties that you can set.
    SPWcfServiceSettings csomWcfSettings = new SPWcfServiceSettings();
    csomWcfSettings.MaxReceivedMessageSize = 10485760; // 10MB
    contentService.WcfServiceSettings["client.svc"] = csomWcfSettings;

    contentService.Update();
}

Utilisation de DAV pour effectuer une demande

L’exemple suivant illustre comment utiliser DAV pour effectuer la demande.

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp)

Dim request As HttpWebRequest = DirectCast(WebRequestCreator.ClientHttp.Create(New Uri("https://Server/MyFile.txt")), HttpWebRequest)
request.Method = "PUT"

' Make an asynchronous call for the request stream. The callback method will be called on a background thread. 
Dim asyncResult As IAsyncResult = request.BeginGetRequestStream(New AsyncCallback(RequestStreamCallback), request)

Private Sub RequestStreamCallback(ByVal ar As IAsyncResult)
    Dim request As HttpWebRequest = TryCast(ar.AsyncState, HttpWebRequest)
    Dim requestStream As Stream = request.EndGetRequestStream(ar)
    Dim streamWriter As New StreamWriter(requestStream)
    
    ' Write your file here.
    streamWriter.Write("Hello World!")
    
    ' Close the stream.
    streamWriter.Close()
    
    ' Make an asynchronous call for the response. The callback method will be called on a background thread. 
    
    request.BeginGetResponse(New AsyncCallback(ResponseCallback), request)
End Sub

Private Sub ResponseCallback(ByVal ar As IAsyncResult)
    Dim request As HttpWebRequest = TryCast(ar.AsyncState, HttpWebRequest)
    Dim response As WebResponse = Nothing
    Try
        response = request.EndGetResponse(ar)
    Catch generatedExceptionName As WebException
    Catch generatedExceptionName As SecurityException
        
        ' You may need to analyze the response to see if it succeeded.
    End Try
End Sub
WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp);

HttpWebRequest request = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(new Uri("https://Server/MyFile.txt"));
request.Method = "PUT";

/* Make an asynchronous call for the request stream. The callback method will be called on a background thread. */ 
IAsyncResult asyncResult = request.BeginGetRequestStream(new AsyncCallback(RequestStreamCallback), request);

private void RequestStreamCallback(IAsyncResult ar)
{
    HttpWebRequest request = ar.AsyncState as HttpWebRequest;            
    Stream requestStream = request.EndGetRequestStream(ar);
    StreamWriter streamWriter = new StreamWriter(requestStream);

    // Write your file here.
    streamWriter.Write("Hello World!");            

    // Close the stream.
    streamWriter.Close();

    /* Make an asynchronous call for the response. The callback method will be called on a background thread. */
    request.BeginGetResponse(new AsyncCallback(ResponseCallback), request);
}       

private void ResponseCallback(IAsyncResult ar)
{
    HttpWebRequest request = ar.AsyncState as HttpWebRequest;
    WebResponse response = null;
    try
    {
        response = request.EndGetResponse(ar);
    }
    catch (WebException)
    {}
    catch (SecurityException)
    {}

    // You may need to analyze the response to see if it succeeded.
}

Dans une application Silverlight, vous pouvez également être amené à définir votre fichier XML de stratégie d’accès client, comme indiqué dans l’exemple suivant. Vous pouvez placer ce fichier dans %inetpub%\wwwroot\wss\VirtualDirectories\80.

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <!--Enables Silverlight 3 all methods functionality-->
    <policy>
      <allow-from http-methods="*">"
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
    <!--Enables Silverlight 2 clients to continue to work normally -->
    <policy>
      <allow-from >
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <resource path="/" include-subpaths="true"/>
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

Pour plus d’informations sur Silverlight et la communication HTTP, voir HTTP Communication and Security with Silverlight.

Voir aussi

Concepts

Vue d'ensemble de la récupération des données

Directive du modèle objet client

Tâches courantes de programmation

Autres ressources

Utilisation du modèle objet de client géré SharePoint Foundation 2010

Centre de ressources pour le modèle objet client (éventuellement en anglais)