Domanda

Sto usando SignalRR con ASP.NET 4.5 WebForms. Non ero in grado di far parlare il cliente con il server e viceversa. Quello che voglio raggiungere è semplicemente essere in grado di testare come il client può attivare una funzione server e come il server può attivare una funzione client. Ecco il codice che uso:

Codice lato client (HitCounter.aspx)

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="Scripts/jquery-1.8.2.js"></script>
<script src="Scripts/jquery.signalR-0.5.3.min.js"></script>
<script type="text/javascript" src="SignalR/Hubs"></script>

<style>
    #currentHitCount {
        font-family: Arial;
        font-size:40pt;
        margin-left:auto;
        margin-right:auto;
        display:block;
        text-align:center;
    }

</style>
</head>
<body>
<div id="currentHitCount"></div>
<script type="text/javascript">

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

       $.extend(hub, {
           showHitCount: function (hitCount){
               if(hitCount > 1){
                   $('#currentHitCount')
                   .html("This site has had " + hitCount + " hits.");
               }
               else{
                   $('#currentHitCount')
                   .html("This site has had " + hitCount + " hit.");
               }
           },
           addMessage: function (str) {
               $('#currentHitCount')
               .html("Getting Message: " + str);
           }
       });

       $.connection.hub.start(function () {
           hub.addMessage("test");
           hub.addHit();

       });

       $.connection.hub.stateChanged(function (change) {
           if ($.signalR.connectionState["connected"] === change.newState) {                  
           }
       });

       $.connection.hub.error(function () {
       });

   });


   </script>
  <div style="background-color:red; width:290px; height:200px; color:white; position:absolute; top:100px; left:30px;" id="thebutton">test</div>

</body>
</html>
.

codice lato server (app_code / hitcounterhub.cs)

using SignalR.Hubs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;

[HubName("hitCounter")]
public class HitCounterHub : Hub, IDisconnect
{
    static int _hitCount;

public void addHit(string pageId)
{
    _hitCount += 1;
    Clients.showHitCount(_hitCount);

}

public Task ClientCallingServer()
{
    _hitCount += 1;
    return Clients["foo"].showHitCount(_hitCount);
}


public Task Join()
{
    return Groups.Add(Context.ConnectionId, "foo");
}

public Task Send(string message)
{
    _hitCount += 1;
    return Clients["foo"].addMessage(message);       
}


public Task Disconnect()
{
    return Clients["foo"].leave(Context.ConnectionId);
}
}
.

Sto eseguendo il codice localmente su IIS7.5 ma ottengo ed errori quando si esegue il codice in Visual Studio 2012.

L'errore:

.

localhost / segnaler / segnalerr / Invia? Trasporto= Serversentevents & ConnectionID= 400F1302-6C8E-418E-A14C-DA95F836A29D 500 (Errore interno del server)

Uso del debugger Chrome La pagina Errore mostra: Il metodo 'addit' non può essere risolto.

Ancora una volta, quello che sto cercando di fare è creare un semplice test per verificare come chiamare un server dal client e il client dal server.

Grazie.

È stato utile?

Soluzione

Il motivo per cui non sei in grado di risolvere il tuo metodo AddHit è perché hai lo stesso nome della funzione sul server come fai il client.

AKA per chiamare il server che stai facendo hub.addhit ("laksjdf").Ma per chiamare il cliente sarebbe la stessa cosa: hub.addhit ("laksjdfldksj");Quindi c'è ambiguità.Cambia il nome delle funzioni del client o del lato server così sono uniche nel loro senso di denominazione.

Questo problema sarà fissato nella prossima versione di SEMBALR.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top