【问题标题】:Issue with size of byte[] being sent to web service?发送到 Web 服务的字节 [] 大小有问题吗?
【发布时间】:2010-06-17 15:53:03
【问题描述】:

我正在尝试将 byte[] 从客户端发送到 Web 服务。该数组由一个序列化的 XML 文件组成。

我的测试场景有效(使用非常小的字节 [])。代码如下:

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

服务端代码如下所示:

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

这非常有效。结果是正确的。

但是,当我尝试从我的文件系统中读取一个实际的 xml 文件时(当我将它显示到控制台时它正在正确读取),即使我只是尝试接受并返回数组,提交也会返回一个错误:

在 mscorlib.dll 中发生了“System.ServiceModel.Dispatcher.NetDispatcherFaultException”类型的第一次机会异常

实际的客户端代码:

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

服务端代码:

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

以前有人遇到过这个问题吗?我看不出这两种情况有多大区别,但我对 C# 缺乏经验。

任何建议将不胜感激。

谢谢!

坏熊猫

【问题讨论】:

  • 你的服务端SubmitForm很奇特。您构造了一个从未使用过的returnBytes 对象,然后您将原始的bytes 参数返回给调用者,而不对其进行任何操作。这是设计使然吗?
  • 是的。这只是我为使一般功能正常工作而测试的代码……实际的应用程序使用了返回的字节数组,它与发送的字节数组不同。不过谢谢!

标签: c# xml web-services bytearray


【解决方案1】:

【讨论】:

  • 出现的异常难道不是表示已达到邮件大小配额吗?在我的环境中确实如此。
  • 看起来会的。但是,这是一个 byte[] 并且他发布的链接适用于 XML 序列化,而不是字节序列化。所以也许错误是不同的?
  • 无论采用何种序列化机制,都是消息大小受到限制。我发布的链接也完全适用于二进制序列化(netTcpBinding)
  • @Kezzer,这将取决于您是否已激活异常详细信息以在您的服务配置中传播,顺便说一句您不应该在生产环境中传播。
猜你喜欢
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
相关资源
最近更新 更多