2015-06-20 153 views
0

我创建了一个休息WCF服务。服务本身工作正常。从本地主机浏览我可以调用所有功能。以下是合同和功能。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); ; 
     } 

    } 

回答

0

检查此链接:

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

另一个提示:

  • 把[数据成员]在

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

    property属性。并确保DetailRouteInfo类已经得到了[DataContract]属性。

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