Asp.net

Google OpenId:未找到 OpenID 端點(間歇性)

  • March 17, 2014

通常使用 Google OpenId 可以正常工作,每天數千次,然後它會開始間歇性出錯並超時一個小時左右(一些請求會驗證但不是全部)。重複驗證最終會起作用。

錯誤消息是:

Event code: 200000 
Event message: No OpenID endpoint found. : https://www.google.com/accounts/o8/id 

Sequence contains no elements

添加 log4net 產生:

DotNetOpenAuth.Yadis:
Error while performing discovery on: "https://www.google.com/accounts/o8/id": 
DotNetOpenAuth.Messaging.ProtocolException:
Error occurred while sending a direct message or getting the response. 
---> System.Net.WebException: The operation has timed out     
 at System.Net.HttpWebRequest.GetResponse()    
 at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse
    (HttpWebRequest request, DirectWebRequestOptions options) 
    in  c:\...\Dot...Core\Messaging\StandardWebRequestHandler.cs:line 127    
--- End of inner exception stack trace ---     
 at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse
    (HttpWebRequest request, DirectWebRequestOptions options) 
    in c:\...\Dot...Core\Messaging\StandardWebRequestHandler.cs:line 175
 at DotNetOpenAuth.Messaging.UntrustedWebRequestHandler.GetResponse
    (HttpWebRequest request, DirectWebRequestOptions options)
    in c:\...\Dot...Core\Messaging\UntrustedWebRequestHandler.cs:line 250
 at DotNetOpenAuth.Yadis.Yadis.Request
    (IDirectWebRequestHandler requestHandler,
      Uri uri, Boolean requireSsl, String[] acceptTypes) 
    in c:\...\Dot...OpenId\Yadis\Yadis.cs:line 172
 at DotNetOpenAuth.Yadis.Yadis.Discover
    (IDirectWebRequestHandler requestHandler, UriIdentifier uri, Boolean requireSsl)
    in c:\...\DotNetOpenAuth.OpenId\Yadis\Yadis.cs:line 63
 at DotNetOpenAuth.OpenId.UriDiscoveryService.Discover
    (Identifier identifier, IDirectWebRequestHandler requestHandler, 
          Boolean& abortDiscoveryChain) 
    in c:\...\DotNet...OpenId\OpenId\UriDiscoveryService.cs:line 51
 at DotNetOpenAuth.OpenId.IdentifierDiscoveryServices.Discover
    (Identifier identifier) 
    in c:\...\Dot...OpenId\OpenId\IdentifierDiscoveryServices.cs:line 58
 at DotNetOpenAuth.OpenId.RelyingParty.AuthenticationRequest.Create
    (Identifier userSuppliedIdentifier, OpenIdRelyingParty relyingParty,
      Realm realm, Uri returnToUrl, Boolean createNewAssociationsAsNeeded) 
    in ...OpenId.RelyingParty\OpenId\RelyingParty\AuthenticationRequest.cs:line 364

DotNetOpenAuth.Http WebException: 
Timeout from https://www.google.com/accounts/o8/id, no response available.

有任何想法嗎?

聽起來您需要修復網路延遲。Google似乎不太可能成為這裡的瓶頸。

您可能還希望增加 HTTP 超時以降低失敗率。完整的選項集可在此處獲得。具體來說,您可能正在尋找:

<untrustedWebRequest
           timeout="00:00:10"
           readWriteTimeout="00:00:01.500" />

查看配置連結以查看其所在的上下文。

我們最近遇到了同樣的問題。在閱讀了幾個不同的場景並完成了跟踪步驟後,我終於得出結論,正如我在其他地方看到的那樣,這個問題可能是由 DNS 伺服器問題引起的。在我們的案例中,我們有一台已使用超過 18 個月的生產伺服器,最近才開始遇到與上述相同的問題,但在這台伺服器上非常一致。另一個網路上的另一台伺服器和我們的開發電腦沒有任何問題。

長話短說,我將生產伺服器的主 DNS 更改為 Google 的公共 DNS 8.8.8.8,它立即開始工作。在此之前,我已經手動刷新了生產伺服器上的 DNS 記憶體(沒有正面結果),因此我相信 DNS 伺服器(由我們的託管中心提供)有一個錯誤的記憶體條目,最終導致了問題。

希望這可以幫助遇到這種情況的其他人。

引用自:https://stackoverflow.com/questions/10062322