亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

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

        (中機(jī)試驗(yàn)裝備股份有限公司,吉林 長(zhǎng)春 130103)

        1 引 言

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

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

        2.1 直接調(diào)用

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

        圖1 添加服務(wù)

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

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

        有時(shí)沒(méi)有這么多文件,如果只有wsdl文件,可以由別人提供或者根據(jù)webservice下面地址獲?。篽ttp://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文件存儲(chǔ)路徑,也可以是http://localhost:8888/WS.asmx?wsdl。如果不報(bào)錯(cuò),看Program FilesMicrosoft Visual Studio 12.0WS.cs已經(jīng)自動(dòng)生成的.cs文件、結(jié)構(gòu)體等都很方便,然后命令行執(zhí)行csc /t:library WS.cs,在同樣的路徑下,生成了WS.dll文件,把文件拷貝出去放到項(xiàng)目文件夾下,C# winform程序也可以添加引用。生成的文件默認(rèn)路徑如圖3所示。

        圖3 生成的文件默認(rèn)路徑

        默認(rèn)生成的SOAP版本為1.1,可以通過(guò)G:Program FilesMicrosoft Visual Studio 12.0>wsdl E:e.wsdl /protocol:SOAP12 /out:e.cs來(lái)指定成為1.2版本。

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

        在C#程序中,如果要調(diào)用WebService,通常采用“添加Web引用”的形式來(lái)實(shí)現(xiàn)。但是,如果此WebService的URL是在C#程序運(yùn)行過(guò)程中才能獲得,則必須用動(dòng)態(tài)調(diào)用這個(gè)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ǎn)麻煩,意味著在每次使用前,需要把想要調(diào)用的函數(shù)參數(shù)組織成一個(gè)新的object[]才行,并且在每次調(diào)用InvokeWebService前都必須在內(nèi)存中創(chuàng)建新的動(dòng)態(tài)程序集,這導(dǎo)致效率較低。因此,此種方法沒(méi)有直接用“實(shí)例名.方法名(參數(shù)列表)”的方法來(lái)得便捷??梢詫⑵浞诺揭粋€(gè)叫WebServiceHelper.cs的類里面。

        ///WebService動(dòng)態(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) 語(yǔ)言來(lái)獲取服務(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());

        }

        //////生成代理實(shí)例和調(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ò)通信潮流,再通過(guò)上面介紹的幾種方法,不難看出,直接調(diào)用方法簡(jiǎn)單,容易操作。所以校直軟件選擇直接調(diào)用Web service傳輸?shù)姆绞竭M(jìn)行設(shè)備的MES數(shù)據(jù)傳輸。

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

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

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

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

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

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

        圖4 發(fā)布界面

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

        通過(guò)本機(jī)的服務(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傳輸在校直軟件的實(shí)現(xiàn)

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

        在自動(dòng)校直測(cè)控系統(tǒng)中,通道判斷是否需要傳輸校直數(shù)據(jù),進(jìn)行數(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ù),請(qǐng)重新部署"));

        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傳輸注意事項(xiàng)

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

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

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

        7 結(jié)束語(yǔ)

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

        猜你喜歡
        命令提示符管理器調(diào)用
        應(yīng)急狀態(tài)啟動(dòng)磁盤管理器
        核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
        Windows文件緩沖處理技術(shù)概述
        LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
        讓命令提示符窗口與Windows更融洽
        基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
        高集成度2.5A備份電源管理器簡(jiǎn)化鋰離子電池備份系統(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
        伦伦影院午夜理论片| 成人自拍视频国产一区| 亚洲国产一区中文字幕| 国产婷婷色一区二区三区深爱网| 久久久亚洲欧洲日产国码αv | 亚洲中文字幕无码av永久| 精品人妻伦九区久久aaa片69| 91精品国产福利尤物免费| 久久亚洲精品成人av观看| 91九色成人蝌蚪首页| 黑人巨大精品欧美一区二区| 91高清国产经典在线观看| 免费在线观看亚洲视频| 国产精品熟女一区二区三区| 免费va国产高清大片在线| 丁香综合网| 国产精东一区二区三区| 黄污在线观看一区二区三区三州| 亚洲熟妇av日韩熟妇在线 | 国产成人自产拍免费视频| 中文日本强暴人妻另类视频| 亚洲av成人无遮挡网站在线观看| 亚洲精品国产v片在线观看| 日本嗯啊在线观看| 日本女优激情四射中文字幕| 亚欧色一区w666天堂| 日本免费一区尤物| 少妇人妻字幕一区二区| 青青草原综合久久大伊人精品| 先锋影音最新色资源站| 国产未成女年一区二区| 中文字幕中文字幕777| 制服丝袜中文字幕在线| 香蕉视频一级片| 操老熟妇老女人一区二区| 狠狠色欧美亚洲狠狠色www| 亚洲精品国偷自产在线99正片| 精品久久久久久99人妻| 少妇爽到高潮免费视频| 国产又黄又爽又色的免费| 国产精品玖玖玖在线资源|