Ich versuche, SignalR zu verwenden, um eine Nachricht vom Server an den Client zu senden, ohne dass der Client die Nachricht auslöst. Aus Tutorials, die ich gesehen habe, definieren Sie eine Methode im Client wie folgt:
signalRConnection.client.addNewMessage = function(message) {
console.log(message);
};
sollte die Verwendung des folgenden Hub-Codes auf dem Server ermöglichen:
public async Task SendMessage(string message)
{
await Clients.All.addNewMessage("Hey from the server!");
}
Der Clients.All.addNewMessage
Aufruf verursacht jedoch einen Fehler im C#-Compiler:
'IClientProxy' enthält keine Definition für 'addNewMessage' und es konnte keine zugängliche Erweiterungsmethode 'addNewMessage' gefunden werden, die ein erstes Argument vom Typ 'IClientProxy' akzeptiert (fehlen Sie eine using-Direktive oder einen Assemblyverweis?)
Wie behebe ich das? Der Servercode ist im Hub enthalten.
Dies liegt daran, dass Sie ASP.NET Core SignalR verwenden, aber die Clientmethode nach ASP.NET MVC SignalR aufrufen . In ASP.NET Core SignalR müssen Sie die Clientmethode wie folgt aufrufen:
public async Task SendMessage(string message)
{
await Clients.All.SendAsync("AddNewMessage", message); // here `AddNewMessage` is the method name in the client side.
}
Es zeigt Ihren clientseitigen Code auch für ASP.NET MVC SignalR. Für ASP.NET Core SignalR sollte es wie folgt aussehen:
"use strict";
var connection = new signalR.HubConnectionBuilder().withUrl("/chatHub").build();
connection.on("AddNewMessage", function (message) {
// do whatever you want to do with `message`
});
connection.start().catch(function (err) {
return console.error(err.toString());
});
Und in der Startup
Klasseneinstellung SignalR
sollte wie folgt sein:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddSignalR(); // Must add this
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSignalR(routes =>
{
routes.MapHub<ChatHub>("/chatHub"); // Here is configuring for `ChatHub`
});
app.UseMvc();
}
}
Bitte befolgen Sie dieses Tutorial Erste Schritte mit ASP.NET Core SignalR, wenn weitere Probleme auftreten.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen