0

私はSilverlightWebアプリケーションを作成しており、linqtosqlを使用して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>

4

2 に答える 2

1

データを保持するために DataGrid を作成していますが、LayoutRoot に追加していません。

DataGrid の作成を、ページに追加する必要があるページのコンストラクターに移動するか、XAML で定義することをお勧めします。

<Grid x:Name="LayoutRoot">
    <DataGrid ..../>
</Grid>

(かなり簡略化)。

次のステップは、データが実際にクライアントに返されていることを確認することです。次の場所にブレーク ポイントを設定します。

grid1.ItemsSource = e.Result;

デバッガーで e.Result の値を表示してみてください。これにより、表示するアイテムのリストが表示されます。ただし、クエリはこの時点でのみ評価されるため、多くのアイテムを返す場合、非常に長い時間がかかるか、タイムアウトすることさえあります。これが発生している場合は、サービス コールのタイムアウトを増やす必要があります。ただし、最初の例では、サーバー側でクエリを編集して、数十のアイテムのみを返すようにします。これにより、データが正しく返されていることを確認できます。

タイムアウトを増やすには、これを web.config ファイルに追加します。

<bindings>
  <basicHttpBinding>
    <binding name="IncreasedTimeout"
             sendTimeout="00:25:00">
    </binding>
  </basicHttpBinding>

もう 1 つの奇妙な点は、データをListではなく で返していることですIQueryable。少量のデータでは、(投稿したコードを考えると)違いはないと思いますが、試してみるのは別のことです。ただし、大量のデータが返される可能性がある場合は、ページングがサポートされていることを確認する必要があります。

これにより、1 回の呼び出しで返されるデータの量を制御できます。これにより、速度が向上し、クライアントのメモリ フットプリントが削減されます (他の問題が発生する可能性があります)。次に、UI で一度にデータのページを表示し、ユーザーがこれをナビゲートできるようにします。

于 2013-02-03T22:49:43.200 に答える
0

わかった。

linq2sql または Service ファイルで何かを変更した後、常にソリューションを再構築しました。しかし、それだけでは十分ではありませんでした。ソリューション フォルダ内のサービス参照を「右クリック」し、「サービス参照のアクチュアライズ」をクリックする必要がありました。その後、うまくいきました。

助けてくれてありがとう、ChrisF。

于 2013-02-04T21:11:47.707 に答える