2012-03-05 79 views
0

我實現了一個單向wcf方法。我遵循本文中提到的方式來處理web服務調用article我使用下面的類來調用Web服務。WCF調用有時會默默地失敗

public delegate void UseServiceDelegate<T>(T proxy); 

public static class Service<T> 
{ 
    public static ChannelFactory<T> _channelFactory = new ChannelFactory<T>("*"); 

    public static void Use(UseServiceDelegate<T> codeBlock) 
    { 
     IClientChannel proxy = (IClientChannel)_channelFactory.CreateChannel(); 
     bool success = false; 
     try 
     { 
      codeBlock((T)proxy); 
      proxy.Close(); 
      success = true; 
     } 
     finally 
     { 
      if (!success) 
      { 
       proxy.Abort(); 
      } 
     } 
    } 
} 

Service<IOrderService>.Use(orderService=> 
{ 
    orderService.PlaceOrder(request); 
} 

當我們移動代碼到生產,有時WCF調用失敗,而無須給予任何錯誤信息,有時它的工作沒有任何問題。我在同一個應用程序中有服務和客戶端。

任何幫助非常感謝。

我的接口:

[ServiceContract(SessionMode = SessionMode.NotAllowed)] 
public interface IOrderService 
{ 
     [OperationContract(IsOneWay = true)] 
     void PlaceOrder(OrderRequest request); 
} 

回答

1

在你的try語句中添加一個catch塊,並且如果你不想在這裏處理錯誤,至少要記錄消息。

catch (Exception ex0) 
    { 
     // Log exception here 
     throw; // will rethrow the same exception to outside 
    } 

這樣至少你將有一個日誌的例外情況,如果你錯過了/忘記處理它

+0

我有嘗試/實現,其中我把這個服務catch塊。 – Lamps 2012-03-06 05:36:13

+0

你在這個try catch塊中寫入的日誌怎麼樣,是不是它指向無聲故障的原因? – CSharpenter 2012-03-06 06:25:00

+0

沒有任何異常,我們無法找到任何錯誤。 :( 可能有很多來自不同用戶的併發請求,其中一些被忽略,我想.. – Lamps 2012-03-06 09:53:05