2012-03-05 7 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 
    } 

このように少なくともあなたは、例外のログを持っています/私は/私は、このサービスを呼び出す実装catchブロックを試してきた

+0

それを扱う忘れてしまいました。 – Lamps

+0

このtry catchブロックに書き込んだログはどうなりますか?サイレントエラーの原因を突き止めていませんか? – CSharpenter

+0

例外が全くスローされず、エラーが見つかりませんでした。 : 異なるユーザーからの多数の同時リクエストがある可能性がありますが、そのうちのいくつかは無視されてしまいます。 – Lamps