有一个自定义的类,结构如下:
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端:
maxBufferPoolSize=”2147483647″ maxBufferSize=”2147483647″ maxReceivedMessageSize=”2147483647″>
Client端:
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″>
maxArrayLength=”2147483647″ maxBytesPerRead=”2147483647″ maxNameTableCharCount=”2147483647″ />
enabled=”true” />
修改还调试运行同样的提示.于是我搜索了所有16384的字符串.
分别在\Service References\WCF\configuration.svcinfo 中和 \Service References\WCF\configuration.svcinfo 中发现了16834 字符串 可是这两个文件都是自动生成的吧.我就算修改了,一运行,他又自己回复到了最迟状态.
我要求也不高 几M几十M的就算了,500K的文件都传不上去啊!!! 大神们,怎么解决啊!!!
奇怪了… 我删除服务引用后再次重新添加引用…. 发现我所有的更改都变回来..
openTimeout=”00:01:00″ receiveTimeout=”00:10:00″ sendTimeout=”00:01:00″
transactionFlow=”false” transferMode=”Buffered” transactionProtocol=”OleTransactions”
hostNameComparisonMode=”StrongWildcard” listenBacklog=”10″
maxBufferPoolSize=”524288″ maxBufferSize=”65536″ maxConnections=”10″
maxReceivedMessageSize=”65536″>
maxBytesPerRead=”4096″ maxNameTableCharCount=”16384″ />
enabled=”true” />
bindingConfiguration=”NetTcpBinding_IService” contract=”WCF.IService”
name=”NetTcpBinding_IService”>
难道服务器端的配置有问题????
莫名其妙的问题…现在问题又解决了…
删除原先的服务引用,然后重新添加,,,,在新生成的配置里面重新修改,保存,,,,
问题解决