【问题标题】:How can I configure session in my WCF service called from windows phone 7?如何在从 windows phone 7 调用的 WCF 服务中配置会话?
【发布时间】:2011-05-20 15:14:43
【问题描述】:

我有一个从 WP7 调用的服务。我知道 WP7(Silverlight) 直到今天才支持 basicHtptBinding,不幸的是它不支持 Session 所以我不能在这个服务中使用 InstanceContextMode.PerSession 和 SessionMode.Required。但是我在服务器上有一些数据,我需要在会话的基础上保留它。我有什么选择?

【问题讨论】:

  • 如果您向我们提供一个您认为需要通过 Session 持久化的数据的示例,我们可以提出更好的建议。
  • 有一种登录方法,它实例化 3rd 方 SDK 的对象并将我登录到该 3rd 方系统。还有其他方法也使用登录方法中实例化的 3rd 方对象。但是,由于没有保留任何内容,因此我无法使用在登录方法中创建的该对象。哦,是的!我不能直接从 wp7 拨打这个电话给第 3 方。所以请不要建议这个选项。
  • 第3方SDK登录方式需要多长时间?

标签: c# silverlight wcf windows-phone-7


【解决方案1】:

我不熟悉 Windows Phone 7 编程,但如果它允许您使用 basicHTTPContextBinding,它是 basicHTTPBinding 的一种,那么我建议您研究一下 Durable Service。

持久服务允许您将会话状态保存在一些持久性存储中,并通过令牌在每个新方法调用中访问它。

看看这个link的博客文章。

即使您无法创建正式的 Durable 服务,您也可以创建具有类似想法的东西 - 传递令牌(登录名/用户 ID 或其他东西)并从持久存储中读取状态 - 数据库表或其他东西。

如果您成功了,请告诉我们!

【讨论】:

  • 您的解决方案看起来很有希望。我会在星期一试一试,然后告诉你。谢谢!
【解决方案2】:

您可以在服务器端的静态类中使用 ConcurrentDictionary 以使用用户身份作为键来缓存对象。如果您需要很长时间的缓存,您需要将服务托管在 Windows 服务中,以避免应用程序池循环等问题。

【讨论】:

  • 如何从该词典中删除这些项目?我应该在什么基础上删除?还是让字典继续增长?
  • 取决于你有多少用户。如果它不是很多,那么是的,你可以让它继续增长。如果它很多,那么您需要将对象包装在一个类中,该类还包含一个 DateTime 指示您何时将元素放入缓存中。然后你可以在一个计时器上运行一个后台任务,上面写着:如果元素已经在那里存在 x 时间,则从字典中删除。
  • 也可以在缓存中使用 ASP.NET 构建:msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx
猜你喜欢
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多