2012-07-12 70 views
1

WCF客户端的数据我是新来的WCF和我创建了一个包含一个应该保持一个数据成员状态的DataContract服务,但之后我打电话的GetData我找回状态为空。虽然当我使用tcp的价值preseved。通过HTTP

[ServiceContract(Namespace = "http://KamiServiceHost.net/Go")] 
public interface IService1 
{ 
    [OperationContract] 
    DataItem GetData(); 

    [OperationContract] 
    void SaveData(DataItem item); 
} 

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 
public class Service1 : IService1 
{ 
    private DataItem _item1; 
    private DataItem item 
    { 
     get { return _item1; } 
     set { _item1 = value; } 
    } 

    public void SaveData(DataItem setitem) 
    { 
     item = setitem; 
    } 

    public DataItem GetData() 
    { 
     return item; 
    } 
} 

主机的App.config

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.web> 
    <compilation debug="true" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="Service.Service1" behaviorConfiguration="myServiceBehavior"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8000"/> 
      <add baseAddress="net.tcp://localhost:9000"/> 
      </baseAddresses> 
     </host> 
     <endpoint address="Service1" binding="basicHttpBinding" contract="Service.IService1"></endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="myServiceBehavior"> 
      <serviceMetadata httpGetEnabled="true"/> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 
</configuration> 

客户端代码:数据

client.Open(); 
     var dataItem = new DataItem() { Name = "my object", Number = 12 }; 
     client.SaveData(dataItem); 

     var data = client.GetData(); 

     Console.WriteLine(string.Format("Name: {0} Number: {1}", data.Name, data.Number)); 

值为空,我不知道为什么..任何帮助将不胜感激。

感谢

+2

Web服务和HTTP是无状态的。要么你需要在你的WCF服务启用会话,然后坚持会话项的值,并使用它,或者基于过滤器从数据库中检索项目,并返回 – Rajesh 2012-07-12 13:10:07

+0

@Rajesh谢谢...但我没有得到什么我应该做我为了使服务保存数据。你能否提供更详细的答案? – Pinga 2012-07-12 13:17:41

+0

你可以尝试从会话改变你的InstanceContext到instanceContext.Single。 – Rajesh 2012-07-12 13:59:07

回答

0

如果您的服务被设置为每个实例,然后为每个调用您将获得服务器上的服务类的不同实例,所以您返回的项目当然是空的。