簡體   English   中英

如何從C#Winform異步調用Soap / mtom Web服務

[英]How to call Soap/mtom web service asynchronously from C# winform

我正在嘗試將一個半大的tiff和一個Gal文件調用/推入Java Web服務。 該平台是Visual Studio 2013,C#Windows窗體應用程序。

我指向WSDL文件,“平台”正在為我生成服務引用類。 這一切都是從我身上抽象出來的,這是一件好事,因為我是這個領域的新手。 我沒有選中“基於生成任務的代碼”,然后得到了addSample和addSampleAsync方法。

我填充類字段並向上推代碼。

addSample代碼可以正常工作,但會阻止UI。

異步代碼addSampleAsync也可以工作,位速度較慢並且不是完全異步的。 addSampleAsync將UI鎖定大約一半的處理時間,並且在同一時間段內不會返回對fncTestUpload的函數調用。

    //Dimensioned at class level
    //private static addSamplePortClient Service = new addSamplePortClient();
    //private static addSampleResponse Myresult = new addSampleResponse(); 

    //ThisRequest is the WSDL modeled class object.

    //This code works, but is slow, 30 seconds on wifi
    ResponseType Myresult = Service.addSample(ThisRequest.Request);
    MessageBox.Show(Myresult.Message + Myresult.Code);


    //This code locks up the UI for about 15 - 20 seconds then takes another 15 to display the messagebox
    fncTestUpload(ThisRequest);       

    async void fncTestUpload(addSampleRequest SentRequest)
        {
            Myresult = await Service.addSampleAsync(SentRequest.Request);
            MessageBox.Show(Myresult.Response.Message + " - " + Myresult.Response.Code);
        }

我將響應對象設置為類級別的變量,以期在調用fncTestUpload的函數中對其進行處理,該函數認為在調用Async函數時會立即返回該對象。 直到15秒后它才返回。

我花了幾個小時來搜索,卻沒有找到關於為什么addSampleAsync無法像宣傳的那樣工作的任何答案。

微軟的教程也可以用Dilbert的Elbonian編寫。 我無法關注他們,也沒有發現他們有幫助,所以請不要引導我。

當您在方法中使用'await'關鍵字時,您的意思是“好吧,繼續工作,我會回電話給您 ,請告訴我完成的時間”。

因此,等待15秒是您的服務處理請求的時間,然后在先前等待的方法完成后調用由async方法生成的狀態機以返回到該方法。 那是等待的正常行為。

關於耗時15秒的MessageBox,可能是Response屬性正在延遲加載,並且實際上在您訪問這些屬性時首次嘗試加載代碼/消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM