Question

I have an issue that is occurring after my server reboots. I have some features in SharePoint, for doing various things. One thing they do is add items into a couple of different MSMQ queues. Immediately after a server reboot, if I try to log in to SharePoint and I go to a custom page of mine, and click on a button within that page (which would then create the msmq item) I get taken to a page that displays the following:

The website declined to show this webpage This error (HTTP 403 Forbidden) means that Internet Explorer was able to connect to the website, but it does not have permission to view the webpage

If I dig in to the Event Logs I find the following errors in Application:

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 

ALSO, if I dig in to the SharePoint logs, I find the following errors:

Application error when access /my/site/url/MyPage.aspx, Error=Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) Server stack trace: at System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(String nodeName, Guid resourceManagerIdentifier, IntPtr managedIdentifier, Boolean& nodeNameMatches, UInt32& whereaboutsSize, CoTaskMemHandle& whereaboutsBuffer, IResourceManagerShim& resourceManagerShim) at System.Transactions.Oletx.DtcTransactionManager.Initialize() at System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory() at System.Transactions.Oletx.OletxTransactionManager.CreateTransaction(TransactionOptions properties) at System.Transactions.TransactionStatePromoted.EnterState(InternalTransaction tx) ...
...at System.Transactions.EnlistableStates.Promote(InternalTransaction tx)
at System.Transactions.Transaction.Promote() at System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transaction transaction) at System.Transactions.TransactionInterop.GetDtcTransaction(Transaction transaction) at System.ServiceModel.Channels.MsmqQueue.GetNativeTransaction(MsmqTransactionMode transactionMode) at System.ServiceModel.Channels.MsmqQueue.SendDtcTransacted(NativeMsmqMessage message, MsmqTransactionMode transactionMode) at System.ServiceModel.Channels.MsmqQueue.Send(NativeMsmqMessage message, MsmqTransactionMode transactionMode) at System.ServiceModel.MsmqIntegration.MsmqIntegrationOutputChannel.OnSend(Message message, TimeSpan timeout) at System.ServiceModel.Chann...

I have two VMs, one for the web (sharepoint) machine, and one of the DB machine (where all the content dbs etc are stored). The DB server is a primary domain controller, and both machines are part of the same domain. I've created a domain user to use for the SharePoint application pool.

Strangely, it is possible to make the errors go away by going to a different part of my application and running that code (which also adds an entry into the msmq). Once that is done, then all of the rest of the application works as normal.

Any help would be incredibly appreciated.

Note: I noticed that the error had something to do with the anonymous user (IUSR...) in IIS for the SharePoint site. I changed that user to be a domain administrator user, and the error no longer happens. So, it's something to do with the permissions of the IUSR.. user, but I don't know what...

Was it helpful?

Solution

O M G

Ok, so I tried something, it was a LONG shot, but I was at my wits end.

I wrapped all of the code that was talking to the MSMQ (adding items to the queue) in the run with elevated privelages thang, and it worked!!!!

SPSecurity.RunWithElevatedPrivileges(delegate() { //MSMQCode here });

Now, I can reboot the server, and do the stuff that was erroring before, and it works fine!

OTHER TIPS

Consider running warm up scripts upon server reboot.

http://blogs.msdn.com/joelo/archive/2006/08/13/697044.aspx

Give everyone read permission to the bin directory under inetpub\wss etc..

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top