3

すでにいくつかの質問が寄せられていますが、このエラーの原因とその修正方法についての注意や回答を得ているものはありません。

バックグラウンド

VS2012 で WCF アプリケーション プロジェクト テンプレートを使用して作成した別のアプリケーションで、単一のデータ アクセス ポイントを持つ ASP.NET MVC4 アプリケーションを作成しました。両方のアプリケーションをデバッグ モードで実行すると (したがって、この時点では両方に IIS Express を使用しています)、それらは互いに問題なく通信できます。私の通話はすべて機能し、問題はありません。

より現実的な環境でテストしたかったので、IIS をセットアップし (Windows 8 ボックスで IIS 8)、Web サイトを作成し、その Web サイトの下で、これらの両方のアプリケーション (MVC アプリケーション) をホストしています。ダッシュボード、および私がサービスと呼んでいる WCF のものです。したがって、IISでは次のようになります

 MYMACHINENAME
 |
 --App Pools
 |Sites
     --local
        --aspnet_client
        --dashboard (application, MVC4)
        --service (application, WCF)

localhost/service にアクセスすると、そこに正しい情報が表示されるので、正しくホストされていることがわかります。

MVC4 プロジェクトのサービス参照を更新して、使用していた iis Express ではなく、localhost/service を指すようにしました。

問題

MVC4 アプリへの新しいサービス参照の追加は正常に機能し、wsdl 情報を取得し、定義したすべてのエンドポイント呼び出しを確認できます。新しいサービス参照を追加した後、「ダッシュボード」アプリケーションを再公開しました。localhost/dashboard に移動すると、サービス参照が作成した Reference.cs ファイルの奥深くでエラーが発生します。エラーをスローしているコードは次のとおりです。

MyServiceAPIClient svc = new MyServiceAPIClient();
svc.Open();
User userRecord = svc.GetUserRecord(adSAMName);

その 3 行目で、サービス参照を追加したときに作成される Reference.cs ファイルに入ります。Reference.cs ファイルのこのコード行は次のとおりです。

public Dashboard.Web.MyApiService.User GetUserRecord(string userName) {
    return base.Channel.GetUserRecord(userName);
}

エラーメッセージは次のとおりです。

An error occurred while getting provider information from the database. 
This can be caused by Entity Framework using an incorrect connection string. 
Check the inner exceptions for details and ensure that the connection string is correct.

私が見る内部例外はないので、ここで途方に暮れています。

質問

ここで質問が何であるかはかなり明白なはずです。本当に複数の質問:

  1. この問題の原因は何ですか? VS2012で両方をデバッグするだけで、IIS Expressで正常に動作することに注意してください。

  2. これは、MVC アプリ、WCF アプリ、または IIS の構成の問題ですか? それらすべての組み合わせ?

  3. どうすれば修正できますか??

ここに投稿できるコード ファイルと構成ファイルはたくさんありますが、読みやすいように短くしたいと思います。ここで見たいコードがある場合は、コメントと投稿できるかどうかをお知らせください。

アップデート

アドバイスどおりに実行し、IIS でサービスを実行しているプロセスに接続しました。内部例外を掘り下げると、データベースにアクセスしようとすると、アクセス/ログインの問題のようです。

ただし、組み込みのSQLユーザーで接続文字列を機能させることができないようです。そのため、再び頭を悩ませています。

これは私が試している接続文字列です:

<add name="MyDB" connectionString="Server:.;Database=MyDatabase;User Id=SQLAuthUser;Password=yourmom;"  providerName="System.Data.SqlClient"/>

プロセスを再度実行すると、指定したユーザーのログインに失敗したことが示され、これまでに見たことのない次のメッセージも表示されます。

Could not determine storage version; a valid storage connection or a version hint is required. 

ハーフ!?

更新: 解決策

したがって、私の接続文字列は次のようになります。

<add name="NeumontDB" connectionString="Server=ServerName; Database=NeumontDB; User Id=Username; Password=password;"  providerName="System.Data.SqlClient"/>

また、混合モード認証を許可するように SQL サーバーを設定する必要もありました。これで、問題なくサービスを利用できるようになりました.万歳!

4

1 に答える 1

1

問題は WCF アプリにあり、構成に関連している可能性が最も高いです。これを修正するには、IIS でホストされている WCF にデバッガーを接続し、GetUserRecord メソッドをデバッグすることをお勧めします。

IIS でホストされている WCF サービスをデバッグする方法に関するヒントを次に示します。

ローカル IIS でホストされているデバッグ WCF サービスが機能していない

IIS でホストされている asp.net WCF サービスのデバッグ

私が疑うのは、接続文字列で Windows 認証を使用しており、アプリケーション プールを所有しているユーザーがデータベースにアクセスできないことです。デバッグによってそのことが明らかになった場合は、apppool ユーザーに DB 権限を割り当てるか、SQL 認証を使用するように接続文字列を変更することをお勧めします。

接続文字列エラーについては、次のブログ エントリを参照することをお勧めします。

http://failuresincoding.blogspot.com/2011/12/entity-framework-provider-did-not.html

また、ローカル ボックスに複数の SQL Server がありますか? 「.」ではなく、完全なインスタンス名を使用することをお勧めします。

于 2013-04-10T13:17:13.327 に答える