2012-04-14 155 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管道。您应该在服务端运行跟踪。

相关问题