c# – 只有在使用统一DI回收应用程序池时,webapi调用才会失败
发布时间:2020-12-15 20:54:25 所属栏目:百科 来源:网络整理
导读:我正在调用一个web api服务,该服务仅在我第一次回收应用程序池时失败.之后所有通话都运转正常. 这个过程是这样的.. 呼叫服务 – 好的 呼叫服务 – 好的 呼叫服务 – 好的 转到iis并回收应用程序池(我等待10秒) 呼叫服务 – 发生内部服务器错误.请稍后再试.
我正在调用一个web api服务,该服务仅在我第一次回收应用程序池时失败.之后所有通话都运转正常.
这个过程是这样的.. 呼叫服务 – >好的 呼叫服务 – >好的 呼叫服务 – >好的 转到iis并回收应用程序池(我等待10秒) 呼叫服务 – >发生内部服务器错误.请稍后再试. 呼叫服务 – >好的 呼叫服务 – >好的 呼叫服务 – >好的 … 呼叫服务 – >好的 呼叫服务 – >好的 呼叫服务 – >好的 … 客户端是使用此方法的控制台应用程序框架4.0: public static object Send(string webAddr,object param) { HttpUtil.IgnoreBadCertificates(); HttpWebRequest request = null; object result = null; request = (HttpWebRequest)WebRequest.Create(webAddr); request.ContentType = "application/json; charset=utf-8"; request.Method = "POST"; request.Accept = "application/json"; String u = GetString(a1); String p = GetString(a1) + GetString(a2); String encoded = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(u + ":" + p)); request.Headers.Add("Authorization","Basic " + encoded); using (var streamWriter = new StreamWriter(request.GetRequestStream())) { var myJsonString = Newtonsoft.Json.JsonConvert.SerializeObject(param); streamWriter.Write(myJsonString); streamWriter.Flush(); } var response = (HttpWebResponse)request.GetResponse(); using (var streamReader = new StreamReader(response.GetResponseStream())) { result = streamReader.ReadToEnd(); } return result; } webapi是框架4.5: public class CambiosController : BaseApiController { private ICambioService cambioService; public CambiosController(ICambioService cambioService) { this.cambioService = cambioService; } [HttpPost] [Authorize] public HttpResponseMessage Post([FromBody] CambioRequest cambioRequest) { HttpResponseMessage response = null; if (cambioRequest == null) { Exception ex = new ArgumentException("cambioRequest"); return Request.CreateErrorResponse(HttpStatusCode.BadRequest,ex); } try { var result = this.cambioService.EnviarConfiguracion(cambioRequest); response = Request.CreateResponse(HttpStatusCode.OK,result); } catch (Exception ex) { response = Request.CreateErrorResponse(HttpStatusCode.InternalServerError,ex); } return response; } protected override void Dispose(bool disposing) { if (disposing) { this.cambioService.Dispose(); } base.Dispose(disposing); } Unity配置: public static void RegisterComponents() { LoggerFacility.Debug(string.Empty,string.Empty,"UnityConfig.RegisterComponents()"); var container = new UnityContainer(); container.RegisterTypes( AllClasses.FromAssemblies(BuildManager.GetReferencedAssemblies().Cast<Assembly>()) .Where(x => x.Name != "IUnitOfWork" && x.Name != "IDbContext"),WithMappings.FromMatchingInterface,WithName.Default,overwriteExistingMappings: true); container.RegisterType<IUnitOfWork,UnitOfWork>(new PerResolveLifetimeManager()); container.RegisterType<IDbContext,ControlConfigContext>(new PerResolveLifetimeManager()); GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container); } WebApi应用程序池是框架4集成模式,作为网络服务运行. ProcessModel空闲超时(分钟0)唯一的配置已从默认值更改. IIS 7.5 解决方法
问题与我们的反向代理有关.设置为我使用的网址仅等待15秒.因此,在回收应用程序池时(因为它必须加载所有统一内容),大多数时间需要16秒.需要注意的是,反向代理错误将从ASP.NET webapi引发内部服务器错误,注意与Timeout相关或者某些东西提供一些线索.现在很高兴知道……
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |