2010-06-30 5 views
5

J'essaye d'écrire un site Web simple (ASP.NET v4), qui appellera la recherche de Windows, trouver un dossier spécifique et le renvoyer à l'utilisateur. Je l'ai mis en place ce qui suit comme un exemple: il appelle le service de recherche de Windows sur « remoteserver », et renvoie le chemin de « somefile.txt »:Le code ASP.NET OLEDB casse quand déployé sur 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(); 

.. et cela fonctionne très bien sur Visual Studio 2010 "result" contient le chemin d'accès au fichier. Cependant, si je le déployer sur le serveur IIS7 local (en cours d'exécution sur le serveur 2008), je reçois cette erreur:

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. 

Je suis à une perte où aller. Que dois-je faire pour IIS7, ou le code, ou les deux pour le faire fonctionner? Encore une fois, cela fonctionne bien dans VS2010 (testé sur Windows 7 et Windows 2008 Server).

+0

Qu'est-ce que *** sytelhp.systemindex ***? – Kiquenet

+0

C'était le nom du serveur exécutant le code. C'était il ya 6 ans :) – KenD

Répondre

3

Je suppose que vous utilisez Vista ou un système d'exploitation plus ancien et que IIS fonctionne sur 2008 Server ou plus récent? Essayez Provider=Search.CollatorDSO.1 (notez le .1).

Modifier: Vous devez utiliser un autre compte d'utilisateur pour que la recherche fonctionne (pas le "service réseau" par défaut dans lequel l'application asp.net s'exécute). Voir les commentaires pour plus d'informations.

+0

J'ai essayé d'exécuter le code dans Visual Studio 2010 s'exécutant sur Windows 7 et Server 2008, et il fonctionne bien sur les deux. Ce n'est que lors du déploiement sur IIS Server 2008 qu'il tombe. J'ai essayé de changer la chaîne Provider (merci), mais cela donne encore l'erreur "paramètre est incorrect" :( – KenD

+0

Provider = RSSearch.CollatorDSO.1; Propriétés étendues = "Application = RSApp" Si cela ne fonctionne pas, alors il peut s'agir d'un problème de l'utilisateur IIS (exécutant l'application) n'ayant pas de profil utilisateur (ce qui serait une solution étrange IMHO pour une application web) Le compte par défaut est un compte de service réseau –

+0

Bien sûr, c'est le compte J'ai ajouté du code pour usurper l'identité d'un utilisateur, et en utilisant un compte d'administrateur de domaine, ça fonctionne bien maintenant, car je ne veux pas vraiment que le code fonctionne en tant qu'administrateur de domaine, quelles autorisations ou privilèges le compte du code est-il en cours d'exécution pour accéder à la base de données Windows Search distante? – KenD

Questions connexes