Visual Studio WSDL создает асинхронный / ожидающий веб-сервис SOAP - PullRequest
0 голосов
/ 14 октября 2018

В моем приложении winforms C # есть веб-служба SOAP, но я пытаюсь получить WSDL.exe для генерации с помощью основанных на задачах асинхронных / ожидающих методов.

Я прочитал одокументацию здесь и попытался добавить следующий XML-файл в переключатель par, но он все еще не дает мне ожидаемых методов на основе задач для асинхронного вызова методов веб-службы.

// BEGIN WSDLPARAMETERS.XML

<wsdlParameters  xmlns="http://microsoft.com/webReference/">
  <webReferenceOptions>
    <verbose>false</verbose>
    <codeGenerationOptions>properties newAsync enableDataBinding</codeGenerationOptions>
  </webReferenceOptions>
</wsdlParameters>

// END WSDLPARAMETERS.XML

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>wsdl.exe  "http://********/interchangeservices.asmx" /out:"****\WebServices.cs" /l:CS  /n:"AdelaideInterchangeAutomation" /par:"*****\wsdlparameters.xml"

это возвращает методы, подобные этому

    /// <remarks/>

    public AwaitingUpload CheckHistoryNotUploaded() {
        object[] results = this.Invoke("CheckHistoryNotUploaded", new object[0]);
        return ((AwaitingUpload)(results[0]));
    }

    /// <remarks/>
    public void CheckHistoryNotUploadedAsync() {
        this.CheckHistoryNotUploadedAsync(null);
    }

    /// <remarks/>
    public void CheckHistoryNotUploadedAsync(object userState) {
        if ((this.CheckHistoryNotUploadedOperationCompleted == null)) {
            this.CheckHistoryNotUploadedOperationCompleted = new System.Threading.SendOrPostCallback(this.OnCheckHistoryNotUploadedOperationCompleted);
        }
        this.InvokeAsync("CheckHistoryNotUploaded", new object[0], this.CheckHistoryNotUploadedOperationCompleted, userState);
    }

    private void OnCheckHistoryNotUploadedOperationCompleted(object arg) {
        if ((this.CheckHistoryNotUploadedCompleted != null)) {
            System.Web.Services.Protocols.InvokeCompletedEventArgs invokeArgs = ((System.Web.Services.Protocols.InvokeCompletedEventArgs)(arg));
            this.CheckHistoryNotUploadedCompleted(this, new CheckHistoryNotUploadedCompletedEventArgs(invokeArgs.Results, invokeArgs.Error, invokeArgs.Cancelled, invokeArgs.UserState));
        }
    }

, но в идеале я хотел бы, чтобы он возвращал основанные на задачах асинхронные методы, чтобы я мог вызывать их с ключевым словом await.

    public AwaitingUpload CheckHistoryNotUploaded() {
        object[] results = this.Invoke("CheckHistoryNotUploaded", new object[0]);
        return ((AwaitingUpload)(results[0]));
    }

    /// <remarks/>
    public async Task<AwaitingUpload> CheckHistoryNotUploadedAsync() {
        await .....
    }

1 Ответ

0 голосов
/ 15 октября 2018

Я смог решить эту проблему, создав файл с помощью Add Connected Service в Visual Studio.

В меню Advanced есть опция для генерации асинхронных методов на основе задач.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...