Поставщик Google OpenID постоянно терпит неудачу в Azure

Я пытаюсь использовать Google OpenID с приложением MVC 4, размещенным в 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:UsersSimonDocumentsVisual Studio 2012ProjectsInternal UtilsWebsiteHelpersGoogleApps.cs:33
   Tools.Helpers.ExternalLoginResult.ExecuteResult(ControllerContext context) in c:UsersSimonDocumentsVisual Studio 2012ProjectsInternal UtilsWebsiteHelpersExternalLoginResult.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();
    }

Я не добавил Ничего лишнего в интернет.config, кроме параметров конфигурации прокси, рекомендованных в другом месте. Не вижу никакой разницы.

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

Я использую последние пакеты 4.2.2 из nuget.

1 ответов


таким образом, похоже, что увеличение таймаутов заставило его работать, как было предложено здесь. Я установил свои значения выше, как было предложено, но, очевидно, вы можете проверить наиболее подходящие значения.

Я также изменил мой код. Вы заметите, что выше класс содержит статическую переменную для ответившей стороны. Я изменил это, чтобы быть переменной экземпляра, поскольку я не видел причин использовать этот шаблон. Пример кода для DotNetOpenAuth не использует статические экземпляры для ответившей стороны класс тоже.

Если никто не может предложить, Почему иметь его в качестве статического может быть хорошей идеей, я оставлю его как есть.