青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

道。道。道

安全特性不等于安全的特性

   :: 首頁 :: 聯系 :: 聚合  :: 管理

常用鏈接

搜索

  •  

最新評論

添加Web引用的時候,WebService在客戶端有一個代理,如下:
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.42")]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Web.Services.WebServiceBindingAttribute(Name="WebService1Soap", Namespace="http://tempuri.org/")
   public partial class WebService1 : System.Web.Services.Protocols.SoapHttpClientProtocol
 
客戶端調用WebServivce就是通過這個代理類來調用的。
 
2.       調用WebService方法,客戶端和服務器端通信是Xml,所以代理類跟Xml之間就有序列化和反序列化的過程
3.       客戶端調用WebService的過程如下
a)         客戶端調用代理類Hello world方法
string str = (new Service2.WebService1()).HelloWorld ();
b)         代理類調用基類SoapHttpClientProtocal的Invoke方法
        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/HelloWorld0766", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
        public string HelloWorld() {
            object[] results = this.Invoke("HelloWorld", new object[0]);
            return ((string)(results[0]));
        }
c)         SoapHttpClientProtocal進行Soap序列化Soap頭和方法,都是這個類自己做的,但是輸入參數和返回值,是利用的XmlSerializer,輸入參數要序列化,返回值要反序列化。
        protected object[] Invoke(string methodName, object[] parameters)
        {
                
                try
                {
                    message1.SetStream(stream1);
                    this.Serialize(message1);//注1
                }
               
                response1 = this.GetWebResponse(request1);
                Stream stream2 = null;
                try
                {
                    stream2 = response1.GetResponseStream();
                    objArray1 = this.ReadResponse(message1, response1, stream2, false);//注2
                }
          }
         
          注1:this.Serialize中有一句參數序列化的代碼如下
          method1.parameterSerializer.Serialize(writer1, message.GetParameterValues(), null, flag1 ? text2 : null);
          注2:this.ReadResponse中有一句返回值的反序列化的代碼如下
          message.SetParameterValues((object[]) method1.returnSerializer.Deserialize(reader1, flag1 ? text1 : null));
d)         XmlSerializer會緩存臨時程序集,這個程序集作用是序列化和反序列化,如果緩存中沒有會調用TempAssembly產生一個
 
Static的緩存(就是我們每次調用慢的罪魁禍首):private static TempAssemblyCache cache;
獲取緩存中的程序集:this.tempAssembly = XmlSerializer.cache[defaultNamespace, type];
緩存中沒有就去加載:Assembly assembly1 = TempAssembly.LoadGeneratedAssembly(type, defaultNamespace, out implementation1);
加載沒有就去產生(會生成臨時文件并編譯,很慢):
this.tempAssembly = new TempAssembly(new XmlMapping[] { this.mapping }, assembly1, implementation1);
 
e)         TempAssemlby這個類負責加載以及產生臨時程序集
LoadGeneratedAssemlby方法中,有一段邏輯,就是默認去加載序列化類,這個類的命名是規則如下
        internal static string GetTempAssemblyName(AssemblyName parent, string ns)
        {
            return (parent.Name + ".XmlSerializers" + (((ns == null) || (ns.Length == 0)) ? "" : ("." + ns.GetHashCode())));
        }
       同時,如果加載失敗會觸發AppDomain.CurrentDomain.AssemblyResolve事件
        
4.       結論
1)   WebService的序列化是調用XmlSerializer
 
2)   WebService慢,是因為產生序列化類慢,所謂的臨時文件都是XmlSerializer的中間代碼。可以在config文件中加入如下的配置,臨時序列化的文件就不會被刪除了,WinForm程序是*.exe.config,asp.net是web.config。
        <configuration>
  <system.diagnostics>
    <switches>
      <add name="XmlSerialization.Compilation" value="4"/>
    </switches>
  </system.diagnostics>
</configuration>
 
臨時文件在C:\Documents and Settings\抹布\Local Settings\Temp下,注意,因為名稱是隨機的,序列化的dll文件,并不能重用,重開進程會重新生成。
3)   如果自定義序列化類,可以跳過產生臨時序列化的步驟,大大提高第一次加載的速度,也就是說,只要有一個
程序集名稱+.XmlSerializers”的序列化類存在,就不會動態生成序列化程序集了。
 
4)   在代理類上可以加
[System.Xml.Serialization.XmlSerializerAssemblyAttribute(AssemblyName = "TestPerformance.XmlSerializers")]
指定Xml序列化的類,這個序列化的類可以通過一個工具產生,
但是根據研究TempAssemlby的LoadGeneratedAssemlby代碼發現,這個Attribute可以不加的,只要你有一個GetTempAssemblyName返回值一樣的名稱的序列化類即可。
 
5)   根據加載失敗會觸發AppDomain.CurrentDomain.AssemblyResolve事件,可以在加載失敗后動態產生序列化類,如下。
        http://support.microsoft.com/kb/872800/zh-cn,請參考這個kb
      private void Form1_Load(object sender, EventArgs e)
        {
            AppDomain.CurrentDomain.AssemblyResolve +=
                new ResolveEventHandler(MyResolveEventHandler);
        }
 
        static Assembly MyResolveEventHandler(object sender, ResolveEventArgs args)
        {
            Assembly a = null;
            string[] arr = args.Name.Split(new string[] { "." }, StringSplitOptions.None);
            if (args.Name.IndexOf("XmlSerializers") >= 0)
            {
                if (!System.IO.File.Exists(args.Name + ".dll"))
                    PreGenNS.Pregen.Generate(new string[] { arr[0] });
                string sSerializersDLL = args.Name + ".dll";
                string smartDeploymentHostLocation = "";
                a = Assembly.LoadFrom(smartDeploymentHostLocation + sSerializersDLL);
            }
            return a;
        }
6)VS2005利用Release編譯,會產生AssemblyName+"XmlSerializer.dll"的序列化文件,可以隨著客戶端一起部署,跟5這種方式不太一樣,可以根據實際情況來選擇。
利用5這種方式,是第一次調用WebService時,動態生成序列化類;而6是在軟件發布時,生成這個類,并部署到客戶端。
posted on 2007-11-07 15:35 獨孤九劍 閱讀(3652) 評論(0)  編輯 收藏 引用 所屬分類: Learn articles
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美mv日韩mv亚洲| 亚洲免费成人| 欧美一区二区私人影院日本| 国产精品久久77777| 亚洲无线观看| 亚洲欧美日韩精品综合在线观看| 羞羞色国产精品| 一区二区三区成人| 国产精品影视天天线| 久久人人精品| 欧美精品日韩www.p站| 亚洲一区国产| 欧美亚洲网站| 亚洲人成绝费网站色www| 99在线热播精品免费| 国产区亚洲区欧美区| 欧美成人午夜激情在线| 欧美色精品天天在线观看视频| 国产美女精品免费电影| 午夜精品美女自拍福到在线| 亚洲一区二区视频在线| 黑丝一区二区| 99视频一区二区| 在线观看国产欧美| 一区二区三区精品久久久| 国产一区二区三区自拍| 亚洲精品乱码久久久久久蜜桃91| 午夜精品免费| 亚洲国产美国国产综合一区二区| 欧美自拍偷拍午夜视频| 欧美成人国产一区二区| 久久精品av麻豆的观看方式| 欧美国产日韩免费| 性欧美精品高清| 欧美韩国日本一区| 久久人91精品久久久久久不卡| 亚洲女人av| 99国产精品视频免费观看| 欧美在线黄色| 羞羞答答国产精品www一本| 欧美国产专区| 免费av成人在线| 国产九九精品视频| 一本久道久久综合狠狠爱| 伊人成人网在线看| 午夜精品在线视频| 亚洲在线观看免费| 欧美日韩国产精品专区| 免费在线日韩av| 国产一区深夜福利| 亚洲小视频在线| 亚洲在线免费| 欧美福利在线| 亚洲国产成人porn| 狠狠入ady亚洲精品| 亚洲免费婷婷| 亚洲欧美资源在线| 国产精品国产三级国产aⅴ入口| 亚洲一区二区三区777| 欧美电影专区| 欧美激情亚洲自拍| 一区二区三区在线免费播放| 午夜亚洲福利| 亚洲欧美日韩直播| 国产精品一区二区你懂的| 一区二区电影免费观看| 亚洲一区二区高清| 国产精品欧美在线| 亚洲欧美日韩精品久久奇米色影视| 国内免费精品永久在线视频| 欧美一二三视频| 久久精品主播| 在线成人性视频| 麻豆av一区二区三区| 亚洲电影中文字幕| 亚洲精品日韩在线观看| 欧美精品三级在线观看| 日韩视频在线观看一区二区| 亚洲一区二区三区四区中文| 国产精品日日摸夜夜摸av| 亚洲欧美日韩国产精品| 久久亚洲一区二区| 亚洲黄色一区二区三区| 欧美激情综合在线| 99精品久久久| 欧美在线精品免播放器视频| 国产欧美一区二区精品性| 欧美在线观看你懂的| 欧美成人精品h版在线观看| 91久久精品国产91性色| 欧美色欧美亚洲另类二区| 亚洲一区制服诱惑| 男女av一区三区二区色多| 日韩视频在线观看一区二区| 国产精品久久久久久久7电影| 欧美成人精品h版在线观看| 日韩视频不卡| 国产精品影视天天线| 久久久夜夜夜| 一本色道精品久久一区二区三区 | 日韩亚洲成人av在线| 午夜视频在线观看一区二区| 国产视频在线观看一区二区三区| 欧美激情精品久久久久久免费印度| 欧美午夜精品久久久久久超碰| 欧美大片在线观看一区| 在线一区二区视频| 一色屋精品亚洲香蕉网站| 欧美精品1区| 久久精品中文字幕免费mv| 日韩午夜免费| 免费亚洲婷婷| 久久丁香综合五月国产三级网站| 国产精品99免费看| 欧美~级网站不卡| 欧美在线播放高清精品| 亚洲片在线观看| 麻豆精品在线播放| 亚洲一区中文字幕在线观看| 在线播放精品| 国产麻豆成人精品| 欧美日韩你懂的| 免费观看在线综合| 欧美尤物巨大精品爽| 在线一区二区三区四区| 亚洲国产日韩一区| 免费亚洲电影在线| 久久乐国产精品| 性感少妇一区| 亚洲欧美久久| 亚洲一区3d动漫同人无遮挡| 亚洲精品久久久久中文字幕欢迎你 | 在线亚洲美日韩| 亚洲人成网在线播放| 牛牛国产精品| 久久成人亚洲| 性欧美超级视频| 亚洲女人小视频在线观看| 一本一本久久| 一区二区三区久久久| 日韩视频精品在线观看| 亚洲国产精品99久久久久久久久| 欧美高清视频www夜色资源网| 亚洲高清视频中文字幕| 蜜桃久久精品乱码一区二区| 久久久久综合| 久久蜜桃香蕉精品一区二区三区| 黄网站色欧美视频| 国产一区二区三区高清| 国产精品一级| 国产日韩精品一区二区| 国产亚洲精品激情久久| 黄色欧美成人| 亚洲国产欧美在线人成| 亚洲精品一级| 亚洲图片欧美一区| 性做久久久久久免费观看欧美| 在线精品视频免费观看| 亚洲精品国产精品国自产观看| 欧美日韩在线观看视频| 国产精品视频xxxx| 国产精品中文字幕欧美| 国产精品一级二级三级| 国产亚洲综合精品| 亚洲国产二区| 99re6这里只有精品| 亚洲永久网站| 久久人人97超碰精品888| 亚洲大胆av| 洋洋av久久久久久久一区| 亚洲一区视频在线| 久久亚洲捆绑美女| 欧美精品一区二区三区蜜臀| 国产精品久久久久久久久久久久| 欧美aa在线视频| 国产精品激情偷乱一区二区∴| 久久综合电影一区| 欧美日韩在线三级| 国产区精品视频| 亚洲靠逼com| 欧美影视一区| 亚洲人成7777| 午夜日本精品| 欧美激情一区二区三区成人| 国产精品一区二区黑丝| 亚洲激情欧美激情| 亚洲欧美一区二区三区久久| 免费观看成人| 中日韩视频在线观看| 蜜臀久久久99精品久久久久久| 午夜精品久久久久久久久久久久| 亚洲久久一区二区| 欧美在线观看网站| 欧美日韩国产成人在线91| 国产酒店精品激情| 一本一本大道香蕉久在线精品| 最近看过的日韩成人| 久久久xxx| 99国产精品久久久久老师| 久久综合给合|