GVKun编程网logo

ASP.NET第一次访问慢的解决方法(MVC,Web Api)(asp.net core 第一次访问慢)

13

对于想了解ASP.NET第一次访问慢的解决方法的读者,本文将是一篇不可错过的文章,我们将详细介绍MVC,WebApi,并且为您提供关于asp.netweb-api–ASP.NetWebAPI模型绑定不

对于想了解ASP.NET第一次访问慢的解决方法的读者,本文将是一篇不可错过的文章,我们将详细介绍MVC,Web Api,并且为您提供关于asp.net web-api – ASP.Net Web API模型绑定不工作像在MVC 3、ASP.net WebAPI跨域调用问题的解决方法、asp.net – 如何从相同的解决方案的MVC项目调试Web API项目、ASP.NET 预编译命令(解决发布后第一次访问慢问题)的有价值信息。

本文目录一览:

ASP.NET第一次访问慢的解决方法(MVC,Web Api)(asp.net core 第一次访问慢)

ASP.NET第一次访问慢的解决方法(MVC,Web Api)(asp.net core 第一次访问慢)

问题现象

访问asp.net web项目的时候,第一次访问比较慢,当闲置一段时间后,再次访问还是会非常慢。

问题原因

这是IIS回收造成的,再次访问的时候会初始化操作,初始化需要耗费时间,所以访问会比较慢,第二次访问的时候不需要初始化操作,因此变快了。

解决办法

IIS应用初始化会在网站第一次创建后或者对应网站的应用程序池回收后,自动开启新程序池,并启动网站初始化,模拟一次正常请求,使网站一直处于在线状态。

修改IIS中的配置
1.修改启用应用程序池(AlwaysRunning):保证应用程序池在第一次创建或者被回收后,能自动再次重启运行。

分享图片


2.修改闲置超时1740分钟:长时间没有请求释放资源,可以不用修改。

分享图片


3.修改启用网站程序预加载(true):保证程序池在启动过后,网站能响应预加载动作。

分享图片


我看有些博客会将进程模型/闲置超时设置为0或者很长,觉得不太好。闲置超时是指如果你的应用程序未处理请求也未接受请求,则进入闲置状态,这个状态可以保持的时间,超过这个时间,则该进程将会从内存中删除并释放所有内容。如果设置为0,则不会闲置一直持续不好,如果代码中有内存泄漏,则会一直持续,完全占用服务器。设置时间过长,长时间没有请求,还占用这内存,有点浪费。按照以上修改之后,基本上都会秒启动。这样的修改同样也适用于MVC,web api等IIS项目

IIS8以前的项目的第一次访问ASP.NET应用会很慢

以前的程序有可能有这个问题,现在的基本上没有了,因为从Windows 8开始,不再要求必须对CSP进行签名。
Microsoft Authenticode:Microsoft Authenticode旨在帮助用户确保谁实际创建了他们正在运行的代码,特别是对于在Internet上下载或运行的代码,并验证代码在发布后未被更改或篡改。例如,经过数字签名,恶意篡改然后在线重新分发的程序将在运行之前向用户显示警告。

问题现象

ASP.NET页面第一次访问的时候很慢,时间可以持续几十秒到几分钟

问题原因

当程序里面需要调用到一些Authenticode Signed的.NET Assembly的时候,它需要连接到外网来验证数字证书。当服务器是无法连接到外网时,这个校验证书的过程需要等到timeout之后才会结束。

解决办法

这个解决方案是由微软APAC技术支持中心 Internet Developer Support Team提供 https://blogs.msdn.microsoft.com/asiatech_zh-cn/2011/04/24/asp-net/)
请同时在以下两个aspnet.config文件中加入以下内容。
C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet.config
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet.config

<?xml version="1.0" encoding="utf-8"?>

<configuration>
    <runtime>
            <generatePublisherEvidence enabled="false"/>
    </runtime>
</configuration>

修改以下注册表键值并重起IIS服务,打开注册表regedit,找到以下地址,修改State为00023e00,原先的是00023c00[HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing]"State"=dword:00023e00然后记得重启一下应用程序池

asp.net web-api – ASP.Net Web API模型绑定不工作像在MVC 3

asp.net web-api – ASP.Net Web API模型绑定不工作像在MVC 3

我的印象是,ASP.Net Web API中的模型绑定应该支持与MVC支持的相同的最低级别的功能的绑定。

拿下面的控制器:

public class WordsController : ApiController
{
    private string[] _words = new [] { "apple","ball","cat","dog" };

    public IEnumerable<string> Get(SearchModel searchSearchModel)
    {
        return _words
            .Where(w => w.Contains(searchSearchModel.Search))
            .Take(searchSearchModel.Max);
    }
}

public class SearchModel
{
    public string Search { get; set; }
    public int Max { get; set; }
}

我要求:

http://localhost:62855/api/words?search=a&max=2

不幸的是,模型不像在MVC中那样绑定。为什么这不具有约束力,我会期望?我将在我的应用程序中有很多不同的模型类型。这将是很好,如果绑定只是工作,就像它在MVC。

解决方法

看看这个: How WebAPI does Parameter Binding

你需要装饰你的复杂参数,如:

public IEnumerable<string> Get([FromUri] SearchModel searchSearchModel)

要么

public IEnumerable<string> Get([ModelBinder] SearchModel searchSearchModel)

ASP.net WebAPI跨域调用问题的解决方法

ASP.net WebAPI跨域调用问题的解决方法

发现问题

最近在做一个项目,前端是VUE,后端是WebAPI,业务也就是一些实体的增删改查。在项目开始的时候我就预计到有跨域的问题,所以也找了一下资料,在Web.Config里面加上了配置信息:

<httpProtocol>
  <customHeaders>
  <add name="Access-Control-Allow-Origin" value="*" />
  <add name="Access-Control-Allow-Headers" value="*" />
  <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
  </customHeaders>
 </httpProtocol>

这是网上找到的其中一种方法,也有自己写跨域的特征类,也可以引用微软库cors,网上能查到很多资料,这里就不一一展开了。

这样配置之后,我自己做Get测试,用JQ来调用也是ok的,我就以为跨域的设置已经做完了,然而天坑来了,Post操作调用不了,整天返回405错误,我就郁闷了,是怎么回事呢。

解决方法

上网查了一下跨域调用的原理,发现在跨域POST之前,是有一次OPTION方法调用,是用来确认是否运行跨域POST的握手确认过程。然后继续往下查,发现通过VS自建WebAPI工程默认有OPTION处理,默认是不允许跨域的。

所以我就在Web.Config里面把这几个代码注释掉了

<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
 </handlers>

最后跨域的POST请求通过了,用JQ和axios测试的。

也许,这个方法不是什么好方法,但确实解决我项目上的问题,所以记下来。如果有更好的方法还请各路高手指点 o(* ̄︶ ̄*)o

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。

您可能感兴趣的文章:
  • asp.net core webapi 服务端配置跨域的实例
  • 谈谈如何在ASP.NET Core中实现CORS跨域
  • ASP.NET中Web API解决跨域问题
  • ASP.NET WebAPI2复杂请求跨域设置的方法介绍
  • asp.net基于JWT的web api身份验证及跨域调用实践
  • ASP.NET MVC中设置跨域访问问题
  • 支持Ajax跨域访问ASP.NET Web Api 2(Cors)的示例教程
  • ASP.NET CORE实现跨域

asp.net – 如何从相同的解决方案的MVC项目调试Web API项目

asp.net – 如何从相同的解决方案的MVC项目调试Web API项目

在VS 2012中,我正在尝试使用jQuery调用Web API项目来创建一个MVC 4 Web应用程序。 (其他开发人员将使用我们当前的本机应用程序使用API​​,并且可能在将来添加API)。因此,我有一个项目是Web API,另一个是MVC 4网站的项目。我只能设置其中一个运行,并使用localhost:xxxxx。

如何调试两者的更改?例如,假设我添加一个新的API路径/ api / customer / get,然后添加一个新的jQuery ajax调用该路径,并使用生成的JSON做一些事情。我已经改变了这两个项目的代码,并希望以端对端的方式进行跟踪;如何启动两者?如何调试?

为了清楚起见,MVC应用程序没有对API进行服务器端调用,我主要使用MVC来轻松地使用.NET中的捆绑,分类和(预期)预编译的Handlebars模板; API调用来自jQuery。由于我对这些技术还是比较新的,因此欢迎提出其他建议。

先谢谢你。

解决方法

我有同样的问题,并从这里找到一个解决方案:

forums.asp.net

修复是做以下事情:

在您的解决方案文件中,单击属性转到启动项目节点(如果尚未选择)

接下来选择多个启动项目。选择您的网站和您的Web服务,并在“操作”列中确保它们都已选择“开始”。

现在当你调试你的网站并在你的webservice中放一个断点,它应该打破断点。

ASP.NET 预编译命令(解决发布后第一次访问慢问题)

ASP.NET 预编译命令(解决发布后第一次访问慢问题)

总结

以上是小编为你收集整理的ASP.NET 预编译命令(解决发布后第一次访问慢问题)全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

关于ASP.NET第一次访问慢的解决方法MVC,Web Api的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于asp.net web-api – ASP.Net Web API模型绑定不工作像在MVC 3、ASP.net WebAPI跨域调用问题的解决方法、asp.net – 如何从相同的解决方案的MVC项目调试Web API项目、ASP.NET 预编译命令(解决发布后第一次访问慢问题)的相关知识,请在本站寻找。

本文标签: