2010-06-30 8 views
5

Estoy intentando escribir un sitio web simple (ASP.NET v4), que llamará a Windows Search, buscará un archivo específico y se lo devolverá al usuario. He creado el siguiente ejemplo: se llama al servicio de búsqueda de Windows en "remoteserver", y devuelve la ruta de "Unarchivo.txt":El código OLEDB de ASP.NET se rompe cuando se implementa en IIS7

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(); 

.. y esto funciona muy bien en Visual Studio 2010 entorno de desarrollo, "resultado" contiene la ruta al archivo. Sin embargo, si despliego al servidor IIS7 locales (que se ejecuta en el servidor 2008), me sale este error:

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. 

Estoy en una pérdida a dónde ir después. ¿Qué debo hacer con IIS7, o el código, o ambos para que funcione? De nuevo, esto funciona bien dentro de VS2010 (probado tanto en Windows 7 como en Windows 2008 Server).

+0

¿Qué es *** sytelhp.systemindex ***? – Kiquenet

+0

Era el nombre del servidor que ejecutaba el código. Esto fue hace 6 años :) – KenD

Respuesta

3

Supongo que está ejecutando en Vista o un sistema operativo anterior y que el IIS se ejecuta en 2008 Server o una versión más reciente. Pruebe Provider=Search.CollatorDSO.1 (tenga en cuenta .1).

Editar: Debe usar una cuenta de usuario diferente para que la búsqueda funcione (no el "servicio de red" predeterminado en el que se ejecuta la aplicación asp.net). Mira los comentarios para más información.

+0

He intentado ejecutar el código en Visual Studio 2010 corriendo en Windows 7 y Server 2008, y funciona bien en ambos. Solo cuando se implementa en IIS en Server 2008, se cae. He intentado cambiar la cadena Provider (gracias), pero todavía da el error "el parámetro es incorrecto" :( – KenD

+0

Provider = RSSearch.CollatorDSO.1; Extended Properties = "Application = RSApp" Si no funciona, entonces podría ser un problema del usuario de IIS (ejecutar la aplicación) no tener un perfil de usuario (que sería una extraña solución en mi humilde opinión para una aplicación web). La cuenta predeterminada es una cuenta de servicio de red. –

+0

¡Por supuesto! que el código se está ejecutando bajo ese es el problema. He añadido código para suplantar a un usuario, y usando una cuenta de administrador de dominio ahora funciona bien. La pregunta es, ya que realmente no quiero que el código se ejecute como un administrador de dominio, ¿Qué permisos o privilegios tiene la cuenta el código se está ejecutando y necesita acceder a la base de datos remota de Windows Search? – KenD

Cuestiones relacionadas