【问题标题】:REST WCF service does not return a responseREST WCF 服务不返回响应
【发布时间】:2015-06-20 14:52:31
【问题描述】:

我创建了一个 rest wcf 服务。服务本身运行良好。从本地主机浏览我可以调用所有函数。下面是合约和函数。

问题是当我尝试使用 db.savechanges() 进行保存时服务没有返回响应。如果我注释掉该行,则返回 JSON 响应。

我的代码有问题吗?

 [DataContract]
     public class RouteObject{
     public List<DetailRouteInfo>routeDetail {get; set;} /// this is Entity Model Class; 
    }
[OperationContract]
        [WebGet(UriTemplate="GRDI?route={route}&cloc={cloc}", ResponseFormat=WebMessageFormat.Json)]
        RouteObject GRDI(string route,string cLoc);

public RouteObject GRDI(string route, string cLoc) { 

        MapApiClient mClient = new MapApiClient();
        Response mData= new Response();
        var coord=route.Split('|');
        RouteObject rObject = new RouteObject();
        rObject.routeDetail = new List<DriverRouteInfo>(); ;
        //this variable needs to updated later
        //List<string> dummyCoord= new List<string>();
        List<Task> wtask = new List<Task>();
        mClient.getRouteData(coord.ToList(), (x) =>
            {
                mData = x;
            },
            (y) => 
            {
                wtask.Add(y);
            }
            );

        if (wtask != null)
        {
            Task.WaitAll(wtask.ToArray());
            wtask.Clear();
        }
        DriverRouteInfo droute=null;

// DO SOME MANIPULATION WITH THE DROUTE //
// THEN ADD LIST OF DROUTE INTO ROUTOBJECT.DETAILROUTE //

        try 
        {
            using (var db = new F2PDatabaseEntities())
            {
                UserInfo userinfo = db.UserInfoes.SingleOrDefault(u => u.UserId == 1);
                //userinfo.DriverRouteInfoes = listRoute;
                foreach(var dr in rObject.routeDetail){
                    userinfo.DriverRouteInfoes.Add(dr);
                }
               db.SaveChanges();
                return rObject;

            }
            var check = droute.RouteId;


        }

        catch(SqlException ex) {
            throw new FaultException(ex.Message); ;
        }

    }

【问题讨论】:

    标签: c# sql-server entity-framework wcf rest


    【解决方案1】:

    查看此链接:

    http://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/

    其他提示:

    • 将 [DataMember] 属性放在

      public List<DetailRouteInfo>routeDetail {get; set;}
      

      属性。并确保 DetailRouteInfo 类具有 [DataContract] 属性。

    • 不要向客户端抛出异常。如果您不能正确处理,它会导致不良结果。构建一个基础响应对象,其中包含一个用于返回响应代码或消息的属性,并从该基类继承您的 RouteObject 类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-23
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      相关资源
      最近更新 更多