发生了未处理的访问异常,msmq,Sharepoint错误

时间:2009-10-27 16:54:56

标签: sharepoint msmq access-denied event-receiver

我的服务器重新启动后出现问题。我在SharePoint中有一些功能,用于执行各种操作。他们做的一件事是将项目添加到几个不同的MSMQ队列中。服务器重新启动后,如果我尝试登录到SharePoint,然后转到我的自定义页面,然后单击该页面中的按钮(然后将创建msmq项目),我会立即转到显示该页面的页面以下内容:

该网站拒绝显示此网页 此错误(HTTP 403 Forbidden)表示Internet Explorer能够连接到该网站,但它没有查看该网页的权限

如果我深入了解事件日志,我会在应用程序中发现以下错误:

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时出现应用程序错误,错误=访问   被拒绝。 (HRESULT异常:0x80070005(E_ACCESSDENIED))   服务器堆栈跟踪:at   System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(字符串   nodeName,Guid resourceManagerIdentifier,IntPtr managedIdentifier,   布尔和放大器; nodeNameMatches,UInt32& whereaboutsSize,CoTaskMemHandle&   whereaboutsBuffer,IResourceManagerShim& resourceManagerShim)at   System.Transactions.Oletx.DtcTransactionManager.Initialize()at   System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory()   在   System.Transactions.Oletx.OletxTransactionManager.CreateTransaction(TransactionOptions   物业)   System.Transactions.TransactionStatePromoted.EnterState(InternalTransaction   tx)...
      ...在System.Transactions.EnlistableStates.Promote(InternalTransaction tx)
  在System.Transactions.Transaction.Promote()at   System.Transactions.TransactionInterop.ConvertToOletxTransaction(交易   交易)   System.Transactions.TransactionInterop.GetDtcTransaction(交易   交易)   System.ServiceModel.Channels.MsmqQueue.GetNativeTransaction(MsmqTransactionMode   transactionMode)at   System.ServiceModel.Channels.MsmqQueue.SendDtcTransacted(NativeMsmqMessage   消息,MsmqTransactionMode transactionMode)at   System.ServiceModel.Channels.MsmqQueue.Send(NativeMsmqMessage消息,   MsmqTransactionMode transactionMode)at   System.ServiceModel.MsmqIntegration.MsmqIntegrationOutputChannel.OnSend(消息   消息,TimeSpan超时)在System.ServiceModel.Chann ...

我有两个虚拟机,一个用于Web(共享点)计算机,另一个用于DB计算机(存储所有内容dbs等)。数据库服务器是主域控制器,两台计算机都属于同一个域。我已经创建了一个用于SharePoint应用程序池的域用户。

奇怪的是,可以通过转到我的应用程序的不同部分并运行该代码(这也会在msmq中添加一个条目)来消除错误。完成后,应用程序的其余部分将正常工作。

任何帮助都会令人难以置信。

注意:我注意到该错误与IIS中的SharePoint站点的匿名用户(IUSR ...)有关。我将该用户更改为域管理员用户,并且不再发生错误。所以,这与IUSR ..用户的权限有关,但我不知道是什么......

3 个答案:

答案 0 :(得分:1)

O M G

好的,所以我尝试了一些东西,这是一个很长的镜头,但我在我的智慧结束。

我将所有与MSMQ交谈的代码(在队列中添加项目)包含在升级后的privelages中,并且有效!!!!

SPSecurity.RunWithElevatedPrivileges(委托() { // MSMQCode在这里 });

现在,我可以重新启动服务器,并执行以前发生错误的内容,并且工作正常!

答案 1 :(得分:0)

考虑在服务器重启时运行预热脚本。

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

答案 2 :(得分:0)

给每个人读取inetpub \ wss等下的bin目录的权限。