异步调用Web服务

时间:2013-02-18 10:38:12

标签: wcf web-services silverlight windows-phone-7

我正在使用我自己没有编写的Web服务(因此无法编辑)。我有这段代码:

public void GetData()
{
    try
    {
        TelemeterServiceClient client = new TelemeterServiceClient();
        RetrieveUsageRequestType request = new RetrieveUsageRequestType { UserId = Username, Password = Password };
        RetrieveUsageResponseType response = client.retrieveUsage(request);
        Result = response.Item;

        Callback(null);
    }
    catch (Exception e)
    {
       Result = null;
       Callback(e);
    }
}

这在WPF项目中工作正常。但是,我现在正在使用一个使用Silverlight的Windows Phone项目。在这个项目中,找不到retrieveUsage() - 方法。

显然,Silverlight仅支持对Web服务的异步调用。实际上,存在一个retrieveUsageAsync() - 方法。

但是如何使用此方法并获得结果呢?有人能为我提供一个如何使用异步调用的简单示例吗?

由于

1 个答案:

答案 0 :(得分:1)

这是一个例子:

    Dim proxy = new TelemeterServiceClient()

    AddHandler proxy.retrieveUsageCompleted, Sub(o, e)
                                                          action(o, e)
                                                      End Sub

    Using New OperationContextScope(proxy.InnerChannel)
        Dim request = New retrieveUsageRequest
        proxy.retrieveUsageAsync(request)
    End Using

认为它被翻译成c#,就像这样:

    var proxy = new TelemeterServiceClient();

    proxy.retrieveUsageCompleted += MethodYouImplementWhenAsyncIsComplete;
    //or proxy.retrieveUsageCompleted += (s, e) => { do something };

    using (new OperationContextScope(proxy.InnerChannel))
    {
        var request = New retrieveUsageRequest();
        proxy.retrieveUsageAsync(request);
    }

action的行中,action表示处理异步结果的委托或操作

如果您将此转换为c#,请告诉我,然后我会更改它;)