locked
ADO.NETデータサービス利用時のエラー RRS feed

  • 質問

  • 初めて質問させていただきます。
    現在、Silverlight 2 のシステム開発で技術評価を行っています。

    http://msdn.microsoft.com/ja-jp/library/cc903944(VS.95).aspx 等を参考にしながらサンプルプロジェクトを作成したのですが、

    IEnumerable<Customers> results =
                                  queryResult.EndExecute(result);

    のステップで例外が発生してしまいます。

    かれこれ1週間、自力で解決を試みたのですが、サーバ側のサービスに問題があるのか、
    クライアント側に問題があるのか、切り分けすらできていない状態です。

    どなたかアドバイスをお願いできませんでしょうか。
    よろしくお願いします。


    例外の詳細は以下の通り。

    -----------------------------------------------------------------
    この要求の処理中にエラーが発生しました。
    System.Data.Services.Client.DataServiceQueryException はユーザー コードによってハンドルされませんでした。
      Message="この要求の処理中にエラーが発生しました。"
      StackTrace:
           場所 System.Data.Services.Client.QueryAsyncResult.EndExecute[TElement](Object source, IAsyncResult asyncResult)
           場所 System.Data.Services.Client.DataServiceQuery`1.EndExecute(IAsyncResult asyncResult)
           場所 sam.Page.GetDataCallback(IAsyncResult result)
           場所 System.Data.Services.Client.BaseAsyncResult.HandleCompleted()
           場所 System.Data.Services.Client.QueryAsyncResult.AsyncEndRead(IAsyncResult asyncResult)
           場所 System.IO.Stream.BeginRead(Byte[] buffer, Int32 offset, Int32 count, AsyncCallback callback, Object state)
           場所 System.Data.Services.Client.QueryAsyncResult.AsyncEndGetResponse(IAsyncResult asyncResult)
      InnerException: System.InvalidOperationException
           Message="変更の保存中にエラーが発生しました。詳細については、内部例外を参照してください。"
           StackTrace:
                場所 System.Data.Services.Client.BaseAsyncResult.EndExecute[T](Object source, String method, IAsyncResult asyncResult)
                場所 System.Data.Services.Client.QueryAsyncResult.EndExecute[TElement](Object source, IAsyncResult asyncResult)
           InnerException: System.Data.Services.Client.DataServiceClientException
                Message="<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\r\n<error xmlns=\"\r\n">http://schemas.microsoft.com/ado/2007/08/dataservices/metadata\">\r\n  <code></code>\r\n  <message xml:lang=\"ja-JP\">この要求を処理中にエラーが発生しました。</message>\r\n</error>"
                StatusCode=500
                InnerException:
    -----------------------------------------------------------------

    環境:VISTA 32bit, C# 2008, SQL Server 2008


    [Page.xaml]

    <UserControl x:Class="sam.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Width="400" Height="300" xmlns:sam_NorthWind="clr-namespace:sam.NorthWind" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
     <UserControl.Resources>
      <sam_NorthWind:Customers x:Key="CustomersDS" d:IsDataSource="True"/>
     </UserControl.Resources>
        <Grid x:Name="LayoutRoot" Background="White">
         <Canvas Margin="18,27,52,58">
          <ComboBox Height="25" Width="218" Canvas.Left="59" Canvas.Top="109.007" x:Name="CmbTest" RenderTransformOrigin="0.491,0.52" SelectedIndex="-1" ItemsSource="{Binding Mode=OneWay, Path=ContactTitle, Source={StaticResource CustomersDS}}">
           <ComboBox.RenderTransform>
            <TransformGroup>
             <ScaleTransform/>
             <SkewTransform/>
             <RotateTransform Angle="-0.109"/>
             <TranslateTransform Y="0.004" X="0.001"/>
            </TransformGroup>
           </ComboBox.RenderTransform>
           <ComboBox.DataContext>
            <sam_NorthWind:Customers/>
           </ComboBox.DataContext>
          </ComboBox>
                <Button Height="48" HorizontalAlignment="Left" Margin="62,47,0,0" VerticalAlignment="Top" Width="73" Content="Go!" x:Name="BtnGo"/>

            </Canvas>
         
        </Grid>
    </UserControl>

    -----------------------------------------------------
    [Page.xaml.cs]

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Data.Services.Client;
    using System.Collections.ObjectModel;
    using sam.NorthWind;


    namespace sam
    {
        public partial class Page : UserControl
        {
            NORTHWNDEntities proxy;
            ObservableCollection<Customers> obsvCollCustomers;


            public Page()
            {
                InitializeComponent();
                this.Loaded += OnLoaded;
                BtnGo.Click += OnGetData;

            }
            void OnLoaded(object sender, EventArgs args)
            {
                proxy = new NORTHWNDEntities(
                        new Uri("Northwind.svc", UriKind.Relative));
                obsvCollCustomers = new
                                   ObservableCollection<Customers>();
            }

            void OnGetData(object sender, EventArgs args)
            {
                DataServiceQuery<Customers> query =
                    (DataServiceQuery<Customers>)
                    (from c in proxy.Customers
                     where c.Country == "USA"
                     select c);

                query.BeginExecute(GetDataCallback, query);

            }

            void GetDataCallback(IAsyncResult result)
            {
                try
                {
                    DataServiceQuery<Customers> queryResult =
                                   (DataServiceQuery<Customers>)result.AsyncState;

                    IEnumerable<Customers> results =
                                  queryResult.EndExecute(result);

                    foreach (var item in results)
                        obsvCollCustomers.Add(item);

                    Dispatcher.BeginInvoke(() =>
                    {
                        CmbTest.ItemsSource = obsvCollCustomers;
                    });
                }
                catch (DataServiceRequestException ex)
                {
                    ex.Response.ToString();
                }
            }

        }
    }


    [NorthWind.svc.cs]

    using System;
    using System.Collections.Generic;
    using System.Data.Services;
    using System.Linq;
    using System.ServiceModel.Web;
    using System.Web;

    namespace sam.Web
    {
        public class NorthWind : DataService< NORTHWNDEntities  >
        {
            // このメソッドは、サービス全体のポリシーを初期化するために、1 度だけ呼び出されます。
            public static void InitializeService(IDataServiceConfiguration config)
            {
                // TODO: 表示や更新などが可能なエンティティ セットおよびサービス操作を示す規則を設定してください
                // 例:
                config.SetEntitySetAccessRule("*", EntitySetRights.All);
                // config.SetServiceOperationAccessRule("MyServiceOperation", ServiceOperationRights.All);
            }
        }
    }



    2009年2月7日 13:37

回答

  • k-maruです。

    まったく試していませんが、例外をみるに
    ---
    StatusCode=500
    InnerException:
    ---
    となっているので、サービスには到達しているのだと思います。

    一度、ADO.NET Data Service 経由ではなくASP.NETで直接 NORTHWNDEntities を使ってデータ取得を試してみてはいかがでしょう。

    そもそもNORTHWNDEntities がデータベースに接続できていない(接続文字列が間違ってる?権限?)などが怪しい気がします。
    2009年2月8日 2:46
  • ADO.NET Data Servicesの動作は確認されていますでしょうか?
    あと、どういった環境でテストしてます?
    うちではVista上のVisual Web Developerではうまく実行できているのに、Windows 2003 Server上に置いたVisual Web Developerだとうまく動作しない、という現象を確認しています。
    まだサーバ上でなぜ動作しないのかをきちんと調査していないので、解決策の提示はできませんが。
    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2009年2月9日 2:01

すべての返信

  • k-maruです。

    まったく試していませんが、例外をみるに
    ---
    StatusCode=500
    InnerException:
    ---
    となっているので、サービスには到達しているのだと思います。

    一度、ADO.NET Data Service 経由ではなくASP.NETで直接 NORTHWNDEntities を使ってデータ取得を試してみてはいかがでしょう。

    そもそもNORTHWNDEntities がデータベースに接続できていない(接続文字列が間違ってる?権限?)などが怪しい気がします。
    2009年2月8日 2:46
  • ADO.NET Data Servicesの動作は確認されていますでしょうか?
    あと、どういった環境でテストしてます?
    うちではVista上のVisual Web Developerではうまく実行できているのに、Windows 2003 Server上に置いたVisual Web Developerだとうまく動作しない、という現象を確認しています。
    まだサーバ上でなぜ動作しないのかをきちんと調査していないので、解決策の提示はできませんが。
    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2009年2月9日 2:01
  • ご回答ありがとうございます。
    やはり、サービス自体に問題がありそうだという事が分かりました。

    2009年2月25日 13:55
  •  こんにちは、フォーラムオペレータ大久保です。

    ken-zo さん、フォーラムのご利用ありがとうございます。
    k-maru さん、小野@どっとねっとふぁん さんのアドバイスが問題切り分けの参考になったようですので、勝手ながらお二人の投稿を「回答としてマーク」させていただきました。

    また何かありましたらMSDNフォーラムのことを思い出してください!
    よろしくお願いします。
    マイクロソフト株式会社 フォーラム オペレータ 大久保 直美
    2009年3月12日 1:31