2010-12-30 6 views
1

私の問題は、WCFがSilverlight呼び出し間でセッションを維持しないということです。すべての呼び出しは、別のasp.netセッションです。 SilverlightでWCF用の自動生成プロキシを使用する例がありますが、私はChannel Factoryを使用していますので、動作することがわかります。私はネット全体を検索しましたが、悲しげにほとんどの人がプロキシジェネレータを使用しているようです。Silverlightのチャネルファクトリを経由したwcfのAsp.net sesion問題

私のweb.configファイル

<bindings> 
    <basicHttpBinding> 
    <binding name="databaseServiceBasicHttp" allowCookies="true" /> 
    </basicHttpBinding> 
</bindings> 

<services> 
    <service name="databaseService" 
      behaviorConfiguration="Debug"> 
    <endpoint address="" 
     binding="basicHttpBinding" bindingConfiguration="databaseServiceBasicHttp" contract="BlueGazelle.DatabaseServiceContracts.IDatabaseService" /> 
    </service> 

</services> 

シルバー結合コンフィグ

<configuration> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding > 
     <binding name="databaseService" enableHttpCookieContainer="true"/> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:53392/Services/DatabaseService.svc" 
       binding="basicHttpBinding" bindingConfiguration="databaseService" contract="BlueGazelle.DatabaseServiceContracts.IDatabaseService" 
       name="BlueGazelle.DatabaseService.Code.DatabaseService"/> 
    </client> 
    </system.serviceModel> 
</configuration> 

チャンネルを作成する方法

var service = new ChannelFactory<IDatabaseService>("BlueGazelle.DatabaseService.Code.DatabaseService").CreateChannel(); 

ChannelFactoryに問題がありますか?クッキーを運ぶために何かを有効にする必要がありますか?

答えて

0

basicHttpBindingバインディングは、WCFセッション機能を提供しません。しかし、少しでも気をつけて作業するために、ASP.NETセッション処理を取得することはできます。 ...あなたは次のことを行っている

1を確認し、

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

2 ...あなたのサービス・インターフェースに次の属性が追加されました、あなたのweb.configファイル内、以下を追加します...

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
あなたのweb.configファイル内

3は、以下を追加...

<sessionState mode="InProc" cookieless="false" regenerateExpiredSessionId="true" timeout="20"/> 

Silverlightは何の問題ワーキングウィットを持っていませんhセッション情報を渡す上記のクッキーメソッドを使用するASP.NETセッション。 cookielessセッションで作業するのは、URLの一部として情報を返す必要があるため、難しいでしょう。

詳細については、これが見つかりましたblog entry

0

あなたのお返事ありがとうございますPhil、私は先に言及したものをやったことがあります。それはもちろん必要ですが、それは私の場合には問題ではありませんでした。

生成したプロキシにCookieコンテナを追加する必要がありました。私は1つのウェブページ上でその答えを見つけましたが、今それを見つけることはできません。

誰かが好奇心が強い場合は、とにかくここにコードがあります。

var service = new ChannelFactory<IDatabaseService>("BlueGazelle.DatabaseService.Code.DatabaseService").CreateChannel(); 
     var cookieManager = ((IChannel)service).GetProperty<IHttpCookieContainerManager>(); 
     if (cookieManager.CookieContainer == null) 
     { 
      cookieManager.CookieContainer = new CookieContainer(); 
     } 
関連する問題