通過命令行的方式可以直接把SOAP的Webservice服務(wù)生成代理類,再編譯成一個dll,既然上面可以生成了代理類,并且如果我有幾個WebService需要生成,或者多次要生成代理類編譯dll的,這樣就會很麻煩了。把這生成代理類和編譯成dll的做成一個工具就會帶來方便。
開始行動
先直接上效果圖片
第一步:
把需要到的兩個工具:wsdl.exe和csc.exe工具給單獨(dú)復(fù)制出來
第二步:
通過C#來代碼來執(zhí)行那兩個命令行工具下面是我的一個方法:
/// <summary> /// 輸入?yún)?shù)執(zhí)行命令的方法 /// </summary> /// <param name="argument"></param> /// <returns></returns> public string Startcmd(string argument) { string output = ""; try { Process cmd = new Process(); cmd.StartInfo.FileName = FileName; cmd.StartInfo.Arguments = argument; cmd.StartInfo.UseShellExecute = false; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInfo.RedirectStandardOutput = true; cmd.StartInfo.CreateNoWindow = true; cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; cmd.Start(); output = cmd.StandardOutput.ReadToEnd(); //Console.WriteLine(output); cmd.WaitForExit(); cmd.Close(); } catch (Exception e) { output = e.ToString(); return output; // Console.WriteLine(e); } return output; }
第三步:
調(diào)試。在wsdl工具生成代理一般都沒有問題,也能正常生成代理類;但是用csc編譯成dll的時候,運(yùn)行csc工具會有錯誤,我們需要引用一個cscompui.dll,安裝vs后可以直接找到的。還需要把代理中引用的程序集都填寫上,也包括是系統(tǒng)的程序集。一般會包括下面的命名空間引用
using System.Xml.Serialization; using System.Web.Services; using System.ComponentModel; using System.Web.Services.Protocols; using System; using System.Diagnostics; using System.Data;
System.Xml.Serialization 是在System.XML.dll程序集
System.Web.Services 程序集是System.Web.Services.dll
using System.Diagnostics;using System.ComponentModel;using System;程序集都在System.dll
System.Data的程序集是System.Data.dll
我把那四個程序集的framework3.5的單獨(dú)復(fù)制出來的;
修改成4.0:
一:可以自己找到4.0下面相應(yīng)的dll去替換掉,
二:先把這個項(xiàng)目修改成framework4.0的項(xiàng)目,之后在程序中References-->System.Data--》properties-->Copy local的屬性值給為true,就到復(fù)制出framework4.0的版本dll,
如果csc編譯有錯誤:,都可以找到原因的。
備注: 由于wsdl生成的代理類和方法大都是公共的,如果兩個不同的WebService,生成使用了相同的命名空間,則在csc編譯的時候會有錯誤,這只能去手動解決或者那兩個生成的代碼放在不同的命名空間了。