部署webservice常见问题汇总
问题一
转自http://blog.csdn.net/xingxing513234072/article/details/38615997
处理程序“WebServiceHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
开发web项目时需要安装IIS,在安装好IIS的Windows7本上发布asp.net网站时,web程序已经映射到了本地IIS上,但运行如下错误提示“处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler””
一.上述错误详情图:
二.上述错误分析:
vs2010默认采用的是.NET 4.0框架,4.0框架是独立的CLR,和.NET 2.0的不同,如果想运行.NET 4.0框架的网站,需要用aspnet_regiis注册.NET 4.0框架,然后用.NET 4.0框架的class池,就可以运行.NET 4.0框架的web项目了。
造成上述错误的原因极有可能是:由于先安装.NetFramework v4.0后安装iis 7.5所致。
三.如何用aspnet_regiis注册4.0框架?
方法如下:
①找到.NET 4.0框架下aspnet_regiis所在目录,在C盘根目录中搜索aspnet_regiis,找到4.0框架下aspnet_regiis的目录位置,本人本本目录为"C:\Windows\Microsoft.NET\Framework\v4.0.30319".
②以管理员的身份运行DOS命令行,
执行"开始→所有程序→附件→命令提示符(右击选择'以管理员身份运行(A)')",弹出"管理员:命令提示符"窗口
③执行命令"cd C:\Windows\Microsoft.NET\Framework\v4.0.30319",进入到"C:\Windows\Microsoft.NET\Framework\v4.0.30319"目录,然后执行命令"aspnet_regiis.exe -i",注册"aspnet_regiis",稍等片刻,aspnet_regiis成功注册如图
看到图中的界面,就可以在IIS中运行.net4.0部署的网站喽!
问题二
转自http://www.cnblogs.com/autumn/p/3575008.html
“/”应用程序中的服务器错误。
未能加载文件或程序集“XXXXXX”或它的某一个依赖项。试图加载格式不正确的程序。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.BadImageFormatException: 未能加载文件或程序集“XXXXXX”或它的某一个依赖项。试图加载格式不正确的程序。
源错误:
|
程序集加载跟踪:下列信息有助于确定程序集“XXXXXX”未能加载的原因。
警告: 程序集绑定日志记录被关闭。 要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。 注意: 会有一些与程序集绑定失败日志记录关联的性能损失。 要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。 |
堆栈跟踪:
[BadImageFormatException: 未能加载文件或程序集“XXXXXX”或它的某一个依赖项。试图加载格式不正确的程序。] System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) +567 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +192 System.Reflection.Assembly.Load(String assemblyString) +35 System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +118 [ConfigurationErrorsException: 未能加载文件或程序集“XXXXXX”或它的某一个依赖项。试图加载格式不正确的程序。] System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +11392147 System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +484 System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +127 System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +334 System.Web.Compilation.BuildManager.CallPreStartInitMethods() +280 System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1087 [HttpException (0x80004005): 未能加载文件或程序集“XXXXXX”或它的某一个依赖项。试图加载格式不正确的程序。] System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11524352 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4782309 |
原因:操作系统是64位的,但发布的程序引用了一些32位的ddl,所以出现了兼容性的问题 解决方案一:如果是64位机器,IIS——应用程序池——高级设置——启用32位应用程序 :true。
解决方案二:修改项目属性——生成——目标平台(比如,X86\X64)
问题三,隔一段时间webservice接口运行不正常
譬如调用webservice接口访问其他服务器做身份验证,隔一段时间就会失败,需要重启webservice才能恢复正常
需修改相应应用程序池的高级设置,回收的固定时间间隔和虚拟内存以及专用内存限制