2011-07-11 37 views
4

我完全是C#的新手。 我有一个服务方法调用WCF引用类型变量

//actual method 
    public DataTable LoadDownLoadTablesData(string strBusinessUnit, string strExecutive, string strTableName, ref string strDate, string strTerritoryCode, string strUField1, string strUField2, string strUFeild3) 
    {    
     DataTable ds = new DataTable(); 
     try 
      { 
       XontPDAServiceDAL vu = new XontPDAServiceDAL(); 
       if (vu.validateExecutive(strBusinessUnit, strExecutive) == true) 
       { 
        DownloadFetchBLL wmd = new DownloadFetchBLL(); 
        strDate = DateTime.Now.ToString(); 
        ds = wmd.LoadDownLoadTableData(strBusinessUnit, strExecutive, strTableName, strTerritoryCode, strUField1, strUField2, strUFeild3); 
       } 
       else 
       { 
        throw new FaultException("Executive Not Active in the system."); 
       } 
     } 
     catch (FaultException) { } 
     catch (Exception ex) 
     { 
      throw new FaultException("Database Server is Not Responding." + ex.Message); 
     } 

     return ds; 
    } 

    //Converting datatable to String type 
    public string LoadDownLoadTablesDataJson(string strBusinessUnit, string strExecutive, string strTableName, ref string strDate, string strTerritoryCode, string strUField1, string strUField2, string strUFeild3) 
    { 
     DataTable dtDownloadJson = new DataTable(); 
     dtDownloadJson = this.LoadDownLoadTablesData(strBusinessUnit, strExecutive, strTableName, ref strDate, strTerritoryCode, strUField1, strUField2, strUFeild3); 
     return this.ConverTableToJson(dtDownloadJson); 
    } 


    //Converting table to json 
    public String ConverTableToJson(DataTable dtDownloadJson) 
    { 
     string[] StrDc = new string[dtDownloadJson.Columns.Count]; 
     string HeadStr = string.Empty; 

    // if (dtDownloadJson.Columns.Count > 0) 
     // { 

      for (int i = 0; i < dtDownloadJson.Columns.Count; i++) 
      { 

       StrDc[i] = dtDownloadJson.Columns[i].Caption; 
       HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\","; 
      } 
      if (HeadStr.Length > 0) 
      { 
       HeadStr = HeadStr.Substring(0, HeadStr.Length - 1); 
       StringBuilder Sb = new StringBuilder(); 
       Sb.Append("{\"" + dtDownloadJson.TableName + "\" : ["); 

       for (int i = 0; i < dtDownloadJson.Rows.Count; i++) 
       { 

        string TempStr = HeadStr; 
        Sb.Append("{"); 

        for (int j = 0; j < dtDownloadJson.Columns.Count; j++) 
        { 
         TempStr = TempStr.Replace(dtDownloadJson.Columns[j] + j.ToString() + "¾", dtDownloadJson.Rows[i][j].ToString()); 
        } 

        Sb.Append(TempStr + "},"); 
       } 

       Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length - 1)); 
       Sb.Append("]}"); 
       return Sb.ToString(); 
      }else 
      { 
       return "0"; 
      } 
     // }else{ 
     //  return "0"; 
     // } 
    } 

这LoadDownLoadTablesData()参考变量是存在的。

我必须要通过调用在Android这个LoadDownLoadTablesDataJson(....),

我叫这样的方式;

// ksoap2 calling wcf 
public SoapPrimitive soapPrimitiveData(String method_name1, String soap_action1, String NAMESPACE, String APPURL ,String tablename) throws IOException,XmlPullParserException { 

    SoapPrimitive responses = null; 
    SoapObject request = new SoapObject(NAMESPACE, method_name1); // set up 

    request.addProperty("strBusinessUnit", "HEMA"); 
    request.addProperty("strExec", "4515"); 
    request.addProperty("strTableName", "RD.AlternativeProductHeader"); 
    // after login we will get these fields value 
    request.addProperty("strDate", "2000-04-29"); 
    request.addProperty("TerritoryCode", "KAND"); 

    request.addProperty("strUField1", ""); 
    request.addProperty("strUField2", ""); 
    request.addProperty("strUField3", ""); 


    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // put all required data into a soap// envelope 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request); 
    AndroidHttpTransport httpTransport = new AndroidHttpTransport(APPURL); 
    httpTransport.debug = true; 
    try { 
     httpTransport.call(soap_action1, envelope); 
     responses = (SoapPrimitive) envelope.getResponse(); 

     Log.w("log_tag", "@@@@ 218 @@@@" + responses); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return responses; 
} 

这总是返回“0”。但是当我通过虚拟测试C#网站时,它会返回一些结果。 见

String da1 = "2000-04-29"; 
     String s = client.LoadDownLoadTablesDataJson("HEMA", "4515", "RD.AlternativeProductHeader", ref da1, "KAND", "", "", ""); 
     Label1.Text = s; 

输出为:

{"Table1" : [{"TableName" : "LoadDistributor","Description" : "Distributor ","MandatoryFlag" : "1","Status" : "","Priority" : "0"},{"TableName" : "LoadPrice","Description" : "Price ","MandatoryFlag" : "1","Status" : "","Priority" : "0"}]} 

我也搞不清如何,我们希望使用Android传递引用类型?

请帮我..

在此先感谢。

+0

其工作的罚款。这是我的错误。我应该给这个request.addProperty(“strExecutive”,“4515”);不是request.addProperty(“strExe”,“4515”);谢谢。我很抱歉耗费时间... – Piraba

+0

你应该将它作为答案发布并接受它。 –

回答

1

本来应该给这样request.addProperty("strExecutive", "4515");request.addProperty("strExe", "4515");

我shoube是服务参数name.Can't给予不同的名称

0

看起来您的andriod请求中的属性名称与.NET Web服务方法中的参数名称不匹配:strExe!= strExecutive。