2014-11-13 6 views
2

저는 템플릿을 렌더링하고 렌더링 된 템플릿을 DB (ADO.NET)에 쓰는 ASP.NET의 면도기를 활용하는 템플릿 서비스를 개발하고 있습니다. 템플릿 생성 요청은 REST 요청 일 수 있지만 일반적으로 약 10 개의 매개 변수가 전달되어야하며 응용 프로그램 자체가 호스트되어야합니다 (IIS의 ASP.NET WebAPI가 선택 사항이 아니기 때문에). 또한 그것은 한 달 안에 생산에 있어야합니다.면도기로 템플릿 서비스 구현

I는 자체 호스팅 WCF HTTP 서비스ASP.NET vNext까지 선택을 좁혀했습니다.

ASP.NET vNext가 현재 이와 같은 작업에 사용할 수있는 상태입니까? ADO.NET을 직접 사용하거나 EF를 사용할 수 있습니까? 그 대안이 있습니까? HTTP 자체 호스팅에 기대고있는 이유는 동시성과 한 번에 10 개의 요청을 처리하기위한 요구 사항이기도합니다.

+1

FYI asp.net 5 (vNext) 웹 스 캐 폴딩에서 우리는 템플릿 랭으로 면도기를 사용하고 있습니다. 방금 게시 한 댓글보기 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으로 호스팅되는 콘솔 응용 프로그램에 대한

코드는 당신이 많은 자습서에서 보는 것처럼, 꽤 정직 : Startup이 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; 
     } 
    } 

. 또한 일반적으로 이것을 Windows 서비스로 대신 호스트합니다.

템플릿 서비스에 사용할 수있는 컨트롤러 구현을 공유 할 수도 있습니다. JSON 객체의 루트에 TemplateEncoded 속성이있는 POST 본문의 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

죄송 합니다만, 귀하의 질문과 결론은 저에게 약간 분명한 것입니다. IIS에서 호스팅되는 WebAPI 및 MVC는 동시성을 완벽하게 처리 할 수 ​​있으며 한 번에 많은 요청을 처리 할 수 ​​있습니다.

데이터 액세스 프레임 워크 (ADO.NET vs. Entity Framework)는 솔루션의 웹 호스팅 부분과 아무 관련이 없습니다. 호스팅 환경을 사용하여 모든 종류의 응용 프로그램에서 사용할 수 있습니다.

그래서 대답은 학습 속도가 떨어지면서 개발 속도가 주요 관심사 인 경우 익숙한 프레임 워크를 사용하는 것입니다.

+0

질문이 약간의 의미가있을 수 있습니다. 하지만 IIS가 없으면이 문제는 해결할 수 있습니다. 그것은 vNext를 사용하는 것이 고려 가치가 있는지, 그리고 ADO.NET을 직접 사용할 수 있는지 파악하려고 시도하는 것입니다. 아마도 그것은 문제가되어서는 안됩니다. –

+0

IIS를 선택 사항이나 요구 사항으로 사용하고 있지 않습니까? 그게 분명하지 않아. ADO.NET은 HTTP 라이브러리가 아니므로 아니요, 직접 사용할 수 없습니다. 이전에 ADO.NET Data Services였던 [WCF Data Services] (http://msdn.microsoft.com/en-us/data/odata.aspx)를 의미합니까? 그것은 작은 로직을 사용하여 Entity Framework를 통해 데이터베이스에 액세스하기위한 것입니다. – CodeCaster

+0

IIS를 사용하지 않는 것은 불행히도 요구 사항입니다. 그리고 나는 ADO.NET이 HTTP 라이브러리가 아니라는 것을 알고 있습니다.:) 잊어 버리면, vNext에서 System.Data.SqlClient 네임 스페이스/패키지를 사용할 수 있다는 것을 이미 알아 냈습니다. –