在添加新实体期间调试WCF数据服务上的数据服务请求异常

本文关键字:服务 数据 WCF 异常 请求 调试 新实体 添加 实体 | 更新日期: 2023-09-27 18:26:30

这是我的服务代码:

using System;
using System.Collections.Generic;
using System.Data.Services;
using System.Data.Services.Common;
using System.Linq;
using System.Linq.Expressions;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceModel.Web;
using System.Web;
namespace RadAppSilver.Web
{
    public class DsWFS006 : DataService<WFS006Entities>
    {
        public DsWFS006()
        {
            ServiceHost host = new ServiceHost(typeof(DsWFS006));
            ServiceDebugBehavior debug = host.Description.Behaviors.Find<ServiceDebugBehavior>();
            // if not found - add behavior with setting turned on 
            if (debug == null)
            {
                host.Description.Behaviors.Add(
                     new ServiceDebugBehavior() { IncludeExceptionDetailInFaults = true });
            }
            else
            {
                // make sure setting is turned ON
                if (!debug.IncludeExceptionDetailInFaults)
                {
                    debug.IncludeExceptionDetailInFaults = true;
                }
            }
            host.Open();
            // This method is called only once to initialize service-wide policies.
        }
        public static void InitializeService(DataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*", EntitySetRights.All);
            config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
            //config.SetEntitySetPageSize("DocDetail", 30);            
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;            
        }              
    }    
}

当我要把新记录到我的实体时,我需要调试错误发生了,但更新实体工作正常:

 private void Grid1RowEditEnded(object sender, Telerik.Windows.Controls.GridViewRowEditEndedEventArgs e)
    {
        if (e.EditAction == Telerik.Windows.Controls.GridView.GridViewEditAction.Commit)
        {
            doc.AccNo = string.IsNullOrEmpty(SelectedAcc) ? doc.AccNo : SelectedAcc;
            if (e.EditOperationType == Telerik.Windows.Controls.GridView.GridViewEditOperationType.Edit)
            {                    
                service.UpdateObject(doc);
            }
            else if (e.EditOperationType == Telerik.Windows.Controls.GridView.GridViewEditOperationType.Insert)
            {
                (this.grid1.ItemsSource as VirtualQueryableCollectionView).Add(doc);
                service.AddObject("DocDetail", doc);
            }
            service.BeginSaveChanges(OnChangesSaved, service);
        }
    }
    private void OnChangesSaved(IAsyncResult result)
    {
        Dispatcher.BeginInvoke(() =>
        {
            service = result.AsyncState as DS1.WFS006Entities;
            try
            {
                service.EndSaveChanges(result);
            }
            catch (DataServiceRequestException ex)
            {
                MessageBox.Show(ex.Response.ToString());
            }
            catch (InvalidOperationException ex)
            {
                MessageBox.Show(ex.Message);
            }
        });
    }

这段代码包括初始化我的客户端上的服务:

private void SetContext()
    {
        service = new DSEntity();
        DataServiceQuery<DS1.Accounts> queryAcc = (DataServiceQuery<DS1.Accounts>)
                                                  (service.Accounts.Select(m =>
                                                      new DS1.Accounts
                                                   {
                                                       AccNo = m.AccNo,
                                                       AccDesc = m.AccDesc
                                                   }));
        queryAcc.BeginExecute(t =>
        {
            DataServiceQuery<DS1.Accounts> state = t.AsyncState as DataServiceQuery<DS1.Accounts>;
            var executedState = state.EndExecute(t);
            ObservableCollection<DS1.Accounts> data = new ObservableCollection<DS1.Accounts>();
            foreach (var entity in executedState)
                data.Add(entity);
            AccCache = data.ToList();
        }, queryAcc);
        var view = new VirtualQueryableCollectionView() { LoadSize = 300, VirtualItemCount = 10000 };
        view.ItemsLoading += (y, e) =>
        {
            DataServiceQuery<DS1.DocDetail> query = (DataServiceQuery<DS1.DocDetail>)
                service.DocDetail.OrderBy(it => it.Item)
                                     .Where<DS1.DocDetail>(it => it.DocSerNo == 91120001)
                                     .Where(view.FilterDescriptors)
                                     .Sort(view.SortDescriptors)
                                     .Skip(e.StartIndex)
                                     .Take(e.ItemCount);
            query = query.IncludeTotalCount();
            query.BeginExecute(
                  s =>
                  {
                      DataServiceQuery<DS1.DocDetail> state = s.AsyncState as DataServiceQuery<DS1.DocDetail>;
                      var executedState = state.EndExecute(s);
                      var response = executedState as QueryOperationResponse<DS1.DocDetail>;
                      int count = (int)response.TotalCount;
                      ObservableCollection<DS1.DocDetail> data = new ObservableCollection<DS1.DocDetail>();
                      foreach (var entity in executedState)
                          data.Add(entity);
                      var dataSource = data.ToList();
                      view.VirtualItemCount = count;
                      view.Load(e.StartIndex, dataSource);
                  }, query);
        };
        grid1.ItemsSource = view;
    }

添加新对象时它不起作用,添加host.open()时异常不会给我任何细节;在构造函数上显示异常详细信息,服务已停止。

在添加新实体期间调试WCF数据服务上的数据服务请求异常

包括调试wcf服务的所有选项

1.将以下属性应用于您的服务类[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults=true)]

  1. 在服务类中重写以下两个方法a.受保护的覆盖无效OnStartProcessingRequest(ProcessRequestArgs args)b、 受保护的重写void HandleException(HandleExceptionArgs args)

设置这两个方法的断点,然后查看异常的类型。