2013-09-18 2 views
0

Я написал веб-службу REST в C#. Получить запрос работает нормально, но вставлять, обновлять и удалять нет. Когда я пытаюсь вставить некоторые значения из Android таблетки (клиента) через службу REST в базу данных MYSQL возникает ошибка: Метод не имеетВставить значения в mySQL с помощью wcf REST и Android

Я посылаю строку JSON от андроида клиента к веб-сервиса:

в Android Developer Tool (затмение):

String url = IP + PORT +"/RESTService/insert/"; 
      HttpClient client = new DefaultHttpClient(); 
      HttpResponse response; 
      JSONObject json = new JSONObject(); 

       HttpPost post = new HttpPost(url); 
       json.put("userName", name); 
       json.put("userPassword", password); 

       StringEntity se = new StringEntity(json.toString()); 
       se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE,"application/json")); 
       post.setEntity(se); 
       response = client.execute(post); 

в C#: сервисный интерфейс:

[OperationContract] 
    [WebInvoke(Method = "POST", UriTemplate = "/insert/{jsonObj}", 
     RequestFormat = WebMessageFormat.Json,  
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Bare)] 
    void InsertUser(string jsonObj); 

Сервис Methode:

public void InsertUser(string jsonObj) 
    { 
     string name = null; 
     string password = null; 
     DataContractJsonSerializer obj = new DataContractJsonSerializer(typeof(User)); 
     dynamic dynObj = JsonConvert.DeserializeObject(jsonObj); 

     foreach (var data in dynObj.userObject) 
     { 
      name = data.userName; 
      password = data.userPassword; 
     } 

     string sql = "INSERT INTO user (userName, userPassword) VALUES('" + name + "', '" + password +"';)"; 

     if (conn.State == ConnectionState.Closed) 
     { 
      conn.Open(); 
     } 

     command = new MySqlCommand(sql, conn); 
     command.ExecuteNonQuery(); 
     conn.Close(); 
     command.Dispose(); 
    } 

Мой Пользователь:

namespace RESTService 
{ 
    [DataContract] 
    public class User 
    { 
     [DataMember] 
     public string userName { get; set; } 
     [DataMember] 
     public string userPassword { get; set; } 

     public User(string name, string password) 
     { 
      this.userName = name; 
      this.userPassword = password; 
     } 
    } 

При запуске веб-службы и пытаются вставить значения через приложение для Android, ничего не происходит. Я думаю, что значения из приложения не доходят до веб-службы. Но я понятия не имею, почему. Было бы здорово, если кто-то может мне помочь :).

Заранее спасибо

ответ

0

Первый шаг должен был бы написать модульного тестирования C#, который осуществляет метод InsertUser через веб-службы. При выполнении этого теста, я думаю, вы обнаружите, что ваш UriTemplate неверен. Если вы выполняете POST, объект json будет находиться в теле запроса, а не в URL-адресе. Я хотел бы попробовать атрибут, как это:

[WebInvoke(Method = "POST", UriTemplate = "/users", 
    RequestFormat = WebMessageFormat.Json,  
    ResponseFormat = WebMessageFormat.Json] 

Ваш андроида URL будет выглядеть следующим образом (я думаю):

String url = IP + PORT + "/users"; 

Другое дело, чтобы проверить будет Скрипач. Когда проходит тестирование устройства, вы можете проверить успешные запросы. Ваш android client can also be configured использовать Fiddler.

+0

Благодарим вас за быстрый ответ. Я попробую C# unit test. Но у меня есть некоторые вопросы, в моем теле запроса мой пользователь передается следующим образом: {"userPassword": "test", "userName": "testname"} Как я могу получить атрибуты userName и userPassword с их значения. Какой параметр (строка, объект, ...), в моем веб-службы METHODE вставки я должен использовать общественной недействительным InsertUser (строка jsonObj) или общественного недействительными InsertUser (объект jsonObj) преобразовать JSONString в мой Пользовательский объект? – tharos

+0

Вы должны иметь возможность изменить свою подпись веб-сервиса на это: 'public void InsertUser (Пользователь пользователя)' WCF будет автоматически выполнять десериализацию Пользователя. –

+0

отлично, теперь он работает;). Большое спасибо за подсказку подписи сервиса. Я изменил свой метод на: 'public void InsertUser (Пользователь пользователя) {string name = user.userName; string password = user.userPassword; ...} ' – tharos

Смежные вопросы