1

我是 WCF 的新手,我创建了一个包含 DataContract 的服务,该服务应该保持数据成员状态,但是在我调用 getdata 后,我返回的状态为空。虽然当我使用 tcp 时,值是保留的。

 [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));

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

谢谢

4

2 回答 2

1

BasicHttpBinding 不支持该实例模式:http: //msdn.microsoft.com/en-us/library/ms730879.aspx。如果没有会话支持,您在第一次调用时提供的对象实例就会丢失

于 2012-07-12T13:12:21.843 回答
0

如果您的服务设置为每个实例,那么对于每个调用,您将在服务器上获得服务类的不同实例,因此您返回的项目当然将为空。

于 2012-07-12T13:14:07.783 回答