2010-03-04 4 views
1

J'ai un rapport auquel j'ai un accès exécutable seulement - Je n'ai pas l'accès au fichier RDL. Ce rapport expose plusieurs paramètres que je voudrais définir à partir de l'URL.Transmission des paramètres au service par URL - Comment reconnaître les noms des paramètres?

J'ai réussi à changer certains paramètres en utilisant le formulaire standard param = data (comme expliqué ici: http://msdn.microsoft.com/en-us/library/ms153586.aspx). Cependant, certains paramètres n'ont pas les mêmes paramètre-invite et nom-paramètre.

Malheureusement, pour transmettre des valeurs de paramètres par URL, je dois connaître le nom du paramètre et je ne vois pas comment je peux le déduire du rapport et de ses paramètres. J'ai essayé d'inspecter la source et les post-données mais en vain.

Quelqu'un a une idée?

Merci

P.S J'ai aussi trébuché sur ce point: http://odetocode.com/Articles/123.aspx. Cependant, je n'ai pas pu me connecter aux services Web de mon serveur de rapports.

Répondre

4

Ugh. Je réponds à moi-même, j'espère que quelqu'un peut apprendre de lui:

Je l'ai fait, finalement, en utilisant le service Web de Reporting Services comme décrit here et here. Un point à retenir ici est que le nom du service a été changé (je crois à partir de SQL Server 2005 et suivants) point de terminaison est ReportService2005.asmx. Après l'ajout de la référence Web, j'avais encore divers problèmes. Pour récapituler, c'est le code qui a finalement fonctionné pour moi (note: je suis dans le domaine et l'IIS que je me connecte nécessite l'authentification de domaine Windows).

ReportParameter[] parameters; 
    const string historyId = null; 
    const bool forRendering = true; 
    ParameterValue[] values = null; 
    DataSourceCredentials[] credentials = new DataSourceCredentials[] {}; 

    ReportingService2005SoapClient c = new ReportingService2005SoapClient(); 
    c.ClientCredentials.Windows.ClientCredential = new System.Net.NetworkCredential("USERNAME", "PASSWORD", "DOMAIN"); 
    c.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation; 

    c.GetReportParameters 
    (
     "/CycleStatus/Builds Score", 
     historyId, 
     forRendering, 
     values, 
     credentials, 
     out parameters 
    ); 

Cependant, je frappai par l'erreur suivante:

«La requête HTTP est non autorisé avec le schéma d'authentification client « Anonymous » L'en-tête d'authentification reçue du serveur était « Negotiate, NTLM » »

pour gérer que vous devez changer, dans votre app.config le nœud de sécurité, comme ceci:

<security mode="TransportCredentialOnly"> 
    <transport clientCredentialType="Windows" /> 
</security> 

Après que tout a bien fonctionné.

Questions connexes