2013-04-04 9 views
7

Azure &でホストされているMVC 4アプリケーションでGoogle OpenIDを使用しようとしても失敗します。しかし、すぐにはありません。私がアプリケーションをデプロイすると、すべての時間が完璧に動作します。私はその後、通常は1日、いくつかの時間のためにそれを残しますが、&を試してからもう一度試してください&それは毎回失敗します。その後、更新してホームページに戻り、ログインページ&に戻ります。Google OpenIDプロバイダが一貫してAzureで失敗する

エラーは次のとおりです。要求をトリガー

[InvalidOperationException: Sequence contains no elements] 
    System.Linq.Enumerable.First(IEnumerable`1 source) +498 
    DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) +106 

[ProtocolException: No OpenID endpoint found.] 
    DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) +303 
    Tools.Helpers.GoogleApps.Login(Uri returnUrl) in c:\Users\Simon\Documents\Visual Studio 2012\Projects\Internal Utils\Website\Helpers\GoogleApps.cs:33 
    Tools.Helpers.ExternalLoginResult.ExecuteResult(ControllerContext context) in c:\Users\Simon\Documents\Visual Studio 2012\Projects\Internal Utils\Website\Helpers\ExternalLoginResult.cs:25 
    System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +33 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +613 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +263 
    System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +230 
    System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +28 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20 
    System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +20 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375 

私のコードは次のとおりです。

//constructor 
    static GoogleApps() 
    { 
     var googleAppDiscovery = new HostMetaDiscoveryService 
     { 
      UseGoogleHostedHostMeta = true, 
     }; 

     RelyingParty = new OpenIdRelyingParty(); 
     RelyingParty.DiscoveryServices.Insert(0, googleAppDiscovery); 
    } 

    public void Login(Uri returnUrl) 
    { 
     var realm = new Realm(returnUrl.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped)); 

     var request = RelyingParty.CreateRequest("my.domain.name", realm, returnUrl); 

     var fetch = new FetchRequest(); 
     fetch.Attributes.Add(new AttributeRequest(WellKnownAttributes.Contact.Email, true)); 
     fetch.Attributes.Add(new AttributeRequest(WellKnownAttributes.Name.First, true)); 
     fetch.Attributes.Add(new AttributeRequest(WellKnownAttributes.Name.Last, true)); 
     request.AddExtension(fetch); 

     request.RedirectToProvider(); 
    } 

私は他の場所でお勧めのプロキシ設定の設定以外のweb.configファイルに余分なものを、追加していません。何の違いもないようです。

<defaultProxy enabled="true"> 
    <proxy autoDetect="True" usesystemdefault="True" /> 
</defaultProxy> 

最新の4.2.2パッケージを使用しています。

+0

プロキシ設定を推奨するリソースを指すことはできますか? – astaykov

+0

実際はここにあります。 http://stackoverflow.com/questions/10062322/google-openid-no-openid-endpoint-found-intermittent?rq=1 –

+0

私はまだこの作業を行うことはできません。今私を怒らせる –

答えて

3

したがって、タイムアウトを増やすことによって、動作するように見えます(here)。私は提案どおりに私の値を高く設定しますが、明らかに最も適切な値をテストすることができます。

私のコードも変更されました。上記のクラスには返信側の静的変数が含まれています。このパターンを使用する理由がないので、これをインスタンス変数に変更しました。 DotNetOpenAuthのサンプルコードでは、Replying Partyクラスの静的インスタンスも使用されません。

静的にするのが良いアイデアかもしれないと誰にも示唆できない限り、私はそれをそのまま残します。

関連する問題