Artikelformat

.NET Web Service: Übertragung von großen Dateien

Bei meinen Experimenten bzgl. .NET Web Services habe ich mit der Übertragung von Byte Arrays herum gespielt. Dabei bekam ich immer die HTTP Fehlermeldung „Bad Request“ (400) zurück. Theoretisch könnte dieser Fehler alles sein (z.B. falsches Encoding), aber die Suchmaschine meines Vertrauens brachte mich zu der Ursache: Standardmäßig sind nur 64 kB erlaubt. Um dies zu erhöhen, ist es notwendig, die Web.config anzupassen.

Man öffne also die Web.config Datei und füge unter

1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  [...]
  <system.serviceModel>

folgende Zeilen ein:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    <bindings>
      <basicHttpBinding>
        <binding name="basicHttpBinding" maxBufferSize="2147483647"
            maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
          <readerQuotas
            maxDepth="64"
            maxStringContentLength="2147483647"
            maxArrayLength="2147483647"
            maxBytesPerRead="4096"
            maxNameTableCharCount="16384"/>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="CustomServiceBehavior" name="Namespace.ClassOfService">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHttpBinding"
          contract="Namespace.IClassOfContract" />
      </service>
    </services>

Dabei ist es wichtig folgende Sachen anzupassen:

1. „CustomServiceBehavior“:
Dieser Name ist eigentlich egal. Wenn man diesen ändert, muss man den nachher auch anpassen.

2. „Namespace.ClassOfService“:
Hier schreibt man den Namen der Klasse von dem eigenen Service rein. Davor muss unbedingt noch der Namespace der Klasse.

3. „Namespace.IClassOfContract“:
Dort muss der Name der Contract Klasse wie in Punkt 2 angepasst werden (normalerweise heißt diese IService1 oder ähnlich).

Wie man vielleicht gesehen hat, habe ich noch andere Werte angepasst. Da ja die ganzen Daten in XML serialisiert werden, müssen auch Werte wie die Textlänge angepasst werden. Die meisten Werte wurden also auf 2 GB gesetzt.

Anschließend muss man noch auf der selben Ebene unter dem bereits vorhandenen Element „<behavior>“ den Namen aus Punkt 1 einfügen, also in etwa so:

1
2
3
    <behaviors>
      <serviceBehaviors>
        <behavior name="CustomServiceBehavior">

Das war es auch schon. Leider war das im Internet oft nicht so gut erklärt.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.