我正在研究开发一个模板服务,它将利用ASP.NET的Razor渲染模板并将渲染模板写入数据库(ADO.NET)。生成模板的请求可以作为REST请求(但可能是其他内容,通常必须传递大约10个参数)并且应用程序必须是自托管的(因此IIS上的ASP.NET WebAPI不是一个选择)。它也应该在一个月内投入生产。
我已将选择范围缩小为自托管 WCF http服务和 ASP.NET vNext 。
ASP.NET vNext目前是否处于可以将其用于此类任务的状态?我可以直接使用ADO.NET还是通过EF? 是否有任何好的替代方案?为什么我倾向于HTTP自托管也是并发和一次处理大约10个请求的要求。
答案 0 :(得分:0)
对不起,但你的问题和结论对我来说有点不清楚。在IIS中托管的WebAPI和MVC完全能够并发并一次处理许多请求。
您选择的数据访问框架(ADO.NET与实体框架)也与您的解决方案的Web托管部分无关;您可以使用任何托管环境在任何类型的应用程序中使用。
所以答案是:如果开发速度是您主要关注的问题,请使用您熟悉的框架,因为它会消除学习曲线。
答案 1 :(得分: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服务托管。
我还可以共享可用于模板服务的控制器实现。它期望POST主体中的JSON数据在JSON对象的根上具有TemplateEncoded
属性,该对象包含razor tempalte的base64编码字符串。然后,从请求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);
}
}