1

以下は私の.aspxページコードです

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <link href="chat.css" rel="stylesheet" type="text/css" />
    <script src="Scripts/jquery-1.6.4.js" type="text/javascript"></script>
    <script src="Scripts/json2.js" type="text/javascript"></script>
    <script src="Scripts/jquery.signalR-1.0.0-rc2.min.js" type="text/javascript"></script>
    <script src="signalr/hubs" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            var query = window.location.search;
            var toRemove = '?id=';
            var gorge = query.replace(toRemove, '');
            // Proxy created on the fly
            var hub = $.connection.chatHub;
            $.connection.hub.qs = "Id=" + gorge;
            // Start the connection
            $.connection.hub.start(function () {
                //chat.server.getAllOnlineStatus();
            });
        });
    </script>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div id="container" class="wrap">
        <div id="chatbox" class="chatbox">
            <ul id="frndcontact">
            </ul>
        </div>
    </div>
    </form>
</body>
</html>

以下は私のハブクラスです

[HubName("chatHub2")]

public class Chat2 : Hub
{
    private SqlConnection objconn;
    string Connstr = @"Data Source=somevalue;Initial Catalog=somevalue;Integrated Security=True;";
    public Task JoinGroup()
    {
        return Groups.Add(Context.ConnectionId, "foo");
    }
    public DataTable GetDataTable(string strQuery)
    {
        SqlCommand objcmd;
        SqlDataAdapter objda;
        DataTable ds = new DataTable();

        try
        {
            objconn = new SqlConnection(Connstr);
            objconn.Open();
            objcmd = new SqlCommand(strQuery, objconn);
            objda = new SqlDataAdapter(objcmd);

            objda.Fill(ds);
            return ds;
        }
        catch (SqlException ex)
        {
            throw ex.InnerException;
        }
        finally
        {
            objconn.Close();
            objcmd = null;
            objda = null;
        }
    }

    public override Task OnConnected()
    {
        int id = Convert.ToInt32(Context.QueryString["id"]);
        string sql = string.Format("exec getfriend '" + id + "' ");
        System.Data.DataTable dtgetfriend = GetDataTable(sql);      
    }}

現在、デバッグ中に、ブレークポイントを にヒットさせることができませんOnConnected。このコードで開始できないのはなぜですか?

また、このコードをglobal.asaxに追加しました

 public void Application_Start()
 {
     RouteTable.Routes.MapHubs();
 }
4

1 に答える 1

5

ハブに登録していません。開始する前に、少なくとも 1 つのクライアント側関数を宣言する必要があり、正しい名前でハブを参照する必要があります。したがって、JS を次のように変更すると、次のようになります。

$(document).ready(function () {
        var query = window.location.search;
        var toRemove = '?id=';
        var gorge = query.replace(toRemove, '');
        // Proxy created on the fly
        var hub = $.connection.chatHub2;
        $.connection.hub.qs = "Id=" + gorge;

        hub.client.foo = function() {};
        // Start the connection
        $.connection.hub.start(function () {
            //chat.server.getAllOnlineStatus();
        });
    });

あなたは良い形になります。

于 2013-04-27T05:02:45.797 に答える