2013-12-09 153 views
0

下面的代碼使用ASP.Net SignalR Hub技術。這些代碼不能按預期工作。當我點擊Hello Butting時它工作正常,但是當我點擊UserList時沒有任何事情發生。我已經放置了一個警報,發現服務器方法正在調用,但之後沒有任何發生。SignalR中的呼叫服務器和客戶端方法

的JavaScript

$(function() { 
    // Declare a proxy to reference the hub. 
    var chat = $.connection.chatHub; 

    chat.client.OnlineFriends = function (userLists) { 
     alert(userLists); 
    }; 

    chat.client.Hello = function (message) { 
     alert(message); 
    }; 

    // Start the connection. 
    $.connection.hub.start().done(function() { 

     $('#btnGetUser').click(function() { 
      chat.server.Friends(); 
     }); 

     $('#btnHello').click(function() {      
      chat.server.test("message to server from client");      
      // 
     }); 
    }); 
}); 

和C#代碼

public class ChatHub : Hub 
{ 
    public void Test(string str) 
    { 
     Clients.Caller.Hello(str + " | Message received at server reply from server."); 
    } 
    public void Friends() 
    { 
     Clients.Caller.OnlineFriends("myid"); 
    } 
} 

和HTML

<div> 

    <input type="button" id="btnHello" value="Hello" /> 
    <input type="button" id="btnGetUser" value="UserList" /> 
</div> 

請大家幫忙看看是什麼問題。

回答

2

你能嘗試更改線路

chat.server.Friends(); 

到:

chat.server.friends(); 

我猜產生JavaScript在命名Java約定。這是我能從這兩種方法中看到的唯一區別。

0
chat.client.onlineFriends = function (userLists) { 
     alert(userLists); 
    }; 

但是...... userLists上不存在樞紐:

Clients.CalleronlineFriends("myid"); 

這是一兩件事,那我毫無遺漏的眼睛是JavaScript部分不啓動另一件事以大寫字母

所以你也必須改變FriendsHelloOnlineFriendsfriendshelloonlineFriends

+0

只有函數名稱從「朋友」更改爲「朋友」和所有其他方法和變量名小寫

[HubMethodName("MyNewMethodName")] public void Friends() 

,然後調用服務器功能解決問題。像用戶列表或消息這樣的變量名稱不會影響任何內容。謝謝你的回覆。最後它解決了我的問題。 –

+0

@SumanBiswas也許字符串被函數接受:)很高興你解決了你的問題:) – user3071591

+0

謝謝,這兩個都是我的答案,但stackoverflow不允許標記2答案,因此我選擇了最正確的一個。 –

1

正如@scheien所提到的,您需要使用小寫的第一個字母來調用該方法。或者,您可以將集線器方法名稱指定爲詳細here。使用新名稱

chat.server.MyNewMethodName(); 
相關問題