0

從SharePoint 2010升級到2013期間,我面臨以下問題。從SharePoint 2013應用程序調用Reporting Services API頁面

我有一個應用程序頁面,通過它可以進行SSRS API調用以獲取報表的所有訂閱。

ReportingService2010 rs = new ReportingService2010(); 
rs.Credentials = System.Net.CredentialCache.DefaultCredentials; 
rs.Url = serverUrl + "/_vti_bin/ReportServer/ReportService2010.asmx"; 
try 
{ 
    return rs.ListSubscriptions(reportUrl); 
} 
catch (SoapException ex) 
{ } 

這段代碼的執行過程中我得到堆棧跟蹤一個UnauthorizedAccessException

System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)), StackTrace: at Microsoft.SharePoint.SPWeb.GetObjectForUrl(String strUrl, Guid& listId)  at Microsoft.ReportingServices.SharePoint.Objects.RSSPImpWeb.GetObject(String strUrl)  at Microsoft.ReportingServices.SharePoint.Server.Utility.GetSPItemMetaDataAndContent(ItemSpecifier itemSpecifier, UserContext userContext, Boolean returnContent, Boolean wrapFileNotFoundOnOpenWeb, Byte[]& content)  at Microsoft.ReportingServices.SharePoint.Server.Utility.GetSharePointItem(ExternalItemPath objectName, UserContext userContext)  at Microsoft.ReportingServices.SharePoint.Server.SharePointDBInterface.GetItemTypeAndId(ExternalItemPath objectName, ItemType& type, Guid& id)  at Micros... 0f35fa9b-1c67-c0b8-f616-d4cac96f7408 
...oft.ReportingServices.SharePoint.Server.SharePointDBInterface.ObjectExists(ExternalItemPath objectName, ItemType& type, Guid& id, Int32& snapshotLimit, Byte[]& secDesc, Int32& execOptions, Guid& snapshotId, Guid& linkID)  at Microsoft.ReportingServices.Library.GetItemTypeAction.PerformActionNow()  at Microsoft.ReportingServices.Library.RSSoapAction`1.Execute()  at Microsoft.ReportingServices.Library.ReportingService2010Impl.GetItemType(String itemPath, Boolean fromStore, String parameterName, Boolean allowEditSessionSyntax)  at Microsoft.ReportingServices.Library.ReportingService2010Impl.ListSubscriptions(String ItemPathOrSiteURL, String Owner, SubscriptionImpl[]& SubscriptionItems)  at Microsoft.ReportingServices.ServiceRuntime.ReportServiceManagement.<>c__DisplayClass5b.<L... 0f35fa9b-1c67-c0b8-f616-d4cac96f7408 
...istSubscriptions>b__5a()  at Microsoft.ReportingServices.ServiceRuntime.ReportServiceBase.ExecuteWithContext[TResult](Func`1 action)  at Microsoft.ReportingServices.ServiceRuntime.ReportServiceManagement.ListSubscriptions(String ItemPathOrSiteURL)  at SyncInvokeListSubscriptions(Object , Object[] , Object[])  at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)  at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)  at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)  at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)  at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationCon... 0f35fa9b-1c67-c0b8-f616-d4cac96f7408 
...textSet)  at System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(RequestContext request, Boolean cleanThread, OperationContext currentOperationContext)  at System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(RequestContext request, OperationContext currentOperationContext)  at System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(IAsyncResult result)  at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)  at System.Runtime.AsyncResult.Complete(Boolean completedSynchronously)  at System.ServiceModel.Channels.SecurityChannelListener`1.ReceiveItemAndVerifySecurityAsyncResult`2.InnerTryReceiveCompletedCallback(IAsyncResult result)  at System.Runtime.Fx.AsyncThunk.UnhandledExceptionFrame(IAsyncResult result)  at Sy... 0f35fa9b-1c67-c0b8-f616-d4cac96f7408 
...stem.Runtime.AsyncResult.Complete(Boolean completedSynchronously)  at System.Runtime.InputQueue`1.AsyncQueueReader.Set(Item item)  at System.Runtime.InputQueue`1.EnqueueAndDispatch(Item item, Boolean canDispatchOnThisThread)  at System.Runtime.InputQueue`1.EnqueueAndDispatch(T item, Action dequeuedCallback, Boolean canDispatchOnThisThread)  at System.ServiceModel.Channels.SingletonChannelAcceptor`3.Enqueue(QueueItemType item, Action dequeuedCallback, Boolean canDispatchOnThisThread)  at System.ServiceModel.Channels.HttpPipeline.EnqueueMessageAsyncResult.CompleteParseAndEnqueue(IAsyncResult result)  at System.ServiceModel.Channels.HttpPipeline.EnqueueMessageAsyncResult.HandleParseIncomingMessage(IAsyncResult result)  at System.Runtime.AsyncResult.SyncContinue(IAsyncResu... 0f35fa9b-1c67-c0b8-f616-d4cac96f7408 
...lt result)  at System.ServiceModel.Channels.HttpPipeline.EmptyHttpPipeline.BeginProcessInboundRequest(ReplyChannelAcceptor replyChannelAcceptor, Action dequeuedCallback, AsyncCallback callback, Object state)  at System.ServiceModel.Channels.HttpChannelListener`1.HttpContextReceivedAsyncResult`1.ProcessHttpContextAsync()  at System.ServiceModel.Channels.HttpChannelListener`1.BeginHttpContextReceived(HttpRequestContext context, Action acceptorCallback, AsyncCallback callback, Object state)  at System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult result)  at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest()  at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()  at Syst... 0f35fa9b-1c67-c0b8-f616-d4cac96f7408 
...em.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequest(Object state)  at System.ServiceModel.AspNetPartialTrustHelpers.PartialTrustInvoke(ContextCallback callback, Object state)  at System.ServiceModel.Activation.HostedHttpRequestAsyncResult.OnBeginRequestWithFlow(Object state)  at System.Runtime.IOThreadScheduler.ScheduledOverlapped.IOCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)  at System.Runtime.Fx.IOCompletionThunk.UnhandledExceptionFrame(UInt32 error, UInt32 bytesRead, NativeOverlapped* nativeOverlapped)  at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP) 0f35fa9b-1c67-c0b8-f616-d4cac96f7408 
Throwing Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: , Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: The permissions granted to user 'NT AUTHORITY\ANONYMOUS LOGON' are insufficient for performing this operation.; 0f35fa9b-1c67-c0b8-f616-d4cac96f7408 

所描述的行爲是兩個SP 2010和SP 2013年在SharePoint 2010中更改了ASP.NET模擬帳戶相似默認爲託管Web應用程序具有足夠權限的身份將解決該問題。
不幸的是,這樣做,對SP 2013農場導致類型的SoapException

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> The security token request cannot be completed. at System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClientMessage message, WebResponse response, Stream responseStream, Boolean asyncCall)  at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters) 

我試圖改變匿名認證的身份,但得到了同樣的異常的另一個異常。我做了大量的調試並閱讀了大量的日誌,並且我沒有找到解決這個問題的線索。
任何人都可以提出任何建議嗎?

以下是一些可能有所幫助的附加信息:
Web應用程序爲FBA配置並使用LDAP提供程序進行身份驗證。

謝謝。

+0

看來您需要調用/_vti_bin/authentication.asmx上的Login方法來獲取身份驗證Cookie,然後將該cookie添加到rs連接。看看這個線程http://social.msdn.microsoft.com/Forums/en-US/sharepointdevelopmentprevious/thread/230de0e1-0d88-4c54-93a4-f166899873be/ – user1578107

+0

非常感謝!它爲我工作。你能否補充一下,作爲答案,我可以接受它? – gev

+0

我很高興它的工作! – user1578107

回答

相關問題