未処理のアクセス例外が発生しました、msmq、SharePointエラー
-
06-07-2019 - |
質問
サーバーの再起動後に問題が発生します。 SharePointには、さまざまなことを行うための機能があります。彼らが行うことの1つは、いくつかの異なるMSMQキューにアイテムを追加することです。サーバーの再起動後すぐに、SharePointにログインして私のカスタムページに移動し、そのページ内のボタンをクリックすると(msmqアイテムが作成されます)、ページが表示されます次:
ウェブサイトはこのウェブページの表示を拒否しました このエラー(HTTP 403禁止)は、Internet ExplorerがWebサイトに接続できたが、Webページを表示する権限がないことを意味します
イベントログを掘り下げると、アプリケーションに次のエラーが見つかります。
Event ID: 1314
An unhandled access exception has occurred
AND in the Security event logs:
3 of these:
Event ID: 560
Object Open:
Object Server: SC Manager
Object Type: SERVICE OBJECT
Object Name: MSDTC
....
Accesses: Query status of service
Event ID: 560
Object Open:
Object Server: SC Manager
Object Type: SC_MANAGER OBJECT
Object Name: ServicesActive
...
Image File Name: C:\WINDOWS\system32\services.exe
...
Accesses: Connect to service controller
Query service database lock state
Event ID: 560
Object Open:
Object Server: SC Manager
Object Type: SERVICE OBJECT
Object Name: MSDTC
...
Image File Name: C:\WINDOWS\system32\services.exe
...
Accesses: Query service configuration information
また、SharePointログを掘り下げると、次のエラーが見つかります:
/my/site/url/MyPage.aspxへのアクセス時のアプリケーションエラー、Error = Access 否定された。 (HRESULTからの例外:0x80070005(E_ACCESSDENIED)) サーバースタックトレース:at System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(String nodeName、Guid resourceManagerIdentifier、IntPtr managedIdentifier、 ブール& nodeNameMatches、UInt32& whereaboutsSize、CoTaskMemHandle& whereaboutsBuffer、IResourceManagerShim& resourceManagerShim)で System.Transactions.Oletx.DtcTransactionManager.Initialize()で System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory() で System.Transactions.Oletx.OletxTransactionManager.CreateTransaction(TransactionOptions プロパティ)at System.Transactions.TransactionStatePromoted.EnterState(InternalTransaction tx)...
... at System.Transactions.EnlistableStates.Promote(InternalTransaction tx)
System.Transactions.Transaction.Promote()で System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transaction トランザクション)at System.Transactions.TransactionInterop.GetDtcTransaction(Transaction トランザクション)at System.ServiceModel.Channels.MsmqQueue.GetNativeTransaction(MsmqTransactionMode transactionMode)at System.ServiceModel.Channels.MsmqQueue.SendDtcTransacted(NativeMsmqMessage メッセージ、MsmqTransactionMode transactionMode) System.ServiceModel.Channels.MsmqQueue.Send(NativeMsmqMessageメッセージ、 MsmqTransactionMode transactionMode)at System.ServiceModel.MsmqIntegration.MsmqIntegrationOutputChannel.OnSend(Message メッセージ、TimeSpanタイムアウト)System.ServiceModel.Chann ...
2つのVMがあります。1つはWeb(共有ポイント)マシン用で、もう1つはDBマシン(すべてのコンテンツデータベースなどが格納されています)です。 DBサーバーはプライマリドメインコントローラであり、両方のマシンは同じドメインの一部です。 SharePointアプリケーションプールに使用するドメインユーザーを作成しました。
奇妙なことに、アプリケーションの別の部分に移動してそのコードを実行することでエラーをなくすことができます(msmqにエントリが追加されます)。それが完了すると、アプリケーションの残りのすべてが通常どおりに動作します。
どんな助けでも信じられないほど高く評価されます。
注:エラーは、SharePointサイトのIISの匿名ユーザー(IUSR ...)と関係があることに気付きました。そのユーザーをドメイン管理者ユーザーに変更しましたが、エラーは発生しなくなりました。だから、それはIUSR ..ユーザーの許可に関係するものですが、私は何がわからない...
解決
O M G
わかりました、それで私は何かを試みました、それは長いショットでしたが、私は気の利いた終わりでした。
MSMQと通信しているすべてのコード(キューにアイテムを追加)をラップし、特権を上げて実行しましたが、動作しました!!!!
SPSecurity.RunWithElevatedPrivileges(delegate() { // MSMQCodeはこちら });
今、サーバーを再起動して、以前にエラーが発生したことを行うことができ、それは正常に動作します!
他のヒント
サーバーの再起動時にウォームアップスクリプトを実行することを検討してください。
inetpub \ wssなどの下のbinディレクトリに対する読み取り権限を全員に付与します。