0

作成したASP.NetMVC3アプリケーションに問題があります。このアプリケーションは、基本的に2つのアセンブリ、UI用のMVC3アプリケーション、およびビジネスロジックを含むインフラストラクチャDLLで構成されています。

インフラストラクチャアセンブリは、ソフトウェアベンダーが提供するいくつかのアセンブリも参照します。これは、同じベンダーが提供する一部のCOMコンポーネントの機能をラップする相互運用機能アセンブリであると私は信じています。インフラストラクチャアセンブリは、アプリケーションのさまざまな機能を実行するために、相互運用機能アセンブリを何度も呼び出します。

開発マシン(Win7)のVisual StudioでMVCアプリを実行すると、完全に機能します。次に、アプリケーションを目的のWebサーバー(Win2k3R2上のIIS 6)に展開すると、正常に起動し、ほとんどの機能が機能します。ただし、ベンダーのアセンブリへの呼び出しの1つは失敗しますが、次の不可解な例外があります。

System.Runtime.InteropServices.COMException: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
   at SmarTeam.Std.Interop.SmarTeam.SmApplic.ISmObject.InsertEx2(ISmBehavior Behavior)
   at Baa.Smarteam.SecurityManager.Infrastructure.Smarteam.SmarteamAccountRepository.Create(UserAccountFromST smarteamAccount)
   --- End of inner exception stack trace ---
   at Baa.Smarteam.SecurityManager.Infrastructure.Smarteam.SmarteamAccountRepository.Create(UserAccountFromST smarteamAccount)
   at Baa.Smarteam.SecurityManager.Infrastructure.UserAccountRepository.Create(IDualSourceUserAccount userAccount)
   at Baa.Smarteam.SecurityManager.Infrastructure.UserManager.CreateUser(Int32 bemsId)
   at Baa.Smarteam.SecurityManager.Web.Controllers.UserController.ProcessAction(Nullable`1 id, String actionName, Func`2 action)

奇妙なことに、相互運用機能アセンブリの他のすべての呼び出しは正常に機能します。失敗するのはこれだけです。

また、ベンダーのアプリケーションのテスト環境で、MVCアプリケーションをWebサーバーにデプロイしました。私がOS/IIS / .Net/etcに伝えることができる限り。構成は両方のサーバーで同じです。MVCアプリは、このサーバーで完全に実行されて動作します。

NetworkMonitorとProcessMonitorを使用してデバッグを試みましたが、明らかなものは何も表示されません。

今日、私はASP.Netを方程式から外すために、インフラストラクチャアセンブリを実行するためのコンソールアプリケーションを作成しました。コンソールアプリは、開発マシンとターゲットサーバーで完全に機能します。

だから私の質問:明らかなことは別として、ASP.Netとコンソールアプリケーションの実行環境の違いは何ですか?

私が考えたのはユーザーコンテキストです。MVCアプリによって生成されたログの所有者は「ネットワークサービス」ですが、私は明らかに自分のアカウントでコンソールアプリを実行しています。ただし、これは2つのサーバーでの操作の違いを説明するものではありません。

ベンダー(通常は役に立たない)に連絡する以外に、他に何を見るべきですか?

4

1 に答える 1

1

これはほぼ間違いなく許可の問題です。

スタックトレースは、のクラスを参照します

Baa.Smarteam.SecurityManager

名前空間。正しく指摘しているように、MVCアプリはネットワークサービス(デフォルト)として実行され、コンソールアプリはログインアカウント(デフォルト)で実行されます。

テストサーバーで動作する場合は、「Baa」コードを実行するために必要なアクセス許可がNETWORK SERVICEに付与されているか、MVCアプリがそのボックスでNETWORKSERVICEとして実行されていないことが原因です。

「Baa」アプリが参照しようとする可能性のあるセキュリティ保護可能なリソース(ファイル、レジストリキーなど)を検討し、動作中のサーバー上のそれらのリソースのセキュリティ設定を、障害が発生しているサーバー上の設定と比較します。

于 2012-08-30T04:35:23.433 に答える