-
-
Notifications
You must be signed in to change notification settings - Fork 178
C# SSE Client
Akram El Assas edited this page Jul 19, 2025
·
2 revisions
- Install .NET
- Create a new console app:
dotnet new console -n dotnet
Here is a sample C# SSE client Program.cs
:
using System;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text.Json;
using System.Text;
using System.IO;
var baseUrl = "http://localhost:8000/api/v1";
var username = "admin";
var password = "wexflow2018";
var workflowId = 41;
using var httpClient = new HttpClient();
async Task<string> LoginAsync(string user, string pass, bool stayConnected = false)
{
var payload = new
{
username = user,
password = pass,
stayConnected = stayConnected
};
var content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync($"{baseUrl}/login", content);
if (!response.IsSuccessStatusCode)
throw new Exception($"Login failed: HTTP {response.StatusCode} - {response.ReasonPhrase}");
var json = await response.Content.ReadAsStringAsync();
var doc = JsonDocument.Parse(json);
return doc.RootElement.GetProperty("access_token").GetString();
}
async Task<string> StartWorkflowAsync(string token, int workflowId)
{
var request = new HttpRequestMessage(HttpMethod.Post, $"{baseUrl}/start?w={workflowId}");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
var response = await httpClient.SendAsync(request);
if (!response.IsSuccessStatusCode)
throw new Exception($"Start failed: HTTP {response.StatusCode} - {response.ReasonPhrase}");
var json = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<string>(json);
}
async Task ListenToSseAsync(string url, string token)
{
var request = new HttpRequestMessage(HttpMethod.Get, url);
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/event-stream"));
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
using var stream = await response.Content.ReadAsStreamAsync();
using var reader = new StreamReader(stream);
Console.WriteLine("SSE connection opened");
while (!reader.EndOfStream)
{
var line = await reader.ReadLineAsync();
if (!string.IsNullOrWhiteSpace(line) && line.StartsWith("data: "))
{
var json = line.Substring("data: ".Length);
try
{
var doc = JsonDocument.Parse(json);
Console.WriteLine("Received SSE JSON:");
Console.WriteLine(doc.RootElement.ToString());
break; // Close after first message
}
catch (Exception ex)
{
Console.WriteLine("Failed to parse SSE JSON: " + ex.Message);
}
}
}
Console.WriteLine("SSE connection closed");
}
try
{
var token = await LoginAsync(username, password);
var jobId = await StartWorkflowAsync(token, workflowId);
Console.WriteLine($"Workflow {workflowId} started. Job ID: {jobId}");
var sseUrl = $"{baseUrl}/sse/{workflowId}/{jobId}";
await ListenToSseAsync(sseUrl, token);
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
To run the client, use the following command:
cd dotnet
dotnet run
Copyright © Akram El Assas. All rights reserved.
- Install Guide
- HTTPS/SSL
- Screenshots
- Docker
- Configuration Guide
- Persistence Providers
- Getting Started
- Android App
- Local Variables
- Global Variables
- REST Variables
- Functions
- Cron Scheduling
- Command Line Interface (CLI)
- REST API Reference
- Samples
- Logging
- Custom Tasks
-
Built-in Tasks
- File system tasks
- Encryption tasks
- Compression tasks
- Iso tasks
- Speech tasks
- Hashing tasks
- Process tasks
- Network tasks
- XML tasks
- SQL tasks
- WMI tasks
- Image tasks
- Audio and video tasks
- Email tasks
- Workflow tasks
- Social media tasks
- Waitable tasks
- Reporting tasks
- Web tasks
- Script tasks
- JSON and YAML tasks
- Entities tasks
- Flowchart tasks
- Approval tasks
- Notification tasks
- SMS tasks
- Run from Source
- Fork, Customize, and Sync