2011-08-03 61 views
1

我有一個webservice,返回陣列/鋸齒陣列的數組。從webservice處理數組

我有問題來處理它在我的本地C#窗體窗體應用程序。

最初它給我內容類型錯誤。現在使用示例波紋管代碼,它返回一個空數組。

我也試過返回一維數組,但結果是一樣的。

WebService的側面:

[WebMethod] 
    public string[] teste() 
    { 
     string[] a = new string[1] { "one" }; 
     string[] b = new string[1] { "two" }; 
     string[][] c = { a, b }; 

     return c; 
    } 

本地端:

class open_notes 
{ 
    public static ServiceReference1.Smart_Stick_ServiceSoapClient web_service = new ServiceReference1.Smart_Stick_ServiceSoapClient(); 

    public static void open() 
    { 
     string[][] a = null; 
     a [0][0] = web_service.teste().ToString(); 
     MessageBox.Show(a[0][0]); 
    } 
} 

回答

1

您的Web服務沒有返回類型的string[][],你不應該對Web服務調用的結果調用.ToString(),並且您正在訪問一個空引用,當你設置string[][] a = null,然後嘗試指數a[0][0] 。只需將變量設置爲Web服務調用的結果

public static void open() 
{ 
    var a = web_service.teste(); 
} 
1

你的函數是返回一個字符串(而不是字符串數組的數組)的數組,您所呼叫的ToString()結果數組。

-1

感謝您的幫助球員

但最終我認爲這是更好地創建Web服務的結構體。

但是你不能忘記,而是在客戶端再次創建結構,你需要實例化它,並對Web服務進行引用。

服務器端:

public struct ClientData 

{ 
    public string descricao; 
    public string timer; 
} 

[WebMethod] 
    public ClientData[] teste() 
    { 
     ClientData[] Clients = null; 
     Clients = new ClientData[30]; 

     Clients[0].descricao = "oi"; 
     Clients[0].timer = "legal"; 


     return Clients; 
    } 

客戶端:

public static void receive_teste() 
    { 

     WindowsFormsApplication1.ServiceReference1.ClientData[] Clients = null; 
     Clients = new WindowsFormsApplication1.ServiceReference1.ClientData[30]; 

     Clients = (WindowsFormsApplication1.ServiceReference1.ClientData[])web_service.teste(); 

     MessageBox.Show(Clients[0].descricao.ToString()); // Shows returned "descricao" 
     MessageBox.Show(Clients[0].timer.ToString()); // Shows returned "timer" 

    }