0

SQL Server 2012 Express データベースを備えたサーバーがあります。私はそれに接続するために認証されており、ASP.NET MVC 4 アプリケーションのバックエンドとして使用しています。

このアプリケーションでは、API も開発しています。自分のアプリケーション内で jQuery を使用してプログラムで API を呼び出すと、問題なく動作します。データベースにクエリを実行して情報を取得することも同様に機能します。

しかし、VS2010 からアプリケーションを実行し、データベースにアクセスする URL を使用して API にアクセスしようとすると、HTTP 500 エラーが発生します。

この問題がアプリケーション側にないことを確認するために、API リソースを変更して、(データベースからの情報の代わりに) ローカル配列を取得し、同じ URL にアクセスすると、XML 形式で情報を返しました。ローカルホスト ページ。

問題は、API への URL 呼び出しが、認証されたユーザー (私) としてではなく、ブラウザーからデータベースに接続しようとすることです。

ブラウザーで API への URL 呼び出しを許可してデータベースにアクセスし、データを JSON/XML 形式で返すように SQL Server を構成するにはどうすればよいですか? (例: Twitter REST API でできること)

更新: HTTP 要求のデバッグ出力:

リクエスト URL:http://localhost:5555/api/Performance/ShowMachines

リクエスト方法:GET

ステータス コード:500 内部サーバー エラー

Request Headersソースを見る

Accept:text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8

Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3

Accept-Encoding:gzip、deflate、sdch

Accept-Language:en-US,en;q=0.8

接続:キープアライブ

ホスト: ローカルホスト:5555

ユーザーエージェント:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (Gecko のような KHTML) Chrome/20.0.1132.47 Safari/536.11

応答ヘッダービューのソース

キャッシュ制御:プライベート

接続:閉じる

コンテンツの長さ:0

日付:2012 年 8 月 2 日 (木) 16:40:11 GMT

サーバー: ASP.NET 開発サーバー/10.0.0.0

X-AspNet-バージョン:4.0.30319

4

2 に答える 2

2

接続文字列をに変更します

<add name="PerfMonDataConnectionString" connectionString="Data Source=cloud\sqlperf,1433;Initial Catalog=PerfMonData;User=myusername;Password=mypassword providerName="System.Data.SqlClient" />

そして、ユーザーアカウントが何であれ、データベースへのアクセス許可を持っていることを確認してください。

これは、セキュリティ要件に応じて最善の方法である場合とそうでない場合があります

また、ユーザー/パスワードキーは私の頭のてっぺんから外れています。それはUserIdかもしれません。www.connectionstrings.comはあなたの友達です。

于 2012-08-02T01:10:58.290 に答える
0

問題を解決し、ここで回答しました: C#/ASP.NET - URL 経由で Web API 操作を呼び出していますか? : HTTP エラー 500

問題は、.dbml ファイルを作成し、そこにテーブルをドラッグ アンド ドロップしたときに、自動生成された DataContext クラスが、外部キーの関係を表す EntitySet オブジェクトを作成したことでした。EntitySet オブジェクトを除いて、DataContext 内のクラスではなく、JSON を返す get サンド セットを持つ単純なクラスを作成しました。その結果、それは魔法のように機能しました。どうやら EntitySets はシリアル化できないため、500 エラーが発生していました。

于 2012-09-01T22:21:29.670 に答える