Si è verificata un'eccezione di accesso non gestito, msmq, errore Sharepoint
-
06-07-2019 - |
Domanda
Ho un problema che si verifica dopo il riavvio del mio server. Ho alcune funzionalità in SharePoint, per fare varie cose. Una cosa che fanno è aggiungere elementi in un paio di diverse code MSMQ. Immediatamente dopo il riavvio del server, se provo ad accedere a SharePoint e vado in una mia pagina personalizzata e faccio clic su un pulsante all'interno di quella pagina (che quindi creerebbe l'elemento msmq) vengo portato a una pagina che visualizza il seguenti:
Il sito Web ha rifiutato di mostrare questa pagina Web Questo errore (HTTP 403 proibito) indica che Internet Explorer è stato in grado di connettersi al sito Web, ma non dispone dell'autorizzazione per visualizzare la pagina Web
Se riesco ad accedere ai registri eventi, trovo i seguenti errori nell'applicazione:
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
ANCHE, se inserisco i log di SharePoint, trovo i seguenti errori:
Errore dell'applicazione quando si accede a /my/site/url/MyPage.aspx, Errore = Accesso è negato. (Eccezione da HRESULT: 0x80070005 (E_ACCESSDENIED)) Traccia stack server: at System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy (String nodeName, Guid resourceManagerIdentifier, IntPtr managedIdentifier, Booleano & amp; nodeNameMatches, UInt32 & amp; WhereeaboutsSize, CoTaskMemHandle & amp; whereBboutsBuffer, IResourceManagerShim & amp; resourceManagerShim) a System.Transactions.Oletx.DtcTransactionManager.Initialize () a System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory () a System.Transactions.Oletx.OletxTransactionManager.CreateTransaction (TransactionOptions proprietà) a System.Transactions.TransactionStatePromoted.EnterState (InternalTransaction tx) ...
... su System.Transactions.EnlistableStates.Promote (InternalTransaction tx)
at System.Transactions.Transaction.Promote () a System.Transactions.TransactionInterop.ConvertToOletxTransaction (Transaction transazione) a System.Transactions.TransactionInterop.GetDtcTransaction (Transaction transazione) a System.ServiceModel.Channels.MsmqQueue.GetNativeTransaction (MsmqTransactionMode transactionMode) a System.ServiceModel.Channels.MsmqQueue.SendDtcTransacted (NativeMsmqMessage messaggio, MsmqTransactionMode transactionMode) a System.ServiceModel.Channels.MsmqQueue.Send (messaggio NativeMsmqMessage, MsmqTransactionMode transactionMode) a System.ServiceModel.MsmqIntegration.MsmqIntegrationOutputChannel.OnSend (Messaggio messaggio, timeout TimeSpan) su System.ServiceModel.Chann ...
Ho due VM, una per la macchina web (sharepoint) e una della macchina DB (dove sono archiviati tutti i contenuti dbs ecc.). Il server DB è un controller di dominio primario ed entrambe le macchine fanno parte dello stesso dominio. Ho creato un utente di dominio da utilizzare per il pool di applicazioni di SharePoint.
Stranamente, è possibile far sparire gli errori andando in una parte diversa della mia applicazione ed eseguendo quel codice (che aggiunge anche una voce nel msmq). Fatto ciò, tutto il resto dell'applicazione funziona normalmente.
Qualsiasi aiuto sarebbe incredibilmente apprezzato.
Nota: ho notato che l'errore aveva a che fare con l'utente anonimo (IUSR ...) in IIS per il sito di SharePoint. Ho modificato l'utente in modo che diventi un amministratore del dominio e l'errore non si verifica più. Quindi, ha a che fare con le autorizzazioni dell'utente IUSR .., ma non so cosa ...
Soluzione
O M G
Ok, quindi ho provato qualcosa, è stato un LUNGO colpo, ma ero al mio ingegno.
Ho eseguito il wrapping di tutto il codice che stava parlando con MSMQ (aggiungendo elementi alla coda) in esecuzione con privilegi elevati grazie, e ha funzionato !!!!
SPSecurity.RunWithElevatedPrivileges (delegato () { // MSMQCode qui });
Ora posso riavviare il server e fare le cose che in precedenza erano errate e funziona bene!
Altri suggerimenti
Prendi in considerazione l'esecuzione di script di riscaldamento al riavvio del server.
Concedi a tutti i permessi di lettura della directory bin in inetpub \ wss ecc.