在IIS7部署ASP.NET OLEDB代码时出现问题

5

我正在尝试编写一个简单的网站(ASP.NET v4),它将调用Windows搜索,查找特定的文件并将其返回给用户。我已经编写了以下示例:它在“remoteserver”上调用Windows搜索服务,并返回“somefile.txt”的路径:

OleDbConnection conn = new OleDbConnection();

conn.ConnectionString = "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';";

OleDbCommand cmd = conn.CreateCommand();


cmd.CommandText = string.Format(
            "SELECT System.ItemPathDisplay, System.ItemType FROM " +
            " sytelhp.systemindex WHERE SCOPE='file://remoteserver/archive' AND CONTAINS(\"System.FileName\", " +
            " '\"*{0}*\"')", "somefile.txt");


conn.Open();

OleDbDataReader rdr = cmd.ExecuteReader();

string result=rdr[0].ToString();

在Visual Studio 2010开发环境中,这个功能运行良好,“result”包含文件路径。然而,如果我将其部署到运行在Server 2008上的本地IIS7服务器上,我会收到以下错误:

The parameter is incorrect. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.OleDb.OleDbException: The parameter is incorrect.

我不知道该如何继续下去。我需要对IIS7、代码或两者进行哪些操作才能使它正常工作?再次强调,这在VS2010中可以很好地运行(已在Windows 7和Windows 2008服务器上测试过)。


sytelhp.systemindex 是什么? - Kiquenet
这是运行代码的服务器名称。这是6年前的事 :) - KenD
1个回答

3

我猜你正在使用Vista或旧操作系统,而IIS运行在2008服务器或更新版本?尝试使用Provider=Search.CollatorDSO.1(注意.1)。

编辑:您应该使用不同的用户帐户才能使搜索工作正常(而不是asp.net应用程序运行下的默认“network service”帐户)。有关更多信息,请参见评论。


我已经尝试在运行Windows 7和Server 2008的Visual Studio 2010中运行代码,并且在两者上都可以正常运行。只有在将其部署到Server 2008上的IIS时,它才会失败。我尝试更改提供程序字符串(谢谢),但它仍然会出现“参数不正确”的错误:( - KenD
提供程序=RSSearch.CollatorDSO.1; 扩展属性="Application=RSApp"如果它无法工作,则可能是 IIS 用户(运行应用程序)没有用户配置文件的问题(这对于 Web 应用程序来说是奇怪的解决方案,在我看来)。默认帐户是网络服务帐户。 - Jaroslav Jandek
当然!问题出在代码运行的账户上。我已经添加了一个模拟用户的代码,并且使用了一个域管理员账户,现在程序可以正常工作了。但问题是,我并不想让代码以域管理员身份运行,那么代码运行的账户需要什么权限或特权来访问远程Windows搜索数据库呢? - KenD
根据实践经验,使用账户可以成功登录到所搜索的机器的桌面。 您提到正在使用远程查询 - 我必须将我查询的文件夹共享到我的账户中(即使是管理员),才能在远程机器上成功返回搜索结果。 - Jaroslav Jandek
@JaroslavJandek,“provider not found”问题的解决方案是什么?https://dev59.com/DHLYa4cB1Zd3GeqPZ6B6(我在一个x64服务器上,运行32位客户端应用程序来连接ole db) - Jonesome Reinstate Monica
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接