2010-06-25 32 views
2

我是Silverlight和WCF服务的新手。我试图编写一个可以操纵对象服务器端的客户端应用程序。已启用SilverLight Wcf服务 - 无法跟踪会话

我的问题是,我的每一个的Silverlight客户端向服务呼叫时,它进入到构造系统

public SilverLightEnabledWcfService() 
     { 
     } 

在下面的例子中,我只是想增加或减少一个数量取决于活动客户端。

我该如何正确地做到这一点?

我也尝试创建一个常规的ASP.net客户端页面,我得到了相同的结果,即服务器不记得会话。所以我不认为问题出现在我的客户端,但如果有帮助,我仍然很乐意发布代码。

谢谢!

using System; 
using System.Linq; 
using System.Runtime.Serialization; 
using System.ServiceModel; 
using System.ServiceModel.Activation; 
using Count.Library; 

namespace Count.WebApp 
{ 
    [ServiceContract(Namespace = "")] 
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
    public class SilverLightEnabledWcfService 
    { 
     public SilverLightEnabledWcfService() 
     { 
     } 

     private Class1 _class1; 

     [OperationContract] 
     public int Add1() 
     { 
      if (_class1 == null) 
       _class1 = new Class1(0); 
      _class1.Add1(); 
      return Value; 
     } 

     [OperationContract] 
     public int Remove1() 
     { 
      if (_class1 == null) 
       _class1 = new Class1(0); 
      _class1.Remove1(); 
      return Value; 
     } 

     public int Value 
     { 
      get 
      { 
       return _class1.Count; 
      } 
     } 
    } 
} 
+1

你在使用结合?你的服务器和客户端配置如何?会话只支持选择几个绑定 - 最值得注意的是,默认的basicHttpBinding没有**不支持会话... – 2010-06-25 05:17:13

回答

1

会话需要wsHttpBinding,但这不受Silverlight支持。有变通办法,但:

http://web-snippets.blogspot.com/2008_08_01_archive.html

http://forums.silverlight.net/forums/t/14130.aspx

+0

感谢您的链接。这些让我怀疑我是否有正确的方法。我可能不需要使用会话,我不确定。基本上在Silverlight客户端中,我想调用服务器上的WCF服务,该服务将保留此特定客户端调用的以前实例化的对象。我想从客户端调用存储在服务器上的同一对象上的连续方法。我需要使用会话来做到这一点吗? 谢谢! – bmanu 2010-06-27 18:52:00

+0

我不会在SilverLightEnabledWcfService类中存储任何状态。让它将任何服务请求转发给同一个应用程序域中的对象或第二个wcf服务,并尝试使用FormsAuthentication方法为该对象或第二个服务提供满足该请求所需的用户信息。 – Ozan 2010-06-27 19:43:48