Winform 에서 signal 을 사용 합 니 다.

13098 단어 c#SignalRWinform
winform 에서 Hub 사용 하기
구축 signal r 는 서버 와 클 라 이언 트 서버 로 나 뉜 다.signal 은 Owin 위탁 관 리 를 winform 에서 사용 할 수 있다.
1.우선 nuget 패키지 다운로드:Microsoft.AspNet.Signalr Microsoft.Owin.Hosting Microsoft.Owin.Host.HttpListener
2.winform 에서 의 위탁 관 리 를 프로그램 에서 실현 합 니 다.
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    var signalrUrl = "http://localhost:8082";
    //signalr   
    var signalr = WebApp.Start(signalrUrl, Configuration);
    Application.Run(new Sign());
    signalr.Dispose();
    //Application.Run(new Form2());
}

public static void Configuration(IAppBuilder app)
{
	//          ,        app.usecors    configuration   usejsonp
	HubConfiguration configuration = new HubConfiguration
    {
        EnableDetailedErrors = true
    };
    //        signalr              /signalr    http://localhost:8082/signalr
    app.MapSignalR(configuration);
}

3.hub 구현
클래스 계승 hub 새로 만 들 기
//     hub           ,    HubName     ,  hub   myHub
[HubName("DataHub")]
public class MyHub : Hub
 {
 	//             
   [HubMethodName("Hello")]
   public void Hello(string name)
   {
   		//       ,      
   		//SayHello          
       Clients.All.SayHello($"  {name}  ");
   }
 }

이렇게 프로그램 을 시작 하면 서버 가 OK 됩 니 다.
클 라 이언 트
다른 winform 프로그램 에서 서비스 에 연결 할 수 있 고 호출 방법 으로 통신 을 실현 할 수 있 습 니 다.
1.nuget 패키지 다운로드 필요:Microsoft.AspNet.Signalr.Client
2.접속 서비스
IHubProxy proxy;
//  url  signalr  
var connection = new HubConnection("http://localhost:8082/signalr");
//  hub     ,           
proxy = connection.CreateHubProxy("CadreHub");
 await connection.Start();
 //                 ,     
 proxy.On<string>("SayHello", (message) =>
 {
 	//    messagebox ,      
     this.BeginInvoke(new Action(() =>
     {
          MessageBox.Show(msg);
      }));
 });

3.서비스 에 사용 하 는 방법
 private void Button1_Click(object sender, EventArgs e)
 {
      proxy.Invoke("Hello", "qi");
  }

서버 에서 Hub 내 방법 호출
가끔 은 서버 에서 주동 적 으로 호출 하 는 방법 이 필요 합 니 다.그러나 hub 는 예화 할 수 없습니다.hub 를 방문 할 때마다 내부 에서 자동 으로 인 스 턴 스 를 만 듭 니 다.어떻게 조작 하 는 지 정적 인 방법 을 만 들 수 있 습 니 다.그러나 방법 내부 에서 Client 를 직접 사용 할 수 없습니다.Context 를 가 져 와 야 합 니 다.
[HubName("DataHub")]
public class MyHub : Hub
 {
 	//             
   [HubMethodName("Hello")]
   public void Hello(string name)
   {
   		//       ,      
   		//SayHello          
       Clients.All.SayHello($"  {name}  ");
   }
   
   //      
   	public static void Broadcast(string name)
	{
	//      GlobalHost ConnectionManager    hub   
     var context = GlobalHost.ConnectionManager.GetHubContext<DataHub>();
     context.Clients.All.SayHello($"  {name}  _version1.1");
 	}
 }


그리고 다른 종류 에서 호출 할 수 있 습 니 다.
MyHub.Broadcast("little Tom");

시간 이 제한 되 어 비교적 급 하 게 썼 는데,아마도 쓰 지 못 한 것 이 있 을 것 이 니,지도자 가 와 서 빠 져 나 간 것 을 양해 해 주 십시오.

좋은 웹페이지 즐겨찾기