Question

J'utilise Signalr avec ASP.NET 4.5 WebForms. Je n'ai pas pu rendre le client parler au serveur et vice versa. Ce que je veux réaliser est simplement de pouvoir tester comment le client peut déclencher une fonction serveur et comment le serveur peut déclencher une fonction client. Voici le code que j'utilise:

code côté 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>

code côté serveur (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);
}
}

J'exécute le code localement sur IIS7.5 mais je reçois et erroner lors de l'exécution du code dans Visual Studio 2012.

l'erreur:

localhost / Signalr / Signalr / Envoyer? Transport= Serversentevents & ConnectionsD= 400F1302-6C8E-418E-A14C-DA95F836A29D 500 (erreur de serveur interne)

Utiliser Chrome Debugger La page d'erreur indique: La méthode 'AddHit' n'a pas pu être résolue.

Encore une fois, ce que j'essaie de faire est de faire un test simple pour vérifier comment appeler un serveur à partir du client et du client du serveur.

merci.

Était-ce utile?

La solution

La raison pour laquelle vous ne pouvez pas résoudre votre méthode AddHit est dû au fait que vous avez le même nom de la fonction sur le serveur lorsque vous faites le client.

AKA pour appeler le serveur que vous faites hub.addhit ("Laksjdf").Mais pour appeler le client, ce serait la même chose: hub.addhit ("Laksjdfldksj");Il y a donc une ambiguïté.Changez le nom de vos fonctions de votre client ou de votre serveur afin qu'ils soient uniques dans leur sens de nommer.

Ce problème sera corrigé dans la prochaine version de SignalR.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top