我有一个使用C#和Visual Studio 2010创建的Web服务。定义如下。
[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;
}
}
它非常简单,你可以看到它需要一个参数一个整数,它是表的唯一id。你不会想到任何问题。除了当我从SSRS调用Web服务(通过ReportBuilder 2.0在本地模式下)或直接从SSRS服务器调用Web服务时,everthing工作,参数assessmentid始终为0.
SSRS报告使用数据集中的以下查询参数调用Web服务。
<Query xmlns="http://targetrocksoftware.org">
{http://targetrocksoftware.org/GetAssessment {1}}
<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>
除了evaluatementid参数始终为0之外,其他似乎都有效。如果我硬编码我知道在db中的评估(在这种情况下为88),Web服务将返回正确的Xml文档并且报告呈现完美。
但是对于我的生活,我无法让SSRS正确传递参数。我已经使用fiddler2来查看下面复制的请求
</SoapAction>
{http://192.168.2.10/WebServices/GetAssessmentResults.asmx {1}}的http:// targetrocksoftware.org / GetAssessment`
<Method Namespace="http://targetrocksoftware.org" Name="GetAssessmet">
<Parameters>
<Parameter Name="assessmentid">
<DefaultValue>88</DefaultValue>
</Parameter>
</Parameters>
</Method>
</Query>
内容类型:text / xml
主持人:192.168.2.10
内容长度:280
期待:100-继续
连接:Keep-Alive
POST
`
如果我使用像soapUI这样的WebService测试工具向服务发送请求(例如,评估结果是传递的值,88)。我能看到的唯一不同的是,在soapUI发送的请求中,传递的参数具有命名空间限定符。 Cany有人帮我请。下面包含一个netmon跟踪,它显示了两个请求之间的差异。我的基本问题是你如何让ssrs工作(例如在soap请求的每个部分都包含名称空间(至少这是我认为是错误的:))
HTTP/1.1
SOAPAction:
凯文
答案 0 :(得分:1)
如果有人有兴趣,我已经解决了这个问题。不是很好,但它已经解决了。解决方案是重新开始并重新创建具有完全相同功能的新Web服务。唯一的区别是现在我已将服务命名空间保留为默认http://tempuri.org。我不确定为什么它解决了这个问题,但确实如此。如果有人能够对它有所了解那就很好了
凯文