0

我的服务器重新启动后出现了一个问题。我在 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 时出现应用程序错误,Error=Access is denied。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))服务器堆栈跟踪:在 System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(字符串 nodeName,Guid resourceManagerIdentifier,IntPtr managedIdentifier,Boolean& nodeNameMatches,UInt32& whereaboutsSize,CoTaskMemHandle& whereaboutsBuffer,IResourceTransactionshim&resourceManagerShim)在系统。 .Oletx.DtcTransactionManager.Initialize() 在 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() 在 System.Transactions.TransactionInterop.ConvertToOletxTransaction(Transaction transaction) 在 System.Transactions.TransactionInterop.GetDtcTransaction(Transaction transaction) 在 System.ServiceModel.Channels.MsmqQueue.GetNativeTransaction(MsmqTransactionMode transactionMode) 在 System .ServiceModel.Channels.MsmqQueue.SendDtcTransacted(NativeMsmqMessage 消息,MsmqTransactionMode transactionMode) 在 System.ServiceModel.Channels.MsmqQueue.Send(NativeMsmqMessage 消息,MsmqTransactionMode transactionMode) 在 System.ServiceModel.MsmqIntegration.MsmqIntegrationOutputChannel.OnSend(Message 消息,TimeSpan 超时) 在System.ServiceModel.Chann...

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

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

任何帮助将不胜感激。

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

4

3 回答 3

1

我的天啊

好的,所以我尝试了一些东西,这是一个远射,但我束手无策。

我将所有与 MSMQ 对话的代码(将项目添加到队列中)包装在运行中,并使用提升的权限,它工作了!!!!!!

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

现在,我可以重新启动服务器,然后做之前出错的事情,它工作正常!

于 2009-10-29T12:41:34.370 回答
0

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

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

于 2009-10-28T18:53:19.887 回答
0

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

于 2009-12-03T13:31:22.313 回答