2012-11-30 70 views
1

最近我開始在黑莓手機上使用wcf休息web服務。黑莓手機 - 如何使用wcf休息服務

我已經使用下面的兩個代碼的:

1. URLEncodedPostData POSTDATA =新URLEncodedPostData(URLEncodedPostData.DEFAULT_CHARSET,FALSE); //路過Q的價值,即價值

postData.append("UserName", "[email protected]"); 
postData.append("Password", "[email protected]"); 
HttpPosst hh=new HttpPosst(); 
add(new LabelField("1")); 
String res=hh.GetResponse("http://dotnetstg.seasiaconsulting.com/profire/ProfireService.svc/UserRegistration",postData); 
add(new LabelField("2")); 
add(new LabelField(res)); 

公共字符串的GetResponse(字符串URL,URLEncodedPostData數據) {

this._postData = data; 
    this._url = url; 

    ConnectionFactory conFactory = new ConnectionFactory(); 
    ConnectionDescriptor conDesc = null; 

    try 
    { 
     if (WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) 
     { 

      connectionString = ";interface=wifi"; 

     } 

     // Is the carrier network the only way to connect? 
     else if ((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_DIRECT) == CoverageInfo.COVERAGE_DIRECT) { 
      // logMessage("Carrier coverage."); 

      // String carrierUid = getCarrierBIBSUid(); 

      // Has carrier coverage, but not BIBS. So use the carrier's TCP 
      // network 
      // logMessage("No Uid"); 
      connectionString = ";deviceside=true"; 

     } 

     // Check for an MDS connection instead (BlackBerry Enterprise 
     // Server) 
     else if ((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_MDS) == CoverageInfo.COVERAGE_MDS) { 
      // logMessage("MDS coverage found"); 

      connectionString = ";deviceside=false"; 

     } 

     // If there is no connection available abort to avoid bugging the 
     // user 
     // unnecssarily. 
     else if (CoverageInfo.getCoverageStatus() == CoverageInfo.COVERAGE_NONE) 
     { 
      // logMessage("There is no available connection."); 

     } 

     // In theory, all bases are covered so this shouldn't be reachable. 
     else { 
      // logMessage("no other options found, assuming device."); 
      // connectionString = ";deviceside=true"; 
     } 
     conDesc = conFactory.getConnection(url + connectionString); 
    } 
    catch (Exception e) 
    { 
     System.out.println(e.toString() + ":" + e.getMessage()); 
    } 

    String response = ""; // this variable used for the server response 
    // if we can get the connection descriptor from ConnectionFactory 
    if (null != conDesc) 
    { 
     try 
     { 

      HttpConnection connection = (HttpConnection) conDesc.getConnection(); 
      // set the header property 
      connection.setRequestMethod(HttpConnection.POST); 

      connection.setRequestProperty("Content-Length",Integer.toString(data.size())); 
      // body content of 
      // post data 
      connection.setRequestProperty("Connection", "close"); 
      // close 
      // the 
      // connection 
      // after 
      // success 
      // sending 
      // request 
      // and 
      // receiving 
      // response 
      // from 
      // the 
      // server 
      connection.setRequestProperty("Content-Type","application/json"); 
      // we set the 
      // content of 
      // this request 
      // as 
      // application/x-www-form-urlencoded, 
      // because the 
      // post data is 
      // encoded as 
      // form-urlencoded(if 
      // you print the 
      // post data 
      // string, it 
      // will be like 
      // this -> 
      // q=remoQte&ie=UTF-8). 

      // now it is time to write the post data into OutputStream 
      OutputStream out = connection.openOutputStream(); 
      out.write(data.getBytes()); 
      out.flush(); 
      out.close(); 

      int responseCode = connection.getResponseCode(); 
      // when this 
      // code is 
      // called, 
      // the post 
      // data 
      // request 
      // will be 
      // send to 
      // server, 
      // and after 
      // that we 
      // can read 
      // the 
      // response 
      // from the 
      // server if 
      // the 
      // response 
      // code is 
      // 200 (HTTP 
      // OK). 
      if (responseCode == HttpConnection.HTTP_OK) 
      { 
       // read the response from the server, if the response is 
       // ascii character, you can use this following code, 
       // otherwise, you must use array of byte instead of String 
       InputStream in = connection.openInputStream(); 
       StringBuffer buf = new StringBuffer(); 
       int read = -1; 
       while ((read = in.read()) != -1) 
       buf.append((char) read); 
       response = buf.toString(); 

      } 

      // don’t forget to close the connection 
      connection.close(); 

     } 
     catch (Exception e) 
     { 
      System.out.println(e.toString() + ":" + e.getMessage()); 
     } 

    } 
    return response; 
} 

public boolean checkResponse(String res) 
{ 
    if(!res.equals("")) 
    { 


    if(res.charAt(0)=='{') 
    { 
     return true; 
    } 
    else 
    { 
     return false; 

    } 
    } 
    else 
    { 
     return false; 
    } 

} 

但與此代碼我無法獲得響應,上面有哪些WCF web服務返回 這是({「UserRegistrationResult」:[{「OutputCode」:「2」,「OutputDescription」:「用戶名已存在。」}}})

任何人都可以幫我關於它的解析blac kberry客戶端。

2.And的我使用的另一種碼是:

公共類KSoapDemo擴展MainScreen {

private EditField userNametxt; 
private PasswordEditField passwordTxt; 
private ButtonField loginBtn; 
String Username; 
String Password; 

public KSoapDemo() 
{ 

    userNametxt = new EditField("User Name : ", "[email protected]"); 
    passwordTxt = new PasswordEditField("Password : ", "[email protected]"); 
    loginBtn = new ButtonField("Login"); 

    add(userNametxt); 
    add(passwordTxt); 
    add(loginBtn); 

    loginBtn.setChangeListener(new FieldChangeListener() 
    { 

     public void fieldChanged(Field field, int context) 
     { 
      //Dialog.alert("Hi Satyaseshu..!"); 
      login(); 
     } 
    }); 
} 

private void login() 
{ 
    if (userNametxt.getTextLength() == 0 || passwordTxt.getTextLength() == 0) 
    { 
     //Dialog.alert("You must enter a username and password",); 
    } 
    else 
    { 
     String username = userNametxt.getText(); 
     String password = passwordTxt.getText(); 
     System.out.println("UserName... " + username); 
     System.out.println("Password... " + password); 
     boolean value = loginPArse1(username, password); 
     add(new LabelField("value... " + value)); 
    } 
} 

public boolean onClose() 
{ 
    Dialog.alert("ADIOOO!!"); 
    System.exit(0); 
    return true; 
} 



public boolean loginPArse1(String username, String password) 
{ 

    username=this.Username; 
    password=this.Password; 
    boolean ans = false; 
    String result = null; 
    SoapObject request = new SoapObject("http://dotnetstg.seasiaconsulting.com/","UserRegistration"); 
    //request.addProperty("PowerValue","1000"); 
    //request.addProperty("fromPowerUnit","kilowatts"); 
    //request.addProperty("toPowerUnit","megawatts"); 
    request.addProperty("userName",Username); 
    request.addProperty("Password", Password); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.bodyOut = request; 
    envelope.dotNet = true; 
    add(new LabelField("value... " + "1")); 
    HttpTransport ht = new HttpTransport("http://dotnetstg.seasiaconsulting.com/profire/ProfireService.svc/UserRegistration"+ConnectionInfo.getInstance().getConnectionParameters()); 
    ht.debug = true; 
    add(new LabelField("value... " + "2")); 
    //System.out.println("connectionType is: " + connectionType); 
    try { 
    ht.call("http://dotnetstg.seasiaconsulting.com/profire/ProfireService.svc/UserRegistration", envelope); 
    SoapObject body = (SoapObject) envelope.bodyIn; 
    add(new LabelField("soap....="+body.toString())); 

    add(new LabelField("property count....="+body.getPropertyCount())); 

    // add(new LabelField("Result....="+body.getProperty("HelloWorldResult"))); 
    //result = body.getProperty("Params").toString(); 
// add(new LabelField("value... " + "4")); 
    ans=true; 
    } 
    catch (XmlPullParserException ex) { 
     add(new LabelField("ex1 "+ex.toString())); 
    ex.printStackTrace(); 
    } catch (IOException ex) { 
     add(new LabelField("ex1 "+ex.toString())); 
    ex.printStackTrace(); 
    } catch (Exception ex) { 
     add(new LabelField("ex1 "+ex.toString())); 
    ex.printStackTrace(); 
    } 
    return ans; 
    } 

,作爲回報,我是獲得響應作爲net.rim.device.cldc.io .dns.DNS例外:DNS錯誤

請幫我在這方面

感謝和問候 Pinkesh Gupta

回答

1
Please have the answer for my own question helps in parsing wcf rest services developed in .net and parsed at blackberry end. 

This 2 classess definitely helps in achieving the above code parsing. 


import java.io.IOException; 
import java.io.OutputStream; 
import java.io.InputStream; 
import javax.microedition.io.Connector; 
import javax.microedition.io.HttpConnection; 

public class ConnectionThread extends Thread 
{ 

    private boolean start = false; 
    private boolean stop = false; 
    private String url; 
    private String data; 
    public boolean sendResult = false; 
    public boolean sending = false; 
    private String requestMode = HttpConnection.POST; 
    public String responseContent; 
    int ch; 

    public void run() 
    { 
     while (true) 
     { 
      if (start == false && stop == false) 
      { 
       try 
       { 
        sleep(200); 
       } 
       catch (InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
      } 
      else if (stop) 
      { 
       return; 
      } 
      else if (start) 
      { 
       http(); 
      } 
     } 
    } 

    private void getResponseContent(HttpConnection conn) throws IOException 
    { 
     InputStream is = null; 
     is = conn.openInputStream(); 

      // Get the length and process the data 
      int len = (int) conn.getLength(); 
      if (len > 0) 
      { 
       int actual = 0; 
       int bytesread = 0; 
       byte[] data = new byte[len]; 
       while ((bytesread != len) && (actual != -1)) 
       { 
        actual = is.read(data, bytesread, len - bytesread); 
        bytesread += actual; 
       } 
       responseContent = new String (data); 
      } 
      else 
      { 
      // int ch; 
       while ((ch = is.read()) != -1) 
       { 

       } 
      } 



    } 

    private void http() 
    { 
     System.out.println(url); 
     HttpConnection conn = null; 
     OutputStream out = null; 

     int responseCode; 

     try 
     { 
      conn = (HttpConnection) Connector.open(url); 
      conn.setRequestMethod(requestMode); 
      conn.setRequestMethod(HttpConnection.POST); 
      conn.setRequestProperty("Content-Length",Integer.toString(data.length())); 
      conn.setRequestProperty("Connection", "close"); 
      conn.setRequestProperty("Content-Type", "application/json"); 
      conn.setRequestProperty("SOAPAction","http://dotnetstg.seasiaconsulting.com/"); 
      out = conn.openOutputStream(); 

      out.write(data.getBytes()); 
      out.flush(); 
      responseCode = conn.getResponseCode(); 

      if (responseCode != HttpConnection.HTTP_OK) 
      { 
       sendResult = false; 
       responseContent = null; 
      } 
      else 
      { 
       sendResult = true; 
       getResponseContent(conn); 
      } 
      start = false; 
      sending = false; 

     } 
     catch (IOException e) 
     { 
      start = false; 
      sendResult = false; 
      sending = false; 
     } 

    } 

    public void get(String url) 
    { 
     this.url = url; 
     this.data = ""; 
     requestMode = HttpConnection.GET; 
     sendResult = false; 
     sending = true; 
     start = true; 
    } 

    public void post(String url, String data) 
    { 
     this.url = url; 
     this.data = data; 
     requestMode = HttpConnection.POST; 
     sendResult = false; 
     sending = true; 
     start = true; 
    } 

    public void stop() 
    { 
     stop = true; 
    } 

} 


import net.rim.device.api.ui.Field; 
import net.rim.device.api.ui.FieldChangeListener; 
import net.rim.device.api.ui.component.AutoTextEditField; 
import net.rim.device.api.ui.component.BasicEditField; 
import net.rim.device.api.ui.component.ButtonField; 
import net.rim.device.api.ui.component.DateField; 
import net.rim.device.api.ui.component.LabelField; 
import net.rim.device.api.ui.component.ObjectChoiceField; 
import net.rim.device.api.ui.component.SeparatorField; 
import net.rim.device.api.ui.component.Status; 
import net.rim.device.api.ui.container.MainScreen; 
import org.json.me.JSONArray; 
import org.json.me.JSONException; 
import org.json.me.JSONObject; 
import org.xml.sax.SAXException; 
import net.rim.device.api.xml.parsers.SAXParser; 
import net.rim.device.api.xml.jaxp.SAXParserImpl; 
import org.xml.sax.helpers.DefaultHandler; 
import java.io.ByteArrayInputStream; 
import com.sts.example.ConnectionThread; 
import com.sts.example.ResponseHandler; 

public class DemoScreen extends MainScreen 
{ 

    private ConnectionThread connThread; 
    private BasicEditField response = new BasicEditField("Response: ", ""); 
    private BasicEditField xmlResponse = new BasicEditField("xml: ", ""); 
    private ButtonField sendButton = new ButtonField("Response"); 

    public DemoScreen(ConnectionThread connThread) 

    { 

     this.connThread = connThread; 

     FieldListener sendListener = new FieldListener(); 
     sendButton.setChangeListener(sendListener); 
     response.setEditable(false); 
     xmlResponse.setEditable(false); 
     add(sendButton); 
     add(response); 
     add(new SeparatorField()); 
     add(xmlResponse); 

    } 

    public boolean onClose() 
    { 
     connThread.stop(); 
     close(); 
     return true; 
    } 

    private String getFieldData() 
    { 
     //{"UserName":"[email protected]","Password":"[email protected]"} 
     StringBuffer sb = new StringBuffer(); 
     sb.append("{\"[email protected]\",\"Password\":\"pinkesh1985\"}"); 
     return sb.toString(); 
    } 



    class FieldListener implements FieldChangeListener 
    { 
     public void fieldChanged(Field field, int context) 
     { 

      StringBuffer sb = new StringBuffer("Sending..."); 
      connThread.post("http://dotnetstg.seasiaconsulting.com/profire/ProfireService.svc/UserRegistration"+ConnectionInfo.getInstance().getConnectionParameters(), getFieldData()); 

      while (connThread.sending) 
      { 
       try 
       { 
        Status.show(sb.append(".").toString()); 
        Thread.sleep(100); 
       } 
       catch (InterruptedException e) 
       { 
        e.printStackTrace(); 
       } 
      } 

      if (connThread.sendResult) 
      { 

       Status.show("Transmission Successfull"); 
       xmlResponse.setText(connThread.responseContent); 
       try { 

        JSONObject jsonResponse = new JSONObject(connThread.responseContent); 
        JSONArray jsonArray = jsonResponse.getJSONArray("UserRegistrationResult"); 

        for (int i = 0; i < jsonArray.length(); i++) 
        { 

         JSONObject result = (JSONObject)jsonArray.get(i); 
         add(new LabelField("OutputCode"+result.getString("OutputCode"))); 
         add(new LabelField("OutputDescription"+result.getString("OutputDescription"))); 

        } 
       } 
       catch (JSONException e) 
       { 
        add(new LabelField(e.getMessage().toString())); 
        e.printStackTrace(); 
       } 


      } 
      else 
      { 
       Status.show("Transmission Failed"); 
      } 

     } 
    } 
}