SignalR: озадачен именами методов — camelCase против lowerCamelCase — в чем смысл?

#c# #asp.net-mvc #signalr #signalr-hub

#c# #asp.net-mvc #signalr #signalr-концентратор

Вопрос:

Не могли бы вы сказать мне, почему имена в классах-концентраторах находятся в camelCase, но в клиентском js-коде это в lowerCamelCase? И почему я не могу вызвать Hello-метод из MyHub-класса просто MyHub.server.Hello ?

Я имею в виду, что было бы более понятно называть внутренние методы их точными c #-именами, не так ли? Имеет ли это переименование какое-либо другое значение, кроме соглашений о стиле кода?

Я надеюсь, что мой вопрос достаточно ясен.

В script.js:

 $(function() {
    var hub = $.connection.myHub;

    hub.client.hello = function (message) { //why not hub.client.Hello ?
        alert(message);
    }

    $("#btn").click(function(){
         hub.server.hello(); //why not hub.server.Hello() ??
    });

});
  

В MyHub-классе:

 public class MyHub : Hub
    {
        public void Hello()
        {
            Clients.All.hello(); //why not Clients.All.Hello() ?
        }
    }
  

Ответ №1:

Это связано с соглашением об именовании и кодами прокси SignalR.

JavaScript — это язык, чувствительный к регистру, где, как предполагает Dotnet, используется camelCasing. Вызов метода на стороне сервера проходит через прокси-коды, которые есть в javascript.

Комментарии:

1. Добавление к тому, что опубликовал Рахатур. когда мы включаем <script src=»signalr/hubs»></script> a file hubs.js is generated automatically by the signalr framework and this follows the convention (hub name / async methos are camel cased in javascript and pascal cased in c#) У вас также есть выбор не использовать этот прокси. Просто не включайте эту строку и создайте свой собственный прокси. Тогда вы можете использовать точные имена как в коде javascript, так и в коде c #. также вместо hub.server вы должны использовать hub.invoke (‘Привет’). Если вы считаете, что использование другого корпуса может вызвать путаницу, вы можете использовать позже.

Ответ №2:

Javascript традиционно использует camelCase соглашение об именовании для имен методов, которое обычно использует экосистема .net PascalCase . Javascript и некоторые языки .net чувствительны к регистру.