2012-10-12 39 views
0

我正在寫需要一個「雙」 UI程序的WCF服務器端的方法:第一種是經典的Windows窗體,第二個通過Windows電話設備。我正在使用WCF(異步,這種設備的唯一可能性),但是我的行爲對我來說顯得很奇怪。那麼,我對WCF非常基本,所以也許我做錯了什麼。我寫的我的WCF服務器代碼簡化版本,所以這裏的問題是清晰的:不同的行爲,呼籲通過它的WinForm或通過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,然後Button1的我顯然得到了「X = 1」的popbox。但如果我通過Windows Phone應用程序調用prova1(),我總是會得到「x = 0」。這是一個非常普遍的行爲:如果我實例化WCF服務器的代碼的對象,並嘗試在被稱爲槽的外部設備的WCF服務器的方法來使用它,我會得到一個空引用異常。看起來我在WCF服務器代碼中做的所有事情在名爲低谷WCF的方法中完全不可見。有一種方法可以避免這種行爲?

回答

0

當你調用從類本身要在程序上下文的Windows窗體中工作prova1。這將使MessageBox靜態方法提供給你,你可以得到Show方法來顯示彈出。

但是,當您從WP7進行服務器調用時,您正在從完全其他應用程序上下文訪問該類,因此即使MethodBox.Show已經工作,它也會在服務器上顯示消息框,而不是在電話上顯示。但是WCF沒有準備在應用程序上下文中運行的類,並且整個Show方法失敗。

那麼,你是混淆涉及WP7服務器/客戶端的場景和託管WCF服務與Windows的單一程序上下文窗體應用程序。

+0

首先,感謝您的回答!但是......也許我並不清楚......我正在準備第二個用戶界面,因此用戶可以單擊該按鈕而無需坐在運行WF應用程序的計算機上。在這個例子中,我確實希望MessageBox在服務器上顯示它的彈出窗口。 WP7僅用於遠程控制應用程序。此外,代替MessageBox,我可以使用 System.Diagnostics.Debug.Print(x.ToString()) 或在調試過程中設置斷點並檢查x值,並獲得相同的結果。 –

+0

嘿斯特凡諾 - 對不起任何midunderstandings :) – faester

+0

WCF不用於UI,它將使混亂if語句,如果你繼續執行計劃,使組合實現你的代碼。我會去繼承或組成。 – faester