2013-04-04 2 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 
요청을 트리거

내 코드는 다음과 같습니다 다른 곳 추천 프록시 설정 설정 이외의 내가의 Web.config에 추가 아무것도 추가하지 않은

//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(); 
    } 

, . 어떤 차이도없는 것처럼 보입니다.

<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 클래스에 정적 인스턴스를 사용하지 않습니다.

누군가 정적으로 생각하는 것이 좋은 생각 일 수 있다고 제안 할 수 없다면, 그대로 두겠습니다.

관련 문제