0

我正在编写一个需要“双重”用户界面的程序:第一个是经典的 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 的方法中是完全不可见的。有办法避免这种行为吗?

4

1 回答 1

0

当您prova1从类本身调用时,您正在 Windows 窗体中的程序上下文中工作。这将使您可以使用MessageBox静态方法,并且您可以获得Show显示弹出窗口的方法。

但是,当您从 WP7 进行服务器调用时,您正在从完全其他的应用程序上下文中访问该类,因此即使MethodBox.Show它工作了,它也会在服务器上显示消息框,而不是在电话上。但是 WCF 不准备类以在应用程序上下文中运行,并且整个Show方法都失败了。

因此,您将涉及 WP7 和托管 WCF 服务的服务器/客户端方案与 Windows 窗体应用程序的单一程序上下文混淆了。

于 2012-10-12T12:00:12.800 回答