1

私は WCF を初めて使用し、datamember の状態を保持することになっている DataContract を含むサービスを作成しましたが、getdata を呼び出した後、返される状態は null です。ただし、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));

data の値が null で、理由がわかりません..どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

1

BasicHttpBinding はそのインスタンス モードをサポートしていません: http://msdn.microsoft.com/en-us/library/ms730879.aspx。セッションがサポートされていない場合、最初の呼び出しで指定したオブジェクト インスタンスは失われます

于 2012-07-12T13:12:21.843 に答える
0

サービスがインスタンスごとに設定されている場合、呼び出しごとに、サーバー上でサービス クラスの異なるインスタンスが取得されるため、返されるアイテムはもちろん null になります。

于 2012-07-12T13:14:07.783 に答える