2010-05-30 8 views

Répondre

2

Il est facile d'exécuter un serveur de socket sur un rôle de travailleur, mais seulement tcp, pas udp. Vous pouvez démarrer votre propre processus à partir de la méthode OnStart() du rôle de travail Vous pouvez le faire aussi avec la méthode Run() mais une fois que vous avez atteint l'état d'exécution, votre rôle est vu par l'équilibreur de charge et le monde extérieur. le trafic avant l'exécution de votre serveur de socket.

Vous devrez créer un point de terminaison tcp dans la configuration de votre rôle de travailleur (clic droit sur le rôle des travailleurs et voir Propriétés):

alt text

Ce numéro de port spécifié est pour le monde extérieur. L'équilibreur de charge donnera à chaque instance de votre rôle un port unique auquel votre code sera lié. Par exemple, imaginez votre MyApp.exe qui prend un paramètre --tcpport au démarrage:

 var rootDirectory = Path.Combine(Environment.GetEnvironmentVariable("RoleRoot") + "\\", "approot\\MyApp"); 
     int port = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["MyExternalEndpoint"].IPEndpoint.Port; 
     var cmdline = String.Format("--tcpport {0}",port); 
     MyProcess = new Process() 
      { 
       StartInfo = new ProcessStartInfo(Path.Combine(rootDirectory, "myapp.exe"), cmdline) 
       { 
        UseShellExecute = false, 
        WorkingDirectory = rootDirectory 
       } 
      }; 
      MyProcess.Start(); 

Ensuite, dans votre méthode Run(), il suffit d'attendre pour toujours, en sachant que vous ne devriez jamais quitter:

MyProcess.WaitForExit(); 
throw new Exception("MyApp quit on me!"); 
+0

Merci . Je vois qu'il y a déjà des votes pour UDP: http://www.mygreatwindowsazureidea.com/forums/34192-windows-azure-feature-voting/suggestions/400782-udp-endpoints. Savez-vous si je peux héberger un CLR dans le processus? – bertelmonster2k