日期:2014-05-17 浏览次数:20487 次
<client> <endpoint address="http://localhost:1002/FileCenter/Document_Service.asmx" binding="basicHttpBinding" bindingConfiguration="Document_ServiceSoap" contract="FileServer_Service.Document_ServiceSoap" name="Document_ServiceSoap" /> </client>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Net; using System.IO; using System.Web.Services.Description; using System.CodeDom; using Microsoft.CSharp; using System.CodeDom.Compiler; using System.Reflection; namespace WebServicesHelp { /// <summary> /// 调用传统的WebService /// Add by Dylan /// Date 2012/03/08 /// </summary> public class InvokeWebService { /// <summary> /// 调用传统webservice(不知道类名) /// </summary> /// <param name="url">服务地址</param> /// <param name="methodName">方法名</param> /// <param name="args">方法参数</param> /// <returns></returns> public static object InvokeWS(string url, string methodName, object[] args) { return InvokeWS(url, null, methodName, args); } /// <summary> /// /// </summary> /// <param name="url">服务地址</param> /// <param name="calssName">类名</param> /// <param name="methodName">服务地址</param> /// <param name="args">方法参数</param> /// <returns></returns> public static object InvokeWS(string url, object calssName, string methodName, object[] args) { string namespaceStr = "WebServicesHelp";//WebServicesHelp if (calssName == null ) { calssName = InvokeWebService.GetWsClassName(url); } try { //获取WSDL WebClient wc = new WebClient(); Stream stream = wc.OpenRead(url + "?WSDL");//例如:http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl ServiceDescription sd = ServiceDescription.Read(stream);//读取服务描述 #region 摘自MSDN //使用 ServiceDescriptionImporter 类可以方便地将 WSDL 说明中包含的信息导入到 System.CodeDom.CodeCompileUnit 对象 //通过调整 Style 参数的值,可以指示 ServiceDescriptionImporter 实例生成客户端代理类 //(通过透明调用该类可提供 Web 服务的功能)或生成抽象类(该类封装 Web 服务的功能而不实现该功能)。 //然后可直接调用或以选择的语言导出生成的 CodeCompileUnit 对象中的代码。 #endregion ServiceDescriptionImporter sdi = new ServiceDescriptionImporter(); sdi.AddServiceDescription(sd, "", ""); CodeNamespace cn = new CodeNamespace(namespaceStr); //动态生成客户端代理类代码 CodeCompileUnit ccu = new CodeCompileUnit(); ccu.Namespaces.Add(cn); sdi.Import(cn, ccu); CSharpCodeProvider csc = new CSharpCodeProvider();//提供对 C# 代码生成器和代码编译器的实例的访问。 //ICodeCompiler icc = csc.CreateCompiler();//ICodeCompiler接口在.NET 2.0中就过时了 //设定编译参数 CompilerParameters cplist = new CompilerParameters(); cplist.GenerateExecutable = false; cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll"); cplist.Reference