0

私は「ダブル」UIを必要とするプログラムを書いています。最初のUIはクラシックなWindowsフォームで、2番目のUIはWindowsPhoneデバイスを介したものです。私は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());
    }

button2をクリックしてからbutton1をクリックすると、明らかに「x=1」のポップボックスが表示されます。しかし、Windows Phoneアプリからprova1()を呼び出すと、常に「x=0」になります。これは非常に一般的な動作です。WCFサーバーのコードでオブジェクトをインスタンス化し、外部デバイスを介して呼び出されるWCFサーバーのメソッドでオブジェクトを使用しようとすると、null参照例外が発生します。WCFサーバーコードで行うことはすべて、トラフWCFと呼ばれるメソッド内では完全に見えないようです。この動作を回避する方法はありますか?

4

1 に答える 1

0

クラス自体から呼び出す場合prova1は、Windowsフォーム内のプログラムコンテキストで作業しています。これにより、MessageBox静的メソッドを使用できるようになりShow、ポップアップを表示するメソッドを取得できます。

ただし、WP7からサーバー呼び出しを行う場合は、まったく別のアプリケーションコンテキストからクラスにアクセスしているため、機能しMethodBox.Showていても、電話ではなくサーバーにメッセージボックスが表示されます。ただし、WCFはアプリケーションコンテキストで実行するためのクラスを準備せず、Showメソッド全体が失敗します。

そのため、WP7とホストされたWCFサービスを含むサーバー/クライアントシナリオを、Windowsフォームアプリの単一のプログラムコンテキストと混同しています。

于 2012-10-12T12:00:12.800 に答える