2016-03-15 93 views
2

GoogleWebAuthorizationBroker.AuthorizeAsync()登臺失敗(養殖4.5 NET)登臺服務器,但在本地服務器上效果很好。我已經遵循幫助熱線上的每個代碼仍然無濟於事。GoogleWebAuthorizationBroker.AuthorizeAsync登臺服務器失敗

這裏是我的代碼:

String gpath = Server.MapPath("credentials/siteAPI.json"); 
UserCredential credential; 

string credPath = Server.MapPath("credentials"); 

using (var stream = new FileStream(gpath, FileMode.Open, FileAccess.Read)) 
{ 
     credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
        GoogleClientSecrets.Load(stream).Secrets, 
        new[] { CalendarService.Scope.Calendar },// 
        "[email protected]", 
        CancellationToken.None, 
        new AppDataFileStore(credPath) 
        ).Result; 
} 

而且我得到這個錯誤:

System.AggregateException: One or more errors occurred. 
---> System.ComponentModel.Win32Exception: Access is denied 
    at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task) 
    at Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext() in C:\Users\mdril\Documents\GitHub\google-api-dotnet-client\Src\GoogleApis.Auth.DotNet4\OAuth2\GoogleWebAuthorizationBroker.cs:line 59 
--- End of inner exception stack trace --- 
    at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) 
    at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) 
    at System.Threading.Tasks.Task`1.get_Result() 
    at z2.Page_Load(Object sender, EventArgs e) in e:\hostingspaces\cal1234\mysitecalendar.com\wwwroot\z2.aspx.cs:line 169 
---> (Inner Exception #0) System.ComponentModel.Win32Exception (0x80004005): Access is denied 
    at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
    at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task) 
    at Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext() in C:\Users\mdril\Documents\GitHub\google-api-dotnet-client\Src\GoogleApis.Auth.DotNet4\OAuth2\GoogleWebAuthorizationBroker.cs:line 59<--- 

根據其他筆記我看,這是由於在服務器端的權限問題,但有養殖網站,我沒有更多的權限控制。

有趣的是,當我從我的本地服務器複製其中一個批准的憑據到臨時服務器,然後一切正常!看起來,登臺服務器不能夠(或沒有權限)啓動屏幕來要求用戶進行令牌批准!

我該如何解決這個問題?

+0

是gpath從Google開發者處下載的文件嗎?如果是這樣,你是否直接將文件複製到你的項目中? – apramc

+0

如果您有,請確保您將生成行動更改爲「內容」和複製到輸出目錄到「複製總是」 – apramc

+0

是gpath是我從谷歌開發者控制檯下載的憑據,是的我複製到我的項目本地並上傳到我的登臺服務器也是如此。 –

回答

1

我花了幾個小時在同一個問題上,終於找到了一個帖子,幫助我解決了我的問題。 這篇文章是http://answers.flyppdevportal.com/MVC/Post/Thread/7819b19d-07d0-4584-a061-cace0688bfb2?category=sharepointdevelopment

在這個代碼爲我工作的開發服務器上,credPath(參見上面代碼中的這個變量)文件夾中創建了一個令牌響應文件。

我只是將這個文件複製到暫存服務器,它不適合我。 這解決了我的問題..

這可能是因爲該頁面的一個同意網頁顯示(在開發服務器工作)的用戶,並在該情況下,頁面無法顯示導致此錯誤。 再次,這是所有的理論,但上述解決方案已爲我工作。

+0

我已經完成了您以前的建議,並且所有工作都很好,但這不是正確的方法做到這一點。必須向臨時服務器中的任何用戶顯示同意頁面,否則此方法無用。我已經嘗試過每一個博客和訣竅提示,但沒有爲我工作,仍然有同樣的錯誤...任何其他想法? –

相關問題