2012-04-02 8 views
0

私はOpenIDプロバイダとOpenID依存パーティを実装しました。どちらもロードバランシング環境に設定されています。DotNetOpenAuthでAuthenticationRequestをシリアライズ

私は適切なDBストアを実装しましたが、セッションにはProviderEndpointの依存関係が残っています。

ProviderEndpointを使用せずに、メモリ内セッションに依存しない他のメカニズムを何とかして保存したいと思います。たとえば、Cookieまたはクエリー文字列に要求を格納します。

私が遭遇した問題は、IAuthenticationRequestまたはIRequestをシリアル化できないことです。 下位クラスは内部クラスなので、これらにキャストすることもできません。

誰もがセッションを使用せずにこれを実装する方法に関する指針を持っていますか?

おかげ

答えて

1

IAuthenticationRequestIRequestを実装するクラスは確かに[Serializable]です。あなたは、必要なすべてのサーバー間で共有ストレージ用にシリアル化することができます。コントロールを永続化するためのコントロールの方法は、厳密には単純なサイトでは便利です。あなたはそれを使う必要はありません。例えば

IAuthenticationRequest request; // you obtain this from DNOA 
IFormatter formatter = new BinaryFormatter(); 
MemoryStream ms = new MemoryStream(); 
formatter.Serialize(ms, request); 
ms.Position = 0; 
request = (IAuthenticationRequest)formatter.Deserialize(ms); 
+0

あなたは私のこれらのインターフェイスをシリアル化する方法についてのヒントをお願いできますか? クラス自体は内部的なものであるため、逆シリアル化するときに呼び出されるコンストラクタはありません。 – Oxmane

+0

バイナリフォーマッタはパブリッククラスを必要としません。私はサンプルを含める答えを強調します。 –

+0

これは素晴らしいです。今問題は、私が戻ってきた文字列(base64エンコーディング後)がクッキーのために大きくなることです。 私は唯一のオプションはいくつかのDBに格納することだと思いますか? – Oxmane

関連する問題