2010-11-30 10 views
3

私は、ドメインでWCFサービスの束を持っている:(HTTPS経由標準MS 1、)のWindows Phone 7 - WCFサービスに送信されていないクッキー

  • AuthenticationService
  • AppService(HTTP)

通常、認証サービスを呼び出し、Cookieが返されます。デスクトップアプリケーションでは、Cookieをデタッチして、APIの肉を公開するAppServiceへの新しいサービスコールがあればそれを再接続します。

ブラウザのSilverlightは、ドメインへのすべての呼び出しでCookieを自動的に付加します。私は電話が同じようにすることを期待した。

これはありません。

ヘッダーへのアクセスは電話機ではサポートされていないため、手動での操作はできません。私はそのMSが電話であるべきであると思っていたので、それがあるかどうか疑問に思うクッキーは同じドメインまたは何かでHTTPSエンドポイントに再接続されるだけです...

Help !!

これは、電話機が他の主要なメジャーな有用な設定をサポートしていないため、トラブルシューティングの悪夢です。自己署名証明書を無視します。

おかげで、

ルーク

** UPDATE **

私はヘッダコレクションのAddメソッドが欠落しているにもかかわらず、ことを指摘しなければならないCookieContainerを使用する方法を次てる間にSilverlightでは、インデクサーを使用してヘッダーを追加することもできます。

http://cisforcoder.wordpress.com/2010/12/01/how-to-implement-basic-http-authentication-in-wcf-on-windows-phone-7/

** UPDATE 2 **

CookieContainerはレックスの解答ごとに設定することができますを参照してください。 References.cs EndInvokeでWCFクライアントからスローされたArgumentNullExceptionを調査し続けています。私のサーバーには、通話の受信の兆候は見られません。

スタック上の2つのキーのコールは、以下のとおりです。

System.Net.Browser.HttpWebRequestHelper.ParseHeaders

そして

FINAL UPDATE

をMS.Internal.InternalWebRequest.OnDownloadFailed

ArgumentNullExceptionが呼び出されたときにスローされたようです自己署名証明書を持つサーバーを取得します。

しかし、エミュレータ/ SDKには奇妙なことがあります。 SSLを持たないすべてのサーバーと、発行された証明書を持つサーバーを含め、すべてのサーバーに対してこの例外が発生しました。

ローカルの再起動によってのみ解決された問題もありました。だから私は自分の問題は正しいコードを持っていることの結果だと思うが、SDKの他の問題のために間違っていると思っている。

WP7 WCFスタックに由来する例外、特にEndpointNotFoundExceptionとArgumentNullExceptionを信頼できないようにし、サニティチェックとして完全なフレームワークテストクライアントアプリケーションを使用することを除いて、どのようなアドバイスを行うべきかわかりません。デスクトップSLで

ルーク

+0

注目すべきことに、CookieContainerのHTTPOnly Cookieは表示されず、電話アプリのアクティベーション/セッション間で永続化することはできません。 –

+0

ちょっとしたことですが、エミュレータがクッキーを送信していないようだが、デバイスがそうしているところに6ヶ月間問題がありました。これは7.1 SDKの問題です。 –

答えて

1

、私はクライアントHTTPスタックでサービスプロキシ間のクッキーコンテナを共有することによってそれを行います。 WP7でこれを試してみませんでしたが、これを確認することができます。

まず、クライアント側のバインド構成(通常はServiceReferences.ClientConfig)に< httpCookieContainer />を挿入する必要があります。

コードでは、クライアントのhttpスタックに切り替えます。

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 
WebRequest.RegisterPrefix("https://", WebRequestCreator.ClientHttp); 

次に、CookieContainerインスタンスを作成し、それをすべてのサービスプロキシに割り当てる必要があります。

var cc = new CookieContainer(); 
var service1 = new ServiceReference1.MyService1Client { CookieContainer = cc }; 
var service2 = new ServiceReference2.MyService2Client { CookieContainer = cc }; 

ここで、CookieコンテナがCookieを受信すると、すべてのWebサービスでCookieコンテナを再利用します。そのクッキーに正しいパス設定が付いていることを確認してください。

+0

ありがとうLex - 私はこのアイデアを実験しましたが、CookieContainerにアクセスするとスローされます。CookieContainerを設定できません。バインディングにHttpCookieContainerBindingElementが含まれていることを確認してください。 –

+0

@ Parserは私のxml要素を飲み込んだ。投稿を編集させてください –

+0

私はそのWebRequest.RegisterPrefixコードを使用しませんでした。私が確認しておきます、チェックします。 –

関連する問題