2016-07-11 9 views
0

Mit dem Event-Hub arbeiten und etwas finden finde ich ziemlich merkwürdig.Daten an den Event-Hub senden

Wie kann ich Daten an den eventhub als ein Gerät senden, die ich nicht bin.

private static Task<HttpResponseMessage> PostTelemetryAsync(string test) 
     { 
      var serviceNamespace = "dev-hub"; 
      var hubName = "eventhub"; 
      var url = string.Format("/{0}/publishers/testdevice/messages/", hubName); 

      // Create client. 
      var httpClient = new HttpClient 
      { 
       BaseAddress = new Uri(string.Format("https://{0}.servicebus.windows.net/", serviceNamespace)) 
      }; 

      var payload = JsonConvert.SerializeObject(test); 

      var sas = createToken("dev-hub", "anotherDevice", "IdmUSeHmcrLfjSfc2ssJVvLcsMIHM/uqG1xSLUIh5t4="); 


      httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", sas); 

      var content = new StringContent(payload, Encoding.UTF8, "application/json"); 

      content.Headers.Add("ContentType", "application/json"); 

      return httpClient.PostAsync(url, content); 
     } 
     private static string createToken(string resourceUri, string keyName, string key) 
     { 
      TimeSpan sinceEpoch = DateTime.UtcNow - new DateTime(1970, 1, 1); 
      var week = 60 * 60 * 24 * 7; 
      var expiry = Convert.ToString((int)sinceEpoch.TotalSeconds + week); 
      string stringToSign = HttpUtility.UrlEncode(resourceUri) + "\n" + expiry; 
      HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(key)); 
      var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign))); 
      var sasToken = String.Format(CultureInfo.InvariantCulture, "SharedAccessSignature sr={0}&sig={1}&se={2}&skn={3}", HttpUtility.UrlEncode(resourceUri), HttpUtility.UrlEncode(signature), expiry, keyName); 
      return sasToken; 
     } 

Im Code oben Ich bin ein SAS-Token für das Gerät anotherDevice zu erzeugen, sondern auf die URL ... Verlage/Testgerät SAB/Nachrichten/Posting. Das ist ein anderes Gerät.

Der Eventprocessor, den ich verwende, denkt, dass die Daten vom Testgerät gesendet werden, aber das SAS-Token für ein anderes Gerät generiert wird.

Soll es so funktionieren? Wie kann ich ein SAS-Token für ein anderes Gerät verwenden, um Daten an den Hub zu senden, oder fehlt mir hier etwas?

+0

Sie sollten Ihre Schlüssel neu generieren, seit Sie es hier gepostet haben. ;) –

+0

Keine Sorge .. Nicht die richtigen Tasten oder Namen .. :) –

+0

Hat die Antwort das Problem geklärt oder brauchst du mehr Infos? –

Antwort

0

Das sas-Token ist es, Ihre Anwendung zu autorisieren, Daten zu senden. Sie können Hunderte von verschiedenen Herausgebern haben, die alle den gleichen sas-Token verwenden. Stellen Sie sich vor, dass die Autorisierung dieses freigegebene Schlüssels ist, den Sie auf Ihre Geräte verteilen. Sie müssen die Publisher nicht vor dem Senden registrieren. Verwenden Sie das Token nur als Schlüssel zum Senden von Metriken, nicht als Möglichkeit, zu registrieren, von welchem ​​Gerät die Daten gesendet wurden.

Verwandte Themen