![](/img/trans.png)
[英]Ajax Auto complete Css works fine in iis and the server but not in local machine
[英]Code Works On Local Machine But Not On IIS
注意我不是这个语法的原作者,我发现
它来自另一个 stackoverflow 用户,它在我的实例中工作
我正在运行IIS 7.5
并托管此asp.net
页面。 我正在使用我的Global sax
来捕捉任何错误并写入文本文件以供以后查看(正在实施Elmah
但这是另一天的故事)。 在 IIS 上,这是一台Windows Server 2008
机器,此代码不会引发任何错误,页面加载但未填充任何数据源。 在我的本地机器以及其他 3 台机器(所有非服务器)上,代码按原样执行。 是什么阻止了它在我们的服务器(生产机器)上执行? 全球会计准则
void Application_Error(object sender, EventArgs e)
{
Exception CurrentException = Server.GetLastError();
Server.ClearError();
if (CurrentException != null)
{
try
{
using (StreamWriter sw = new StreamWriter(Server.MapPath("ErrorLog.txt")))
{
sw.WriteLine(CurrentException.ToString());
sw.Close();
}
}
catch (Exception ex) { }
}
}
这是我的 C#——
protected void Page_Load(object sender, EventArgs e)
{
try
{
if (!IsPostBack)
{
Page.RegisterAsyncTask(LoadDataAsync().ToPageAsyncTask());
}
}
catch (Exception ex) { throw ex; }
}
public Task LoadDataAsync()
{
var t1 = ExecuteSqlQueryAsync(connectionString, "Select Top 10 * from uno");
var t2 = ExecuteSqlQueryAsync(connectionString, "Select Top 10 * from tres");
var t3 = ExecuteSqlQueryAsync(connectionString, "RunStoredProcedure");
return Task.Factory.ContinueWhenAll(new[] { t1, t2, t3 }, _ =>
{
try
{
this.ddluno.DataSource = t1.Result;
this.ddluno.DataBind();
ddltopperformers.DataSource = t2.Result;
ddltopperformers.DataBind();
this.gridall.DataSource = t3.Result;
}
catch (Exception exception) { throw exception; }
});
}
public System.Threading.Tasks.Task<DataSet> ExecuteSqlQueryAsync(string connectionString, string sqlQuery)
{
SqlConnection _sqlDatabaseConnection;
SqlCommand _sqlCommand = new SqlCommand();
SqlParameter _sqlParameter = new SqlParameter();
SqlDataAdapter _sqlDataAdapter = new SqlDataAdapter();
StringBuilder _sqlQueryBuilder = new StringBuilder();
DataSet _dataSet = new DataSet();
return System.Threading.Tasks.Task.Factory.StartNew(
() =>
{
try
{
_sqlDatabaseConnection = new SqlConnection(connectionString);
_sqlCommand = new SqlCommand(sqlQuery, _sqlDatabaseConnection);
_sqlDatabaseConnection.Open();
_sqlCommand.CommandTimeout = 0;
_dataSet = new DataSet();
_sqlDataAdapter = new SqlDataAdapter(_sqlCommand);
_sqlDataAdapter.Fill(_dataSet, "Data");
_sqlDatabaseConnection.Close();
_sqlCommand.Dispose();
_sqlDataAdapter.Dispose();
return _dataSet;
}
catch (Exception exception) { throw exception; }
});
}
public static class PageAsyncTaskGenerator
{
public static PageAsyncTask ToPageAsyncTask(this Task task, Action<IAsyncResult> onTimeout = null)
{
try
{
Func<Task> func = () => task;
return new PageAsyncTask(
(sender, e, cb, extraData) => func.BeginInvoke(cb, extraData),
ar => func.EndInvoke(ar).Wait(),
ar =>
{
if (onTimeout != null)
{
onTimeout(ar);
}
},
null);
}
catch (Exception exception) { throw exception; }
}
}
编辑
这是我使用的连接字符串,我应该更改什么才能在我的 IIS 上工作?
private string connectionString = "Data Source=OnFleet;Initial Catalog=TestForCode;Integrated Security=True;MultipleActiveResultSets=True";
编辑 2
尝试使用webconfig
创建连接,这是我的字符串,但仍未连接。 我是否(再次)错过了显而易见的事情?
<connectionStrings>
<add name="DBConnection" connectionString="Data Source=OnFleet;Initial Catalog=TestForCode;Integrated Security=True;MultipleActiveResultSets=True;;User ID=IISUser;Password=nottellingSO" providerName="System.Data.SqlClient" />
</connectionStrings>
您需要通过提供有效的用户帐户来模拟 IIS 上的执行。 您在本地使用您登录的用户帐户(也在您的 Sql Connetion 中使用)但在您发布的网站中您不在同一上下文中,因为它由 AppPool 执行(在您的 SQL Server 上没有任何权限)。 尝试在您的 web.config 文件中添加这一行:
<system.web>
<identity impersonate="true" userName="validAccount@mydomain" password="bar"/>
</system.web>
顺便说一句,此帐户需要在 IIS_IUSRS 安全组中才能拥有对文件夹的最低权限(避免使用管理员帐户)并成为 SQL Server 中的有效用户帐户。
*编辑:您还可以使用 Sql 帐户(在 SQL Server 中创建,对目标数据库具有某些权限)
Data Source=OnFleet;Initial Catalog=TestForCode;User id=validSqlAccount;Password=myPsw;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.