Asp.net mvc 3 在Azure网站上使用GData API的InvalidCredentialsException;操作在本地调试中运行良好

Asp.net mvc 3 在Azure网站上使用GData API的InvalidCredentialsException;操作在本地调试中运行良好,asp.net-mvc-3,asp.net-mvc-4,azure,google-api,gdata,Asp.net Mvc 3,Asp.net Mvc 4,Azure,Google Api,Gdata,我有一个MVC4应用程序,它试图使用C#gdataAPI()访问Google文档 当我从VisualStudio以调试模式在本地运行站点时,该应用程序按预期工作,但当我在Azure网站上发布和运行时,它始终失败,并出现InvalidCredentialsException 我已经创建了一个最小的MVC4应用程序来重新调整这种行为。它部署到一个azure网站,该网站除了帮助我调试此问题外,什么都不做。我将失败操作的本质塞进About()控制器只是为了得到一个复制——这不是我实际项目的设置方式。还要

我有一个MVC4应用程序,它试图使用C#gdataAPI()访问Google文档

当我从VisualStudio以调试模式在本地运行站点时,该应用程序按预期工作,但当我在Azure网站上发布和运行时,它始终失败,并出现InvalidCredentialsException

我已经创建了一个最小的MVC4应用程序来重新调整这种行为。它部署到一个azure网站,该网站除了帮助我调试此问题外,什么都不做。我将失败操作的本质塞进About()控制器只是为了得到一个复制——这不是我实际项目的设置方式。还要注意的是,当我去年一月第一次写这个网站的时候,这个功能就已经运行了。我不知道在这期间发生了什么变化使它停止工作。我知道我可以在MVC3或MVC4中重新编写此问题

About()控制器当前为:

  public ActionResult About()
    {
 string username = "<omitted>";
 string password = "<omitted>";
 string appname = "<omitted>";

 var count = 0;            

 var query = new SpreadsheetQuery();
 var gDocsService = new DocumentsService(appname);
 var gDocsRequestSettings = new RequestSettings(appname, username, password);
 var gDocsRequest = new DocumentsRequest(gDocsRequestSettings);
 var feed = gDocsRequest.GetSpreadsheets();
 foreach (Document entry in feed.Entries)
 {
     count++;
 }
 ViewBag.Message = count.ToString();
 return View();}
public ActionResult About()
{
字符串username=“”;
字符串密码=”;
字符串appname=“”;
var计数=0;
var query=新的电子表格查询();
var gDocsService=新文档服务(appname);
var gDocsRequestSettings=新请求设置(appname、用户名、密码);
var gDocsRequest=新文档请求(gDocsRequestSettings);
var feed=gDocsRequest.GetSpreadsheets();
foreach(feed.Entries中的文档条目)
{
计数++;
}
ViewBag.Message=count.ToString();
返回视图();}
电子表格查询、DocumentsService、RequestSettings和DocumentsRequest都是GData库提供的类

EXPECT>>无论消息显示在何处,计数都应显示在“关于”视图中。 实际>>这在本地调试中按预期工作,因此我知道凭据实际上是有效的,但当我发布到azure时,我遇到了以下异常/堆栈跟踪:

[InvalidCredentialsException: Invalid credentials]
   Google.GData.Client.Utilities.QueryClientLoginToken(GDataCredentials gc, String serviceName, String applicationName, Boolean fUseKeepAlive, IWebProxy proxyServer, Uri clientLoginHandler) +886
   Google.GData.Client.GDataGAuthRequest.QueryAuthToken(GDataCredentials gc) +263
   Google.GData.Client.GDataGAuthRequest.EnsureCredentials() +40
   Google.GData.Client.GDataRequest.EnsureWebRequest() +1147
   Google.GData.Client.GDataGAuthRequest.EnsureWebRequest() +26
   Google.GData.Client.GDataRequest.Execute() +37
   Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter) +484
   Google.GData.Client.GDataGAuthRequest.Execute() +10
   Google.GData.Client.Service.Query(Uri queryUri, DateTime ifModifiedSince, String etag, Int64& contentLength) +190
   Google.GData.Client.Service.Query(FeedQuery feedQuery) +177
   Google.GData.Client.Feed`1.get_AtomFeed() +35
   Google.GData.Client.<get_Entries>d__0.MoveNext() +69
   Mvc4ApplicationPublishTest.Controllers.HomeController.About() +287
   lambda_method(Closure , ControllerBase , Object[] ) +62
   System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +182
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +27
   System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28
   System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32
   System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +58
   System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +225
   System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34
   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +24
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +99
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +50
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +55
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +31
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9631764
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
[无效凭证例外:无效凭证]
Google.GData.Client.Utilities.QueryClientLoginToken(GDataCredentials gc、字符串serviceName、字符串applicationName、布尔fUseKeepAlive、IWebProxy proxyServer、Uri clientLoginHandler)+886
Google.GData.Client.gdataAuthRequest.QueryAuthToken(GDataCredentials gc)+263
Google.GData.Client.gdataAuthRequest.EnsureRecredentials()+40
Google.GData.Client.GDataRequest.EnsureWebRequest()+1147
Google.GData.Client.gdataAuthRequest.EnsureWebRequest()+26
Google.GData.Client.GDataRequest.Execute()+37
Google.GData.Client.gdataAuthRequest.Execute(Int32 retryCounter)+484
Google.GData.Client.gdataAuthRequest.Execute()+10
Google.GData.Client.Service.Query(uriqueryuri、DateTime-ifModifiedSince、String-etag、Int64和contentLength)+190
Google.GData.Client.Service.Query(FeedQuery)+177
Google.GData.Client.Feed`1.get_AtomFeed()+35
Google.GData.Client.d_u0.MoveNext()+69
Mvc4ApplicationPublishTest.Controllers.HomeController.About()+287
lambda_方法(闭包、控制器基、对象[])+62
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase控制器,对象[]参数)+14
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext ControllerContext,IDictionary`2参数)+182
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext ControllerContext,ActionDescriptor ActionDescriptor,IDictionary`2参数)+27
System.Web.Mvc.Async.c__显示类42.b__41()+28
System.Web.Mvc.Async.c_uuuudisplayClass8`1.b_uuuu7(IAsyncResult)+10
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+50
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)+32
System.Web.Mvc.Async.c__显示类39.b__33()+58
System.Web.Mvc.Async.c__显示类4f.b_49()+225
System.Web.Mvc.Async.c__显示类37.b__36(IAsyncResult asyncResult)+10
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+50
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)+34
System.Web.Mvc.Async.c__DisplayClass2a.b__20()+24
System.Web.Mvc.Async.c__显示类25.b__22(IAsyncResult asyncResult)+99
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+50
System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult)+27
System.Web.Mvc.c__;u displayClassId.b__u18(IAsyncResult asyncResult)+14
System.Web.Mvc.Async.c__显示类4.b__3(IAsyncResult ar)+23
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+55
System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)+39
System.Web.Mvc.Async.c__显示类4.b__3(IAsyncResult ar)+23
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+55
System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult)+29
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult)+10
System.Web.Mvc.c__;u DisplayClass8.b__;u 3(IAsyncResult asyncResult)+25
System.Web.Mvc.Async.c__显示类4.b__3(IAsyncResult ar)+23
System.Web.Mvc.Async.WrappedAsyncResult`1.End()+55
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+31
System.Web.Mvc.MvcHandler.System.Web.IHTTPassynchandler.EndProcessRequest(IAsyncResult结果)+9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+9631764
System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)+155
另一个可能相关的注意事项是:最近我第一次尝试从azure运行应用程序时,谷歌给我发了一封电子邮件,说由于请求的可疑性质,该应用程序被阻止。当我第一次开发这个网站时,它从来没有这样做过。我(通过他们的UI)指出该应用程序是合法的,但它可能仍然不信任azure,并且以某种方式阻止登录。。。我不知道如何证明/反驳这个理论,如果是这样的话,我也不知道如何解决它

只是为了确保我