我正在创建一个silverlight Web应用程序,我使用linq来sql绑定我的 sql数据库。这有效。我现在的问题是,当我尝试保存我的数据时 在数据网格或列表框中,没有任何反应(意味着没有输出)。
这里是我在wcf服务文件中的代码:
public List<mytable> get_info()
{
LinqMapInfoDataContext _context = new LinqMapInfoDataContext();
var result = (from x in _context.mytable select x).ToList();
return result;
}
在mainpage.xaml.cs
中private void ser_client_get_infoCompleted(object sender, ServiceRefMapInfo.get_infoCompletedEventArgs e)
{
DataGrid grid1 = new DataGrid();
grid1.ItemsSource = e.Result;
}
的Web.Config
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="IncreasedTimeout"
sendTimeout="00:25:00">
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
答案 0 :(得分:1)
您正在创建一个DataGrid来保存数据,但您没有添加到LayoutRoot。
将DataGrid的创建移动到您需要将其添加到页面的页面的构造函数中,或者更好地在XAML中定义它:
<Grid x:Name="LayoutRoot">
<DataGrid ..../>
</Grid>
(简化)。
下一步是检查数据是否实际返回给客户端。设置一个断点:
grid1.ItemsSource = e.Result;
尝试在调试器中查看e.Result的值。这应该显示您要显示的项目列表。但是,您的查询仅在此时进行评估,因此如果您要返回大量项目,则可能需要很长时间甚至超时。如果发生这种情况,您需要增加服务呼叫的时间。在第一种情况下,虽然在服务器端编辑查询,但它只返回几个10项。这将允许您验证数据是否正确返回。
要增加超时,请将此添加到web.config文件中:
<bindings>
<basicHttpBinding>
<binding name="IncreasedTimeout"
sendTimeout="00:25:00">
</binding>
</basicHttpBinding>
另一件奇怪的事情是,您要在List
而不是IQueryable
中返回数据。对于少量数据,我认为它不应该有任何区别(考虑到你发布的代码),但这是另一回事。但是,如果您可能返回大量数据,则应该查看它,因为它支持分页。
这使您可以控制在一次调用中返回多少数据。这可以加快速度并减少客户端的内存占用(其他可能出错的地方)。然后在UI中,您一次显示一页数据,并允许用户浏览此数据。
答案 1 :(得分:0)
我明白了。
在我更改linq2sql或Service文件中的任何内容后,我总是重建我的解决方案。 但这还不够。我必须在我的解决方案文件夹中“右键单击”我的服务参考,然后单击“实现服务参考”。之后它运作良好。
感谢您的帮助,ChrisF。