首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web Service >

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

2012-12-16 
动态调用webservice 返回 out 类型参数的问题?昨天也碰到这样一个问题,动态调用webservice,然后需要进行分

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


public static object 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文件里面,这里取出来就行了.在原地址后面加上: ?WSDL
            try
            {
                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;


调试发现

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中的方法如下
[WebMethod]
        public DataTable GetHospitalByPage(string where, int pageSize, int currentIndex, out int recordCount, out int pageCount)
        {


            HospitalBll hosBll = new HospitalBll();
            return hosBll.GetPageList(pageSize, currentIndex, out recordCount, out pageCount, where);
        }


我的问题和下面的情况类似,哪位帮忙看看。非常感谢!
http://topic.csdn.net/u/20100527/09/2eaa6369-ae2d-436c-aabc-ed62205ebf87.html?seed=300298756&r=77466691#r_77466691
[解决办法]
自己顶一个!不要沉啊!
[解决办法]
提醒一下,确定使用的.net framework版本,我印象中,好像较早的版本不支持DataTable作为返回类型,需要将DataTable放到DataSet中返回才可以。

帮顶

热点排行