2014-11-13 3 views
2

Я занимаюсь разработкой службы шаблонов, которая будет использовать Razor ASP.NET для визуализации шаблонов и записи визуализированных шаблонов в DB (ADO.NET). Запрос на создание шаблона может быть запрошен как запрос REST (но может быть что-то еще, в общем, нужно будет передать около 10 параметров), и приложение должно быть самообслуживанием (поэтому ASP.NET WebAPI в IIS не является выбором). Также он должен быть в производстве в течение месяца.Внедрение шаблона с использованием бритвы

Я сузил выбор до самопринятой WCF службы HTTP и ASP.NET vNext.

Является ASP.NET vNext в настоящее время в состоянии, что я мог бы использовать его для такой задачи? Могу ли я использовать ADO.NET напрямую или пройти через EF? Есть ли хорошая альтернатива этим? Почему я склоняюсь к собственному хостингу HTTP, также является требованием для параллелизма и обработки около 10 запросов одновременно.

+1

FYI in asp.net 5 (vNext) в web scaffolding мы используем бритву в качестве шаблона lang. См. Комментарий Я только что разместил http://stackoverflow.com/questions/27013442/vnext-console-app-that-uses-razor-views-without-hosting#comment42680793_27013442 и вот код https://github.com/aspnet /Scaffolding/blob/dev/src/Microsoft.Framework.CodeGeneration/Program.cs –

ответ

0

К моменту запроса вопроса мы решили пойти с MVC 5 и Owin, в настоящее время вы можете легко перейти с MVC 6 (ASP.NET 5 aka vNext).

Кода для консольного приложения размещаемого в Owin довольно прямо вперед, как вы могли бы увидеть во многих учебных пособиях:

private static void Main() 
    { 
     try 
     { 
      string baseAddress = ConfigurationManager.AppSettings["ApiBaseAddress"]; 
      Log.Info("Listening on " + baseAddress); 

      // Starts OWIN host 
      using (WebApp.Start<Startup>(url: baseAddress)) 
      { 
       Console.ReadLine(); 
      } 

      Log.Info("Host is being closed."); 
     } 
     catch (Exception exception) 
     { 
      Log.WriteLine(LogLevel.Fatal, "Error running service: " + exception.ToString()); 
      throw; 
     } 
    } 

Где Startup класс для Owin конфигурации средних вещевой. Кроме того, вы обычно принимаете это как службу Windows.

Я также могу совместно использовать реализацию контроллера, которая может использоваться для обслуживания шаблонов. Он ожидает данные JSON в теле POST с свойством TemplateEncoded в корневом каталоге объекта JSON, который содержит строку с кодировкой base64 из tempalte бритвы. Этот шаблон бритвы затем выводится из других значений, которые предоставляются в запросе JSON. Для рендеринга шаблона бритвы используется RazorEngine.

[HttpPost] 
    public async Task<IHttpActionResult> Post() 
    { 
     dynamic model = null; 
     string request = string.Empty; 

     try 
     { 
      request = await Request.Content.ReadAsStringAsync(); 

      model = JsonConvert.DeserializeObject<ExpandoObject>(request); 
      model.Template = RequestHelper.FromBase64(model.TemplateEncoded); 

      // here you could do some validation, if required. 

      var razorResult = Razor.Parse(model.Template, model); 
      var result = HttpUtility.HtmlDecode(razorResult); 

      return Ok(result); 
     } 
     catch (Exception ex) 
     { 
      Log.Error(request, model == null ? "ERROR: template was not converted from base64 encoded string." : model.Template, ex); 
      return InternalServerError(ex); 
     } 
    } 
0

Извините, но ваш вопрос и выводы немного неясны для меня. WebAPI и MVC, размещенные в IIS, отлично подходят для параллелизма и обработки многих запросов одновременно.

Ваш выбор структуры доступа к данным (ADO.NET и Entity Framework) также не имеет ничего общего с частью веб-хостинга вашего решения; вы можете использовать любой из приложений, используя любую среду хостинга.

Итак, ответ: используйте рамки, с которыми вы знакомы, если ваша скорость зависит от скорости развития, поскольку она убирает кривую обучения.

+0

Может быть, вопросы имеют мало смысла, я постараюсь улучшить это. Но у меня все еще есть эта проблема для решения и без IIS. Просто я пытаюсь выяснить, стоит ли использовать vNext, даже если я могу использовать ADO.NET напрямую. Вероятно, это не должно быть проблемой. –

+0

Не использует IIS ваш выбор или требование? Вот что мне непонятно. ADO.NET не является библиотекой HTTP, поэтому нет, вы не можете использовать это напрямую. Вы имеете в виду [службы WCF Data Services] (http://msdn.microsoft.com/en-us/data/odata.aspx), ранее службы данных ADO.NET? Это для доступа к базе данных через Entity Framework с небольшой логикой между ними. – CodeCaster

+0

Не использовать IIS, к сожалению, является обязательным требованием. И я знаю, что ADO.NET не является библиотекой HTTP.:) Забудьте об этом, я уже понял, что мы можем использовать пространство имен/пакетов System.Data.SqlClient в vNext. –

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