【发布时间】:2010-12-14 23:01:52
【问题描述】:
我有一个带有 Silverlight 项目的 Visual Studio 解决方案,以及一个托管 Silverlight 应用程序的 Web 项目。该 Web 项目还包含一个由 Silverlight 应用程序调用的 ASMX Web 服务。
如下所述,对 Web 服务的某些调用可以正常工作,而另一些调用会引发 CommunicationException,包装一个 WebException - 两者都带有消息“服务器返回以下错误:'未找到'”。
首先,这是我的原始方法,如上所述失败(为简单起见更改了实体名称):
[WebMethod]
public Customer GetCustomer(int id)
{
CustomerDataContext dc = new CustomerDataContext();
return dc.Customers.SingleOrDefault(x => x.Id == id);
}
其次,为了调试问题,我将Linq to SQL和数据库从图片中取出,下面的代码运行良好:
[WebMethod]
public Customer GetCustomer(int id)
{
Customer c = new Customer() { ID=1, Name="Bob", History = new EntitySet<CustomerHistory>() };
return c;
}
第三,考虑到这一点,这两种方法之间的一个区别是第一种方法将包含客户历史记录中的值。我扩展了第二种方法以包含此方法,但它再次开始失败:
[WebMethod]
public Customer GetCustomer(int id)
{
Customer c = new Customer() { ID=1, Name="Bob", History = new EntitySet<CustomerHistory>() };
c.History.Add(new CustomerHistory() { Id=1, CustomerId=1, Text="bla" });
return c;
}
我对如何取得进展感到困惑——我目前的想法是,当对象图更深时,这可能是 Silverlight 方面的反序列化问题。这在理性上没有意义,但我想不出别的。我已经确认传输大小和缓冲区大小足够大(默认为 2GB)。
任何指针将不胜感激。
【问题讨论】:
-
您是否尝试仅返回 CustomerHistory 列表以查看是否可行?
-
您使用的是服务参考还是网络参考?
标签: silverlight web-services asmx