2017-02-21 7 views
1

У меня возникли проблемы с отправкой JSON данных из моего приложения для Android, написанного на C# с использованием Xamarin Android (MvvmCross).Почтовый клиент Xamarin для Android JSON для узла JS веб-службы

Функция в приложении Android может работать без каких-либо исключений; однако мой веб-сервис (написанный в Node JS с использованием Express), кажется, не обнаруживает почтовый запрос на его конечной точке. Обратите внимание, что другие конечные точки, которые используют get (для отправки данных из веб-службы в приложение для Android) работают отлично.

Ниже моя функция, чтобы отправлять свои данные на моем веб-службы

public async Task<int> insertSales(IEnumerable<Models.SalesTable> newsales) 
    { 
     /*ServerDatabaseApi.insertSalesEndpoint = "http://" + ipAddress + ":" + port + 
     "/insertsales";*/ 
     WebRequest request = WebRequest.CreateHttp(ServerDatabaseApi.insertSalesEndpoint); 
     request.Method = "POST"; 
     request.ContentType = "application/json"; 
     try 
     { 
      using (var streamwriter = new StreamWriter(await request.GetRequestStreamAsync())) 
      { 
       string json = JsonConvert.SerializeObject(newsales, Formatting.Indented); 
       streamwriter.Write(json); 
       streamwriter.Flush(); 
      } 
      return 1; 
     } 
     catch (WebException we) 
     { 
      return 0; 
     } 
    } 

При выполнении функции выше, она всегда удается (return 1; всегда выполняется). Я также попытался проверить сериализацию JSON, и он работает отлично.

Ниже также прилагается код конечной точки, используемый для обслуживания данных.

/*endpoint for inserting a new sales to sales table*/ 
app.post('/insertsales', function(appReq, appRes){ 
    console.log("Insert sales; count : "+ appReq.body.length); 
    sql.connect(conn).then(function(){ 
     console.log("Insert sales; count : "+ appReq.body.length); 
     for (var i = 0 ; i < appReq.body.length ; i++) { 
      new sql.Request() 
      .query("insert into SalesTable " + 
      "values  ('"+appReq.body[i].DocumentNo+"','"+appReq.body[i].DateCreated+"','"+appReq.body[i].Location+"',"+ 
      appReq.body[i].TotalDiscountAmount+","+appReq.body[i].Total+",'"+appReq.body[i].SalesmanId+"','"+ 
      appReq.body[i].CustomerId+"',"+appReq.body[i].Latitude+","+appReq.body[i].Longitude+")") 
     .catch(function(err){ 
      console.log(err); 
      }); 
     } 
    }).catch(function(err){ 
     console.log(err); 
    }); 
}); 

Я попытался проследить достиг ли конечную точку или не используя console.log. Однако он никогда не выполняется.

Не могли бы вы помочь мне определить, где я ошибся? Заранее спасибо.

ответ

1

В вашем коде .NET нет ничего, что фактически отправляет WebRequest. Вы создаете запрос, записываете JSON в его поток и очищаете его. Вот простой способ сделать сетевой вызов (непроверенный):

public async Task<int> InsertSales(IEnumerable<Models.SalesTable> newSales) 
{ 
    var ipAddress = "";// your IP address here 
    var port = ""; // your port here 
    var endpoint = $"http://{ipAddress}:{port}/insertsalesline"; 
    var requestString = JsonConvert.SerializeObject(newSales); 
    var content = new StringContent(requestString, Encoding.UTF8, "application/json"); 

    using (var client = new HttpClient()) 
    { 
     var reponse = await client.PostAsync(endpoint, content); 
     if (reponse.IsSuccessStatusCode) 
      return 1; 
     else 
      return 0; 
    } 
} 
+0

Привет, Люк, спасибо за помощь и объяснение! На основании http://stackoverflow.com/a/10027534/5023889 ответ сначала я подумал: '.Flush' уже отправляет' WebRequest'. –

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