如何从C#winform异步调用Soap/mtom web服务

本文关键字:mtom web 服务 Soap 调用 C#winform 异步 | 更新日期: 2023-09-27 17:58:34

我正试图将一个半大的tiff和一个Gal文件调用/推送到java Web服务。该平台是Visual Studio 2013,C#窗体应用程序。

我指向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编写。我不能跟随他们,也觉得他们没有帮助,所以请不要指引我去一个。

如何从C#winform异步调用Soap/mtom web服务

当您在方法中使用'await'关键字时,您会说"好吧,您继续工作,我会返回给我的调用者,完成后告诉我"。

因此,15秒的等待时间是服务处理请求所需的时间,然后在之前等待的方法完成后调用异步方法生成的状态机返回该方法。这是等待的正常行为。

关于花费15秒的MessageBox,可能是Response属性懒洋洋地加载,并在您访问这些属性时第一次尝试加载代码/消息。