WP7 WCF底层连接已关闭:连接意外关闭

时间:2012-04-14 04:07:11

标签: c# wcf windows-phone-7 .net-4.0

我已经开始在我的WCF服务中收到此错误,原因是我无法理解: 底层连接已关闭:连接意外关闭。

  

服务器堆栈跟踪:at   System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(引发WebException   webException,HttpWebRequest请求,HttpAbortReason abortReason)
  在   System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(时间跨度   超时)at   System.ServiceModel.Channels.RequestChannel.Request(消息消息,   TimeSpan超时)at   System.ServiceModel.Dispatcher.RequestChannelBinder.Request(消息   消息,TimeSpan超时)at   System.ServiceModel.Channels.ServiceChannel.Call(String action,   Boolean oneway,ProxyOperationRuntime操作,Object [] ins,   对象[]出局,TimeSpan超时)at   System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage   methodCall,ProxyOperationRuntime operation)at   System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即时聊天   消息)

     

在[0]处重新抛出异常:at   System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即时聊天   reqMsg,IMessage retMsg)at   System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&安培;   msgData,Int32类型)在IPublicService.GetProduct(String条形码)
  在PublicServiceClient.GetProduct(String barcode)

     

内部异常:底层连接已关闭:连接   意外关闭了。在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();
        }

没有抛出任何异常,它会返回并清空产品,所以我不确定是什么导致了我所得到的模糊异常,是否有人可以解释这个问题?

2 个答案:

答案 0 :(得分:1)

不幸的是,WCF异常并不总是非常有用,但很可能会遇到一些内置的WCF限制(可调)。我认为默认的MaxReceivedMessageSize是64kb,默认的最大字符串长度是8kb。尝试增加这些限制来解决你的问题。

答案 1 :(得分:1)

通常,您应该使用Microsoft提供的Svctraceviewer.exe来调试WCF pluming。您应该在服务端运行跟踪。