0

我正在创建一个 Silverlight Web 应用程序,我使用 linq to 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;                       
    }

网络配置

<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>

4

2 回答 2

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>

另一件奇怪的事情是,您返回的是 aList而不是a 中的数据IQueryable。对于少量数据,我认为它不会有任何区别(鉴于您发布的代码),但它是其他尝试。但是,如果您可能返回大量数据,您应该查看它,因为它支持分页。

这使您可以控制在一次调用中返回多少数据。这可以加快速度并减少客户端的内存占用(其他可能出错的地方)。然后在 UI 中一次显示一页数据并允许用户在其中导航。

于 2013-02-03T22:49:43.200 回答
0

我知道了。

在我更改 linq2sql 或服务文件中的任何内容后,我总是重建我的解决方案。但这还不够。我必须在我的解决方案文件夹中“右键单击”我的服务参考,然后单击“实现服务参考”。之后它工作得很好。

谢谢你的帮助,克里斯F。

于 2013-02-04T21:11:47.707 回答