0

I am trying to send a byte[] from a client to a web service. The array is composed of a serialized XML file.

My test scenario works (with a very small byte[]). Here is the code:

FormsService.FormsServiceClient client = new FormsService.FormsServiceClient();
        XmlDocument doc = new XmlDocument();
        XmlElement root = doc.CreateElement("root");
        XmlElement element = doc.CreateElement("child");
        root.AppendChild(element);
        doc.AppendChild(root);
MemoryStream ms = new MemoryStream();
        doc.Save(ms);
        byte[] bytes = ms.ToArray();
if (client.ServerActive())
        {
            client.SubmitForm(bytes);
            Console.ReadLine();
        }

And the service-side code looks like this:

public byte[] SubmitForm(byte[] bytes)
    {
        XmlDocument doc = new XmlDocument();
        string xml = Encoding.UTF8.GetString(decryptedBytes);
        doc.LoadXml(xml);
        XmlNodeList nodeList = doc.GetElementsByTagName("child");
        byte[] returnBytes = Encoding.UTF8.GetBytes(nodeList[0].Name);
        return bytes;
    }

This works perfectly. Results are correct.

However, when I try to read in an actual xml file from my file system (which is reading in correctly when I display it to console), submission returns an error even when I just try to accept and return the array:

A first chance exception of type 'System.ServiceModel.Dispatcher.NetDispatcherFaultException' occurred in mscorlib.dll

The actual client side code:

FormsService.FormsServiceClient client = new FormsService.FormsServiceClient();
        XmlDocument doc = new XmlDocument();
        doc.Load(myFilePath);
        MemoryStream ms = new MemoryStream();
        doc.Save(ms);
        byte[] bytes = ms.ToArray();

        if (client.ServerActive())
        {
            client.SubmitForm(bytes);
            Console.ReadLine();
        }

The service side code:

public byte[] SubmitForm(byte[] bytes)
{
    return bytes;
{

Has anyone encountered this problem before? I don't see much difference between the two cases, but I am inexperienced with C#.

Any suggestions would be much appreciated.

Thanks!

badPanda

badpanda
  • 2,446
  • 5
  • 34
  • 45
  • 2
    Your service-side `SubmitForm` is very peculiar. You construct a `returnBytes` object that's never used, and then you return the original `bytes` parameter to the caller without doing anything to it. Is that by design? – JSBձոգչ Jun 17 '10 at 16:08
  • It is. This was just code that I was testing to get the general functionality working...the actual application has a use for that returned byte array, and it will not be the same as the one that was sent. Thanks though! – badpanda Jun 18 '10 at 14:30

1 Answers1

2

Try increasing the maximum message size quota.

Community
  • 1
  • 1
Darin Dimitrov
  • 1,023,142
  • 271
  • 3,287
  • 2,928
  • Wouldn't the exception raised indicate that the message size quota has been reached? It sure does in my environment. – Kieran Senior Jun 17 '10 at 15:56
  • It looks like it would. However, this is a byte[] and the link he posted applies to XML serialization, rather than byte serialization. So maybe the error is different? – badpanda Jun 17 '10 at 15:59
  • 1
    No matter the serialization mechanism, it's the message size which is limited. Also the link I posted applies exactly to binary serialization (netTcpBinding) – Darin Dimitrov Jun 17 '10 at 16:07
  • 1
    @Kezzer, this will depend on whether you've activated exception details to propagate in your service configuration which btw you shouldn't in production. – Darin Dimitrov Jun 17 '10 at 16:08