2012-05-31 79 views
0

我正尝试通过最新的Google Data API SDK更新Google日历。Google日历身份验证错误

我的示例代码如下:

  string sGoogleUserName = "[email protected]"; 
      string sGooglePassword = "xxxxxxxx"; 
      Uri oCalendarUri = new Uri("http://www.google.com/calendar/feeds/" + 
             sGoogleUserName + "/private/full"); 

      //Initialize Calendar Service 
      CalendarService oCalendarService = new CalendarService("CalendarSampleApp"); 
      oCalendarService.setUserCredentials(sGoogleUserName, sGooglePassword); 

      //Use Proxy 
      GDataRequestFactory oRequestFactory = 
       (GDataRequestFactory)oCalendarService.RequestFactory; 
      WebProxy oWebProxy = new WebProxy(
       WebRequest.DefaultWebProxy.GetProxy(oCalendarUri)); 
      oWebProxy.Credentials = CredentialCache.DefaultCredentials; 
      oWebProxy.UseDefaultCredentials = true; 
      oRequestFactory.Proxy = oWebProxy; 


      //Set Event Entry 
      EventEntry oEventEntry = new EventEntry(); 
      oEventEntry.Title.Text = "Test Calendar Entry From .Net"; 
      oEventEntry.Content.Content = 
       "Hurrah!!! I posted my first Google calendar event through .Net"; 

      //Set Event Location 
      Where oEventLocation = new Where(); 
      oEventLocation.ValueString = "New Zealand"; 
      oEventEntry.Locations.Add(oEventLocation); 

      //Set Event Time 
      When oEventTime = new When(new DateTime(2011, 5, 31, 9, 0, 0), 
       new DateTime(2011, 5, 31, 9, 0, 0).AddHours(1)); 
      oEventEntry.Times.Add(oEventTime); 

      //Set Additional Properties 
      ExtendedProperty oExtendedProperty = new ExtendedProperty(); 
      oExtendedProperty.Name = "SynchronizationID"; 
      oExtendedProperty.Value = Guid.NewGuid().ToString(); 
      oEventEntry.ExtensionElements.Add(oExtendedProperty); 

      // CalendarService oCalendarService = GAuthenticate(); 

      //Prevents This Error 
      //{"The remote server returned an error: (417) Expectation failed."} 
      System.Net.ServicePointManager.Expect100Continue = false; 

      //Save Event 
      oCalendarService.Insert(oCalendarUri, oEventEntry); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 

这里是下面的错误

Google.GData.Client.GDataRequestException:在 Google.GData 405:认证 执行请求返回意外的结果.Client.Utilities.getAuthException(TokenCollection标记, HttpWebResponse响应)在 Google.GData.Client.Utilities.QueryClientLoginToken(GDataCredentials GC,弦乐服务名,字符串的applicationName,布尔fUseKeepAlive, IWebProxy访问代理服务器,乌里clientLoginHandler)在 Google.GData.Client.GDataGAuthRequest.QueryAuthToken(在 谷歌在Google.GData.Client.GDataGAuthRequest.EnsureCredentials GDataCredentials GC)() .GData.Client.GDataRequest.EnsureWebRequest()at Google.GData.Client.GDataGAuthRequest.EnsureWebRequest()at Google.GData.Client.GDataGAuthRequest.CopyRequestData()at Google.GData.Client.GDataGAuthRequest.Execute(Int32 retryCounter )at Google.GData.Client.GDataGAuthRequest.Execute()at Google.GData.Client.Service.EntrySend(Uri feedUri,AtomBase baseEntry, GDataRequestType type,AsyncSendData data)at Google.GData.Client.Service.Insert(URI feedUri,AtomEntry newEntry, AsyncSendData数据)在Google.GData.Client.Service.Insert [TEntry](URI feedUri,TEntry条目)

回答

0

再试与版本3.5.12。也许你背后的代理,需要设置 适当的代理设置第一

+0

最新版本是2.1 [链接](http://code.google.com/p/google-gdata/downloads/list) 如何设置正确的代理设置? – sevoug

3

我今天打这一个,使用相同的示例代码,你做了,我发现在网上的某个地方。

通过一些测试,我发现如果我设置了一个HTTP代理(我使用的是Charles,但其他常见的代理是Fiddler等),但如果我没有使用代理尝试的话,它就会工作。

在一种预感,我注释掉的东西下//使用代理这样的,它的工作:

string googleUserName = "[email protected]"; 
string googlePassword = "winnie"; 
Uri calendarUri = GetGoogleCalendarUri(); 

//Initialize Calendar Service 
CalendarService service = new CalendarService("AIConsole"); 
service.setUserCredentials(googleUserName, googlePassword); 

//Use Proxy - NOTE COMMENTED THIS PART OUT 
//GDataRequestFactory requestFactory = (GDataRequestFactory)service.RequestFactory; 
//WebProxy proxy = new WebProxy(WebRequest.DefaultWebProxy.GetProxy(calendarUri)); 
//proxy.Credentials = CredentialCache.DefaultCredentials; 
//proxy.UseDefaultCredentials = true; 
//requestFactory.Proxy = proxy; 

之后,它的工作就像一个魅力。