Erhöhen der maximalen Meldungsgröße

Letzte Änderung: Donnerstag, 1. September 2011

Gilt für: SharePoint Foundation 2010

Verfügbar in SharePoint Online

Wenn Sie über das Clientobjektmodell eine umfangreiche Anforderung stellen, erhalten Sie möglicherweise eine Fehlermeldung aufgrund einer ungültigen Anforderung. In diesem Fall können Sie mithilfe des Serverobjektmodells die maximale Meldungsgröße erhöhen, die vom WCF-Dienst (Windows Communication Foundation) Client.svc zugelassen wird, der das SharePoint Foundation-Clientobjektmodell unterstützt. Eine andere Möglichkeit besteht darin, mithilfe von Distributed Authoring and Versioning (DAV) eine PUT-Anforderung zu stellen.

Das Serverobjektmodell bietet zwei Eigenschaften zum Erhöhen der maximalen Meldungsgröße. Sie können entweder die MaxReceivedMessageSize-Eigenschaft der SPWcfServiceSettings-Klasse oder die MaxReceivedMessageSize-Eigenschaft der SPClientRequestServiceSettings-Klasse festlegen. Sie können auf diese Eigenschaften über das aktuelle SPWebService-Objekt auf folgende Arten zugreifen: SPWebService.ContentService.ClientRequestServiceSettings oder SPWebService.ContentService.WcfServiceSettings["Client.svc"]. Abhängig vom Wert der Eigenschaft im SPClientRequestServiceSettings-Objekt wird von SharePoint Foundation die Eigenschaft des SPWcfServiceSettings-Objekts wie folgt verwendet (oder nicht verwendet):

  • Wenn SPWebService.ContentService.ClientRequestServiceSettings.MaxReceivedMessageSize größer Null ist, wird dieser Wert von SharePoint Foundation als Eigenschaftseinstellung verwendet.

  • Wenn SPWebService.ContentService.ClientRequestServiceSettings.MaxReceivedMessageSize gleich Null ist, wird von SharePoint Foundation der Standardwert als Einstellung verwendet.

  • Wenn SPWebService.ContentService.ClientRequestServiceSettings.MaxReceivedMessageSize gleich -1 ist, wird von SharePoint Foundation der SPWcfServiceSettings-Wert als Einstellung verwendet, sofern er definiert ist. Ist er nicht definiert, wird von SharePoint Foundation64 KB als Einstellung verwendet.

Erhöhen des MaxReceivedMessageSize-Werts von WCF

Der folgende Codeausschnitt zeigt, wie die Einstellung der Meldungsgröße mithilfe der MaxReceivedMessageSize-Eigenschaft des SPClientRequestServiceSettings-Objekts geändert wird.

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();
}

Der nächste Ausschnitt zeigt, wie die Einstellung mithilfe der MaxReceivedMessageSize-Eigenschaft des SPWcfServiceSettings-Objekts geändert wird. Im Beispiel muss zunächst die Eigenschaft in SPClientRequestServiceSettings auf -1 festgelegt werden.

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();
}

Stellen der Anforderung mithilfe von DAV

Das folgende Beispiel veranschaulicht, wie DAV für die Anforderung verwendet wird.

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.
}

In einer Silverlight-Anwendung müssen Sie möglicherweise auch die XML-Datei für die Clientzugriffsrichtlinie festlegen, wie im folgenden Beispiel dargestellt. Sie können diese Datei in %inetpub%\wwwroot\wss\VirtualDirectories\80 platzieren.

<?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>

Weitere Informationen zu Silverlight und zur HTTP-Kommunikation finden Sie unter HTTP Communication and Security with Silverlight.

Siehe auch

Konzepte

Übersicht über den Datenabruf

Richtlinien für das Clientobjektmodell

Allgemeine Programmieraufgaben

Weitere Ressourcen

Verwenden des verwalteten Clientobjektmodells von SharePoint Foundation 2010

Ressourcencenter für das Clientobjektmodell