1

私はプログラムでyahooとgoogleとのopenidハンドシェイクを行っています。googleは問題ありませんが、yahooはnullポインタをスローします。

スタックトレース:

   System.NullReferenceException: Object reference not set to an instance of an object.
   at DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy.PolicyResponse.DotNetOpenAuth.Messaging.IMessageWithEvents.OnReceiving() in c:\Users\andarno\git\dotnetopenid\src\DotNetOpenAuth\OpenId\Extensions\ProviderAuthenticationPolicy\PolicyResponse.cs:line 189
   at DotNetOpenAuth.OpenId.ChannelElements.ExtensionsBindingElement.<GetExtensions>d__a.MoveNext() in c:\Users\andarno\git\dotnetopenid\src\DotNetOpenAuth\OpenId\ChannelElements\ExtensionsBindingElement.cs:line 209
   at DotNetOpenAuth.OpenId.ChannelElements.ExtensionsBindingElement.ProcessIncomingMessage(IProtocolMessage message) in c:\Users\andarno\git\dotnetopenid\src\DotNetOpenAuth\OpenId\ChannelElements\ExtensionsBindingElement.cs:line 151
   at DotNetOpenAuth.Messaging.Channel.ProcessIncomingMessage(IProtocolMessage message) in c:\Users\andarno\git\dotnetopenid\src\DotNetOpenAuth\Messaging\Channel.cs:line 906
   at DotNetOpenAuth.OpenId.ChannelElements.OpenIdChannel.ProcessIncomingMessage(IProtocolMessage message) in c:\Users\andarno\git\dotnetopenid\src\DotNetOpenAuth\OpenId\ChannelElements\OpenIdChannel.cs:line 171
   at DotNetOpenAuth.Messaging.Channel.ReadFromRequest(HttpRequestInfo httpRequest) in c:\Users\andarno\git\dotnetopenid\src\DotNetOpenAuth\Messaging\Channel.cs:line 377
   at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.GetResponse(HttpRequestInfo httpRequestInfo) in c:\Users\andarno\git\dotnetopenid\src\DotNetOpenAuth\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 489
   at DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.GetResponse() in c:\Users\andarno\git\dotnetopenid\src\DotNetOpenAuth\OpenId\RelyingParty\OpenIdRelyingParty.cs:line 478
   at Friendsell.UI.Controllers.Auth.OpenIdReturnController.DoProcessRequest(IExecutionContext context) in C:\Development\Friendsell\Friendsell.UI\Controllers\Auth\OpenIdController.cs:line 41
   at Bistro.Controllers.AbstractController.ProcessRequest(HttpContextBase context, IContext requestContext) in C:\Development\Bistro\Bistro.Core\Controllers\AbstractController.cs:line 41
   at Bistro.Controllers.MethodDispatcher.InvokeMethodDirect(HttpContextBase context, String requestPoint, IContext requestContext) in C:\Development\Bistro\Bistro.Core\Controllers\MethodDispatcher.cs:line 221
   at Bistro.Controllers.MethodDispatcher.InvokeMethod(HttpContextBase context, String requestPoint, IContext requestContext) in C:\Development\Bistro\Bistro.Core\Controllers\MethodDispatcher.cs:line 119

呼び出しコード:

        var openid = new OpenIdRelyingParty();
        IAuthenticationRequest request = openid.CreateRequest(
            Identifier.Parse(
                GetEndpoint()),
                new Realm(realm),
                new Uri(returnUri));

        // Require some additional data
        request.AddExtension(new ClaimsRequest
        {
            Email = DemandLevel.Require,
            FullName = DemandLevel.Request,
            PostalCode = DemandLevel.Request
        });

        try
        {
            request.RedirectToProvider();
        } catch (ThreadAbortException)
        {
        }

受信コード(および例外のソース)

        var openId = new OpenIdRelyingParty();
        var response = openId.GetResponse(); <-- exception happens here

何が得られますか?奇妙なことに、yahooのピースが最近機能していて、ライブラリのバージョンを変更していません...

4

2 に答える 2

1

yahoo側の問題のようです。

http://groups.google.com/group/dotnetopenid/browse_thread/thread/9e92ff8a7f72c56b/96b0803f1f9337a6?show_docid=96b0803f1f9337a6

3.3.1はそれを処理します。

于 2009-12-08T05:29:16.587 に答える
0

CreateRequestを見たいと思います。また、ThreadAbortExceptionをキャッチすることはできず、自己伝播します。したがって、2回キャッチする必要があります。

于 2009-12-08T04:35:03.483 に答える