Interoperabilität in der Cloud mit Windows Azure und Java (Teil 3)
Kommentare

Der AppFabric Message Buffer im Detail

Ein zentrales Element der Anwendung stellt der Message Buffer dar. In unserem Fall wurde hierfür ein eigens geschriebener Client erstellt, da der Client aus dem

Der AppFabric Message Buffer im Detail

Ein zentrales Element der Anwendung stellt der Message Buffer dar. In unserem Fall wurde hierfür ein eigens geschriebener Client erstellt, da der Client aus dem SDK leider nicht die Anforderungen an die Interoperabilität erfüllte. In Listing 1 ist dargestellt, wie dies geschieht.

        private void CreateClient()
        {
            messageBufferLocation = string.Format("http://{0}.servicebus.windows.net/{1}", ServiceNamespace, BufferName);

            client = new WebClient();
            client.Encoding = System.Text.Encoding.UTF8;
            client.BaseAddress = string.Format("https://{0}-sb.accesscontrol.windows.net/", ServiceNamespace);
            NameValueCollection values = new NameValueCollection();
            values.Add("wrap_name", "owner");
            values.Add("wrap_password", OwnerKey);
            values.Add("wrap_scope", messageBufferLocation);
            byte[] responseBytes = client.UploadValues("WRAPv0.9", "POST", values);
            string response = Encoding.UTF8.GetString(responseBytes);

            string token = Uri.UnescapeDataString(response.Split('&').Single(value => value.StartsWith("wrap_access_token=", StringComparison.OrdinalIgnoreCase)).Split('=')[1]);

            authHeaderValue = string.Format("WRAP access_token="{0}"", token);
        }  

Der Client wird über die Standard-HTTP-Möglichkeiten des WebClients aus dem .NET Framework erstellt. Wichtig ist, dass das UTF-8 Encoding explizit angegeben wird. Verlässt man sich auf „Default“ wird hier ein anderes – falsches – Ergebnis zurückgeliefert. Dies ist in allen Szenarien mit einer Java-Interop der Fall. Das Encoding muss immer explizit angegeben werden. Aus Platzgründen wird an dieser Stelle nicht der gesamte Client erklärt. In Listing 2 wird vorgestellt, wie man eine Message über einen simplen REST-Aufruf erstellen kann.

        public void SendMessage(string msg)
        {
            client.Headers[HttpRequestHeader.ContentType] = "text/xml";
            client.Headers[HttpRequestHeader.Authorization] = authHeaderValue;
            client.UploadData("messages?timeout=20", "POST", Encoding.UTF8.GetBytes(msg));
        }  
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -