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)