当前位置: 代码迷 >> C# >> :WCF上传文件大小疑点
  详细解决方案

:WCF上传文件大小疑点

热度:404   发布时间:2016-05-05 05:04:51.0
求助:WCF上传文件大小问题.
本帖最后由 edisoft 于 2013-05-23 23:15:10 编辑
我有一个自定义的类,结构如下:


    class SendType 
    {
        public string username;
        public byte[] file;
    }


在服务器端有一个接口:



        public bool UpdateSQL(SendType s)
        {
           // if (AppSettings.conn.State == ConnectionState.Closed) AppSettings.conn.Open();
            Check.CheckSQL();
            SqlCommand cmd = new SqlCommand("UPDATE [员工信息表] SET 身份证扫描件 = @扫描件 WHERE 工号 = 'a'", AppSettings.conn);
            cmd.Parameters.Clear();
            cmd.Parameters.Add("@扫描件", SqlDbType.Image).Value = s.File;
            var a = cmd.ExecuteNonQuery();
            return true;
        }



在客户端我调用WCF的接口:


            if (OD.ShowDialog(F) == DialogResult.OK)
            {
                System.IO.Stream s = OD.OpenFile();
                long l = s.Length;
                byte[] buff = new byte[l];
                s.Read(buff, 0, int.Parse(l.ToString()));
                WCF.ServiceClient ws = new WCF.ServiceClient();
                WCF.SendType st = new WCF.SendType();
                st.File = buff;
                ws.UpdateDate(st);
            }


加断点调试到"st.File = buff"都正常,查看buff值和长度正常.
继续执行,到了ws.UpdateDate(st);就提示:

格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: s。InnerException 消息是“反序列化对象 属于类型 ClassLibrary.SendType 时出现错误。读取 XML 数据时,超出最大数组长度配额(16384)。通过更改在创建 XML 读取器时所使用的 XmlDictionaryReaderQuotas 对象的 MaxArrayLength 属性,可增加此配额。”。有关详细信息,请参见 InnerException。

试着发送小一点的文件,发现一切正常. 

然后我又试着更改app.config中的参数. 更改后相关的参数如下:

Server端:

      <netTcpBinding>
        <binding name="TcpBinding" sendTimeout="00:10:00" transferMode="Buffered"
          maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <reliableSession enabled="true" />
        </binding>
      </netTcpBinding>


Client端:

            <netTcpBinding>
                <binding name="NetTcpBinding_IService" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                    transactionFlow="false" transferMode="Buffered" transactionProtocol="OleTransactions"
                    hostNameComparisonMode="StrongWildcard" listenBacklog="10"
                    maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
                    maxConnections="10" maxReceivedMessageSize="2147483647">
                    <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
                        maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
                        enabled="true" />
                    <security mode="Transport">
                        <transport clientCredentialType="Windows" protectionLevel="EncryptAndSign" />
                        <message clientCredentialType="Windows" />
                    </security>
                </binding>
            </netTcpBinding>


修改还调试运行同样的提示.于是我搜索了所有16384的字符串.
分别在\Service References\WCF\configuration.svcinfo 中和 \Service References\WCF\configuration.svcinfo 中发现了16834 字符串 可是这两个文件都是自动生成的吧.我就算修改了,一运行,他又自己回复到了最迟状态.

我要求也不高 几M几十M的就算了,500K的文件都传不上去啊!!! 大神们,怎么解决啊!!!
------解决思路----------------------
楼主一个人玩的开心吗
  相关解决方案