0

mvc4 Web アプリケーションで SignalR を使用しています。HUBから継承するクラスがあります

[HubName("Chat")]
public class ChatHub : Hub ,IDisconnect  
{
      private void CallMessage(string message)
      {
               Clients.MessagesRecieved(message);
      }
      .... 

私のクライアントjsファイルには、 $(function () { globalChatHub = $.connection.chat; と書きました。

$.extend(globalChatHub, { MessagesRecieved: function (data) {
    alert(data);
}
});

問題は、HomeController.cs のコードからクライアント側スクリプト「MessagesRecieved 関数」を呼び出すことは可能かということです。

そのようなことを言ってみましょう:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        // this is a test
        ChatHub  h = new ChatHub();
        h.CallMessage("hellow");

    }
4

3 に答える 3

2

次のコードを使用して、Hubコンテキストを取得できます。ChatHub

var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();

次に、任意のメソッドを呼び出すか、ChatHubクライアント メソッドを直接呼び出すことができます。例えば:

context.Clients.All.MessagesRecieved("test");

試してみる。お役に立てれば。

于 2013-02-27T15:43:24.673 に答える
2

もちろん、クライアント コードを呼び出すのと同じ方法で呼び出すことができます。

//Define the client method:
globalChatHub.hello = function {alert('hello');}

サーバーコードで次のように記述します。

ChatHub  h = new ChatHub();
        h.Client.hello();

メソッドの名前は大文字と小文字が区別されます。

このリンクの詳細情報SignalR クイック スタート

于 2012-11-10T14:43:40.280 に答える
0

mvc コントローラーでは、次のコードを使用してハブのメソッドを呼び出します

DefaultHubManager hd = new DefaultHubManager(GlobalHost.DependencyResolver);
var hub = hd.ResolveHub("ChatHub") as ChatHub;
hub.Echo(HttpContext.Session.SessionID, "Hello Echo");  

ハブの実装では、ハブでクライアントを呼び出す実装を維持して、コードをまとまりのあるものにすることを好みます。

public void Echo(string sessionId, dynamic data)
{
    var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
    context.Clients.All.ClientSideMethod(..)
}
于 2013-05-23T06:19:22.130 に答える