异步调用Web服务

问题描述:

我正在使用Web服务我没有自己写(所以不能编辑)。我有这样的代码:异步调用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()方法。

但是,如何使用这种方法并得到结果呢?有人能给我提供一个如何使用异步调用的简单例子吗?

感谢

这里有一个例子:

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行,动作代表一个委托或动作,你处理你的异步结果

让我知道你是否有麻烦es翻译成c#然后我会改变它;)

+0

谢谢。如果你可以把它翻译成C#,那将会非常好,因为我完全不理解这个代码。 – Bv202 2013-02-18 10:42:45

+0

@ Bv202:想一想C#,可能会出现一点语法错误,但它应该是关闭的 – JMan 2013-02-18 10:48:58

+0

谢谢,我会测试它:) – Bv202 2013-02-18 10:49:52