DotNetOpenAuth与Yahoo,AOL导致Timeout或NameResolutionFailure

时间:2011-07-28 20:28:46

标签: oauth openid dotnetopenauth

我正在使用DotNetOpenAuth 3.5.0.10357,当尝试授权使用Yahoo作为提供程序(https://me.yahoo.com)经常时,OpenIdRelyingParty.CreateRequest会抛出ProtocolException(标识符)。如果在第一次尝试后立即进行另一次尝试,则工作流将按预期运行。我根据this博客文章添加了一个XRDS文档,当雅虎提供商响应时,它似乎检测到该文件,因为它不再显示该验证消息。除了具有相同问题的AOL之外,所有其他提供商始终正常工作。我已启用日志记录,似乎有两个不同的原因,一个是超时,另一个是NameResolutionFailure,都来自WebException。

以下是导致NameResolutionFailure的实例的日志:

  

HTTP GET https://me.yahoo.com/ WebException NameResolutionFailure来自   https://me.yahoo.com/,没有回应。执行时出错   发现于:“https://me.yahoo.com/”:   DotNetOpenAuth.Messaging.ProtocolException:发生错误   发送直接消息或获得响应。 --->   System.Net.WebException:无法解析远程名称:   在System.Net.HttpWebRequest.GetResponse()的'me.yahoo.com'   DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest的   请求,DirectWebRequestOptions选项)---内部结束   异常堆栈跟踪--- at   DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest的   请求,DirectWebRequestOptions选项)   DotNetOpenAuth.Messaging.UntrustedWebRequestHandler.GetResponse(HttpWebRequest的   请求,DirectWebRequestOptions选项)   DotNetOpenAuth.Yadis.Yadis.Request(IDirectWebRequestHandler   requestHandler,Uri uri,Boolean requireSsl,String [] acceptTypes)
  在DotNetOpenAuth.Yadis.Yadis.Discover(IDirectWebRequestHandler   requestHandler,UriIdentifier uri,Boolean requireSsl)at   DotNetOpenAuth.OpenId.UriDiscoveryService.Discover(标识符   identifier,IDirectWebRequestHandler requestHandler,Boolean&   abortDiscoveryChain)at   DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.Discover(标识符   标识符)   DotNetOpenAuth.OpenId.RelyingParty.AuthenticationRequest.Create(标识符   userSuppliedIdentifier,OpenIdRelyingParty relyingParty,Realm境界,   Uri returnToUrl,Boolean createNewAssociationsAsNeeded)执行   发现用户提供的标识符:https://me.yahoo.com/过滤   和端点排序不会影响列表。

以下是超时的日志:

  

HTTP GET https://me.yahoo.com/ WebException超时自   https://me.yahoo.com/,没有回应。执行时出错   发现于:“https://me.yahoo.com/”:   DotNetOpenAuth.Messaging.ProtocolException:发生错误   发送直接消息或获得响应。 --->   System.Net.WebException:操作已超时   System.Net.HttpWebRequest.GetResponse()at   DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest的   请求,DirectWebRequestOptions选项)---内部结束   异常堆栈跟踪--- at   DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest的   请求,DirectWebRequestOptions选项)   DotNetOpenAuth.Messaging.UntrustedWebRequestHandler.GetResponse(HttpWebRequest的   请求,DirectWebRequestOptions选项)   DotNetOpenAuth.Yadis.Yadis.Request(IDirectWebRequestHandler   requestHandler,Uri uri,Boolean requireSsl,String [] acceptTypes)
  在DotNetOpenAuth.Yadis.Yadis.Discover(IDirectWebRequestHandler   requestHandler,UriIdentifier uri,Boolean requireSsl)at   DotNetOpenAuth.OpenId.UriDiscoveryService.Discover(标识符   identifier,IDirectWebRequestHandler requestHandler,Boolean&   abortDiscoveryChain)at   DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.Discover(标识符   标识符)   DotNetOpenAuth.OpenId.RelyingParty.AuthenticationRequest.Create(标识符   userSuppliedIdentifier,OpenIdRelyingParty relyingParty,Realm境界,   Uri returnToUrl,Boolean createNewAssociationsAsNeeded)执行   发现用户提供的标识符:https://me.yahoo.com/过滤   和端点排序不会影响列表。

我正在使用默认配置设置。我猜我通过增加超时设置来解决超时错误,但是我不确定如何解决名称解析错误。

1 个答案:

答案 0 :(得分:1)

从例外情况来看,这看起来不像是一个特定于DotNetOpenAuth的问题。看起来你的DNS服务器很慢或者你的连接不好。我会调查那个问题。是的,增加超时将帮助你解决问题。