2012-04-14 157 views
0

我開始在我的WCF服務中收到此錯誤,原因是我無法理解: 底層連接已關閉:連接意外關閉。WP7 WCF底層連接已關閉:連接意外關閉

服務器堆棧跟蹤:在 System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(引發WebException 引發WebException,HttpWebRequest的請求,HttpAbortReason abortReason)
在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(時間跨度 超時)在 System.ServiceModel.Channels.RequestChannel.Request(消息消息,時間跨度 超時)在在 System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息 消息,時間跨度超時)System.ServiceModel.Channels.ServiceChannel.Call在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall(字符串動作, 布爾單向,ProxyOperationRuntime操作,對象[]插件, 對象[]奏,時間跨度超時) ,ProxyOperationRuntime操作)在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即時聊天 消息)[0]時

異常重新拋出:在 System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即時聊天 reqMsg,即時聊天retMsg) System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData & MSGDATA,的Int32類型)在IPublicService.GetProduct(字符串條形碼)
在PublicServiceClient.GetProduct(字符串條形碼)

內部異常:基礎連接已關閉:連接 被意外關閉。在System.Net.HttpWebRequest.GetResponse() 在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(時間跨度 超時)

這裏是服務方法:

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

圖像有多大? – 2012-04-14 04:20:46

+0

您確定沒有成員違反任何WCF限制(最大字符串長度,最大消息大小)? – ChrisWue 2012-04-14 04:32:59

+0

@克里斯 - 你知道這些限制是什麼嗎?我想象圖像導致失敗(超時,大小等)。 – 2012-04-14 05:20:01

回答

1

不幸的是,WCF異常並不總是很有幫助,但它很可能會遇到一些內置的WCF限制(可調整)。默認MaxReceivedMessageSize是64kb,我認爲默認的最大字符串長度是8kb。嘗試提高這些限制應該解決您的問題。

+0

是的,評論列表太大了......我不得不將它們作爲一個單獨返回10的API函數來實現。 – 2012-04-14 14:44:23

1

通常,您應該使用Microsoft提供的Svctraceviewer.exe來調試WCF管道。您應該在服務端運行跟蹤。

相關問題