2014-02-27 74 views
-1

我是新的使用web服务,我试图实现一种方法,但我遇到了麻烦。这是我想从一个响应的方法:从webservice调用异步方法

(awaitable) Task<getIbuttonDataResponse> SpecSrvClient.getIbuttonDataAsync(GetIbuttonDataInput getIbuttonDataInput) 

Usage: 
getIbuttonDataResponse x = await getIbuttonDataAsync(...); 

这是WSDL生成的代码为“GetIbuttonDataInput”

public partial class GetIbuttonDataInput : object, INotifyPropertyChanged { 

    private string ibuttonIdField; 

    private string testerNameField; 

    [SoapElementAttribute(IsNullable=true)] 
    public string ibuttonId { 
     get { 
      return this.ibuttonIdField; 
     } 
     set { 
      this.ibuttonIdField = value; 
      this.RaisePropertyChanged("ibuttonId"); 
     } 
    } 

    [SoapElementAttribute(IsNullable=true)] 
    public string testerName { 
     get { 
      return this.testerNameField; 
     } 
     set { 
      this.testerNameField = value; 
      this.RaisePropertyChanged("testerName"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void RaisePropertyChanged(string propertyName) { 
     System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; 
     if ((propertyChanged != null)) { 
      propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

编辑:

对不起,我不知道我无法发布图像,所以这让我感到困惑。

我的问题是,当我试图从web服务获得响应时,如何传递ibuttonIDField字符串?这是获得答复所需的价值。

编辑2:

好了,所以这是我至今写:

static class Program 
     { 
     //... 
     static void Main() 
      { 
      //... 
      getIbuttonDataResponse x = new getIbuttonDataResponse(); 
      Response(serial, x); 
      //... 
      } 
    static async void Response(string[] serial, getIbuttonDataResponse x) 
      { 
       iButtonDB_Service.SpecSrvClient testrequest = new SpecSrvClient(); 
       GetIbuttonDataInput input = new GetIbuttonDataInput { ibuttonId = serial[0], testerName = "me" }; 
       x = await testrequest.getIbuttonDataAsync(input); 
      } 
    } 

我只得到一个返回null,但可能是因为数据库值它试图访问尚未创建。

+0

您没有附加图像。请添加它。张贴链接,我会为你添加它。 – abatishchev

+0

问题是什么? –

+0

你会得到一个空回报,因为你没有返回任何东西。您正将'getIbuttonDataResponse'传递给'Response'方法,而不是从那里返回。尝试'静态异步任务响应(字符串[]串行){...返回等待testrequest.getIbuttonDataAsync(输入);}' –

回答

1

这部分内容不会因为该方法被称为异步而改变。您仍然需要创建输入对象的实例,填充它,然后将其传递给服务调用:

GetIbuttonDataInput input = new GetIbuttonDataInput {ibuttonId ="x", testerName ="me"}; 
getIbuttonDataResponse x = await getIbuttonDataAsync(input); 
+0

好的,谢谢。这很有道理,我很感激帮助! – user3232337