C# REST WCF服务不返回响应

C# REST WCF服务不返回响应,c#,sql-server,entity-framework,wcf,rest,C#,Sql Server,Entity Framework,Wcf,Rest,我已经创建了一个rest wcf服务。服务本身运行良好。从localhost browse,我可以调用所有函数。以下是合同和功能 问题是,当我尝试使用db.savechanges()保存时,服务不会返回响应。如果我注释掉该行,就会返回JSON响应 我的代码是否有问题 [DataContract] public class RouteObject{ public List<DetailRouteInfo>routeDetail {get; set;} /// th

我已经创建了一个rest wcf服务。服务本身运行良好。从localhost browse,我可以调用所有函数。以下是合同和功能

问题是,当我尝试使用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); ;
        }

    }
[DataContract]
公共类路由对象{
公共ListrouteDetail{get;set;}///这是实体模型类;
}
[经营合同]
[WebGet(UriTemplate=“GRDI?route={route}&cloc={cloc}”,ResponseFormat=WebMessageFormat.Json)]
RouteObject GRDI(字符串路由、字符串cLoc);
公共路由对象GRDI(字符串路由,字符串cLoc){
MapApiClient mClient=新的MapApiClient();
Response mData=新响应();
var coord=route.Split(“|”);
RouteObject rObject=新的RouteObject();
rObject.routeDetail=新列表();
//此变量需要稍后更新
//List dummycord=新列表();
List wtask=新列表();
mClient.getRouteData(coord.ToList(),(x)=>
{
mData=x;
},
(y) =>
{
wtask.Add(y);
}
);
if(wtask!=null)
{
Task.WaitAll(wtask.ToArray());
wtask.Clear();
}
DriverRouteInfo DULOTE=null;
//用杜洛特做些处理//
//然后将Dulote列表添加到ROUTOBJECT.DETAILROUTE中//
尝试
{
使用(var db=new F2PDatabaseEntities())
{
UserInfo UserInfo=db.UserInfoes.SingleOrDefault(u=>u.UserId==1);
//userinfo.DriverRouteInfoes=listRoute;
foreach(rObject.routeDetail中的var dr){
userinfo.driverrouteinfo.Add(dr);
}
db.SaveChanges();
返回对象;
}
var检查=Droote.RouteId;
}
catch(SqlException-ex){
抛出新的FaultException(例如Message);
}
}
检查此链接:

另一个提示:

  • 将[DataMember]属性置于

    public List<DetailRouteInfo>routeDetail {get; set;}
    
    publicsListRouteDetail{get;set;}
    
    财产。并确保DetailRouteInfo类具有[DataContract]属性

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