none
Stehen TCP Endpunkte in einer Webrole permanent zur Verfügung?

    Frage

  • Hallo, seit dem 1.3 SDK kann man ja auch TCP Endpunkte in Webrollen definieren. In einem Test habe ich dann auch erfolgreich einen TCP-Listener in der Run() Methode meiner Webrolle betrieben. Da eine Webrolle jedoch vom IIS (höchstwarscheinlich in einem der IIS Application Pools) ausgeführt wird, stellt sich mir die Frage ob der Listener auch permanent zur Verfügung steht. Der IIS recycelt ja gelegentlich seine Application Pools und würde damit doch sicherlich auch den TCP-Listener temporär deaktivieren - oder? Hat schon jemand Erfahrung mit TCP-Listener in Webrollen gesammelt? Gruß, Marcus
    Freitag, 4. Februar 2011 09:28

Alle Antworten

  • Hallo Marcus,

    gibt es einen Grund dafür, warum Du eine WebRole verwendest?

     

     

    Montag, 14. Februar 2011 13:17
  • Hallo Ronny,

    im Moment besteht das Projekt aus zwei Rollen. Eine Webrolle, welches eine Silverlight App deployed und für die Kommunikation WCF RIA Services bereitstellt. Des Weiteren gibt es eine Workerrolle welche einen TCP-Listener bereitstellt. Über diesen TCP-Listener werden mittels eines propritären, bandbreiten optimierten Protokolls von einem Hilfsprogramm Daten an den Server übermittelt.

    Nun würde ich gerne die Workerrolle und die Webrolle zusammenfassen, um die Kosten für den Betrieb des Servers zu reduzieren. Ich bin mir durchaus bewusst, dass ich damit ein Stück Skalierbarkeit verliere. Es geht hierbei lediglich um Kostenersparnis.

    Dienstag, 15. Februar 2011 13:42
  • Hallo Markus,

    sorry für den delay, aber die CeBit :-)

    Auf wievielen Instanzen willst Du nachher laufen? Mind. 2 dürfte klar sein, oder?

    Du kannst auf das Recyceln des Pools auch programmatisch Einfluss nehmen. Hier mal ein Code-Snippet:

    1. var webApplicationProjectName = "Web";   
    2.   
    3.      using (ServerManager serverManager = new ServerManager())   
    4.      {   
    5.           var siteApplication = serverManager.Sites[RoleEnvironment.CurrentRoleInstance.Id + "_" + webApplicationProjectName].Applications.First();   
    6.           var appPoolName = siteApplication.ApplicationPoolName;   
    7.   
    8.           var appPool = serverManager.ApplicationPools[appPoolName];   
    9.   
    10.           appPool.ProcessModel.IdleTimeout = TimeSpan.Zero;   
    11.           appPool.Recycling.PeriodicRestart.Time = TimeSpan.Zero;   
    12.   
    13.           serverManager.CommitChanges();   
    14.      }   
    15.   
    Mittwoch, 2. März 2011 09:43
  • Hallo Ronny,

    vielen Dank für die ausführliche Antwort!
    Das werde ich gleich mal ausprobieren - denke das dürfte mein Problem lösen.

     

    Mittwoch, 2. März 2011 09:59