我正在编写一个需要“双重”用户界面的程序:第一个是经典的 windows 窗体,第二个是通过 windows phone 设备。我正在使用 WCF(异步,此设备的唯一可能性),但我的行为对我来说似乎很奇怪。好吧,我对 WCF 非常了解,所以也许我做错了什么。我写了一个更简单的 WCF 服务器代码版本,所以这里的问题更清楚:
[ServiceContract]
public partial class Form2 : Form
{
int x = 0;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
prova1();
}
private void button2_Click(object sender, EventArgs e)
{
x++;
}
[OperationContract]
void prova1()
{
MessageBox.Show("x = " + x.ToString());
}
如果我单击按钮 2,然后单击按钮 1,我显然会得到一个带有“x = 1”的弹出框。但是,如果我通过 Windows Phone 应用程序调用 prova1(),我总是会得到“x = 0”。这是一个非常普遍的行为:如果我在 WCF 服务器的代码中实例化一个对象并尝试在 WCF 服务器的通过外部设备调用的方法中使用它,我会得到一个空引用异常。似乎我在 WCF 服务器代码中所做的一切在称为槽 WCF 的方法中是完全不可见的。有办法避免这种行为吗?