none
ADO.NET Data Services について RRS feed

  • 質問

  •  

    明けましておめでとうございます。

     

    年明け早々ですが、前に進めず困っております。

    現在こちらのサイトを参考に進めていたのですが、エラーが発生して前に進めなく困っております。

    ADO.NET Data Services用のAjaxがこちらのサイトからダウンロードして使ってくださいと指定がありました。

    それで、進めていくと、次のようなエラーが発生しているようです。

     

    server/webname/NorthwindClient.aspx

     

    という感じでWebページを指定すると、先ほどのAjaxをつかって、サービスから指定したデータを取得するということなのですが、中身を知っている方ならわかると思いますが、

     

    server/webname/Northwind.svc/Categories

     

    という感じで指定すると、Categoriesが取得すべきデータということなのですが、エラー内容を見てみると、

     

    webname\Northwind.svc\Categories

     

    というディレクトリ構造でリソースを探しに行って、リソースが見つかりませんというようなエラーが発生しています。

    実際にソース側の場所は、

     

            var northwindService;

            function pageLoad() {

                northwindService = new Sys.Data.DataService("Northwind.svc");
               
                query();
            }

            function query() {
                northwindService.query("Categories", cbQueryComplete);   ←ここだと思われます
            }

    上記の場所で、パスの解析でおかしい動きをしているのであると思うのです。

     

    どなたか、回避方法をご存じの方いましたらよろしくお願いいたします。

     

    なお、私の説明がどうもうまくないと思いますので、補足要求などありましたらお願いいたします。

    2009年1月1日 14:46

回答

  • 実際のサーバー/クライアント環境ではありませんが(その環境を持っていません)、IDE

    の[ビルド]→[Web サイトの発行]で wwwroot ディレクトリに発行して、ローカル IIS 7.0
    環境で試してみました。

     

    結果は以下の通りで、freemann さんの場合とはちょっと違いますが、やはり問題ありでした。

     

    http://localhost/MsdnAdoNetDataService/Northwind.svc/ → HTTP 404.3 エラー
    http://localhost/MsdnAdoNetDataService/NorthwindClient.aspx → データが表示されない

     

    「HTTP 404.3」でググって、一番怪しそうな下記の対処法を試したところ、とりあえず前者の
    問題は解決されました。その理由や根拠等はまったく分かりませんが、よろしければお試しく
    ださい。

     

    WCF を IIS でホストした場合に WCF サービスのアドレスに接続すると 404.3 エラーになったときの対処方法。
    http://blogs.wankuma.com/katamari/archive/2008/01/27/119489.aspx

     

    しかしながら、後者の問題はまだ未解決です。何か分かったら連絡します。(挫折する可能性
    が大なので、期待はしないでください)

    2009年1月4日 1:47
  • Sys.Data.DataService の引数を、サンプルのような /Northwind.svc ではな
    く、以下のようにフルに記述したら問題はなくなり、データも完全に表示され
    ました。

     

    Code Snippet

    function pageLoad() { // ページロード・イベント
        // DataServiceオブジェクトの生成
        northwindService = new Sys.Data.DataService("http://localhost/MsdnAdoNetDataService/Northwind.svc/");
        query(); // ページロード後、サーバからデータ取得
    }

     

     

     

    ちなみに、以下の部分はサンプルのまま、下記のようにしておかないと NG で
    した。

     

    Code Snippet

    function query() { // データ取得関数
        // Categoriesテーブルをクエリ。
        // コールバックとしてcbQueryComplete関数を指定
        northwindService.query("/Categories", cbQueryComplete);
    }

     

     

    理由はまだ調べ切れておらず不明ですが、試してみてください。その前に
    Northwind.svc/Categories でデータが取得できるようにする必要があります
    が。

    2009年1月7日 13:51

すべての返信

  • ASP.NET 開発サーバー上でしか試してませんが、こちらで試した限りでは参照され
    ているサイト(下記)の手順どおりにして、エラーは一切発生しないことは確認できま

    したが?

     

    RESTスタイルのWebサービスを手軽に公開する「ADO.NET Data Services」
    http://www.atmarkit.co.jp/fdotnet/special/vs2008sp1ds/vs2008sp1ds_01.html

     

    Northwind.svc/Categories の Categories の方は大文字小文字の区別がされるよ
    うですが、その点は確認されましたか?

     

    例えば以下で、前者は OK、後者は HTTP 404 エラーになります。

     

    http://localhost:49775/Northwind.svc/Categories

    http://localhost:49775/Northwind.svc/categories

     

    ちなみに、自分の環境は下記の通りです。

    Vista SP1 + .NET 3.5 SP1 + VS2008 Pro SP1 + SQL Sever 2008 Exp

    2009年1月3日 7:16
  • SurferOnWwwさん、お返事ありがとうございます。

     

    私の環境は2通り試しています。

    1)Vsita SP1 + .NET 3.5 SP1 + VS2008 Pro SP1 + WIndowsServer2003 + SQL Server 2005

    2)Vista SP1 + .NET 3.5 SP1 + VS2008 Pro SP1 + SQL Server 2008 Exp

    です。

    1の方ではIISは6.0です。

     

    IDEでF5を押してのASP.NET 開発サーバー上では1,2ともにエラーがなく、動いてくれます。

    が、開発サーバーじょうではなく、

    http://server/webname/....

    という感じで、ブラウザで指定すると、エラーが発生しております。

     

    例えば、

    http://server/webname/Northwind.svc/ → 404エラー

    http://server/webname/NorthwindClient.aspx → 実行時エラー*

    *のエラー内容を見ようとデバッガを起動すると環境1では文字化けで内容が見れないということで、環境2でやってみると、質問内容のようにどうもパスの解析が間違っているととれる内容でした。

     

    確かにご指摘の通り、大文字小文字の違いを認識するようで、ASP.NET開発サーバー上では間違うとデータを取ってきてくれません。

     

    また、何か確認したい事項がありましたらおっしゃってくれれば随時お答えしたいと思います。

     

    よろしくお願いいたします。

    2009年1月3日 9:35
  • 実際のサーバー/クライアント環境ではありませんが(その環境を持っていません)、IDE

    の[ビルド]→[Web サイトの発行]で wwwroot ディレクトリに発行して、ローカル IIS 7.0
    環境で試してみました。

     

    結果は以下の通りで、freemann さんの場合とはちょっと違いますが、やはり問題ありでした。

     

    http://localhost/MsdnAdoNetDataService/Northwind.svc/ → HTTP 404.3 エラー
    http://localhost/MsdnAdoNetDataService/NorthwindClient.aspx → データが表示されない

     

    「HTTP 404.3」でググって、一番怪しそうな下記の対処法を試したところ、とりあえず前者の
    問題は解決されました。その理由や根拠等はまったく分かりませんが、よろしければお試しく
    ださい。

     

    WCF を IIS でホストした場合に WCF サービスのアドレスに接続すると 404.3 エラーになったときの対処方法。
    http://blogs.wankuma.com/katamari/archive/2008/01/27/119489.aspx

     

    しかしながら、後者の問題はまだ未解決です。何か分かったら連絡します。(挫折する可能性
    が大なので、期待はしないでください)

    2009年1月4日 1:47
  • SurferOnWwwさん、再度の返信ありがとうございます。

     

    教えていただいた、サイトを参考にしたところ、Vista上でのIIS7.0では

    http://server/webName/Northwind.svc/ での指定はではエラーが出ず取得できているようです。

    しかし、

    http://server/webName/Northwind.svc/Customers という具合に指定すると内部エラー500が発生しているようです。

    このエラー内容を取得したくて色々調べていたのですが、エラーの詳細をブラウザに取得できるのはWindowsServer2008でのIISでないと無理そうなので、2008は持っていないので、コードで後ほど調べてみようと思います。

     

    そして、質問での環境1)の場合では、

    http://msdn.microsoft.com/ja-jp/library/aa751792(VS.80).aspx

    に書いてあることをコマンドラインで実行したのですが、Northwind.svcを指定した時は変わらず404エラーのままです。

     

    それと、前のレスで私の方で誤解を生む記述があったようで、

    http://server/webName/NorthwindClient.aspx

    の場合は、データの取得が出来なくて埋め込んであるコントロールだけが表示されます。ただ、スクリプトのデバッグを有効にしているためだと思うのですが、エラーが発生していることがわかり、そこでデバッガを起動するとパスの解析がおかしい感じであるというところに行きついたということです。

     

    また、何かありましたら、よろしくお願いいたします。

    2009年1月5日 12:55
  • 2) の方は同じ環境のようですが、結果は違う(Northwind.svc/Customers のときはエ

    ラー)ということでしょうか? Northwind.svc/Categories もダメですか? とすると、ま

    ずその問題の解決が先決だと思いますが、すみませんが、解決策は見当つきません。


    自分の環境では Northwind.svc/Categories でも Northwind.svc/Categories でもデ

    ータを取得できますが、NorthwindClient.aspx ではデータが表示されないという状況

    です。

     

    デバッガで追いかけてみましたが、以下の northwindService.query が失敗してデー

    タが取得できず、cbQueryComplete メソッド(データをブラウザに表示する)まで行か

    ないという感じです。

     

    Code Snippet

    function query() { // データ取得関数
        // Categoriesテーブルをクエリ。
        // コールバックとしてcbQueryComplete関数を指定
        northwindService.query("/Categories", cbQueryComplete);
    }

     

     

    DataService.js, DataService.debug.js を解析する時間も能力もなくて挫折しかかっ

    ています。(笑)

    2009年1月5日 14:36
  • Sys.Data.DataService の引数を、サンプルのような /Northwind.svc ではな
    く、以下のようにフルに記述したら問題はなくなり、データも完全に表示され
    ました。

     

    Code Snippet

    function pageLoad() { // ページロード・イベント
        // DataServiceオブジェクトの生成
        northwindService = new Sys.Data.DataService("http://localhost/MsdnAdoNetDataService/Northwind.svc/");
        query(); // ページロード後、サーバからデータ取得
    }

     

     

     

    ちなみに、以下の部分はサンプルのまま、下記のようにしておかないと NG で
    した。

     

    Code Snippet

    function query() { // データ取得関数
        // Categoriesテーブルをクエリ。
        // コールバックとしてcbQueryComplete関数を指定
        northwindService.query("/Categories", cbQueryComplete);
    }

     

     

    理由はまだ調べ切れておらず不明ですが、試してみてください。その前に
    Northwind.svc/Categories でデータが取得できるようにする必要があります
    が。

    2009年1月7日 13:51
  • SurferOnWwwさん、何度もご返信してくださりありがとうございます。

     

    私の方はやはり、

    http://server/webname/Northwind.svc/Customers

    という指定で内部エラー500が発生しており、進んでおらず、せっかくの助言も検証できていないところです。

    この内部エラーがGlobal.asaxでのエラーイベントでフック出来なくて(設定が悪いのか?)、ほとほと困り果てております。

     

    もうしばらく、色々試してみたいと思います。

     

    2009年1月8日 5:37
  • SurferOnWwwさん、解決しました。単純なことでした。それと、

    エラー内容はイベントビューアの方にしっかりと載ってました。(ただ、エラーとしてではなく情報としてでした汗)

     

    まず、http://localhost/webname/Northwind.svc/Customers

    で内部エラーは・・・SQLServerでのアクセス権が設定されていませんでした。

    権限を与えることにより出来ました。

     

    続きまして、サービスを作成するときにフルで指定してあげるということでしたが、私の環境ではlocalhostで自サーバを指定すると、サービス名のパスの指定がおかしくなったので、localhostを使用せず、サーバ名で指定することにより解決できました。

     

    長く付き合っていただきありがとうございました。

    2009年1月12日 6:52
  • 忘れていました。

    windows server 2003でのほうはいまだわかっておりませんが、いったんこれで終わろうと思っています。

    2009年1月12日 6:56