[英]Asp.net session in wcf via channel factory in silverlight
我的問題是WCF無法在Silverlight調用之間保持會話。 每個呼叫都是一個不同的asp.net會話。 我知道它可以工作,因為我有一個在Silverlight中使用自動生成的WCF代理的示例,但是我使用Channel Factory。 我在網上搜索了所有內容,但可悲的是,大多數人似乎都在使用代理生成器。
我的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>
Silverlight綁定配置
<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有問題嗎? 我是否應該啟用它來承載Cookie?
basicHttpBinding綁定不提供任何WCF會話功能。 但是您仍然可以稍稍注意使ASP.NET會話處理正常工作。 檢查您是否已完成以下操作...
1,在您的服務界面中添加了以下屬性...
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
2,在您的web.config中添加以下內容...
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
3,在您的web.config中添加以下內容...
<sessionState mode="InProc" cookieless="false" regenerateExpiredSessionId="true" timeout="20"/>
Silverlight可以正常使用ASP.NET會話,該ASP.NET會話使用上述cookie方法來傳遞會話信息。 使它與無cookie會話一起工作將很棘手,因為它需要將信息作為URL的一部分傳回。
有關更多信息,我已找到此博客條目 。
感謝您的回復,菲爾,但我已經完成了您之前提到的工作。 這當然是必需的,但這不是我的問題。
我需要將Cookie容器添加到生成的代理中。 我已經在一個網頁上找到了答案,但現在找不到。
無論如何,如果有人好奇,這里是代碼。
var service = new ChannelFactory<IDatabaseService>("BlueGazelle.DatabaseService.Code.DatabaseService").CreateChannel();
var cookieManager = ((IChannel)service).GetProperty<IHttpCookieContainerManager>();
if (cookieManager.CookieContainer == null)
{
cookieManager.CookieContainer = new CookieContainer();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.