2014-08-28 19 views
0

我創建一個WCF服務並上傳到Windows Server 2012,64位和兩個應用程序:Windows Form和Android Xamarin。 Windows Form和Android Xamarin將調用相同的WCF服務。運行Windows窗體將很好地顯示整個數據表。感謝上帝 !但運行Android將有異常錯誤。通過使用Xamarin Android從WCF服務(服務器)獲取DataTable將產生異常錯誤

System.Web.Services.Protocols.SoapException:由於內部錯誤,服務器無法處理請求。有關該錯誤的更多信息,請打開服務器上的IncludeExceptionDetailInFaults(來自ServiceBehaviorAttribute或來自配置行爲),以便將異常信息發回給客戶端,或者打開跟蹤按照Microsoft .NET

如何從WCF獲取DataTable?

以下是我的源代碼。

protected override void OnCreate(Bundle bundle) 
{ 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.Main); 
     wcfBtn = FindViewById<Button>(Resource.Id.button1); 
     wcfBtn.Click += (object sender, EventArgs e) => 
     { 
      DataTable dt = new DataTable(); 
      dt.TableName = "GoldenRetrieverTable2"; 

     DataTable dataTbl = new DataTable(); 
     dataTbl.TableName = "GoldenRetrieverTable2"; 

     AdelineService.Service1 wcfService = new AdelineService.Service1(); 

     dataTbl = wcfService.GetData(dt); 
    }; 
} 

請幫助。我相信這是由於我寫了「Android C#」方法來獲取DataTable問題的方式,因爲Windows窗體顯示正確。

+0

如果是抱怨內部錯誤,您應該在服務器端有更多的信息。我懷疑,這個UI方面是完全不相關的。 – 2014-08-28 06:36:00

回答

0

DataTable對於互操作性和一般的Web服務來說是不好的選擇。這是一種.NET類型,你需要通過電線傳輸不必要的重量。 DataTable對象不僅包含數據,還包含模式信息。

此信息對於非Microsoft客戶端來說沒有用處,並且會擴大要傳輸的數據的大小。我個人從來沒有使用過DataTable,即使在.NET到.NET的情況下,我都擁有兩端。

我的兩個建議是:

  1. 創建從各行擁有你想要的信息數據傳輸對象(DTO)和填充這些數組。通過電線發送,而不是DataTable
  2. 除非您使用基於SOAP的Web服務卡住,否則我會建議創建一個RESTful Web服務。我個人的經歷是,SOAP不是它曾經被認爲是互操作性的聖盃。