有没有动态调用webservice的方法?

symbio 2005-06-28 09:58:01
由于初学webservice还不是非常清楚
现在要做一个多个webservice之间数据交互的东西
webservice是从列表中取出来的
所以不能在程序里面直接引用
请问有什么办法解决
...全文
313 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
symbio 2005-06-28
  • 打赏
  • 举报
回复
成功了谢谢楼上的几位 马上就散分^^
symbio 2005-06-28
  • 打赏
  • 举报
回复
谢谢 我先看看 其实每个服务器都是一样的 只有ip不同
ajieboy 2005-06-28
  • 打赏
  • 举报
回复
网上搜来的,以前用过,可以实现。

/// <summary>
/// 根据指定的信息,调用远程WebService方法
/// </summary>
/// <param name="url">WebService的http形式的地址</param>
/// <param name="namespaceName">欲调用的WebService的命名空间</param>
/// <param name="classname">欲调用的WebService的类名(不包括命名空间前缀)</param>
/// <param name="methodname">欲调用的WebService的方法名</param>
/// <param name="args">参数列表</param>
/// <returns>WebService的执行结果</returns>
/// <remarks>
/// 如果调用失败,将会抛出Exception。请调用的时候,适当截获异常。
/// 异常信息可能会发生在两个地方:
/// 1、动态构造WebService的时候,CompileAssembly失败。
/// 2、WebService本身执行失败。
/// </remarks>
/// <example>
/// <code>
/// object obj = InvokeWebservice("http://localhost/GSP_WorkflowWebservice/common.asmx","Genersoft.Platform.Service.Workflow","Common","GetToolType",new object[]{"1"});
/// </code>
/// </example>
private object InvokeWebservice(string url, string namespaceName, string classname, string methodname, object[] args)
{
try
{
WebClient wc = new WebClient();
Stream stream = wc.OpenRead(url+"?WSDL");
ServiceDescription sd = ServiceDescription.Read(stream);
ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
sdi.AddServiceDescription(sd,"","");
CodeNamespace cn = new CodeNamespace(namespaceName);
CodeCompileUnit ccu = new CodeCompileUnit();
ccu.Namespaces.Add(cn);
sdi.Import(cn,ccu);

CSharpCodeProvider csc = new CSharpCodeProvider();
ICodeCompiler icc = csc.CreateCompiler();

CompilerParameters cplist = new CompilerParameters();
cplist.GenerateExecutable = false;
cplist.GenerateInMemory = true;
cplist.ReferencedAssemblies.Add("System.dll");
cplist.ReferencedAssemblies.Add("System.XML.dll");
cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
cplist.ReferencedAssemblies.Add("System.Data.dll");

CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
if(true == cr.Errors.HasErrors)
{
StringBuilder sb = new StringBuilder();
foreach(CompilerError ce in cr.Errors)
{
sb.Append(ce.ToString());
sb.Append(Environment.NewLine);
}
throw new Exception(sb.ToString());
}
Assembly assembly = cr.CompiledAssembly;
Type t = assembly.GetType(namespaceName+"."+classname,true,true);
object obj = Activator.CreateInstance(t);
MethodInfo mi = t.GetMethod(methodname);
return mi.Invoke(obj,args);
}
catch(Exception ex)
{
throw new Exception(ex.InnerException.Message,new Exception(ex.InnerException.StackTrace));
}
}
LoveCherry 2005-06-28
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/TopicView3.asp?id=3629871
HapTears 2005-06-28
  • 打赏
  • 举报
回复
这些webservers是不是都一样,只是发的服务器不同而已,如果是的话,就可以动态调用
thinkingforever 2005-06-28
  • 打赏
  • 举报
回复
说具体点.什么情况
我不懂电脑 2005-06-28
  • 打赏
  • 举报
回复
没有什么好办法。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧