WebSequenceDiagrams API mit .NET
Heute bin ich durch einen Tweet auf websequencediagrams aufmerksam geworden. Mit websequencediagrams kann man sich über eine einfache Textnotation ein SequenzDiagramm in verschiedenen Styles erstellen lassen.
Die Applikation bietet aber auch eine Schnittstelle die es einem ermöglicht mit .NET ein solches Diagramm zu erstellen.
Folgendes CodeSnippet soll zeigen wie:
1 public void SaveSequenceDiagram(string data, string outFile, SequenceStyle style, SequenceOutputFormat outputFormat) 2 { 3 var request = WebRequest.Create("http://www.websequencediagrams.com"); 4 request.Method = "POST"; 5 6 string postData = string.Format("style={0}&format={1}&message={2}", style, outputFormat, HttpUtility.UrlEncode(data, Encoding.UTF8)); 7 8 byte[] byteArray = Encoding.UTF8.GetBytes(postData); 9 request.ContentType = "application/x-www-form-urlencoded"; 10 request.ContentLength = byteArray.Length; 11 12 //because error: The remote server returned an error: (417) Expectation Failed. 13 System.Net.ServicePointManager.Expect100Continue = false; 14 15 Stream dataStream = request.GetRequestStream(); 16 dataStream.Write(byteArray, 0, byteArray.Length); 17 dataStream.Close(); 18 19 dataStream = request.GetResponse().GetResponseStream(); 20 if (dataStream == null) return; 21 22 using (var reader = new StreamReader(dataStream)) 23 { 24 string responseFromServer = reader.ReadToEnd(); 25 var image = responseFromServer.Substring(12, 9); 26 27 using (var webClient = new WebClient()) 28 { 29 byte[] resp = webClient.DownloadData(string.Format("http://www.websequencediagrams.com?{0}={1}", outputFormat, image)); 30 using (var fileStream = new FileStream(outFile, FileMode.OpenOrCreate)) 31 { 32 fileStream.Write(resp, 0, resp.Length); 33 } 34 } 35 } 36 37 dataStream.Close(); 38 }
1 public enum SequenceOutputFormat 2 { 3 img, 4 pdf, 5 png, 6 svg 7 }
1 public enum SequenceStyle 2 { 3 @default, 4 earth, 5 modernblue, 6 mscgen, 7 omegapple, 8 qsd, 9 rose, 10 roundgreen, 11 napkin, 12 }
Aufgerufen wird das ganze wie folgt:
1 SaveSequenceDiagram("Alice->Bob: Authentication Request\nactivate Bob\nBob->Alice: Authentication Response\ndeactivate Bob", "out.svg", 2 SequenceStyle.roundgreen, SequenceOutputFormat.svg);
Beim Aufruf an den Dienst hab ich zu Anfang immer folgende Fehlermeldung bekommen “The remote server returned an error: (417) Expectation Failed.” Die Problemlösung habe ich nach etwas googlen, beim Gordon finden können. Danke nochmal an dieser Stelle.
Viel Spaß beim entwickeln : )




