2014-01-17 53 views
0

我的web服務方法;爲什麼我的參數空值發送?

[WebMethod] 
public DataSet Musteriler(string @Sirket,string @User,string @filtre) 
{ 

    using (SqlConnection con = new SqlConnection(connstr)) 
    { 
     try 
     { 
      con.Open(); 
     } 
     catch (Exception) 
     { 

     } 
     SqlCommand km = con.CreateCommand(); 
     SqlDataAdapter da = new SqlDataAdapter(km); 

     if (Sirket.Trim().Length == 0) 
     { 
      return null; 
     } 
     km.CommandText = "select SirketKodu,Versiyon from MV4.dbo.SIRKET with(nolock) where [email protected]"; 
     km.Parameters.Clear(); 
     km.Parameters.AddWithValue("@kod", @Sirket); 
     DataTable sdt = new DataTable(); 

     da.Fill(sdt); 
     string sirketkodu = "master"; 
     if (sdt.Rows.Count>0) 
     { 
      sirketkodu = "DB_V" + sdt.Rows[0][1] + "_" + sdt.Rows[0][0]; 
     } 
     km.Connection.ChangeDatabase(mikrosirketkodu); 

     km.CommandText = "select cari_kod,cari_unvan1 from XXX with(nolock) where (kod like @kod or unvan1 like @kod or unvan2 like @kod or @kod='')"; 
     km.Parameters.Clear(); 
     km.Parameters.AddWithValue("@kod", @filtre.mysearch()); 
     DataSet ds = new DataSet(); 
     da.SelectCommand = km; 
     da.Fill(ds); 
     return ds; 
    } 
} 

我的Android kSoap2代碼;

public static String serverID ;//xxx=http 
String URL = ""; 
final String METHOD_NAME = "Musteriler"; 
static String NAMESPACE = "xxxx://abc.com/Service.asmx/"; 
final String SOAP_ACTION = "xxxx://abc.com/Musteriler";  

PropertyInfo property = new PropertyInfo(); 
     sendingString send = new sendingString(temizSirket, temizkullId, musFil); 
     property.setName("Musteriler"); 
     property.setType(send.getClass()); 
     property.setValue(send); 
     request.addProperty(property); 

     SoapSerializationEnvelope envelope = new  SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.bodyOut = request; 
     envelope.dotNet = true; 
     envelope.encodingStyle = SoapSerializationEnvelope.ENC2003; 
     envelope.xsd = SoapEnvelope.XSD; 
     envelope.xsi = SoapEnvelope.XSI; 
     envelope.implicitTypes = true; 

     envelope.setOutputSoapObject(request); 

     envelope.addMapping(NAMESPACE, send.getClass().getSimpleName(), sendingString.class); 

     HttpTransportSE httpTransport = new HttpTransportSE("http://" + serverID); 

     httpTransport.debug = true; 

     httpTransport.call(SOAP_ACTION, envelope); 

     response = (SoapObject) envelope.getResponse(); 

     List<String> list = new ArrayList<String>(); 

     for (int i = 1; i < response.getPropertyCount(); i++) { 
      if (response.getProperty(i).toString().trim() != null) { 
       SoapObject newDataSet = (SoapObject) response.getProperty(i); 
       SoapObject tablo = (SoapObject) newDataSet.getProperty(0); 
       SoapObject icerik = (SoapObject) tablo.getProperty(0); 
       list.add("Kod:" + icerik.getProperty(0).toString() + "-CariUnvan:" + icerik.getProperty(1).toString()); 
      }else { 
       list.add(""); 
      }    
     } 
     musteriAdapter = new ArrayAdapter<String>(this , R.layout.list_spinner, list); 
     musteri_sec.this.runOnUiThread(yeni); 
    } catch (Exception e) { 
     String a = e.toString(); 
    } 
} 

Thread thread = new Thread(new Runnable() { 

    @Override 
    public void run() { 
     Call(); 
    } 
}); 

Thread yeni = new Thread(new Runnable() { 

    @Override 
    public void run() { 
     musteriSpinner = (Spinner) findViewById(R.id.spinnerMusteri); 
     musteriSpinner.setAdapter(musteriAdapter); 

    } 
}); 

public class sendingString implements KvmSerializable { 


    private String xSirket,xUser,xfiltre; 

    public sendingString(String Sirket, String User, String filtre){ 
     super(); 
     this.xSirket = Sirket; 
     this.xUser = User; 
     this.xfiltre = filtre; 

    } 

    public String getSirket(){ 
     return xSirket; 
    } 
    public void setSirket(){ 
     this.xSirket= xSirket; 
    } 
    public String getUser(){ 
     return xUser; 
    } 
    public void setUser(){ 
     this.xUser= xUser; 
    } 
    public String getfiltre(){ 
     return xfiltre; 
    } 
    public void setfiltre(){ 
     this.xfiltre= xfiltre; 
    } 




    @Override 
    public Object getProperty(int propertyNumber) { 
     Object property = null; 
     switch (propertyNumber) { 
     case 0: 
      property = this.xSirket; 
      break; 
     case 1: 
      property = this.xUser; 
      break; 

     case 2: 
      property = this.xfiltre; 
      break; 
     default: 
      break; 
     } 
     return property; 
    } 

    @Override 
    public int getPropertyCount() { 
     // TODO Auto-generated method stub 
     return 3; 
    } 

    @Override 
    public void getPropertyInfo(int propertyNumber, Hashtable arg1, PropertyInfo propertyInfo) { 
     switch (propertyNumber) { 
     case 0: 
      propertyInfo.type = PropertyInfo.STRING_CLASS; 
      propertyInfo.name = "@Sirket"; 
      propertyInfo.setNamespace(NAMESPACE); 
      break; 
     case 1: 
      propertyInfo.type = PropertyInfo.STRING_CLASS; 
      propertyInfo.name = "@User"; 
      propertyInfo.setNamespace(NAMESPACE); 
      break; 
     case 2: 
      propertyInfo.type = PropertyInfo.STRING_CLASS; 
      propertyInfo.name = "@filtre"; 
      propertyInfo.setNamespace(NAMESPACE); 

      break; 

     default: 
      break; 
     } 

    } 

    @Override 
    public void setProperty(int propertyNumber, Object data) { 
     switch (propertyNumber) { 
     case 0: 
      this.xSirket = String.valueOf(data); 
      break; 
     case 1: 
      this.xUser = String.valueOf(data); 
      break; 
     case 2: 
      this.xfiltre = String.valueOf(data); 
      break; 

     default: 
      break; 
     } 

    } 

} 

}

我有沒有parameteres合適的連接。但是當我嘗試將參數放入連接時,它始終爲空。我幾天來都找不到解決問題的辦法。感謝您的支持。

編輯:

SoapObject response = null; 
    try { 

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     String temizkullId = kullKod.split("-")[0].substring(4); 

     EditText sifre = (EditText) findViewById(R.id.editTextSifre); 
     String sifreText = sifre.getText().toString(); 
     PropertyInfo property1 = new PropertyInfo(); 
     property1.name = "kod"; 
     property1.setName("kod"); 
     property1.setNamespace(NAMESPACE); 
     property1.setType(PropertyInfo.STRING_CLASS); 
     property1.setValue(temizkullId); 
     request.addProperty(property1); 

     PropertyInfo property2 = new PropertyInfo(); 
     property2.name = "sifre"; 
     property2.setName("sifre"); 
     property2.setNamespace(NAMESPACE); 
     property2.setType(PropertyInfo.STRING_CLASS); 
     property2.setValue(sifreText); 
     request.addProperty(property2); 



     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.bodyOut = request; 
     envelope.setOutputSoapObject(request); 



     HttpTransportSE httpTransport = new HttpTransportSE("http://" + serverID); 
     httpTransport.debug = true; 
     httpTransport.call(SOAP_ACTION, envelope); 
    response = (SoapObject) envelope.getResponse(); 
     boolean ok = (Boolean) response.getProperty(0); 


response = (SoapObject) envelope.getResponse(); 

線; 「SoapFault - faultcode:'soap:Server'faultstring:'服務器無法處理請求--->字符串引用沒有設置爲字符串的實例 參數名稱:s'faultactor:'null'detail:org。 [email protected]「我得到錯誤。

Web服務方法:

[WebMethod] 
public bool SifreKontrol(string kod, string sifre) 
{ 
    using (SqlConnection con = new SqlConnection(connstr)) 
    { 
     try 
     { 
      con.Open(); 
     } 
     catch (Exception) 
     { 

     } 

     SqlCommand km = con.CreateCommand(); 
     km.CommandText ="select count(*) from MV4.dbo.USERS with (NOLOCK) where [email protected] and isnull(pasif, 0)=0 and ([email protected])"; 
     km.Parameters.Clear(); 
     km.Parameters.AddWithValue("@kod", kod); 
     km.Parameters.AddWithValue("@pass", sifreleme.Encrypt(sifre, true)); 

     if (km.ExecuteScalar().Tamsayi() > 0) 
      return true; 
     else return false; 
    } 
} 

普萊舍幫助我...

+0

請發佈您的logcat和錯誤日誌,其中顯示您提到的問題 –

+0

SoapFault - faultcode:'肥皂:服務器'faultstring:'服務器無法處理請求。 --->參數化查詢'(@kod nvarchar(4000))從M'中選擇SirketKodu,Versiyon需要參數'@kod',該參數未提供。 faultactor:'null'詳細信息:[email protected] – noidos

+0

我的代碼添加; request.addProperty(屬性);和錯誤日誌; java.lang.IllegalArgumentException:size <= 0請幫助我! – noidos

回答

0

我解決了這個問題:

[WebMethod] 
    public bool SifreKontrol(Object kod, Object sifre) 
     { 
     using (SqlConnection con = new SqlConnection(connstr)) 
     {...}} 

和:

PropertyInfo property2 = new PropertyInfo(); 
    property2.name = "sifre"; 
    property2.setName("sifre"); 
    property2.setNamespace(NAMESPACE); 
    property2.setType(PropertyInfo.OBJECT_TYPE); 
    property2.setValue(sifreText); 
    request.addProperty(property2); 
0

推薦給任何人。 dot net 4.0及以上版本的web服務進行準備。非常舒服。

相關問題