【发布时间】:2012-04-06 07:41:19
【问题描述】:
我编写了一个从我的 SQL Server 数据库中读取数据的 WCF 服务。当调用一个返回所有字符串的方法时它工作正常,但是如果我调用一个返回一个 int 的方法,它会崩溃并出现一些关于超时和太多数据的错误,这对我来说没有意义......
这是我的网络服务代码:
public List<Track> getTrack()
{
List<Track> trackList = new List<Track>();
SqlConnection dbConn = connectToDb();
string _selectQuery = string.Format("SELECT Date, Track, KeyID FROM hdData ORDER BY Track");
try
{
dbConn.Open();
SqlCommand cmd = new SqlCommand(_selectQuery, dbConn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
Track Dat = new Track();
Dat.Date = (string)reader[0];
Dat.TrackName = (string)reader[1];
Dat.KeyId = (int)reader[2];
trackList.Add(Dat);
}
dbConn.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
return trackList;
}
如果我取出KeyId 字段,它可以正常工作...数据库中的KeyId 被定义为int 类型,并且是一个自动递增字段。
我什至尝试将其转换为 varchar 但结果相同...
我做错了什么?
问候, 院长
确切的错误和Track类如下:
好的,确切的错误是:
传入邮件的最大邮件大小配额 (65536) 已达到 超过。要增加配额,请使用 MaxReceivedMessageSize 相应绑定元素上的属性。
服务器堆栈跟踪:
在 System.ServiceModel.Channels.HttpInput.ThrowMaxReceivedMessageSizeExceeded()
在 System.ServiceModel.Channels.HttpInput.GetMessageBuffer()
在 System.ServiceModel.Channels.HttpInput.ReadBufferedMessage(流 输入流)
在 System.ServiceModel.Channels.HttpInput.ParseIncomingMessage (异常& 请求异常)
在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度超时)
在 System.ServiceModel.Channels.RequestChannel.Request(消息消息, 时间跨度超时)
在 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息 消息,TimeSpan 超时)
在 System.ServiceModel.Channels.ServiceChannel.Call(字符串操作, Boolean oneway, ProxyOperationRuntime 操作, Object[] ins, Object[] 出局,TimeSpan 超时)
在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall、ProxyOperationRuntime 操作)
在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 留言)在 [0] 处重新抛出异常:
在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
在 System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(消息数据& msgData, Int32 类型)
在 IService1.getTrack()
在 Service1Client.getTrack()内部异常:
传入邮件的最大邮件大小配额 (65536) 已超出。要增加配额,请使用 相应绑定元素上的 MaxReceivedMessageSize 属性。
Track 类是:
[DataContract]
public class Track
{
string _Date, _TrackName;
int _KeyId;
[DataMember]
public string Date
{
get { return _Date; }
set { _Date = value; }
}
[DataMember]
public string TrackName
{
get { return _TrackName; }
set { _TrackName = value; }
}
[DataMember]
public int KeyId
{
get { return _KeyId; }
set { _KeyId = value; }
}
}
【问题讨论】:
-
你能给我们确切的错误吗?还有 Track 类。您还应该关闭阅读器。
-
也许如果您使用 MsSql CE 数据库,您的 KeyId 不是 int 而是 GUID。然后在尝试转换为 int 时出现错误。
-
启用wcf tracing 以查看详细的错误消息并向我们展示该错误。
-
Boom 发布错误,现在一切都清楚了 - 在端点中增加
MaxReceivedMessageSize