I writed a class that update a temperature sample on Cosm service... the code comes from the book's (Internet of things) examples and strangely work fine once on three.
The class run in a thread that is called every 5 min (300000ms), but the cosm datastream is updated only every 15 minutes because 2 consecutive times the thread fail.
The code is as follows (running on Netduino Plus with 4.2.0.1 firmware:
using System; using System.IO; using System.Net; using System.Text; using Microsoft.SPOT; namespace SharktearTests { public static class CosmClient { const string baseUri = "http://api.cosm.com/v2/feeds/"; const string apiKey = "HERE MY COSM APY KEY"; const string feedId = "HERE THE FEED ID"; public static void Send(string sample) { Debug.Print("time: " + DateTime.Now); Debug.Print("memory available: " + Debug.GC(true)); try { using (var request = CreateRequest(apiKey, feedId, sample)) { request.Timeout = 5000; // 5 seconds // send request and receive response using (var response = (HttpWebResponse)request.GetResponse()) { HandleResponse(response); } } } catch (Exception e) { Debug.Print(e.ToString()); } } static HttpWebRequest CreateRequest(string apiKey, string feedId, string sample) { byte[] buffer = Encoding.UTF8.GetBytes(sample); var request = (HttpWebRequest)WebRequest.Create (baseUri + feedId + ".csv"); // request line request.Method = "PUT"; // request headers request.ContentLength = buffer.Length; request.ContentType = "text/csv"; request.Headers.Add("X-ApiKey", apiKey); // request body using (Stream stream = request.GetRequestStream()) { stream.Write(buffer, 0, buffer.Length); } return request; } public static void HandleResponse(HttpWebResponse response) { Debug.Print("Status code: " + response.StatusCode); } } }
I also tried the code that use sockets instead of top level class but this time the program fail on the following line:
IPHostEntry hostEntry = Dns.GetHostEntry(host);
here the complete source code:
using System; using System.IO; using System.Net; using System.Text; using Microsoft.SPOT; namespace SharktearTests { public static class CosmClient { const string baseUri = "http://api.cosm.com"; const string apiKey = "HERE MY COSM APY KEY"; const string feedId = "HERE THE SERVICE FEED ID"; public static void Send(string sample) { Debug.Print("time: " + DateTime.Now); Debug.Print("memory available: " + Debug.GC(true)); try { using (var request = CreateRequest(apiKey, feedId, sample)) { request.Timeout = 5000; // 5 seconds // send request and receive response using (var response = (HttpWebResponse)request.GetResponse()) { HandleResponse(response); } } } catch (Exception e) { Debug.Print(e.ToString()); } } static HttpWebRequest CreateRequest(string apiKey, string feedId, string sample) { byte[] buffer = Encoding.UTF8.GetBytes(sample); var request = (HttpWebRequest)WebRequest.Create (baseUri + feedId + ".csv"); // request line request.Method = "PUT"; // request headers request.ContentLength = buffer.Length; request.ContentType = "text/csv"; request.Headers.Add("X-ApiKey", apiKey); // request body using (Stream stream = request.GetRequestStream()) { stream.Write(buffer, 0, buffer.Length); } return request; } public static void HandleResponse(HttpWebResponse response) { Debug.Print("Status code: " + response.StatusCode); } } }
Any suggestion?