<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      動態(tài)調用WebService的代理類

      using System;
      using System.Collections;
      using System.ComponentModel;
      using System.Data;
      using System.Linq;
      using System.Web;
      using System.Web.Services;
      using System.Web.Services.Protocols;
      using System.Xml.Linq;
      
      
      using System.IO;
      using System.Net;
      using System.CodeDom;
      using System.CodeDom.Compiler;
      using System.Web.Services.Description;
      using System.Xml.Serialization;
      using System.Web.Services.Discovery;
      using System.Xml.Schema;
      using System.Text;
      using System.Security.Cryptography;
      using System.Reflection;
      using System.Collections.Generic;
      using System.Xml;
      
      namespace YtWebService
      {
          /// <summary>  
          /// WebServiceProxy 的摘要說明  
          /// </summary>  
          [WebService(Namespace = "http://tempuri.org/")]
          [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
          [ToolboxItem(false)]
          // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務,請取消對下行的注釋。  
          // [System.Web.Script.Services.ScriptService]  
          public class WebServiceProxy : System.Web.Services.WebService
          {
      
              #region 私有變量和屬性定義
              /// <summary>                   
              /// web服務地址                           
              /// </summary>                              
              private string _wsdlUrl = string.Empty;
              /// <summary>                   
              /// web服務名稱                           
              /// </summary>                              
              private string _wsdlName = string.Empty;
              /// <summary>                   
              /// 代理類命名空間                           
              /// </summary>                              
              private string _wsdlNamespace = "FrameWork.WebService.DynamicWebServiceCalling.{0}";
              /// <summary>                   
              /// 代理類類型名稱                           
              /// </summary>                              
              private Type _typeName = null;
              /// <summary>                   
              /// 程序集名稱                             
              /// </summary>                              
              private string _assName = string.Empty;
              /// <summary>                   
              /// 代理類所在程序集路徑                            
              /// </summary>                              
              private string _assPath = string.Empty;
              /// <summary>                   
              /// 代理類的實例                            
              /// </summary>                              
              private object _instance = null;
              /// <summary>                   
              /// 代理類的實例                            
              /// </summary>                              
              private object Instance
              {
                  get
                  {
                      if (_instance == null)
                      {
                          _instance = Activator.CreateInstance(_typeName);
                          return _instance;
                      }
                      else
                          return _instance;
                  }
              }
              #endregion
      
              #region 構造函數
              public WebServiceProxy(string wsdlUrl)
              {
      
                  this._wsdlUrl = wsdlUrl;
                  string wsdlName = WebServiceProxy.getWsclassName(wsdlUrl);
                  this._wsdlName = wsdlName;
                  this._assName = string.Format(_wsdlNamespace, wsdlName);
                  this._assPath = Path.GetTempPath() + this._assName + getMd5Sum(this._wsdlUrl) + ".dll";
                  this.CreateServiceAssembly();
              }
      
              public WebServiceProxy(string wsdlUrl, string wsdlName)
              {
                  this._wsdlUrl = wsdlUrl;
                  this._wsdlName = wsdlName;
                  this._assName = string.Format(_wsdlNamespace, wsdlName);
                  this._assPath = Path.GetTempPath() + this._assName + getMd5Sum(this._wsdlUrl) + ".dll";
                  this.CreateServiceAssembly();
              }
              #endregion
      
              #region 得到WSDL信息,生成本地代理類并編譯為DLL,構造函數調用,類生成時加載
              /// <summary>                           
              /// 得到WSDL信息,生成本地代理類并編譯為DLL                           
              /// </summary>                              
              private void CreateServiceAssembly()
              {
                  if (this.checkCache())
                  {
                      this.initTypeName();
                      return;
                  }
                  if (string.IsNullOrEmpty(this._wsdlUrl))
                  {
                      return;
                  }
                  try
                  {
                      //使用WebClient下載WSDL信息                         
                      WebClient web = new WebClient();
                      Stream stream = web.OpenRead(this._wsdlUrl);
                      ServiceDescription description = ServiceDescription.Read(stream);//創(chuàng)建和格式化WSDL文檔  
                      ServiceDescriptionImporter importer = new ServiceDescriptionImporter();//創(chuàng)建客戶端代理代理類  
                      importer.ProtocolName = "Soap";
                      importer.Style = ServiceDescriptionImportStyle.Client;  //生成客戶端代理                         
                      importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
                      importer.AddServiceDescription(description, null, null);//添加WSDL文檔  
                      //使用CodeDom編譯客戶端代理類                   
                      CodeNamespace nmspace = new CodeNamespace(_assName);    //為代理類添加命名空間                  
                      CodeCompileUnit unit = new CodeCompileUnit();
                      unit.Namespaces.Add(nmspace);
                      this.checkForImports(this._wsdlUrl, importer);
                      ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit);
                      CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
                      CompilerParameters parameter = new CompilerParameters();
                      parameter.ReferencedAssemblies.Add("System.dll");
                      parameter.ReferencedAssemblies.Add("System.XML.dll");
                      parameter.ReferencedAssemblies.Add("System.Web.Services.dll");
                      parameter.ReferencedAssemblies.Add("System.Data.dll");
                      parameter.GenerateExecutable = false;
                      parameter.GenerateInMemory = false;
                      parameter.IncludeDebugInformation = false;
                      CompilerResults result = provider.CompileAssemblyFromDom(parameter, unit);
                      provider.Dispose();
                      if (result.Errors.HasErrors)
                      {
                          string errors = string.Format(@"編譯錯誤:{0}錯誤!", result.Errors.Count);
                          foreach (CompilerError error in result.Errors)
                          {
                              errors += error.ErrorText;
                          }
                          throw new Exception(errors);
                      }
                      this.copyTempAssembly(result.PathToAssembly);
                      this.initTypeName();
                  }
                  catch (Exception e)
                  {
                      throw new Exception(e.Message);
                  }
              }
              #endregion
      
              #region 執(zhí)行Web服務方法
              /// <summary>                           
              /// 執(zhí)行代理類指定方法,有返回值                                
              /// </summary>                                  
              /// <param   name="methodName">方法名稱</param>                           
              /// <param   name="param">參數</param>                              
              /// <returns>object</returns>                                 
              public object ExecuteQuery(string methodName, object[] param)
              {
                  object rtnObj = null;
                  try
                  {
                      if (this._typeName == null)
                      {
                          //記錄Web服務訪問類名錯誤日志代碼位置  
                          throw new TypeLoadException("Web服務訪問類名【" + this._wsdlName + "】不正確,請檢查!");
                      }
                      //調用方法  
                      MethodInfo mi = this._typeName.GetMethod(methodName);
                      if (mi == null)
                      {
                          //記錄Web服務方法名錯誤日志代碼位置  
                          throw new TypeLoadException("Web服務訪問方法名【" + methodName + "】不正確,請檢查!");
                      }
                      try
                      {
                          if (param == null)
                              rtnObj = mi.Invoke(Instance, null);
                          else
                              rtnObj = mi.Invoke(Instance, param);
                      }
                      catch (TypeLoadException tle)
                      {
                          //記錄Web服務方法參數個數錯誤日志代碼位置  
                          throw new TypeLoadException("Web服務訪問方法【" + methodName + "】參數個數不正確,請檢查!", new TypeLoadException(tle.StackTrace));
                      }
                  }
                  catch (Exception ex)
                  {
                      throw new Exception(ex.Message, new Exception(ex.StackTrace));
                  }
                  return rtnObj;
              }
      
              /// <summary>                           
              /// 執(zhí)行代理類指定方法,無返回值                                
              /// </summary>                                  
              /// <param   name="methodName">方法名稱</param>                           
              /// <param   name="param">參數</param>                              
              public void ExecuteNoQuery(string methodName, object[] param)
              {
                  try
                  {
                      if (this._typeName == null)
                      {
                          //記錄Web服務訪問類名錯誤日志代碼位置  
                          throw new TypeLoadException("Web服務訪問類名【" + this._wsdlName + "】不正確,請檢查!");
                      }
                      //調用方法  
                      MethodInfo mi = this._typeName.GetMethod(methodName);
                      if (mi == null)
                      {
                          //記錄Web服務方法名錯誤日志代碼位置  
                          throw new TypeLoadException("Web服務訪問方法名【" + methodName + "】不正確,請檢查!");
                      }
                      try
                      {
                          if (param == null)
                              mi.Invoke(Instance, null);
                          else
                              mi.Invoke(Instance, param);
                      }
                      catch (TypeLoadException tle)
                      {
                          //記錄Web服務方法參數個數錯誤日志代碼位置  
                          throw new TypeLoadException("Web服務訪問方法【" + methodName + "】參數個數不正確,請檢查!", new TypeLoadException(tle.StackTrace));
                      }
                  }
                  catch (Exception ex)
                  {
                      throw new Exception(ex.Message, new Exception(ex.StackTrace));
                  }
              }
              #endregion
      
              #region 私有方法
              /// <summary>                               
              /// 得到代理類類型名稱                                 
              /// </summary>                                  
              private void initTypeName()
              {
                  Assembly serviceAsm = Assembly.LoadFrom(this._assPath);
                  Type[] types = serviceAsm.GetTypes();
                  string objTypeName = "";
                  foreach (Type t in types)
                  {
                      if (t.BaseType == typeof(SoapHttpClientProtocol))
                      {
                          objTypeName = t.Name;
                          break;
                      }
                  }
                  _typeName = serviceAsm.GetType(this._assName + "." + objTypeName);
              }
      
              /// <summary>                       
              /// 根據web   service文檔架構向代理類添加ServiceDescription和XmlSchema                             
              /// </summary>                                  
              /// <param   name="baseWSDLUrl">web服務地址</param>                           
              /// <param   name="importer">代理類</param>                              
              private void checkForImports(string baseWsdlUrl, ServiceDescriptionImporter importer)
              {
                  DiscoveryClientProtocol dcp = new DiscoveryClientProtocol();
                  dcp.DiscoverAny(baseWsdlUrl);
                  dcp.ResolveAll();
                  foreach (object osd in dcp.Documents.Values)
                  {
                      if (osd is ServiceDescription) importer.AddServiceDescription((ServiceDescription)osd, null, null); ;
                      if (osd is XmlSchema) importer.Schemas.Add((XmlSchema)osd);
                  }
              }
      
              /// <summary>                           
              /// 復制程序集到指定路徑                                
              /// </summary>                                  
              /// <param   name="pathToAssembly">程序集路徑</param>                              
              private void copyTempAssembly(string pathToAssembly)
              {
                  File.Copy(pathToAssembly, this._assPath);
              }
      
              private string getMd5Sum(string str)
              {
                  Encoder enc = System.Text.Encoding.Unicode.GetEncoder();
                  byte[] unicodeText = new byte[str.Length * 2];
                  enc.GetBytes(str.ToCharArray(), 0, str.Length, unicodeText, 0, true);
                  MD5 md5 = new MD5CryptoServiceProvider();
                  byte[] result = md5.ComputeHash(unicodeText);
                  StringBuilder sb = new StringBuilder();
                  for (int i = 0; i < result.Length; i++)
                  {
                      sb.Append(result[i].ToString("X2"));
                  }
                  return sb.ToString();
              }
      
              /// <summary>                           
              /// 是否已經存在該程序集                                
              /// </summary>                                  
              /// <returns>false:不存在該程序集,true:已經存在該程序集</returns>                                
              private bool checkCache()
              {
                  if (File.Exists(this._assPath))
                  {
                      return true;
                  }
                  return false;
              }
      
              //私有方法,默認取url入口的文件名為類名  
              private static string getWsclassName(string wsdlUrl)
              {
                  string[] parts = wsdlUrl.Split('/');
                  string[] pps = parts[parts.Length - 1].Split('.');
                  return pps[0];
              }
              #endregion
          }
      }

       

      posted @ 2017-08-25 15:43  Aricc  閱讀(1329)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产播放91色在线观看| 亚洲欧洲无码av电影在线观看| 亚洲avav天堂av在线网爱情| 亚洲人妻一区二区精品| 浮妇高潮喷白浆视频| 国产普通话对白刺激| 精品综合一区二区三区四区| 开心一区二区三区激情| 狠狠躁夜夜躁人人爽蜜桃| 亚洲免费人成在线视频观看| 免费又大粗又爽又黄少妇毛片| 欧美乱码精品一区二区三区| 四虎永久在线精品8848a| 亚洲精品在线二区三区| 天长市| 国产一区二区三区麻豆视频| 精品国产成人国产在线观看| 国产精品久久无码一区| 国产午夜A理论毛片| 成人3D动漫一区二区三区| 日韩午夜福利片段在线观看| 中年国产丰满熟女乱子正在播放| 国产亚洲综合一区二区三区| 国产女人喷潮视频免费| 亚洲国产美女精品久久久| 国产精品国三级国产专区| 国产爆乳无码av在线播放| 999精品色在线播放| 国产又色又爽又黄的网站免费| 国产精品亚洲欧美大片在线看| 无码人妻丝袜在线视频| 狠狠亚洲色一日本高清色| 亚洲精品成人久久av| 亚洲国产精品无码久久电影| 亚洲精品成人久久av| 疯狂做受XXXX高潮国产| 午夜通通国产精品福利| 亚洲av色在线播放一区| 久久99久国产精品66| 中文字幕一区二区人妻电影| 国产av午夜精品福利|