2011-05-10 94 views
1

我向Silverlight应用程序添加了服务引用。当我想调用的服务的方法我用这些行:Silverlight 4 - 调用WCF代理时异常处理逻辑重用

 CustomServiceClient proxy = new CustomServiceClient(); 
     proxy.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(Proxy_GetDataCompleted); 
     try 
     { 
      proxy.GetDataAsync(appUser.Id); 
      proxy.CloseAsync(); 
     } 
     catch (TimeoutException exception) 
     { 
      Console.WriteLine("Got {0}", exception.GetType()); 
      proxy.Abort(); 
     } 
     catch (CommunicationException exception) 
     { 
      Console.WriteLine("Got {0}", exception.GetType()); 
      proxy.Abort(); 
     } 

的问题是,每次我需要调用一个方法,我复制此代码。我找不出一个优雅的方式来重用它(我可以使用继承并为每个方法创建一个新的类,但它非常难看)。

+0

什么是常见的,每次有什么不同? – jv42 2011-05-10 12:59:00

+1

如果代码示例在开始时有意义,它可能会有所帮助。你不能封装像try..catch块那样异步发生的超时错误。 – AnthonyWJones 2011-05-10 13:09:01

+0

@ jv42什么是常见的一切,有什么不同是只有方法的名称和可能的参数对象 – 2011-05-10 17:05:21

回答

0

听起来像是你正在寻找的东西similar to what is described in this CodeProject article.

+0

我试着看看你的链接,但我看不出这可以帮助我。我不是抛出自己的例外,而是试图捕捉网络异常。 – 2011-05-10 18:25:17

+0

对,您需要公共代码来处理由Silverlight应用程序调用的WCF服务抛出的错误/异常。标题为“我们如何解决这个问题?”解释图书馆打算实现的目标。它有一个服务端组件,可以处理实际调用服务操作,因此可以注入特殊的异常处理。在客户端,有一个用于调用WCF服务的代理包装器,它也包含特殊的异常处理代码。如果你不想承诺这种方法,它可能是基于你的客户端公共异常处理代码的示例。 – 2011-05-10 18:42:28