3

AzureWebサイトにデプロイされたSignalRでこの例外が発生しました。デバッグ環境では正常に動作します。SignalR 1.0.1で、.NETMVCとWebApiを使用しています

The data protection operation was unsuccessful. This may have been caused by not having the user profile loaded for the current thread's user context, which may be the case when the thread is impersonating.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Security.Cryptography.CryptographicException: The data protection operation was unsuccessful. This may have been caused by not having the user profile loaded for the current thread's user context, which may be the case when the thread is impersonating.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 
[CryptographicException: The data protection operation was unsuccessful. This may have     been caused by not having the user profile loaded for the current thread's user context, which may be the case when the thread is impersonating.]
Microsoft.Owin.Host.SystemWeb.<>c__DisplayClass1.<GetRethrowWithNoStackLossDelegate>b__0(Exception ex) +27
Microsoft.Owin.Host.SystemWeb.Utils.RethrowWithOriginalStack(Exception ex) +15
Microsoft.Owin.Host.SystemWeb.CallContextAsyncResult.End(IAsyncResult result) +47
Microsoft.Owin.Host.SystemWeb.OwinHttpHandler.EndProcessRequest(IAsyncResult result) +7
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9629708
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

何か考えはありますか?ありがとう

4

4 に答える 4

5

このページにアクセスする他の人にとっても、同じ問題が発生しましたが、解決策ははるかに簡単でした。上記のコメントで述べたように、受け入れられた答えは悪いです。また、SignalRはデフォルトでを使用することにも言及していMachineKeyDataProtectorますIProtectedDataMapHubs両方とも、依存関係リゾルバーに登録MapConnectionする関数を呼び出します。InitializeProtectedDataMachineKeyDataProtector

私の問題は、SignalRルートをマッピングしてから、依存関係リゾルバーを構成していたことでした。

RouteTable.Routes.MapConnection<SomeEndpoint>("SomeEndpoint", "SomeEndpointUrl");
GlobalHost.DependencyResolver = 
                     new StructureMapDependencyResolver(ObjectFactory.Container);

したがって、基本的に、MapConnection-> InitializeProtectedDataによって行われるIProtectedDataリゾルバーの登録は、カスタムリゾルバーを登録したときに吹き飛ばされていました。簡単な修正。接続をマッピングする前にリゾルバーを設定します。

GlobalHost.DependencyResolver = 
                     new StructureMapDependencyResolver(ObjectFactory.Container);
RouteTable.Routes.MapConnection<SomeEndpoint>("SomeEndpoint", "SomeEndpointUrl");
于 2013-09-13T00:23:53.380 に答える
2

これは、次のコードを使用してこの同じ問題を解決することを可能にした単一の投稿です。IProtectedDataのインスタンスを登録することについてのdfowlersの言及により、私はここで定義を検索して見つけることができました。

この問題は、Visual Studio開発サーバーを使用しているときではなく、ライブに移行したときに発生したことに注意してください。IProtectedDataを実装する方法がわからないので、この投稿を見つけてよかったです。たぶん、ドキュメントにはもっと深いものがあります。

これが100%正しい解決策であるかどうかはわかりませんが、これは私にとってはうまくいきました。IProtectedDataを実装するクラスを作成し、それをNinjectに登録しました。

クラス:

using Microsoft.AspNet.SignalR.Infrastructure;

namespace Fwr.DataTeamUploader.Logic
{
    public class ProtectedData : IProtectedData
    {

        // Obviously this isn't doing much to protect the data,
        // assume custom encryption required here

        // To reiterate, no encryption is VERY^4 BAD, see comments.

        public string Protect(string data, string purpose)
        {
            return data;
        }

        public string Unprotect(string protectedValue, string purpose)
        {
            return protectedValue;
        }
    }
}

Ninject登録:

/// <summary>
/// Load your modules or register your services here
/// </summary>
/// <param name="kernel">The kernel.</param>
private static void RegisterServices(IKernel kernel)
{
    ...

    kernel.Bind<IProtectedData>().To<ProtectedData>();

    ...
于 2013-04-03T13:44:26.243 に答える
0

この場合、パッケージの拡張メソッドMapsHubs()を使用できるようになりました。Microsoft.AspNet.SignalR.SystemWeb

MachineKeyProtectedDataデフォルトの実装の代わりに使用されます。

于 2013-09-03T19:08:48.127 に答える
-1

AzureWebサイトがcertificates/cryptoAPIと通信できるとは思いません。Azure Management APIを呼び出そうとすると、同様の問題が発生します。サイトが実行されているユーザーコンテキストには、実行するための十分な権限がないようです。

于 2013-03-13T19:06:55.653 に答える