J'ai un service Web que j'ai créé en utilisant C# et Visual Studio 2010. La définition est la suivante.Source de données XML SSRS utilisant le service Web et les paramètres
[WebService(Namespace = "http://targetrocksoftware.org")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class GetAssessmentResults : System.Web.Services.WebService
{
SchoolTestManagerDBContainer SchoolDB = new SchoolTestManagerDBContainer();
[WebMethod]
public XmlDocument GetAssessment(int assessmentid)
{
int intid = 88;
Assessment a = SchoolDB.Assessments.SingleOrDefault(m=>m.Id == (int) intid);
if (a != null)
{
MemoryStream ms = new MemoryStream();
Test t = Test.GetTestStructure(a);
t.SerializeTest(ms);
ms.Seek(0, SeekOrigin.Begin); //reset read pointer
XmlDocument xd = new XmlDocument();
xd.Load(ms);
return xd;
}
else
return null;
}
}
il est très simple que vous pouvez voir et il prend un paramètre un entier qui est l'identifiant unique d'une table. Pas de problèmes que vous pourriez penser. Everthing fonctionne sauf que lorsque j'appelle le service Web depuis SSRS (soit en mode local via ReportBuilder 2.0) ou directement depuis le serveur SSRS, le paramètre assessmentid est toujours 0.
Le rapport SSRS appelle le service Web à l'aide de la requête suivante paramètre dans un ensemble de données.
<Query xmlns="http://targetrocksoftware.org">
http://targetrocksoftware.org/GetAssessment
<ElementPath IgnoreNamespaces="True">
GetAssessmentResponse/GetAssessmentResult/Test
{
NumQuestions(integer),
nAnswered(integer),
Highest(float),
Lowest(float),
Median(float),
Mean(float),
Correct(integer),
Incorrect(integer),
KR20(float),
StandardDeviation(float),
Variance(float)
}
</ElementPath>
<SoapAction></SoapAction>
<Method Namespace="http://targetrocksoftware.org" Name="GetAssessmet">
<Parameters>
<Parameter Name="assessmentid">
<DefaultValue>88</DefaultValue>
</Parameter>
</Parameters>
</Method>
</Query>
Everyting semble fonctionner, sauf le paramètre assessmentid est toujours 0. Si je coder en dur un assessmentid que je sais est dans la db (dans ce cas 88) le service Web renvoie le document XML correct et le rapport est parfaitement rendu. Mais pour la vie de moi, je ne peux pas obtenir SSRS pour passer le paramètre correctement. Je l'ai utilisé Fiddler2 regarder à la demande qui est copié ci-dessous
POST
http://192.168.2.10/WebServices/GetAssessmentResults.asmx http: // targetrocksoftware.org/GetAssessment`
Content-Type: text/xml
hôte: 192.168.2.10
Content-Length: 280
Attendez-vous à: 100 continuer
Connection: Keep-Alive
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetAssessmet xmlns="http://targetrocksoftware.org">
<assessmentid>88</assessmentid>
</GetAssessmet>
</soap:Body>
</soap:Envelope>
`
Si j'utilise un outil de test WebService tel que soapUI pour envoyer une requête au service, cela fonctionne (par ex. assessmentid est sest à la valeur passée, 88). La seule chose que je peux voir qui est différente est que sur la requête qui est envoyée par soapUI le paramètre qui est passé a un qualificateur d'espace de noms. Cany quelqu'un m'aider s'il vous plaît. Une trace netmon est incluse ci-dessous, qui montre la différence entre les deux requêtes. Ma question fondamentale est de savoir comment obtenez-vous SSRS à travailler (par exemple, comprennent la namepace dans chaque partie de la demande de savon (au moins ce que je pense est faux :))
- Soap: xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tar="http://targetrocksoftware.org/"
- Envelope: <soapenv:Envelope>
+ STag: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tar="http://targetrocksoftware.org/">
+ Header: <soapenv:Header>
- Body: <soapenv:Body>
+ STag: <soapenv:Body>
- Node: XmlElement:<tar:GetAssessment>
+ STag: <tar:GetAssessment>
- Element: XmlElement:<tar:assessmentid> - 88
+ STag: <tar:assessmentid>
Content: 88
+ ETag: </tar:assessmentid>
+ ETag: </tar:GetAssessment>
+ ETag: </soapenv:Body>
+ ETag: </soapenv:Envelope>- Soap: xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tar="http://targetrocksoftware.org/"
- Envelope: <soapenv:Envelope>
+ STag: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tar="http://targetrocksoftware.org/">
+ Header: <soapenv:Header>
- Body: <soapenv:Body>
+ STag: <soapenv:Body>
- Node: XmlElement:<tar:GetAssessment>
+ STag: <tar:GetAssessment>
- Element: XmlElement:<tar:assessmentid> - 88
+ STag: <tar:assessmentid>
Content: 88
+ ETag: </tar:assessmentid>
+ ETag: </tar:GetAssessment>
+ ETag: </soapenv:Body>
+ ETag: </soapenv:Envelope>
Kevin