我有一个 Silverlight 应用程序,它正在从我的网站上的服务中获取项目列表。我将它作为具有以下功能的 ObservableCollection 传递:
public ObservableCollection<Dictionary<string, object>> GetItems(string transetDocId)
{
ObservableCollection<Dictionary<string, object>> result = new ObservableCollection<Dictionary<string, object>>();
foreach (DataRow dr in ((DataTable)HttpContext.Current.Session["ItemDataTable"]).Rows)
{
Dictionary<string, object> tempD = new Dictionary<string, object>();
foreach (DataColumn dc in ((DataTable)HttpContext.Current.Session["ItemDataTable"]).Columns)
tempD.Add(dc.ColumnName, dr[dc.ColumnName]);
result.Add(tempD);
}
return result;
}
一切正常。现在,没有我能想到的任何更改,它已经开始返回以下错误。
对“http://www.example.com/Services/Example.svc”的 HTTP 请求已超过分配的超时。分配给此操作的时间可能是较长超时的一部分。
我已经逐步完成了代码。我正在客户端中启动 GetItemsAsync() 方法。服务看到调用,创建结果并返回它。但是 GetChecksCompleted() 方法永远不会被命中(是的,我正在添加一个事件处理程序)。几分钟后,我得到了错误。
我尝试修改代码,使其返回一个长逗号/分号/管道分隔的字符串,而不是一个可观察的集合,并且一切运行正常。
为什么 ObservableCollection 不起作用?
更多信息:我得到的错误实际上发生在 return 语句之前的行中生成的文件 Reference.cs 中:
public System.Collections.ObjectModel.ObservableCollection<System.Collections.Generic.Dictionary<string, object>> EndGetItems(System.IAsyncResult result) {
object[] _args = new object[0];
System.Collections.ObjectModel.ObservableCollection<System.Collections.Generic.Dictionary<string, object>> _result = ((System.Collections.ObjectModel.ObservableCollection<System.Collections.Generic.Dictionary<string, object>>)(base.EndInvoke("GetItems", _args, result)));
return _result;
}