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));
值为空,我不知道为什么..任何帮助将不胜感激。
感谢
Web服务和HTTP是无状态的。要么你需要在你的WCF服务启用会话,然后坚持会话项的值,并使用它,或者基于过滤器从数据库中检索项目,并返回 – Rajesh 2012-07-12 13:10:07
@Rajesh谢谢...但我没有得到什么我应该做我为了使服务保存数据。你能否提供更详细的答案? – Pinga 2012-07-12 13:17:41
你可以尝试从会话改变你的InstanceContext到instanceContext.Single。 – Rajesh 2012-07-12 13:59:07