开发者

Call WCF reference type variable

I am totally new to C#. I have one service method

    //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";
       // }
    }

This LoadDownLoadTablesData() reference variable is there.

I have to pass call this LoadDownLoadTablesDataJson(....) from Android,

I called like this way;

    // 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;
}

This always return "0". But when I run through dummy testing C# site, It return some result. See

  String da1 = "2000-04-29";
        String s = client.LoadDownLoadTablesDataJson("HE开发者_如何学JAVAMA", "4515", "RD.AlternativeProductHeader", ref da1, "KAND", "", "", "");
        Label1.Text = s;

output is :

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

I have confuse how we want to pass reference type using Android?

Please help me..

Thanks in advance.


Should have give like this request.addProperty("strExecutive", "4515"); not request.addProperty("strExe", "4515");

I shoube be service argument name.Can't give different name


It looks like the property name in your andriod request doesn't match up with the parameter name on your .NET web service method: strExe != strExecutive.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜