2014-01-20 5 views
2

Я новичок в Windows Azure Cloud Services. Я хочу разместить службу, созданную с помощью ServiceStack, в роли рабочего. Я пробовал несколько способов, в том числе следующие, но без успеха.Хостинг ServiceStack с использованием рабочей роли Windows Azure

Кодекс Я попытался:

public class WorkerRole : RoleEntryPoint 
{ 
    public class AppHost : AppHostHttpListenerBase 
    { 
     public AppHost() 
      : base("HttpListener Self-Host", typeof(HelloService).Assembly) { } 

     public override void Configure(Funq.Container container) 
     { 
      Routes 
      .Add<Hello>("/hello") 
      .Add<Hello>("/hello/{Name}"); 
     } 
    } 

    public override void Run() 
    { 
     while (true) 
     { 
      Thread.Sleep(10000); 
      Trace.TraceInformation("Working", "Information"); 
     } 
    } 

    public override bool OnStart() 
    { 
     // Set the maximum number of concurrent connections 
     ServicePointManager.DefaultConnectionLimit = 12; 

     // For information on handling configuration changes 
     // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.  

     try 
     { 
      var endpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"]; 
      string baseUri = string.Format("{0}://{1}/", endpoint.Protocol, endpoint.IPEndpoint); 

      var appHost = new AppHost(); 
      appHost.Init(); 
      appHost.Start(baseUri); 
     } 
     catch (Exception e) 
     { 
      Trace.TraceError("Could not start service host. {0}", e.Message); 
     } 

     return base.OnStart(); 
    } 
} 

Сервис развертывается успешно, но я не могу получить доступ к службе.

+0

Так в чем же исключение? – Scott

+0

Возможно, вам захочется посмотреть [это видео] (http://channel9.msdn.com/Series/Windows-Azure-Cloud-Services-Tutorials/Introduction-to-Windows-Azure-Worker-Roles-Part-1). Хотя это не ServiceStack, принципы одинаковы. Убедитесь, что вы правильно настроили доступ к конечной точке. – Scott

+0

Вы проверили рабочие журналы? есть ли какие-либо ошибки? – vainolo

ответ

2

Вы используете его с повышенными привилегиями? Чтобы открыть HTTP-порт, вам нужно запустить его как администратора. Вы можете сделать это, добавив <Runtime executionContext="elevated" /> к вашей роли рабочего в определении службы.

В качестве альтернативы вы можете сделать сценарий запуска (который, конечно, должен работать в режиме повышенной), до run a netsh command, позволяющий открывать порты без повышенных привилегий.

+0

Это не сработало. Пожалуйста, просмотрите мои комментарии под вопросом. – Haider

Смежные вопросы