用于SSRS和WCF测试的Soap请求的QUERY方法
本文关键字:Soap 请求 QUERY 方法 测试 SSRS WCF 用于 | 更新日期: 2023-09-27 18:15:49
我正在寻找一个很好的测试工具,用于制作Xml查询请求,并了解如何将它们与为SSRS返回Xml的soap请求一起使用。
我看到一些关于测试WCF服务的SOAP请求的线程推荐了一些产品,有人在codeplex: http://webservicestudio.codeplex.com/上提到了'WebServiceStudio'。问题是,这个工具似乎不工作,使"xml请求"部分直接。我不确定这种语法是否只是被降级到SSRS或SOAP家族的一部分,所以我真的在寻找关于从哪里开始的建议,以及认为我只能在商业智能开发工作室(BIDS)中进行测试似乎有点疯狂。
目前为止所做的一些背景:
- 我在。net 4.5中使用c#中的实体框架5在一个库项目中创建了一个实体模型,以保持它与数据的模型部分隔离。
- 然后,我在一个网站WCF项目中创建了一个接口和实现,使用basicHttpBinding作为它自己的项目来托管,以保持它与模型隔离。
- 我在Web Site项目中引用了实体项目,并返回了从t4模板(*)生成的类。tt =像POCO类生成器从我的理解)
-
我的返回实现如下所示,用于测试,两个表返回,其中一个在签名中带有参数,一个表函数具有两个参数,分别是datetime:
public List<tblState> GetStatesTable() { using (SSRSReportsEntities re = new SSRSReportsEntities()) { return re.tblStates.ToList(); } } public List<tblState> GetStateLike(string state) { using (SSRSReportsEntities re = new SSRSReportsEntities()) { return re.tblStates.Where(n => n.State.Contains(state)).ToList(); } } public List<fMonthly_Result> GetMonthlyData(DateTime aStart, DateTime aEnd) { using (SSRSReportsEntities re = new SSRSReportsEntities()) { return re.fMonthly(aStart, aEnd, null).ToList(); } }
-
我将此发布到我的本地主机上的IIS 7.5在Windows 7企业在一个应用程序到我的默认站点称为'Reporting',端点是:
http://(localhost)/报告/ReportingService.svc
-
我为客户端创建了另一个项目的c#解决方案。我添加了两个服务引用。一个用于发现服务项目并对其进行动态测试。另一个是发布后的服务。
-
我在客户端上测试了端点,它们在项目上的所有三种方法都按预期工作,并发布了引用。很好。
-
我进入BIDS并在步骤5中为XML类型的连接设置端点a数据源,并将其称为WCF数据源
-
我想测试三个方法。当你添加一个参数时,我注意到你需要在输入数据集查询之前先这样做,所以我对最后两个这样做。前两个可以,第三个不行:
< Query> < Method Name="GetStatesTable" Namespace="http://tempuri.org/"> < /Method> < SoapAction> http://tempuri.org/IReportingService/GetStatesTable </SoapAction> </Query> < Query> < Method Name="GetStateLike" Namespace="http://tempuri.org/"> < Parameters> <Parameter Name="state"> </Parameter> </Parameters> </Method> < SoapAction> http://tempuri.org/IReportingService/GetStateLike </SoapAction> </Query> < Query> < Method Name="GetMonthlyData" Namespace="http://tempuri.org/"> < Parameters> < Parameter Name="aStart"></Parameter> < Parameter Name="aEnd"></Parameter> </Parameters> </Method> < SoapAction> http://tempuri.org/IReportingService/GetMonthlyData </SoapAction> </Query>
第三给数据类型System.DataTime不能实现'4/1/2013'的数据类型错误。我需要排除故障,但我不确定从哪里开始测试。
好吧,所以我的答案有点蹩脚,不是我想要的,但它工作。我更改了GetMonthly的签名,以接受字符串的输入。然后在方法体中将它们转换为DateTime。看来我可以在SSRS中将合法的DateTime作为参数进行验证,只要WCF服务在XML中识别为文本。因此,错误检查的合法日期是在SSRS上,但字符串将转换为。net System.DateTime。我真的不喜欢这个答案,但它有效。
public List<fMonthly_Result> GetMonthlyData2(string aStart, string aEnd)
{
using (SSRSReportsEntities re = new SSRSReportsEntities())
{
DateTime dstart = DateTime.Parse(aStart);
DateTime dend = DateTime.Parse(aEnd);
return re.fMonthly(dstart, dend, null).ToList();
}
}
现在可以工作了,只要我先放入参数并将它们映射到报告项目中定义的现有参数:
< Query>
< Method Name="GetMonthlyData" Namespace="http://tempuri.org/">
< Parameters>
< Parameter Name="aStart"></Parameter>
< Parameter Name="aEnd"></Parameter>
</Parameters>
</Method>
< SoapAction>
http://tempuri.org/IReportingService/GetMonthlyData
</SoapAction>
</Query>