繁体   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