111,086
社区成员




object item = method.Invoke(o, _params);
的时候没有执行,而且会报错!希望大家帮忙看一下,不慎感激//内网 动态调用 webservice 函数
public static object InvokeWebMethod2(string _url, string _methodName,
params object[] _params)
{
WriteLog("开始执行 动态调用 webservice 函数...........", "");
WebClient client = new WebClient();
//String url = "http://localhost:3182/Service1.asmx?WSDL";//这个地址可以写在Config文件里面
Stream stream = client.OpenRead(_url);
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 = "JetSun"; //这个命名空间可以自己取
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";//输出程序集的名称
WriteLog("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 result = provider.CompileAssemblyFromDom(parameter, unit);
if (result.Errors.HasErrors)
{
// 显示编译错误信息
}
Assembly asm = Assembly.LoadFrom("MyTest.dll");//加载前面生成的程序集
WriteLog("MyTest.dll 文件加载成功!下一步引用服务端的服务说明", "");
//Type t = asm.GetType("yzb.WeatherWS"); //前面的命名空间.类名,类必须是webservice中定义的
Type t = asm.GetType("JetSun.EventBusSvc");//查询省份的 webservice
WriteLog("MyTest.dll 文件加载成功!下一步调用服务端函数..........内网", "");
//Type t = asm.GetType("JetSun.Iniuservice");
object o = Activator.CreateInstance(t);
MethodInfo method = t.GetMethod(_methodName);//GetPersons是服务端的方法名称,你想调用服务端的什么方法都可以在这里改,最好封装一下
WriteLog("获取服务端函数成功!下一步调用服务端函数..........内网", "");
/*.---------------------------------------------------------------------------------------------------------------------------
一直到这里,都是正常执行的
*/
//下面这条语句就执行不到, 错误类型是 : “调用的目标发生了异常”
object item = method.Invoke(o, _params); //注:method.Invoke(o, null)返回的是一个Object,如果你服务端返回的是DataSet,这里也是用(DataSet)method.Invoke(o, null)转一下就行了
WriteLog("动态调用 webservice 函数执行完.........", "");
WriteLog("服务端函数调用成功!.........................内网", "");
return item;
}