0

理解できない理由で、WCFサービスでこのエラーの受信を開始しました:基になる接続が閉じられました:接続が予期せず閉じられました。

サーバースタックトレース:System.ServiceModel.Channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException webException、HttpWebRequest request、HttpAbortReason abortReason)
System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)at System.ServiceModel.Channels.RequestChannel.Request(Message message、TimeSpan timeout)at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message、TimeSpanタイムアウト)at System.ServiceModel.Channels.ServiceChannel.Call(String action、Boolean oneway、ProxyOperationRuntime operation、Object [] ins、Object [] outs、TimeSpan timeout)at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall、ProxyOperationRuntime操作)System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessageメッセージ)で

[0]で再スローされた例外:System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg、IMessage retMsg)at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&msgData、Int32 type)at IPublicService.GetProduct(ストリングバーコード)
PublicServiceClient.GetProduct(ストリングバーコード)

内部例外:基になる接続が閉じられました:接続が予期せず閉じられました。System.Net.HttpWebRequest.GetResponse()at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)

サービス方法は次のとおりです。

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();
        }

例外はスローされず、製品が返され、空になります。そのため、発生しているあいまいな例外の原因がわかりません。誰かがこの問題に光を当てることができますか?

4

2 に答える 2

1

残念ながら、WCF の例外は常に役立つとは限りませんが、組み込みの WCF 制限 (調整可能) に遭遇する可能性があります。デフォルトMaxReceivedMessageSizeは 64kb で、デフォルトの最大文字列長は 8kb だと思います。これらの制限を増やしてみると、問題が解決するはずです。

于 2012-04-14T06:04:22.293 に答える
1

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

于 2012-04-14T06:22:45.020 に答える