Tag: iis 7

401未经授权的错误web api mvc windows身份validation

我收到401未经授权的错误。 我的网络服务是用mvc编写的。 在IIS中配置为使用Windows身份validation。 下面是小提琴手的截屏 当我从浏览器点击URL时,它会弹出窗口输入用户名和密码。 如何避免弹出窗口? 我从另一个窗口服务调用这个web api。

如何使用自定义IHttpModule和HttpRequestfilter修改POST请求?

概观 我希望能够将请求参数和内容修改为第三方Web服务(ArcGIS Server)。 这将用于创建存在于任何客户端应用程序和服务器应用程序之间的安全层。 我认为我找到了一个解决方案,但我目前在实施方面遇到了一些困难。 可能的解决方案:使用自定义请求筛选器修改请求 对于解决方案,我基于MSDN上显示的示例松散地实现了自定义请求filter。 我已经“增强”了代码,以便我可以使用正则表达式搜索和替换必要的内容。 这包括: 将内容(存储在字节数组中)转换为字符串。 搜索字符串并执行任何必要的修改。 将修改后的字符串转换为字节数组并将其写入缓冲区。 一个例子如下所示: public override int Read(byte[] buffer, int offset, int count) { int bytesRead = _stream.Read(buffer, offset, count); string orgContent = Encoding.UTF8.GetString(buffer, offset, bytesRead); string orgContentDecoded = HttpUtility.UrlDecode(orgContent); string layersPattern = @”&layers=(show|hide|include|exclude):([0-9]+,?)+”; Regex layersRegex = new Regex(layersPattern, RegexOptions.IgnoreCase); string[] permittedLayers = new string[] { […]

如何在不使用HttpContext.Current的情况下获取ASP.NET Web应用程序的物理位置?

我发现自己需要根据相对于正在运行的ASP.NET Web应用程序的物理位置的文件来配置log4net。 我们希望尽早启动记录器,因此Application_Start似乎是一个合适的位置。 在IIS6中,这工作正常并且已经运行了很长时间,但现在我们转移到IIS7,这将不再起作用: string absolutePath = HttpContext.Current.Request.PhysicalApplicationPath; 因为HttpContext.Current在许多global.asax (应用程序,会话)事件中不可用。 这是旧闻,我们都知道它引发了现在臭名昭着的请求在此上下文错误中不可用 。 我们不想回到经典模式。 现在,问题很简单:不使用HttpContext ,是否可以找到当前运行的Web应用程序实例的物理位置?

在IIS中重新启动应用程序池时立即运行Application_Start

我们正在应用程序的application_start阶段进行一些缓存操作。 因此,当应用程序池重新启动时,所有缓存都将消失。 是否可以在应用程序池重新启动时触发application_start,或者您是否有更好的想法来解决此问题?

由于请求实体在IIS上太大,因此未显示该页面

将一个页面重定向到另一个网页时出现以下错误: “由于请求实体太大,因此未显示该页面。” 我重定向到另一个页面的页面包含大量数据,所以基本上我知道问题的原因。 但是,我正在寻找一个有效的解决方案。 其次,当我在这个问题上做了一些谷歌时,我发现当上传任何大文件时会产生这种问题。 但我没有上传任何大文件,它只是页面本身包含大数据。 提示解决方案将不胜感激。

System.ComponentModel.Win32Exception:拒绝访问错误

我正在使用c#代码启动和停止窗口服务,但我收到此错误。 System.ComponentModel.Win32Exception: Access is denied 请帮我。 我的代码: public void StartService(string serviceName, int timeoutMilliseconds) { ServiceController service = new ServiceController(serviceName); try { TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutMilliseconds); service.Start(); service.WaitForStatus(ServiceControllerStatus.Running, timeout); lblMessage.Text = “Service Started.”; } catch (Exception ex) { //lblMessage.Text = “Error in Service Starting.”; lblMessage.Text = ex.ToString(); } }

在IIS 7中启动应用程序时出现“CS0016:无法写入输出文件”错误

我正在运行Windows 7,并且通常不是此设置中的开发人员,并且最近在C#中构建了一个WCF Rest服务,我现在正尝试在本地计算机上部署到IIS。 经过多次争论,我设置了应用程序,但是当我导航到应用程序时,我收到一条错误消息:编译错误 描述:在编译服务此请求所需的资源期间发生错误。 请查看以下特定错误详细信息并相应地修改源代码。 编译器错误消息:CS0016:无法写入输出文件’c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ scom_sibyll \ 8c0b945e \ 9329016 \ App_global.asax.eagmqgcd.dll’ – ‘访问被拒绝。 “ 我尽我所能地搜索了网络,并更改了Temporary ASP.NET Files fodler的权限,以允许网络服务帐户拥有完整权限,并对Temp文件夹执行相同的操作。 它在失败之前复制了许多文件,因此它可能具有写入权限,所以我检查了从我的源文件夹中读取的权限,这也是有效的。 我还注意到它在尝试缓存DLL文件时出现问题,并试图关闭我的防病毒保护,以及关闭UAC,只是为了看看是否能够找出阻止这种情况发生的原因。 我现在的想法很新鲜。 有人有什么建议吗?

HttpContext.HideRequestResponse的内部解决方法是什么? 检测HttpContext.Request是否真的可用?

我们正在迁移应用程序以使用IIS7集成模式。 在设计为在HTTP请求的上下文中工作的库代码中,我们通常使用如下代码: if (HttpContext.Current != null && HttpContext.Current.Request != null) { // do something with HttpContext.Current.Request } else { // do equivalent thing without HttpContext.. } 但是在IIS7集成模式下,只要从Application_Start调用此代码,就会检查HttpContext.Current.Request会引发exception。 protected void Application_Start(object sender, EventArgs e) { SomeLibrary.DoSomethingWithHttpContextCurrentDetection(); } 结果是: System.Web.HttpException:请求在此上下文中不可用 如果不将这些调用包装在exception处理程序中并根据是否生成exception采取操作,如何检测请求是否真的可用。 看看Reflector中的HttpContext ,我看到它有一个internal bool HideRequestResponse字段,但它是内部的,所以我只能通过reflection得到它并且它很脆弱。 是否有更正式/批准的方式来确定是否可以调用HttpContext.Request ? 这篇关于这个主题的博客文章说不使用HttpContext ,但是如何在通用库代码中确定是否可以使用HttpContext ? IIS7 Integrated mode: Request is not available […]

为什么我得到System.UnauthorizedAccessException拒绝访问路径’Google.Apis.Auth’被拒绝

我已经为文件管理实现了谷歌驱动器function,它在本地系统中工作正常,但每当我在Godaddy服务器上托管它时,它会抛出以下错误 System.UnauthorizedAccessException拒绝访问路径“Google.Apis.Auth”。 以下代码我正在使用: UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync( new ClientSecrets { ClientId = System.Configuration.ConfigurationManager.AppSettings[“GDriveClientId”],//Get ClientID from web.config. ClientSecret = System.Configuration.ConfigurationManager.AppSettings[“GDriveClientSecret”]//Get ClientSecret from web.config. }, new[] { DriveService.Scope.Drive }, System.Configuration.ConfigurationManager.AppSettings[“GDriveCreatedByUser”],//Get UserName from web.config. CancellationToken.None).Result; return credential; 我正在使用VS2010,IIS 7来实现上述function

如何正确设置IIS 7应用程序池标识?

将我的网站部署到IIS7.5后,我发现了一个奇怪的行为:默认情况下,当应用程序池标识为ApplicationPoolIdentity (如IIS应用程序池标识中所推荐的那样), Ninject似乎被忽略,因为我在创建时遇到以下错误第一个控制器: System.InvalidOperationException:尝试创建类型为“..MainController”的控制器时发生错误。 确保控制器具有无参数的公共构造函数。 —> System.DirectoryServices.DirectoryServicesCOMException:发生操作错误。 我试图将IIS AppPool\ FullAccess授予包含该站点(包括所有子文件夹和文件)的文件夹,但这并没有改变任何内容。 但是,当我将应用程序池标识设置为任何域帐户(即使是简单的帐户,没有管理权限,以及没有对该站点的文件夹的任何访问权限)时,它仍然可以正常工作。 根据通过NuGet包设置MVC3应用程序教程安装Ninject。 我不确定,如果相关,该网站应该在具有Windows身份validation的域Intranet中工作。 因此,唯一的问题似乎是应用程序池标识。 至于我渴望使用推荐的方式,我希望拥有ApplicationPoolIdentity ,而不是域帐户。 这有什么用呢? 是否可以将所有这些混合在一起? 这是一个具有类似问题的SO线程: ASP.NET MVC 4 + Ninject MVC 3 =没有为此对象定义的无参数构造函数 。 但是根本没有合适的答案。 作为删除的评论建议,我尝试使用NetworkSerive作为身份。 它运作正常。 但是,我想这并不比非特权域帐户好多少。 编辑 突然发现另一个依赖:应用程序池标识用于sql server上的windows身份validation,但我希望在那里使用客户端用户的凭据。 根据评论 同意通过模拟可以使用经过身份validation的凭据访问远程SQL Server。 但是,仍然不清楚ApplicationPoolIdentity和Ninject的问题是什么。 在这个问题的最顶部提到的文章让我想到这可能是由于虚拟帐户没有用户配置文件这一事实造成的。 这个方面对我来说仍然不清楚,因为仍然可以使IIS使用LoadUserProfile属性加载用户配置文件。 如果虚拟帐户没有配置文件,我无法获取,IIS将加载什么? 有人说: IIS不会加载Windows用户配置文件,但某些应用程序可能会利用它来存储临时数据。 SQL Express是执行此操作的应用程序的示例。 但是,必须创建用户配置文件以将临时数据存储在配置文件目录或注册表配置单元中。 NETWORKSERVICE帐户的用户配置文件由系统创建,始终可用。 但是,通过切换到唯一的应用程序池标识,系统不会创建任何用户配置文件。 只有标准应用程序池(DefaultAppPool和Classic .NET AppPool)在磁盘上具有用户配置文件。 如果管理员创建新的应用程序池,则不会创建用户配置文件。 但是,如果需要,可以通过将“LoadUserProfile”属性设置为“true”来配置IIS应用程序池以加载用户配置文件。 我在serverfault.com上找到了以下主题: […]