首页 新闻 会员 周边

动态调用webservice 返回 out 类型参数的问题

0
悬赏园豆:20 [待解决问题]

昨天也碰到这样一个问题,动态调用webservice,然后需要进行分页的方法,但是返回的是一个datatable对象。
动态调用的方法如下:

C# code
publicstaticobject GetServiceFunction(string functionName, object[] args, params Type[] types) { object result =0; WebClient client =new WebClient(); Stream stream =null; String url = ConfigManager.GetConfigString("TransferReservateApp", "serviceUrl"); ;//这个地址可以写在Config文件里面,这里取出来就行了.在原地址后面加上: ?WSDLtry { stream = client.OpenRead(url); } catch (WebException webex)//若使ip地址改变导致的错误,读取本地文件 { } ServiceDescription description = ServiceDescription.Read(stream); ServiceDescriptionImporter importer =new ServiceDescriptionImporter();//创建客户端代理代理类。 importer.ProtocolName ="Soap"; //指定访问协议。 importer.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。 importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync; importer.AddServiceDescription(description, null, null); //添加WSDL文档。 CodeNamespace nmspace =new CodeNamespace(); //命名空间 nmspace.Name ="PreService"; CodeCompileUnit unit =new CodeCompileUnit(); unit.Namespaces.Add(nmspace); ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit); CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); CompilerParameters parameter =new CompilerParameters(); parameter.GenerateExecutable =false; parameter.OutputAssembly ="MyTest.dll";//输出程序集的名称 parameter.ReferencedAssemblies.Add("System.dll"); parameter.ReferencedAssemblies.Add("System.XML.dll"); parameter.ReferencedAssemblies.Add("System.Web.Services.dll"); parameter.ReferencedAssemblies.Add("System.Data.dll"); CompilerResults compileResult = provider.CompileAssemblyFromDom(parameter, unit); if (compileResult.Errors.HasErrors) { // 显示编译错误信息 } Assembly asm = Assembly.LoadFrom("MyTest.dll");//加载前面生成的程序集 Type t = asm.GetType("PreService.Service1"); object o = Activator.CreateInstance(t); MethodInfo method; if (types.Length ==0)//如果没有out ,或者ref类型参数 { method = t.GetMethod(functionName); } else { method = t.GetMethod(functionName, types);// }
result = method.Invoke(o, args);
return result;


调试发现

C# code
if (types.Length ==0)//如果没有out ,或者ref类型参数
{ method = t.GetMethod(functionName); } 
else
{
method = t.GetMethod(functionName, types);//
}
 result = method.Invoke(o, args);

result = method.Invoke(o, args);在红色标记处调试进去,整个底层方法的调用并没有问题。但是调式返回到红色标记后即爆“调用的目标发生了异常”。
.webservice中的方法如下

C# code
[WebMethod] 
public DataTable GetHospitalByPage(string where, int pageSize, int currentIndex, outint recordCount, outint pageCount)
{
  HospitalBll hosBll =new HospitalBll();
 return hosBll.GetPageList(pageSize, currentIndex, out recordCount, out pageCount, where);
}

我在csdn上也发过可是没人响应。

http://topic.csdn.net/u/20120207/09/767635b3-a1d3-4f53-b888-9fc8fe0d50e9.html?55247
我的问题和下面的情况类似,哪位帮忙看看。非常感谢!
http://topic.csdn.net/u/20100527/09/2eaa6369-ae2d-436c-aabc-ed62205ebf87.html?seed=300298756&r=77466691#r_77466691

litte monkey的主页 litte monkey | 初学一级 | 园豆:25
提问于:2012-02-07 11:11
< >
分享
所有回答(1)
0

args不是空的传进去的吧?如果是的话会出现上面的问题。

today4king | 园豆:3499 (老鸟四级) | 2012-02-07 13:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册