2011-01-12 38 views
0

這是我通過WCF/Silverlight應用程序面臨的一個很奇怪的問題。我正在使用WCF從我的Silverlight應用程序的數據庫獲取數據,並且在某些系統上完成的事件不會觸發WCF中的方法。我已經檢查了被調用的方法執行正確返回值。我通過Fiddler進行了檢查,它清楚地顯示響應也具有返回的值。然而,完成的事件沒有被觸發。而且在少數系統中,一切都很好,我能夠在完成的方法中處理返回的值。已完成在某些系統上未觸發Web服務的事件

任何想法或建議將不勝感激。我曾嘗試在網上搜索周圍,但沒有任何運氣:(

以下是代碼..調用方法..

void RFCDeploy_Loaded(object sender, RoutedEventArgs e) 
    { 
     btnSelectFile.IsEnabled = true; 
     btnUploadFile.IsEnabled = false; 
     btnSelectFile.Click += new RoutedEventHandler(btnSelectFile_Click); 
     btnUploadFile.Click += new RoutedEventHandler(btnUploadFile_Click); 
     RFCChangeDataGrid.KeyDown += new KeyEventHandler(RFCChangeDataGrid_KeyDown); 
     btnAddRFCManually.Click += new RoutedEventHandler(btnAddRFCManually_Click); 
     ServiceReference1.DataService1Client ws = new BEVDashBoard.ServiceReference1.DataService1Client(); 
     ws.GetRFCChangeCompleted += new EventHandler<BEVDashBoard.ServiceReference1.GetRFCChangeCompletedEventArgs>(ws_GetRFCChangeCompleted); 
     ws.GetRFCChangeAsync(); 
     this.BusyIndicator1.IsBusy = true; 
    } 

完成的事件....

void ws_GetRFCChangeCompleted(object sender, BEVDashBoard.ServiceReference1.GetRFCChangeCompletedEventArgs e) 
    { 
     PagedCollectionView view = new PagedCollectionView(e.Result); 
     view.GroupDescriptions.Add(new PropertyGroupDescription("RFC")); 
     RFCChangeDataGrid.ItemsSource = view; 
     foreach (CollectionViewGroup group in view.Groups) 
     { 
      RFCChangeDataGrid.CollapseRowGroup(group, true); 
     } 
     this.BusyIndicator1.IsBusy = false; 
    } 

請請注意,此WCF有很多其他方法,以及所有這些都工作正常....我有問題,只有這種方法...

謝謝..

+0

你能發表一些代碼嗎? – 2011-01-12 18:36:56

+0

已添加一些代碼.. – Farukh 2011-01-13 11:45:52

回答

0

此問題是由於瀏覽器無法呈現的數據庫返回的字段之一中的特殊字符。經過相當多的調試後,通過網絡進行搜索,才發現了這一點。使用正則表達式來刪除WCF中的這些特殊字符,方法中的新返回值已成功呈現在不同系統上的各種瀏覽器中。 :)

0

正如其他人已經指出,看看你的一些代碼會有所幫助。但有些事情要檢查:

(1)在Debug/Options/Debugging/General下關閉「Enable Just My Code」,並在Reference.cs文件中設置一些斷點,以查看是否有低級回調方法正在受到打擊。 (2)確認您正在設置已完成的事件處理程序以及代理客戶端的正確實例。如果您在一個實例上設置事件處理程序,並在另一個實例上進行調用,則可能會導致您描述的行爲。 (3)如here所述,使用MS服務跟蹤查看器,並查看是否有任何明顯錯誤(通常用紅色突出顯示)。

可能還有其他的東西你可以檢查,但這會讓你忙了一天左右:-)。

(編輯製作後貼碼)

(4)你可能想嘗試在類級別,而不是函數定義你的WS變量。從理論上講,定義一個事件處理程序意味着它不會被垃圾收集,但它仍然有點奇怪,因爲一旦你離開函數,就不再有處理了,因此不能做重要的事情,比如說關閉它。 (5)如果還沒有,請嘗試通過Visual Studio中的「添加服務引用」對話框重新構建代理類。我已經看到偶爾出現的奇怪問題,當Web服務發生微妙變化時,客戶端並未更新以反映更改:某些方法將成功調用,其他方法則不會。 (6)如果您可能同時打開多個代理客戶端實例,請考慮將它們合併爲一個實例(並使用方法調用的可選「object userState」參數傳遞迴調,所以你不會遇到多個事件處理程序被分配的可能性)。在過去,當多個實例互相訪問時,我遇到了令人討厭的問題,而我目前的最佳做法是以這樣的方式構建我的代碼,即一次只打開一個客戶端實例。我知道這不一定是MS說的,但這是我的經歷。

+0

感謝肯..我會給這些嘗試..我已經添加了一些代碼..在我的描述中:) :) – Farukh 2011-01-13 11:47:18

相關問題