我还没有WCF的背景,所以到目前为止我所做的只是基于研究。我想要做的就是这个。
我使用三个项目创建了一个解决方案。两个Windows窗体应用程序和一个WCF服务应用程序。
在表单1中,有一个文本框和一个按钮。如果单击“更新”按钮,则单击“刷新”按钮时,文本框中的任何值都应反映在另一个表单中。以下是我到目前为止所做的事情:
ISimulatorService.cs
[ServiceContract]
public interface ISimulatorService
{
[OperationContract]
void SetSerialNumber(int value);
[OperationContract]
int GetSerialNumber();
}
ISimulatorService.svc
public class Service1 : ISimulatorService
{
public int serial;
public string modelName;
public void SetSerialNumber(int value)
{
this.serial = value;
}
public int GetSerialNumber()
{
return serial;
}
}
Form1
中的更新按钮 private void btn_update_Click(object sender, EventArgs e)
{
ServiceReference.SimulatorServiceClient client = new ServiceReference.SimulatorServiceClient();
try
{
client.Open();
client.SetSerialNumber(Convert.ToInt32(txt_serialnumber.Text));
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (client.State == System.ServiceModel.CommunicationState.Opened)
{
//MessageBox.Show("Communication Closed");
client.Close();
}
}
}
表单2
中的刷新按钮private void btn_update_Click(object sender, EventArgs e)
{
ServiceReference.SimulatorServiceClient client = new ServiceReference.SimulatorServiceClient();
txt_serialnumber.Text = client.GetSerialNumber().ToString();
}
返回值始终为零。我应该实现什么来存储值,以便我可以以其他形式检索该值?
答案 0 :(得分:0)
您的serial
变量不会在通话之间持续存在。当您致电SetSerialNumber
然后关闭时,该服务将首次激活,当您拨打GetSerialNumber
然后再次关闭时,该服务将再次激活。简而言之,它将是两个不同的实例,因此您需要一些东西来保持调用之间的数据。你有两种情况:
您不需要将数据保留在磁盘上,然后使用MemoryCache之类的内容。这是一个简短的片段:
public class Service1 : ISimulatorService
{
private ObjectCache _cache = MemoryCache.Default;
private CacheItemPolicy policy = new CacheItemPolicy();
public void SetSerialNumber(int value)
{
_cache.Set("serial", value, policy);
}
public int GetSerialNumber()
{
(int)_chache["serial"];
}
}
您需要将数据保存在磁盘上,然后use a database。