Ich habe einen Web-Service, den ich mit C# und Visual Studio 2010 erstellt habe. Die Definition ist unten.SSRS XML-Datenquelle mit Web-Service und Parametern
[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;
}
}
es ist sehr einfach, wie Sie sehen können, und es nimmt einen Parameter eine ganze Zahl, die die eindeutige ID einer Tabelle ist. Keine Probleme, die Sie denken würden. Alles funktioniert, außer wenn ich den Webdienst von SSRS (entweder im lokalen Modus über ReportBuilder 2.0) oder direkt vom SSRS-Server aus anrufe, ist der Parameter assessmentid immer 0.
Der SSRS-Bericht ruft den Webdienst mit der folgenden Abfrage auf Parameter in einem Datensatz.
<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>
Every mit Ausnahme der assessmentid Parameter zu funktionieren scheint immer 0. Wenn ich hart Code ein assessmentid, die ich kenne in der db ist (in diesem Fall 88) Der Web-Service gibt das korrekte Xml-Dokument zurück und der Bericht wird perfekt gerendert.
Aber für das Leben von mir kann ich SSRS nicht erhalten, um den Parameter richtig zu übergeben. Ich habe Fiddler2 verwendet auf Wunsch zu suchen, die unten kopiert
POST
http://192.168.2.10/WebServices/GetAssessmentResults.asmx http: // targetrocksoftware.org/GetAssessment`
Content-Type: text/xml
Host: 192.168.2.10
Content-Length: 280
erwarten: 100-Continue
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>
`
Wenn ich ein WebService-Test-Tool wie SoapUI verwenden, um eine Anfrage an den Dienst zu senden, der funktioniert (z. B. Assessmentid ist sest zu dem Wert bestanden, 88). Das einzige, was ich sehen kann, ist, dass auf der Anfrage, die von soapUI gesendet wird, der Parameter, der übergeben wird, einen Namespace-Qualifier hat. Cany, bitte hilf mir bitte. Eine Netmon-Ablaufverfolgung ist unten enthalten, die den Unterschied zwischen den beiden Anforderungen zeigt. Meine grundlegende Frage ist, wie bekommen Sie ssrs zu arbeiten (zB gehören die namepace in jedem Teil der Seife Anfrage (zumindest das ist, was ich denke, ist falsch :))
- 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