我有一个要求,我需要能够从位于我的Web前端(WFE)的应用程序页面访问位于管理中心的列表.我遇到的问题是我的WFE的应用程序池用户无法访问SharePoint_AdminContent数据库,所以我被拒绝访问,他们都有自己的应用程序池
在日志中显示以下内容:
- 恢复处理身份
- SqlConnection.Open之前的当前用户:名称:SharePointDemo\SPContentPool SID:S-1-5-20 ImpersonationLevel:None
- SqlConnection.Open之后的当前用户:名称:SharePointDemo\SPContentPool:S-1-5-20 ImpersonationLevel:无
- SQL Server实例"SPNSQL"上数据库"SharePoint_AdminContent_53169fb3-137c-44b2-b90e-961b656e4275"中用户"SPContentPool"的SQL数据库权限不足.SQL Server的其他错误信息包含在下面.对象'proc_EnumLists',数据库'SharePoint_AdminContent_53169fb3-137c-44b2-b90e-961b656e4275',架构'dbo'上的EXECUTE权限被拒绝.
我试图运行一些特权,以及尝试使用SharePoint\System用户令牌的Daniel Larsons方法(http://daniellarson.spaces.live.com/blog/cns!D3543C5837291E93!1919.entry),但它似乎只是提升为高为应用程序池.
我希望有一种简单的方法可以模拟管理Web应用程序的应用程序池,但是仍然无法找到这样做的方法......或者将进程标识更改为可以访问的进程标识
感谢您的任何想法,想法或解决方案!
菲尔
c# sharepoint web-applications application-pool elevated-privileges
我的一个IIS应用程序池进程有一个非常奇怪的问题.我最近得到了一个System.OutOfMemoryException错误,并且我一直试图找出究竟发生了什么.基本上我有一个脚本,它使用Web服务从我们的DAM获取文件.然后检查文件存储一个字节数组,然后使用Response输出文件.唯一一个遇到问题的是PDF,当它们超过20MB时,它们似乎有时会导致错误.如果我增加应用程序池中的内存,它会暂时解决问题.我看了w3wp.exe进程,看到有时当我运行这个脚本时,它会将内存增加到400MB,我们拥有的最大文件是45MB,这将导致这种类型的行为发生.问题似乎每天晚上都会消失,早上它会工作一段时间然后再开始做同样的事情.这个应用程序是c#asp.net应用程序.它在sharepoint内部运行.
在观看了一段时间后,我注意到,由于这些PDF在浏览器窗口中呈现,直到文件完全下载,它才会从内存中释放.这是有道理的,但我可以看到这有点像我的问题.如果我有几个人加载文件,平均(没有文件下载)内存使用量为385,000 kb.它可以轻松达到900,000-1,100,000 KB,这是应用程序池的限制.
我不是在寻找一个确切的答案,而是更像是一个方向,因为我完全没有想法.
我正在运行带有 IIS 8 的 Windows Server 2012。我安装了 IIS 6 元数据库兼容性。我一直在尝试找出如何使用 .Net 4.5 更改 IIS 8 的应用程序池标识 - 我找到的所有示例均适用于 IIS 6 和 7。
这是我所拥有的:
public class InternetInformationServices
{
public void SetApplicationPoolIdentity(string appPoolName, string domain, string username, string password)
{
try
{
string metabasePath = "IIS://Localhost/W3SVC/AppPools";
DirectoryEntry myAppPool;
DirectoryEntry apppools = new DirectoryEntry(metabasePath);
myAppPool = apppools.Children.Find(appPoolName, "IIsApplicationPool");
myAppPool.Invoke("AppPoolIdentityType", new Object[] { 3 });
myAppPool.Invoke("WAMUserName", new Object[] { domain + @"\" + username });
myAppPool.Invoke("WAMUserPass", new Object[] { password });
myAppPool.Invoke("SetInfo", null);
myAppPool.CommitChanges(); …Run Code Online (Sandbox Code Playgroud) 下午好,我最近购买了一台以 Plesk 12 作为控制面板的服务器。我没有太多使用 Plesk 的经验。
出于测试目的,我创建了一个简单的 ASP.NET 项目,它尝试从 txt 读取/写入,如下所示:
String logPath = @"C:\inetpub\vhosts\xxx.com\httpdocs\log_application_error.txt";
StreamWriter textWriter = new StreamWriter(logPath, true);
Run Code Online (Sandbox Code Playgroud)
创建 StreamWriter 实例时,出现以下错误:
System.UnauthorizedAccessException: Access to the path 'C:\inetpub\vhosts\xxx.com\httpdocs\log_application_error.txt' is denied.
Run Code Online (Sandbox Code Playgroud)
我尝试授予 txt 文件的读/写权限,甚至将完全控制授予“每个人”,但结果是一样的。
Plesk 似乎隐藏了所有内容,以便通过控制面板进行处理。我在 IIS 上看不到任何应用程序池,所以我什至不确定它运行的身份是什么。
任何帮助将不胜感激。
asp.net iis-7 application-pool plesk unauthorizedaccessexcepti
当我键入Get-IISAppPool的Status属性始终是空的。
Get-IISAppPool | Select-Object Status
Run Code Online (Sandbox Code Playgroud)
应用程序池正在运行,名称正确。
有谁知道为什么?
我不是应用程序池的创建者,这可能是原因吗?
我正在阅读以下文章如何正确使用 IHttpModule *
现在让我们想想这个词本身。应用程序池。是的游泳池。这意味着某个 Web 应用程序正在一个池中运行多个 HttpApplication 实例。是多个。否则它不会被称为池。»多少?«你可能会问。只要您知道可能不止一个,这并不重要。我们相信 IIS 可以完成它的工作。它显然做得很好,它使这个事实对我们开发人员完全透明,因此没有多少人完全了解它的内部工作原理。我们依靠其稳健性来提供服务。确实如此。池中的每个 HttpApplication 实例都保留自己的 HTTP 模块列表,用于处理的每个请求。
*
我有一个问题,在什么情况下 Application 对象的多个实例可以为单个应用程序运行。直到现在我才知道每个应用程序存在一个应用程序对象的事实。所以我很想知道每个应用程序可以运行多个实例是真的吗?它是如何决定的?
尝试在浏览器的两个不同选项卡中打开以下页面。点击刷新按钮以避免从浏览器缓存中获取页面:
protected void Page_Load(object sender, EventArgs e)
{
Thread.Sleep(10000);
Response.Write(DateTime.Now.ToString());
}
Run Code Online (Sandbox Code Playgroud)
如您所见,似乎为每个请求创建了一个线程,并且它们没有相互等待,也没有获取锁。
现在创建以下页面,以及 GlobalCustomClass
全局自定义类
public class GlobalCustomClass
{
public static string GlobalVariable
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
默认.aspx
protected void Page_Load(object sender, EventArgs e)
{
GlobalCustomClass.GlobalVariable = "Default page";
Thread.Sleep(10000);
Response.Write(DateTime.Now.ToString());
Response.Write("<br />");
Response.Write(GlobalCustomClass.GlobalVariable);
}
Run Code Online (Sandbox Code Playgroud)
页面2.aspx
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(DateTime.Now.ToString());
Response.Write("<br />");
GlobalCustomClass.GlobalVariable = "Page2";
Response.Write(GlobalCustomClass.GlobalVariable);
}
Run Code Online (Sandbox Code Playgroud)
刷新默认页面,在 10 秒过去之前,刷新 Page2....Default.aspx 正在呈现“Page2”。是的,它不是线程安全的。
现在试试这个,在两个浏览器选项卡中打开以下页面:
protected void Page_Load(object sender, EventArgs e)
{
Session["x"] = "ABC"; …Run Code Online (Sandbox Code Playgroud) architecture asp.net performance application-pool thread-safety
asp.net ×4
c# ×4
iis ×4
.net ×1
architecture ×1
iis-7 ×1
iis-8 ×1
performance ×1
plesk ×1
powershell ×1
sharepoint ×1
webserver ×1