2017-02-21 187 views
1

我在使用Xamarin Android(MvvmCross)從我的Android應用程序發送發送JSON數據時遇到問題。Xamarin Android客戶端發佈JSON到節點JS web服務

Android應用程序中的函數可以毫無例外地運行;但是,我的Web服務(使用Express編寫的Node JS)似乎未檢測到其端點上的發佈請求。請注意,使用get(將Web服務中的數據發送到Android應用)的其他終端正在運行。

下面是我的功能,我的數據發佈到我的web服務

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'。 –