web-dev-qa-db-ja.com

ASP.NETCore-公開後にアプリケーションがデータベースに接続しない

ユーザー認証を使用して単純なASP.NetCoreアプリケーションを作成しました(したがって、すべてのEntity FrameworkがWebアプリテンプレートにプリロードされています)。 appsettings.jsonファイルにあるconnectionStringを使用して、"data source = {computerName}\\{serverName}"を設定してデータベースに接続しています。

データベースインスタンスとVisualStudioは同じマシン上にあります。これは、開発モードおよびデバッグモードでデータをWebAPIに返す場合に正常に機能します。それを公開してドメイン名からサイトにアクセスしようとすると、データベース接続を必要としないWebページを表示できますが、データベースからのデータを必要とする残りのWebページは次のようなページを返します。

エラー。
リクエストの処理中にエラーが発生しました。開発モードを開発環境にスワッピングすると、発生したエラーに関するより詳細な情報が表示されます。

展開されたアプリケーションで開発環境を有効にしないでください。例外からの機密情報がエンドユーザーに表示される可能性があります。ローカルデバッグの場合、ASPNETCORE_ENVIRONMENT環境変数をDevelopmentに設定し、アプリケーションを再起動することで、開発環境を有効にできます。

ASPNETCORE_ENVIRONMENTの環境変数を開発から本番に変更しようとしましたが成功しませんでした。

ファイルappsettings.Production.jsonがないのに、project.jsonファイルのpublishOptionsappsettings.Production.jsonを追加しようとしましたが、役に立ちませんでした。 ドットネット公開

web.configファイルにevironment変数を追加しても機能しませんでした Deployment

公開されたWebAPIを開発用VisualStudioセットアップの外部からSQLServerデータベースに接続するためのサポートが必要です。

私が考えることができる最後のことは、接続文字列を理解する方法が間違っている可能性があるということです。 Web APIが接続文字列を使用してサーバー側からデータベースに接続する場合、すべて同じマシン上にあるため、開発中のhttp://localhost:port#の呼び出しと同じように正常に機能するはずです。ただし、データベース文字列がクライアント側の呼び出しに基づく必要がある場合は、ドメイン名とIPアドレスを使用する必要があります。誰か教えてもらえますか?

他に頭に浮かぶ唯一のことは、IIS Managerの内部に、私が行っていない、実行する必要があることがあるということです。接続文字列も表示されますが、それが何のためにあるのかわかりません。接続文字列がアプリケーション内にあるので、私たちが行います。また、同じマシン上にある場合でも、データベースサーバーと通信するための何らかの許可をアプリに与えると思いますか?

10
Edward

多くの調査の結果、ついに「iisでWeb APIをデプロイする方法」をグーグルで検索することができました Host ASP.NET Web API in IIS using Visual Studio Publish セキュリティエンティティBUILTIN\IIS_IUSRSを追加する必要がありました。次に、データベーステーブルにマッピングを配置し、データベースのdb_datareader(および場合によってはdb_datawriter)をIUSERに渡して、セルフホストIIS = web api。これは、上記のリンクから、

IIS APPPOOL\ASP.NET v4.0でデータベースにアクセスするASP.NETv4.0 App Poolを使用しているので、IIS APPPOOL\ASP.NET v4.0がデータベースサーバー->セキュリティ->ログインに追加されます。

8
Edward