2011-03-02 51 views
0

我在構建一個使用WCF客戶端從我的服務器檢索數據的應用程序。帶線程WCF客戶端的C#winform應用程序

我希望我對該服務的調用是異步的,因爲他們中的很多人都需要更改UI,我不想失去來自我的應用程序的響應。

我嘗試使用*Completed*Async

ServiceUserClient client = new ServiceUserClient(); 
client.FindUserCompleted += delegate(object sender, FindUserCompletedEventArgs e) 
{ 
    // here e.Result always fails 
}; 
client.FindUserAsync(text); 

的*完成委託裏面我總是得到遠程主機關閉的錯誤(連接:我每次啓用日誌記錄我能找到,但我仍然不明白爲什麼我收到這些錯誤)

同步呼叫始終工作。

我有一個類來處理所有的服務調用。

有沒有辦法在類似於線程類的東西里面有同步調用?

+0

你也可以使用WCF跟蹤客戶端和服務器上? http://msdn.microsoft.com/en-us/library/ms733025.aspx –

+0

是的,我仍然無法弄清楚爲什麼它給了我這個錯誤:嘗試建立到net.tcp的連接時,操作被中斷:// /。 – Keeper

+0

在得到e.Result之前,我總是檢查e.Error。 e.Error說什麼? –

回答

0

我結束了使用的BackgroundWorker這種方式創建我自己的異步方法(可能不是最好的方式但它的工作原理):

// this is the click event on my search button 
private void FindUser_Click(object sender, EventArgs e) 
{ 
    this.UserListSearch.Enabled = false; 
    this.UserListSearch.Items.Clear(); 
    Model.FindUser(FindText.Text.ToUpper(), userlist => 
    { 
     foreach (User u in userlist) 
     { 
      ListViewItem item = new ListViewItem(u.UserName); 
      item.Name = u.UserName; 
      item.SubItems.Add(u.Description); 
      this.UserListSearch.Items.Add(item); 
     } 
     this.UserListSearch.Enabled = true; 
    }); 
} 

// this is the function I call when I need async call 
public void FindUser(string text, Action<User[]> callback) 
{ 
    CreateBackgroundWorker<User[]>(() => 
     { 
      ServiceUsersClient client = new ServiceUsersClient(); 
      var results = client.FindUser(text); 
      client.Close(); 
      return results; 
     }, callback); 
} 

// this is my utility function to create a bgworker "on demand" 
private void CreateBackgroundWorker<T>(Func<T> dowork, Action<T> callback) 
{ 
    BackgroundWorker worker = new BackgroundWorker(); 
    worker.DoWork += (sender, args) => 
    { 
     T result = dowork.Invoke(); 
     (callback.Target as Form).Invoke(callback, result); 
    }; 
    worker.RunWorkerAsync(); 
} 
0

您是否設置客戶端綁定以匹配服務器接受的內容?

你也應該嘗試與WCF測試客戶端(通常在%Program Files文件%\微軟的Visual Studio 10.0 \ Common7 \ IDE \ WcfTestClient.exe)測試它。如果測試客戶端工作,然後檢查綁定。

你的電話是否連上服務器?序列化從服務器到客戶端的響應時發生了類似的錯誤,因此您可能需要檢查該問題。如果你到達你的服務器,那麼綁定不是問題,而是存在序列化問題。對於試圖在服務器上進行反序列化的數據模型屬性,您有「套件」嗎?

我知道這是沒有答案,但沒有得到我這裏足以被允許的意見......我已經身在何處,完全令人沮喪。

+0

他提到,同步調用工作,所以它不會被序列化問題。 –

+0

我現在看到了......謝謝。也許嘗試與客戶端或WCFStorm? – ale

相關問題