访问IIS上拒绝的路径

时间:2017-12-08 15:53:45

标签: c# asp.net-mvc iis iis-8.5

我正在尝试让我的MVC应用程序使用from sklearn.pipeline import make_pipeline import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures from sklearn.learning_curve import validation_curve def make_data(N, err=0.1, rseed=1): rng = np.random.RandomState(1) x = 10 * rng.rand(N) X = x[:, None] y = np.sin(x) + 0.1 * rng.randn(N) if err > 0: y += err * rng.randn(N) return X, y def PolynomialRegression(degree=4): return make_pipeline(PolynomialFeatures(degree), LinearRegression()) X, y = make_data(400) X_test = np.linspace(0, 10, 500)[:, None] degrees = np.arange(0, 40) plt.figure(figsize=(16, 8)) plt.scatter(X.flatten(), y) for degree in degrees: y_test = PolynomialRegression(degree).fit(X, y).predict(X_test) plt.plot(X_test, y_test, label='degre={0}'.format(degree)) plt.title('Original data VS predicted values for different degrees') plt.legend(loc='best'); degree = np.arange(0, 40) train_score, val_score = validation_curve(PolynomialRegression(), X, y, 'polynomialfeatures__degree', degree, cv=7) plt.figure(figsize=(12, 6)) plt.plot(degree, np.median(train_score, 1), marker='o', color='blue', label='training score') plt.plot(degree, np.median(val_score, 1), marker='o', color='red', label='validation score') plt.legend(loc='best') plt.ylim(0, 1) plt.title('Learning curve, increasing the degree of the polynomium') plt.xlabel('degree') plt.ylabel('score'); 将一个简单的文本文件写入另一台服务器。 (一个单独的进程正在该文件夹中查找要抓取的文本文件。)在本地计算机上调试时工作正常,但在测试服务器上部署到IIS时,我总是在尝试编写文件时出现此错误:

  

拒绝访问路径'\\ server \ C $ \ folder \ subfolder \ file.txt'。

在SO上至少有六个类似问题的答案是让应用程序池身份帐户访问该文件夹。但是,IIS上的应用程序池已在一个服务帐户下运行,该帐户具有所需文件夹的完全权限,但仍然收到错误。我甚至尝试将应用程序池更改为我自己的帐户(在调试中成功使用的帐户),仍然得到错误。

关闭匿名访问,并启用Windows身份验证(System.IO.File.WriteAllText的一部分是来自用户的AD帐户的信息)。我尝试使用多个AD帐户访问该应用程序,无论是否有file.txt访问权限,但它们都会出现同样的错误。

我看不到应用程序如何在授权帐户下运行,并且用户可以使用授权帐户登录到应用程序,但仍然会收到拒绝访问错误。有没有办法获得更多关于具体访问被拒绝或哪个帐户实际被拒绝的信息?我还缺少其他的东西吗?

2 个答案:

答案 0 :(得分:2)

您需要检查其他进程是否已打开该文件,例如"单独的进程正在该文件夹中查找要抓取的文本文件" - 也许这个单独的进程已经打开了文件,因此锁定了你的IIS进程?使用进程监视器(https://docs.microsoft.com/en-us/sysinternals/downloads/procmon)监视文件上的活动。

此外,您将文件位置设为' \ server \ C $ \ folder \ subfolder \ file.txt'。 UNC路径通常以' \\'开头,例如' \\ server \ C $ \ folder \ subfolder \ file.txt'。这可能只是StackOverflow将双斜杠转换为单斜杠的人工制品。

作为一个简单的测试,您可以使用记事本和自己的帐户在错误消息中打开文件并写入文件吗?如果您使用应用程序池标识帐户该怎么办?

编辑:在具有文件位置的服务器上运行Process Monitor。添加如下路径过滤器:

Path   excludes    file.txt   then  Exclude

其中file.txt是您正在监视的文件的文件名(没有目录)。此过滤器仅捕获该文件的事件,并将排除其他所有事件。事件发生后,右键单击它,然后转到“属性”,“处理”以查看用户启动事件。

答案 1 :(得分:0)

首先,您可以尝试在要编写文本文件的文件夹中为IUSR用户提供写权限。

有一种方法可以通过在web.config文件中使用Impersonate标记来模仿asp.net应用程序中的用户,但我认为这可能很危险。

  <identity impersonate="true" userName="nomducompte" password="motdepasse" />

我希望这会有所帮助。