none
Azure Event Hub aus Windows Phone?

    Frage

  • Hallo!

    Ich lese zwar schon länger mit, bin aber zum ersten mal aktiv hier im Forum! Ich hoffe, meine Frage ist nicht FAQ, ich hab' zwar gesucht, aber nichts in der Richtung gefunden.

    Ich habe eine Test-Applikation aus Windows, die in einen Azure Event Hub schreibt. Das funktioniert soweit gut, ich nutze dazu aber die "Microsoft.ServiceBus.Messaging.MessageFactory" Klasse, die vom Microsoft Azure Service Bus SDK zur Verfügung gestellt wird.

                string _eventHubName = "myeventhub";
                string _connection = "Endpoint=((connection string aus azure))";
                
                MessagingFactory _factory = MessagingFactory.CreateFromconnectionString(_connection);
                _client = factory.CreateEventHubClient(_eventHubName);
    
                //Prepare random test data in JSON format
                var _message = new TestData { Temp = _temp, Timecreated = DateTime.Now, DeviceId = _deviceId };
                string _output = Newtonsoft.Json.JsonConvert.SerializeObject(_message);
    
                //await SendDataAsync(_deviceId, _output);
    
                EventData _data = new EventData(Encoding.UTF8.GetBytes(_output));
                _data.PartitionKey = _deviceId;
                await _client.SendAsync(_data);


    Mein Ziel ist, es, das aus Windows Phone zu tun, ich finde aber diese SDK nicht.

    Danke!


    • Bearbeitet Kreti und Bleti Donnerstag, 23. Juli 2015 12:01 Fehler im Code
    Donnerstag, 23. Juli 2015 11:05

Antworten

  • Hi

    Ich habe neulich ein solches Beispiel für Windows Phone 8(.1) geschrieben. Ich hoffe, Du nutzt Diese Version. Das erwähne NuGet Package erleichtert zwar die Erstellung von Nachrichten für den Azure Event Hub, ist aber zum Glück nicht notwendig. Du musst lediglich eine JSON Nachricht erstellen und diese an die richtige URL senden.

    Der einzige Stolperstein ist, dass Du eine "Shared Access Signature" brauchst, die einem bestimmten Format folgt. Es gibt aber einen tollen Generator "Event Hubs Signature Generator 0.2.0.1" dafür unter: https://github.com/sandrinodimattia/RedDog/releases/tag/0.2.0.1

    Wenn Du die Signatur erstellt hast, einfach in den Code kopieren und mit dem Objekt, dass Du an Event Hub senden möchtest, eine JSON Nachricht generieren.

            private Task<HttpResponseMessage> PostSensorDataAsync(SensorData sensorData)
            {
                var sSig = "SharedAccessSignature sr=<<hier die Signatur reinkopieren>>";
    
                // Namespace info.
                var serviceNamespace = "companymeetingeventhub-ns";
                var hubName = "testeventhub001";
                var url = string.Format("{0}/publishers/{1}/messages", hubName, sEventHubDeviceId);
    
                // Create client.
                var httpClient = new HttpClient();
                httpClient.BaseAddress = new Uri(string.Format("https://{0}.servicebus.windows.net/", serviceNamespace));
                httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", sSig);
    
                var payload = JsonConvert.SerializeObject(sensorData);
                var content = new StringContent(payload, Encoding.UTF8, "application/json");
    
                return httpClient.PostAsync(url, content);
            }

    Achtung: in der Shared Access Signature legst Du eine Time-To-Live fest. Danach ist die Signatur ungültig. Diese musst Du entweder sehr hoch setzten oder besser - nicht hard-coden wie in meinem Beispiel!

    Ich hoffe, das hilft weiter! Viel Spass beim coden.

    Donnerstag, 23. Juli 2015 11:17

Alle Antworten

  • Hi

    Ich habe neulich ein solches Beispiel für Windows Phone 8(.1) geschrieben. Ich hoffe, Du nutzt Diese Version. Das erwähne NuGet Package erleichtert zwar die Erstellung von Nachrichten für den Azure Event Hub, ist aber zum Glück nicht notwendig. Du musst lediglich eine JSON Nachricht erstellen und diese an die richtige URL senden.

    Der einzige Stolperstein ist, dass Du eine "Shared Access Signature" brauchst, die einem bestimmten Format folgt. Es gibt aber einen tollen Generator "Event Hubs Signature Generator 0.2.0.1" dafür unter: https://github.com/sandrinodimattia/RedDog/releases/tag/0.2.0.1

    Wenn Du die Signatur erstellt hast, einfach in den Code kopieren und mit dem Objekt, dass Du an Event Hub senden möchtest, eine JSON Nachricht generieren.

            private Task<HttpResponseMessage> PostSensorDataAsync(SensorData sensorData)
            {
                var sSig = "SharedAccessSignature sr=<<hier die Signatur reinkopieren>>";
    
                // Namespace info.
                var serviceNamespace = "companymeetingeventhub-ns";
                var hubName = "testeventhub001";
                var url = string.Format("{0}/publishers/{1}/messages", hubName, sEventHubDeviceId);
    
                // Create client.
                var httpClient = new HttpClient();
                httpClient.BaseAddress = new Uri(string.Format("https://{0}.servicebus.windows.net/", serviceNamespace));
                httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", sSig);
    
                var payload = JsonConvert.SerializeObject(sensorData);
                var content = new StringContent(payload, Encoding.UTF8, "application/json");
    
                return httpClient.PostAsync(url, content);
            }

    Achtung: in der Shared Access Signature legst Du eine Time-To-Live fest. Danach ist die Signatur ungültig. Diese musst Du entweder sehr hoch setzten oder besser - nicht hard-coden wie in meinem Beispiel!

    Ich hoffe, das hilft weiter! Viel Spass beim coden.

    Donnerstag, 23. Juli 2015 11:17
  • Sorry, hatte Chaos oben im Code. Aus Versehen meinen Test-Event Hub Listener reinkopiert :(

    Die Lösung oben funktionert aber nach etwas Ausprobieren!

    Einzig die Shared Access Signature finde ich etwas unpraktisch wegen dem TTL.

    Donnerstag, 23. Juli 2015 12:09