我有一个自定义的类,结构如下:
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的文件都传不上去啊!!! 大神们,怎么解决啊!!!
------解决思路----------------------
楼主一个人玩的开心吗