Soru SignalR undefined özellik istemcisini okuyamaz


Projeme SignalR eklemeye çalışıyorum (ASPNET MVC 4). Ama işe yaramayacağım.

Aşağıdaki resimde, aldığım hatayı görebilirsiniz. image Çok fazla stackoverflow yayını okudum, ancak bunların hiçbiri sorunumu çözmüyor.

Şimdiye kadar yaptığım şey buydu:

1) Ran Install-Package Microsoft.AspNet.SignalR -Pre
2) Added RouteTable.Routes.MapHubs(); in Global.asax.cs Application_Start()
3) If I go to http://localhost:9096/Gdp.IServer.Web/signalr/hubs I can see the file content
4) Added <modules runAllManagedModulesForAllRequests="true"/> to Web.Config
5) Created folder Hubs in the root of the MVC application
6) Moved jquery and signalR scripts to /Scripts/lib folder (I'm not using jquery 1.6.4, I'm using the latest)

Bu benim Index.cshtml

<h2>List of Messages</h2>

<div class="container">
    <input type="text" id="message" />
    <input type="button" id="sendmessage" value="Send" />
    <input type="hidden" id="displayname" />
    <ul id="discussion">
    </ul>
</div>

@section pageScripts
{
    <!--Reference the SignalR library. -->
    <script src="@Url.Content("~/Scripts/jquery.signalR-1.0.0-rc1.min.js")" type="text/javascript"></script>
    <!--Reference the autogenerated SignalR hub script. -->
    <script type="text/javascript" src="~/signalr/hubs"></script>
    <script src="@Url.Content("~/Scripts/map.js")" type="text/javascript"></script>
}

Bu benim IServerHub.cs dosyası (Hubs klasöründe bulunur)

namespace Gdp.IServer.Ui.Web.Hubs
{
    using Microsoft.AspNet.SignalR.Hubs;
    [HubName("iServerHub")]
    public class IServerHub : Hub
    {
        public void Send(string name, string message)
        {
            Clients.All.broadcastMessage(name, message);
        }
    }
}

Ve bu, map.js

$(function () {

    // Declare a proxy to reference the hub. 
    var clientServerHub = $.connection.iServerHub;

    // Create a function that the hub can call to broadcast messages.
    clientServerHub.client.broadcastMessage = function (name, message) {
        $('#discussion').append('<li><strong>' + name + '</strong>:&nbsp;&nbsp;' + message + '</li>');
    };

    // Get the user name and store it to prepend to messages.
    $('#displayname').val(prompt('Enter your name:', ''));

    // Set initial focus to message input box.  
    $('#message').focus();

    // Start the connection.
    $.connection.hub.start().done(function () {
        $('#sendmessage').click(function () {
            // Html encode display name and message. 
            var encodedName = $('<div />').text($('#displayname').val()).html();
            var encodedMsg = $('<div />').text($('#message').val()).html();

            // Call the Send method on the hub. 
            clientServerHub.server.send(encodedName, encodedMsg);

            // Clear text box and reset focus for next comment. 
            $('#message').val('').focus();
        });
    });
});

DLL'nin referansları için referansları görüyorum:

  1. Microsoft.AspNet.SignalR.Core
  2. Microsoft.AspNet.SignalR.Owin
  3. Microsoft.AspNet.SignalR.SystemWeb

Herhangi bir fikir nasıl çalışır? Komut dosyaları / Script / lib klasöründeyken herhangi bir değişiklik yapmalı mıyım?

NOT Talimatı takip ediyorum İşte Windsor Kalesi'nin SignalR ile çalışmasını sağlamak için nasıl kurulacağı ve yine de, proxy'nin oluşturulamayacağı ve aynı hatayı alıp alamayacağı anlaşılıyor:

Cannot read property client of undefined

hub'a proxy'nin yaratılmamış olduğu anlamına gelir

Sunucuda böyle var

public class IncidentServerHub : Hub

ve müşteride böyle

var clientServerHub = $.connection.incidentServerHub;

Yine, dinamik olarak oluşturulan dosyayı burada görebilirim:

/GdpSoftware.Server.Web/signalr/hubs

Peki, neden proxy oluşturulmuyor?

Şimdiden teşekkürler!!! Guillermo.


44
2018-01-03 20:41


Menşei


İle deneyebilirsiniz <script type="text/javascript" src="@Url.Content("~/signalr/hubs")"></script> - nemesv
Aynı şey, yine de, tarayıcıdan göz attığımda dosya içeriğini görüyorum. Komut dosyaları / Script / lib klasöründeyken herhangi bir değişiklik yapmalı mıyım? - polonskyg


Cevaplar:


Js kodunu değiştirerek bu sorunu çözdüm:      var myHub = $.connection.SentimentsHub; için      var myHub = $.connection.sentimentsHub;

TestHub sınıf adıyla bir merkeziniz varsa js'de testHub (ilk harf küçük harf) adını kullanmanız gerekir.


60
2018-01-22 21:38



Bu çalışıyor. thks - Satish Singh
Teşekkürler, bu benim göbek isimlerimin pek uyuşmadığını fark etmeme yardımcı oldu. - wiseowl2828
Sadece "ilk" mektup :), zor! - Dhanuka777
Dokümantasyonda belirtildiği gibi "Not JavaScript'te sunucu sınıfı ve üyeleri için referans deve durumundadır. Kod örneği, JavaScript'te C # ChatHub sınıfını chatHub olarak referanslar." docs.microsoft.com/en-us/aspnet/signalr/overview/... - Sandeep


Oluşturulan proxy dosya yolunu pakete eklemeyi deneyenler için.

BundleConfig.cs dosyasına "~ / signalr / hubs" dahil etmeyin..

Sahip olabilirsiniz JQuery.SignalR pakette:

bundles.Add(new ScriptBundle("~/bundles/signalr").Include(
                  "~/Scripts/jquery.signalR-{version}.js"));

Ama eklemelisin "/ Signalr / hub" senin bakışta:

@section Scripts {
    @Scripts.Render("~/bundles/signalr")
    @Scripts.Render("/signalr/hubs")
}

Umarım bu yardımcı olur.


31
2018-06-03 21:14



Bununla çok uğraştım. Günümü kurtardın. Teşekkürler! - newman
Dinamik olarak oluşturulmuş hub js dosyası aslında yaratılmadı "/ signalr / hub" ı doğru şekilde referans gösterene kadar - dudeNumber4
DOSTUM! Eğer yapabilseydim, sana 100 dolar verirdim. - Sentinel


Aynı hata iletisini aldım ve hub sınıfındaki [HubName] özniteliğimde yazdığım bir yazım hatası gidererek bu sorunu çözdüm - istemci tarafında javascript ile tam olarak eşleşmiyordu.

C # hub sınıfı:

[HubName("gameHub")]
public class GameHub : Hub
{

istemci tarafı javascript:

var foo = $.connection.gameHub;

"gameHub" aynı olmalı.

hth


17
2018-05-24 06:53





ASP.Net MVC üyeleri için:
Kontrol edin _Layout.cshtml
Jquery paketini "@RenderBody ()", bu hatayı alacaksınız.
resoultion: Sadece "@ Scripts.Render (" ~ / bundles / jquery ")" başlık kısmına git veya  Tüm "komut" komut dosyalarına "signal" yazın


6
2018-01-11 17:42





Hub sınıflarınız herkese açık olarak tanımlanmalıdır. Örneğin:

class ChatHub : Hub

aslında olmalı

public class ChatHub : Hub

3
2017-10-22 09:56



Ah !! Öyleydi. Bunu paylaştığına sevindim. Ders öğrenildi. - raddevus


Tamam, sorunu buldum, yapmam gereken bir şey vardı:

Bu iki referans eksikti:

Microsoft.AspNet.SignalR.Hosting.AspNet
Microsoft.AspNet.SignalR.Hosting.Common

Şimdi onlara nuget paketi almalarını dahil ettim: Bu ikisini kullanan WebApiDoodle.SignalR. Sorum şu, bu Dlls'in Nuget Paketini kurduğum bir tane eklenmemesi neden: Microsoft.AspNet.SignalR -Pre?

Hata?

Sonra bunu global.asax.cs adresimde yaptım

using SignalR;

yani

RouteTable.Routes.MapHubs();

bunu kullanıyordu, bunu kullanmak ve kullanmak için bunu kaldırmam gerekiyordu:

using Microsoft.AspNet.SignalR;

Bu yüzden MapHubs bunu kullanıyor ve çalışmaya başladı.

Umarım bu başkalarına yardımcı olur. Guillermo.


2
2018-01-03 21:58





Hub sınıfını "kamu" haline getirmek benim için çözdü.


0
2017-12-14 13:48



Bu soru zaten çözülmüş haliyle evlendirilmiştir. - abhiarora


SignalR ve jQuery komut dosyalarını doğru şekilde koymalısınız. sipariş :

<script src="/Scripts/jquery-1.6.4.min.js" ></script>

<script src="/Scripts/jquery.signalR-1.1.4.js"></script>

<script src="/signalr/hubs"></script> 

0
2017-07-23 08:16