我正在使用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/过滤 和端点排序不会影响列表。
我正在使用默认配置设置。我猜我通过增加超时设置来解决超时错误,但是我不确定如何解决名称解析错误。
答案 0 :(得分:1)
从例外情况来看,这看起来不像是一个特定于DotNetOpenAuth的问题。看起来你的DNS服务器很慢或者你的连接不好。我会调查那个问题。是的,增加超时将帮助你解决问题。