3

Azure WebSiteアプリで個別の名前付きスキーマを使用して、AzureSQLで個別のスキーマパターンでマルチテナンシーを実装したいと思います。私のアプリはVisualStudioで正しく実行されますが、Azureでは実行されません。StackOverflowで同様の問題を検索したところ、次のことがわかりました。この回答は、実行できないことを示しています。WindowsAzure上のマルチテナントアプリケーション。この質問は、名前付きスキーマには直接適用されません。ローカルで実行された場合はAzure SQLデータベースが機能しますが、Azureに公開された場合は機能しません。

開発中のMVC4アプリでは、名前付きスキーマを使用するようにAzure SQLデータベースを構成し、接続文字列のログイン名とパスワードを変更しました。最初のユーザーを登録しようとすると、AzureSQLから「無効なオブジェクト名'UserProfile'」というエラーメッセージが表示されました。スタックトレースを確認したところ、すべてが妥当であるように見えたので、SimpleMembershipProviderのコードを確認しましたが、名前付きスキーマを使用したときに破損するものは見つかりませんでした。

概念実証として、Visual Studio 2012を開き、インターネットアプリケーションテンプレートを使用して.NET Framework 4.5で新しいMVC4アプリを作成しました。これは、もちろんSimpleMembershipProviderを実装しています。Azureコンソールを開き、新しいデータベースを使用して新しいWebサイトを作成し、アプリをAzureに公開しました。アプリを実行し、[登録]リンクをクリックして最初のユーザーを追加しました。これは成功し、ログアウト、ログインなどができました。

次に、新しい名前付きスキーマ、ログイン、およびユーザーを作成して、PoCアプリのAzureSQL構成を変更しました。新しいデータベースに新しいユーザーのdb_ownerロールを追加しました。ユーザーのデフォルトスキーマを変更し、最初の実行で作成されたテーブルを名前付きスキーマに転送しました。ユーザーのデフォルトスキーマが正しく、テーブルが名前付きスキーマにあることを確認しました。[公開]ダイアログの[接続文字列]セクションでユーザー名とパスワードを変更し、VisualStudioからアプリを再度公開しました。Chromeでウェブサイトを開き、[登録]リンクをクリックしました。ユーザー名とパスワードを入力すると、「無効なオブジェクト名'UserProfile'」というエラーメッセージが表示されました。最初の実行で作成したユーザーでログインしようとすると、同じエラーが発生しました。

次に何をチェックするかについてのアイデアを探しています。この問題を回避することはできますが、簡単なことを見逃した場合は、効率的な方法で修正したいと思います。何か案は?

4

1 に答える 1

1

Azure Webサイトにバグがあり、Webサイトを公開しても接続文字列が更新されないようです。

Azure管理ポータルのWebサイトの[構成]ページに接続文字列があります。この接続文字列は、Webサイトのデータベースに接続するために使用されます。最初は、データベースの作成に使用されるユーザーIDとパスワードが含まれています。Visual Studio Webサイトプロジェクト(Web.configまたは[Webの公開]ダイアログ)に別のユーザーIDとパスワードを入力しても、Azureの接続文字列には影響しません。これは私の特定の状況で問題を引き起こしましたが、Webサイトからデータベースにアクセスするためにsaのようなサーバーレベルのユーザーを使用しない人にとっても問題になります。

この問題で私が見つけた回避策は、Visual Studioプロジェクトでの変更の有効性に依存するのではなく、Webサイトの[構成]ページでAzureの接続文字列を直接変更することです。これで問題が解決し、名前付きスキーマが正しく機能するようになりました。

于 2013-02-01T17:23:45.490 に答える