2012-04-14 33 views
0

私はWCFサービスでこのエラーを受け取ることができません。理由はわかりません。 基になる接続が閉じられました。WP7 WCF基になる接続が閉じられました:予期せず接続が閉じられました

サーバースタックトレース: System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException、HttpWebRequestの要求、HttpAbortReason abortReason)で で
System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(で System.ServiceModel.Dispatcher.RequestChannelBinder.Request(メッセージ メッセージ、のTimeSpanタイムアウト)で System.ServiceModel.Channels.RequestChannel.Request(メッセージメッセージ、 のTimeSpanタイムアウト)でのTimeSpan タイムアウト)System.ServiceModel.Channels.ServiceChannel.Call System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCallでで(文字列アクション、 ブール一方向、ProxyOperationRuntime動作は、[]イン、 オブジェクト[]アウト、のTimeSpanタイムアウトオブジェクト) System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessageが メッセージで、ProxyOperationRuntime動作))[0]で

例外再スロー: System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(AT IMessageが reqMsg、IMessageがretMsg)at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData & PublicServiceClient.GetProductでIPublicService.GetProductで msgData、のInt32型)(文字列、バーコード)
(文字列、バーコード)

内部例外:基礎となる接続が閉じられました:接続 が予期せず閉じました。 System.Net.HttpWebRequest.GetResponse() で でSystem.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpanの タイムアウト)

ここでは、サービスメソッドは次のとおりです。

public Product GetProduct(string barcode) 
     { 
      DataContext Db = new DataContext(); 
      var p = Db.Products.Find(barcode); 
      if (p == null) 
       return null; 

      return new Product() 
      { 
       ProductID = p.ProductID, 
       Name = p.Name, 
       Nutrition = p.Nutrition, 
       Allergen = p.Allergen, 
       Image = p.Image, 
       ManufacturerID = p.ManufacturerID, 
       ReviewIDs = p.ReviewIDs 
      }; 
     } 

私はこれまで、サービス方法を変更する場合は

[DataContract] 
    public class Product 
    { 
     [Key] 
     [Required] 
     [DataMember] 
     public string ProductID { get; set; } 

     [Required] 
     [DataMember] 
     public string Name { get; set; } 

     [Required] 
     [DataMember] 
     public string Nutrition { get; set; } 

     [Required] 
     [DataMember] 
     public string Allergen { get; set; } 

     [Required] 
     [DataMember] 
     public string Image { get; set; } 

     [Required] 
     [DataMember] 
     public virtual Manufacturer ManufacturerID { get; set; } 

     [DataMember] 
     public virtual ICollection<Review> ReviewIDs { get; set; } 
    } 

:ここでは製品データ契約です

public Product GetProduct(string barcode) 
     { 
      DataContext Db = new DataContext(); 
      var p = Db.Products.Find(barcode); 
      if (p == null) 
       return null; 

      //return new Product() 
      //{ 
      // ProductID = p.ProductID, 
      // Name = p.Name, 
      // Nutrition = p.Nutrition, 
      // Allergen = p.Allergen, 
      // Image = p.Image, 
      // ManufacturerID = p.ManufacturerID, 
      // ReviewIDs = p.ReviewIDs 
      //}; 
      return new Product(); 
     } 

例外はスローされず、それが戻って、空の製品なので、私は私が取得していますあいまいな例外を引き起こしているのかわからないよ、誰もがこの問題にいくつかの光を当てることができますか?

+0

画像の大きさはどれくらいですか? –

+0

メンバーがWCFの制限(最大文字列長、最大メッセージサイズ)に違反していないことを確かめていますか? – ChrisWue

+0

@Chris - あなたはその限界が何であるか知っていますか?私はImageが失敗を引き起こしていると想像しています(タイムアウト、サイズなど)。 –

答えて

1

残念ながら、WCFの例外は必ずしも有用なものではありませんが、調整可能なWCFの制限にぶつかる可能性があります。デフォルトのMaxReceivedMessageSizeは64kbで、デフォルトの最大文字列の長さは8kbだと思います。これらの制限を増やして、問題を解決してください。

+0

ええ、レビューのリストが大きすぎました...私は一度に10を返す別々のAPI関数としてそれらを実装しなければなりませんでした。 –

1

一般に、Microsoftが提供するSvctraceviewer.exeを使用して、WCFプルーミングをデバッグする必要があります。サービス側でトレースを実行する必要があります。

関連する問題