我正在 WPF 中構建一個簡單的餐廳管理系統。我在 Laravel 有我的后端。當客戶從移動應用程式下訂單時,我需要設定一個 Web 套接字以在 WPF 應用程式上獲得實時通知。我在 Laravel 中使用beyondcode/laravel-websockets. laravel-echo為方便起見,我使用Vue在客戶端測驗了 Web 套接字。那里一切正常,但我找不到任何可以laravel-echo在 C# 中復制的解決方案。
這是我在 Vue.js 中使用的代碼laravel-echo:
import Echo from "laravel-echo";
import Pusher from "pusher-js";
window.Pusher = Pusher;
const token = "1|CSaob3KZhU5UHiocBjPgzpazbceUKTLRLJO0ZIV0"
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'laravel_rdb',
wsHost: '127.0.0.1',
authEndpoint: 'http://localhost/may-app/public/broadcasting/auth',
encrypted: false,
forceTLS: false,
wsPort: 6001,
wssPort: 6001,
disableStats: true,
enabledTransports: ['ws', 'wss'],
auth : {
headers : {
Authorization: "Bearer " token,
Accept: "application/json",
}
},
})
window.Echo.private('customer-order')
.listen('OrderPlaced', (e) => {
console.log(e)
})
我發現SocketIOClient用于在 .NET 中實作 Web 套接字功能。我嘗試使用在這里找到的解決方案,但它對我不起作用。另外,我沒有找到任何方法在這個包中設定我的身份驗證 URL。我閱讀了與身份驗證相關的任何內容的socket.io檔案,但我找不到任何內容。
如何在 C# .NET 中實作與 laravel-echo 中相同的功能?
uj5u.com熱心網友回復:
.NET 可能沒有像 laravel-echo 這樣的客戶端。但是,您將能夠使用 pusher 客戶端連接到您的套接字:pusher/pusher-websocket-dotnet這可能是您可以達到的最高兼容性級別。但是你需要自己決議你的訊息并訂閱頻道,不會有像 laravel-echo 那樣的甜蜜包裝 =(
uj5u.com熱心網友回復:
我能夠使用PunyFlash在答案中提到的包來實作解決方案。NuGet 包可在此處獲得,這里是 GitHub 存盤庫。
我的解決方案將來可能對某人有用,因此,我laravel-echo在 .NET 中的上述代碼的等效代碼是:
internal class OrderSocket
{
public static async void Connect()
{
try
{
//Setting authentication
var authorizer = new CustomAuthorizer("http://localhost/may-app/public/broadcasting/auth")
{
AuthenticationHeader = new System.Net.Http.Headers.AuthenticationHeaderValue("Authorization", "Bearer " "1|CSaob3KZhU5UHiocBjPgzpazbceUKTLRLJO0ZIV0"),
};
//Creating pusher object with authentication
Pusher pusher = new Pusher("laravel_rdb", new PusherOptions
{
Authorizer = authorizer,
Host = "127.0.0.1:6001",
});
//Connecting to web socket
await pusher.ConnectAsync().ConfigureAwait(false);
//Subscribing to channel
Channel channel = await pusher.SubscribeAsync("private-customer-order").ConfigureAwait(false);
if (channel.IsSubscribed)
{
//Binding to an event
channel.Bind("App\\Events\\OrderPlaced", (PusherEvent eventResponse) =>
{
// Deserialize json if server returns json values
Debug.WriteLine(eventResponse.Data);
});
}
}
catch (Exception)
{
Debug.WriteLine("An exception occurred.");
}
}
}
//HttpAuthorizer child class to set default headers
internal class CustomAuthorizer : HttpAuthorizer
{
public CustomAuthorizer(string authEndpoint) : base(authEndpoint) { }
public override void PreAuthorize(HttpClient httpClient)
{
base.PreAuthorize(httpClient);
httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/458854.html
上一篇:按鈕用戶控制元件WPF
