2010-08-25 128 views
0

我需要通過服務契約根據請求類型返回xml/json結果。我還需要一種輔助函數,它將轉換我的結果集(我正在使用linq sql),所以我不需要通過迭代遍歷錶行來多次創建結果集的xml格式。什麼是合適的方式來做到這一點。從wcf服務返回wcf/json結果

我需要一種捷徑方法,它將表格數據轉換爲xml result.Had我一直在使用asp.net mvc,我將能夠通過覆蓋ActionResult中的ExecuteResult方法來生成xml數據,並且Conetnt-Type =「text/xml」作爲OP.But因爲我使用 Wcf我沒有控制器上下文(因爲控制器上下文是需要傳遞給執行結果的參數)。

我現在的表格數據轉換爲xml格式的代碼如下。

public XDocument UsersLists(string authToken) 
    { 
     bool IsAuthenticated = Authenticate(authToken); 
     XDocument xDoc = new XDocument(); 
     XElement root = new XElement("Users"); 
     if (IsAuthenticated) 
     { 
      List<User> lstUsers = _lService.UserRepository.GetUserCompanyFromAccountID(GetAccountId(authToken)).ToList(); 
      if (lstUsers != null) 
      { 
       root.Add(new XElement("Message", "Success")); 
       foreach (var u in lstUsers) 
       { 
        XElement chid = new XElement("User"); 
        root.Add(new XElement("UserId", u.UserId)); 
        root.Add(new XElement("FirstName", u.FirstName)); 
        root.Add(new XElement("LastName", u.LastName)); 
        root.Add(new XElement("Email", u.Email)); 
        root.Add(new XElement("CompanyName", u.Company.CompanyName)); 
        root.Add(chid); 
       } 
       xDoc.Add(root); 
       return xDoc; 
      } 

      else 
      { 
       return ReturnFailure(xDoc, root); 
      } 

     } 
     else 
     { 
      return ReturnFailure(xDoc, root); 
     } 
    } 

我需要消除這種爲每個表記錄生成xml的方式。

早期的迴應是無價的。 謝謝

技術:Windows通信基金會。

回答

0

返回XML或JSON的單一操作的實現在WCF 3.5或WCF 4.0中不同。要在WCF 3.5中實現此功能,請檢查此thread。通常,您必須創建自定義行爲並根據請求中的Accept標頭設置內容類型。 WCF 4.0對此功能具有本機支持。 WebHttpBehavior有財產。如果將此屬性設置爲true,則應該開箱即用。

回答第二個問題。您不需要像ASP.NET MVC中那樣的任何自定義格式。通過序列化處理WCF中的格式。只需從您的操作中返回收集,您將看到會發生什麼。 Linq-To-Sql生成的實體在默認情況下應該是可序列化的。只是不要忘記在從方法返回之前執行查詢。如果您需要與日期不同的特殊格式,它與Linq-to-Sql實體創建的自定義數據類型具有公共無參數構造函數以及所有getter和setter所需的屬性。如果要使用DataContract屬性清除該類,並使用DataMember屬性清除所有屬性。從您的操作中返回該自定義類實例的集合。