0

認証資格情報を HTTP ヘッダーで渡す必要がある WCF データ サービスを呼び出す .NET アプリを作成しています。そのヘッダーを DataServiceContext.SendingRequest イベント ハンドラーに設定しています。その後、サービスは Cookie で認証トークンを返します。クライアントは、後続の呼び出しでこの Cookie を提供する必要があります。SendingRequest イベントで Cookie を設定できますが、そもそも Cookie を取得するために応答をフックする方法を見つけることができませんでした。(DataServiceContext.ResponseReceived イベントがないのはなぜですか?) 誰でも (1) HttpWebResponse.Cookies コレクションを読み取れるように応答をフックする方法、または (2) WCF Data Service クライアントの配管を構成する方法を教えてもらえますか?クッキーを自動的に処理するには?

洞察や指示をありがとう!

デイブ

4

2 に答える 2

1

イベント ハンドラを使用してこれを行う方法が思いつきません。ただし、OperationResponse を介してアクセスできます。たとえば、Execute を実行してクエリを呼び出すと、OperationResponse (http://msdn.microsoft.com/en-us/library/system.data.services.client.operationresponse.aspx) から派生したインスタンスが返されます。これにより、応答ヘッダーが公開されます。これは、SaveChanges などにも当てはまります。

于 2012-08-02T15:45:04.673 に答える
0

どこで Cookie 値にアクセスする必要があるかは完全には明らかではありませんが、サービスのコンストラクターでイベント ハンドラーを接続することにより、処理パイプラインにフックできるはずです。

public ScratchService()
{
    ProcessingPipeline.ProcessingRequest += (source, e) =>
        {
            WebHeaderCollection headers = e.OperationContext.RequestHeaders;
            string acceptHeader = headers["CustomCookie"];
            if (acceptHeader == null || !acceptHeader.Equals("Passw0rd"))
            {
                throw new DataServiceException(403, "You had a bad cookie.");
            }
        };
}

ProcessingRequest は、パイプラインの残りの部分が呼び出される前に発生するため、認証を入れるのに妥当な場所である必要があります。明らかに、上記の例よりも少し安全なものが必要になるでしょう。:)

于 2012-08-01T22:16:59.550 に答える