The maximum array length quote limit at the remote server needs to
be changed.
This is only an option is you are responsible for the web-service on
the remote web-server.
On the remote server edit the web.config file. To set the
array length quota first (i.) create a new binding which takes the
new max-array-length then (ii.) associated that binding with
the web-service.
Step 1. Create a new binding with the new receive message size
In the web.config file add a new binding, and set the
maxArrayLength for that binding to the desired value.
In my case I am passing a byte array and I want to be able to
pass binary data files, so I needed to be able to pass a quite large
array. Do consider the practical implications of serializing and
deserialzing large arrays! So if you wanted to be able to receive an
array of up to 1,000,000 items (which is a lot!) then you could add a binding similar to the
following:
<configuation>
.
.
<system.serviceModel>
.
.
<bindings>
<basicHttpBinding>
<binding name="Binding1">
<readerQuotas maxArrayLength="1000000"/>
</binding>
</basicHttpBinding>
</bindings>
.
.
</system.serviceModel>
</configuration>
The name "Binding1" in the above is not
significant, but it must be unique. So if you have multiple
different bindings then each must have a unique name. A descriptive
name might be better than the name I have used above.
Step 2. Associate that binding with the web-service
In the web.config file add a service record, such as:
<configuation>
.
.
<system.serviceModel>
.
.
<services>
<service name="MyService">
<endpoint address="" binding="basicHttpBinding"
bindingConfiguration="Binding1"
contract="IMyService"/>
</service>
</services>
.
.
</system.serviceModel>
</configuration>
The service name must be the fully qualified name of the service.
If you are not sure what this is then look in the .svc file and it
should be the same as the name given there.
The bindingConfiguration should be set to the same name used when
creating the binding with the larger maxArraySize.
The contract should be the fully qualified name of the service
contract class or interface.
Be aware that allowing larger arrays does make the server more
prone to possible denial of service requests. So consider the
implications of allowing larger arrays than the default and whether
there is an alternative (i.e. safer) way of achieving what you are
after.