• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Web service開發(fā)的校直機軟件在MES系統(tǒng)上的應(yīng)用實例

    2022-01-20 01:39:26胡選仲周慶輝莊樹明
    工程與試驗 2021年4期
    關(guān)鍵詞:命令提示符管理器調(diào)用

    胡選仲,張 鵬,周慶輝,莊樹明

    (中機試驗裝備股份有限公司,吉林 長春 130103)

    1 引 言

    目前,校直機的校直數(shù)據(jù)是通過校直軟件生成文件,存儲到本地設(shè)備上,供給MES廠商調(diào)用。隨著網(wǎng)絡(luò)科技的進步,現(xiàn)有MES廠商需要把校直機的數(shù)據(jù)通過MES傳輸方式進行上傳。針對這個問題,結(jié)合現(xiàn)在市場的需求和網(wǎng)絡(luò)通信潮流,實現(xiàn)了校直機軟件以調(diào)用Web service傳輸?shù)姆绞竭M行MES傳輸校直數(shù)據(jù)[1,2]。

    2 調(diào)用Web Service的方式

    2.1 直接調(diào)用

    如果已知web service的路徑,則可以直接添加服務(wù)引用-高級-添加web引用,直接輸入webservice URL。這個調(diào)用比較常見,也非常簡單,即有完整的webservice文件目錄如圖1所示。

    圖1 添加服務(wù)

    也可在本地IIS根據(jù)webservice文件目錄新發(fā)布一個webservice,然后程序動態(tài)調(diào)用,修改Url:public new string Url {set; get; }。

    2.2 根據(jù)wsdl生成webservice的.cs文件及生成dll調(diào)用

    有時沒有這么多文件,如果只有wsdl文件,可以由別人提供或者根據(jù)webservice下面地址獲取:http://localhost:8888/WS.asmx?wsdl

    Visual Studio 2017->Visual Studio Tools->VS2017 開發(fā)人員命令提示符,如圖2所示。

    圖2 打開VS2017開發(fā)人員命令提示符

    在命令行輸入:wsdl E:WS.wsdl/out:WS.cs

    E:WS.wsdl是wsdl文件存儲路徑,也可以是http://localhost:8888/WS.asmx?wsdl。如果不報錯,看Program FilesMicrosoft Visual Studio 12.0WS.cs已經(jīng)自動生成的.cs文件、結(jié)構(gòu)體等都很方便,然后命令行執(zhí)行csc /t:library WS.cs,在同樣的路徑下,生成了WS.dll文件,把文件拷貝出去放到項目文件夾下,C# winform程序也可以添加引用。生成的文件默認路徑如圖3所示。

    圖3 生成的文件默認路徑

    默認生成的SOAP版本為1.1,可以通過G:Program FilesMicrosoft Visual Studio 12.0>wsdl E:e.wsdl /protocol:SOAP12 /out:e.cs來指定成為1.2版本。

    2.3 動態(tài)調(diào)用

    在C#程序中,如果要調(diào)用WebService,通常采用“添加Web引用”的形式來實現(xiàn)。但是,如果此WebService的URL是在C#程序運行過程中才能獲得,則必須用動態(tài)調(diào)用這個WebService了。以下是使用的例子:

    object[] argsweb = new object[1];

    argsweb.SetValue("cyy_JSWEB", 0);

    DataTable dtweb=WebServiceHelper.InvokeWebService("http://192.168.0.11/DBMS_CYY/DBMS_WebService.asmx", "GetUserTreeListData", argsweb) as DataTable;

    這種方式有點麻煩,意味著在每次使用前,需要把想要調(diào)用的函數(shù)參數(shù)組織成一個新的object[]才行,并且在每次調(diào)用InvokeWebService前都必須在內(nèi)存中創(chuàng)建新的動態(tài)程序集,這導(dǎo)致效率較低。因此,此種方法沒有直接用“實例名.方法名(參數(shù)列表)”的方法來得便捷??梢詫⑵浞诺揭粋€叫WebServiceHelper.cs的類里面。

    ///WebService動態(tài)調(diào)用

    public static object CAllWebService(object[] webobject, string add, string WebNom, string WebMeansName)

    {

    string @webnom =

    "ServiceBase.WebService.DynamicWebLoad";

    if ((WebNom ==null) || (WebNom ==""))

    {

    WebNom=

    WebServiceHelper.GetMyWebName(add);

    }

    //////使用(WSDL) 語言來獲取服務(wù)的描述

    WebClient describe==new WebClient();

    Stream SDescribe=describe.OpenRead(add + "?WSDL");

    ServiceDescription SDDescribe=

    ServiceDescription.Read(SDescribe);

    ServiceDescriptionImporter SDDIescribe=new ServiceDescriptionImporter();

    SDDIescribe.AddServiceDescription(SDDescribe, "", "");

    CodeNamespace CNDescribe = new CodeNamespace(@webnom);

    //////生成客戶端中代理類的代碼

    CodeCompileUnit CCUDescribe=new

    CodeCompileUnit();

    CCUDescribe.Namespaces.Add(CNDescribe);

    SDDIescribe.Import(CNDescribe, CCUDescribe);

    CSharpCodeProvider CCPDescribe=new

    CSharpCodeProvider();

    ICodeCompiler webicodecompiler = CCPDescribe.CreateCompiler();

    //////設(shè)定編譯器中的參數(shù)的屬性

    CompilerParameters CPDescribe = new

    CompilerParameters();

    CPDescribe.GenerateInMemory = true;

    CPDescribe.GenerateExecutable = false;

    //添加所需要調(diào)用的DLL文件

    CPDescribe.ReferencedAssemblies.Add("System.Data.dll");

    CPDescribe.ReferencedAssemblies.Add("System.dll");

    CPDescribe.ReferencedAssemblies.Add("System.Web.Services.dll");

    CPDescribe.ReferencedAssemblies.Add("System.XML.dll");

    CompilerResults CRDescribe = webicodecompiler.CompileAssemblyFromDom(CPDescribe, CCUDescribe);

    if (CRDescribe.Errors.HasErrors == true)

    {

    System.Text.StringBuilder SBDescribe = new

    StringBuilder();

    foreach (CompilerError ce in CRDescribe.Errors)

    {

    SBDescribe.Append(ce.ToString());

    SBDescribe.Append(System.Environment.NewLine);

    }

    throw new Exception(SBDescribe.ToString());

    }

    //////生成代理實例和調(diào)用方法

    System.Reflection.Assembly SRADescribe = CRDescribe.CompiledAssembly;

    Type TDescribe = SRADescribe.GetType(@webnom + "." + WebNom, true, true);

    object OBJDescribe = Activator.CreateInstance(TDescribe);

    System.Reflection.MethodInfo SRMDescribe = TDescribe.GetMethod(WebMeansName);

    return SRMDescribe.Invoke(OBJDescribe, webobject);

    }

    private static string GetMyWebName(string add)

    {

    string[] webstring = add.Split('/');

    string[] webretstring = webstring[webstring.Length - 1].Split('.');

    return webretstring[0];

    }

    2.4 本文選擇的調(diào)用方式

    結(jié)合現(xiàn)在網(wǎng)絡(luò)通信潮流,再通過上面介紹的幾種方法,不難看出,直接調(diào)用方法簡單,容易操作。所以校直軟件選擇直接調(diào)用Web service傳輸?shù)姆绞竭M行設(shè)備的MES數(shù)據(jù)傳輸。

    3 Web service服務(wù)器部署

    (1)勾選Internet信息服務(wù)下所有節(jié)點。通過本機打開和關(guān)閉Windows功能里面選中Internet信息服務(wù)下面的所有文件,然后確定。

    (2)Internet信息服務(wù)(IIS)管理器中添加網(wǎng)站。在計算機管理里面找到Internet信息服務(wù)(IIS)管理器,添加上網(wǎng)站,名字、路徑、IP和端口號根據(jù)設(shè)備需要設(shè)置。

    (3)IIS注冊。以管理員身份運行VS2017開發(fā)人員命令提示符,輸入aspnet_regiis -i。

    (4)更改WebApp .Net Framework版本為V4.0。在計算機管理里面找到Internet信息服務(wù)(IIS)管理器的應(yīng)用程序池,更改WebApp .Net Framework 版本為V4.0。

    (5)Web服務(wù)器發(fā)布。Web服務(wù)器項目右鍵選擇“發(fā)布”,目標位置與IIS添加網(wǎng)站物理一致,點擊“發(fā)布”,如圖4所示。

    圖4 發(fā)布界面

    (6)Web客戶端引用。在項目中選擇“添加服務(wù)引用”,輸入地址,點擊“轉(zhuǎn)到”,可在下方查看服務(wù)可調(diào)用函數(shù),點擊“確定”即可,界面如圖5所示。

    圖5 添加服務(wù)引用界面

    (7)引用示例

    ServiceReference.WebService1SoapClient client = new ServiceReference.WebService1SoapClient("WebService1Soap");

    client.Open();

    string ss = client.HelloWorld();

    client.Close()

    4 API函數(shù)的介紹與應(yīng)用

    4.1 函數(shù)介紹

    DevData_Invoke_InputAsync(MainWindowPlugin.ServiceReference.WsWebHeader WsWebHeader, string ICode, string Paras)是由Web服務(wù)提供的向服務(wù)端發(fā)送傳輸數(shù)據(jù)的函數(shù)。

    4.2 函數(shù)應(yīng)用

    通過本機的服務(wù)管理器,檢查已經(jīng)部署的“WebApp”服務(wù)是否存在,如果存在,才可以調(diào)用DevData_Invoke_InputAsync(MainWindowPlugin.ServiceReference.WsWebHeader WsWebHeader, string ICode, string Paras)函數(shù)向服務(wù)器端發(fā)送數(shù)據(jù)。

    5 Web傳輸在校直軟件的實現(xiàn)

    5.1 Web傳輸?shù)牧鞒?/h3>

    在自動校直測控系統(tǒng)中,通道判斷是否需要傳輸校直數(shù)據(jù),進行數(shù)據(jù)傳輸,流程圖如圖6所示。

    圖6 傳輸數(shù)據(jù)流程圖

    5.2 Web傳輸?shù)年P(guān)鍵代碼

    ///

    /// 檢查WebApp服務(wù)狀態(tài)

    ///

    ///

    public void StartWebServer(string serviceName)

    {

    var WebManager = new

    Microsoft.Web.Administration.ServerManager();

    var startSite = WebManager.Sites[serviceName];

    if(startSite == null)

    {

    GlobalUIMessageBox.Show(LNG._("未找到Web服務(wù),請重新部署"));

    return;

    }

    }

    //MES---->Web服務(wù)器發(fā)送校直數(shù)據(jù)

    List MESInfos = new List();

    var mesinfo = new MESInfo();

    mesinfo.barcode = GlobalParametersManager.GetParameterText(LNG._("備用1"));

    mesinfo.devcode = "A0036JZ01";

    mesinfo.createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

    var beforebend = result.Bend.Split(',');

    var afterbend = result.AfterBend.Split(',');

    for (int i = 0; i < beforebend.Length; i++)

    {

    if (i == 0)

    {

    mesinfo.leftjerkvalue1 = beforebend[i];

    mesinfo.leftjerkvalue2 = afterbend[i];

    }

    else if (i = 1)

    {

    mesinfo.rightjerkvalue1 = beforebend [i];

    mesinfo.rightjerkvalue2 = afterbend[i];

    }

    else

    break;

    }

    MESInfos.Add(mesinfo);

    string MesJson =

    JsonConvert.SerializeObject(MESInfos);

    ServiceReference.WS_InterfaceSoapClient client =

    new ServiceReference.WS_InterfaceSoapClient();

    ServiceReference.WsWebHeader WsWebHeader

    new ServiceReference.WsWebHeader();

    WsWebHeader.UserName = "MES_DEV_QKJZ";

    client.DevData_Invoke_InputAsync(WsWebHeader, "MES_DEV_QKJZ", MesJson);

    LoggingHelper.Message("傳輸Mes數(shù)據(jù)");

    6 直接調(diào)用Web service傳輸注意事項

    (1)Web服務(wù)器發(fā)布注意事項?!鞍l(fā)布”的目標位置需與IIS添加網(wǎng)站物理一致。

    (2)Web客戶端引用注意事項。必須在類中app.config下的system.serviceModel節(jié)點內(nèi)容粘貼至Exe所在項目中的App.config中configuration下,否則編譯不通過。

    (3)Web傳輸?shù)年P(guān)鍵代碼注意事項。為了防止調(diào)用發(fā)送數(shù)據(jù)的時候報錯,在打開軟件初始化的時候,需要檢測一下Web服務(wù)是否存在。

    7 結(jié)束語

    本文實現(xiàn)了通過直接調(diào)用Web service的傳輸方式進行Mes通信傳輸校直數(shù)據(jù),此方法增加了校直機的Mes通信方式,從而提高校直機的市場競爭力。通過目前現(xiàn)場的使用情況,證明該方法可以廣泛地應(yīng)用在校直機產(chǎn)品上。

    猜你喜歡
    命令提示符管理器調(diào)用
    應(yīng)急狀態(tài)啟動磁盤管理器
    核電項目物項調(diào)用管理的應(yīng)用研究
    Windows文件緩沖處理技術(shù)概述
    LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
    讓命令提示符窗口與Windows更融洽
    基于系統(tǒng)調(diào)用的惡意軟件檢測技術(shù)研究
    高集成度2.5A備份電源管理器簡化鋰離子電池備份系統(tǒng)
    Windows命令模式另類用法
    快速導(dǎo)出QQ群消息
    電腦迷(2014年2期)2014-04-29 19:21:13
    快速搞定Windows 8.1 Update更新的失敗
    電腦迷(2014年12期)2014-04-29 00:44:03
    句容市| 蒙阴县| 墨玉县| 曲靖市| 龙川县| 田林县| 德兴市| 武川县| 定远县| 布尔津县| 平度市| 敦煌市| 太原市| 宣化县| 庄河市| 清新县| 扎囊县| 通州区| 枣庄市| 博罗县| 丹凤县| 贺兰县| 内丘县| 于都县| 内黄县| 大方县| 运城市| 资兴市| 任丘市| 漳平市| 太仆寺旗| 永福县| 南召县| 桦甸市| 天峻县| 长泰县| 政和县| 抚宁县| 吕梁市| 江孜县| 绥江县|