Возврат результата wcf / json из службы wcf - PullRequest
0 голосов
/ 25 августа 2010

Мне нужно по контракту на обслуживание вернуть результат xml / json в зависимости от типа запроса. Мне также нужна какая-то вспомогательная функция, которая преобразует мой набор результатов (я использую linq в sql), так что мне не нужно создайте формат xml для результирующего набора, многократно повторяя строку таблицы. Какой подходящий способ сделать это.

Мне нужен своего рода сокращенный метод, который преобразует данные таблицы в результат xml. Если бы я использовал asp.net mvc, я бы смог сгенерировать данные XML, переопределив метод ExecuteResult в ActionResult и предоставив Conetnt-Type = "text / xml" как OP. Но так как я использую Если у меня нет контекста контроллера (поскольку контекст контроллера - это параметр, который нужно передать в Результат выполнения).

Ниже приведен мой код для преобразования данных таблицы в формат 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 Communication Foundation.

1 Ответ

0 голосов
/ 25 августа 2010

Реализация одной операции, возвращающей как XML, так и JSON, отличается в WCF 3.5 или WCF 4.0.Для реализации этой функции в WCF 3.5 проверьте этот поток .Как правило, вам придется создавать пользовательское поведение и устанавливать тип содержимого на основе заголовка Accept из запроса.WCF 4.0 имеет встроенную поддержку этой функции.WebHttpBehavior имеет свойство AutomaticFormatSelectionEnabled .Если вы установите для этого свойства значение true, оно должно работать из коробки.

К вашему второму вопросу.Вам не нужно никакого специального форматирования, как в ASP.NET MVC.Форматирование в WCF обрабатывается сериализацией.Просто верните коллекцию с вашей операции, и вы увидите, что произойдет.Сгенерированные сущности Linq-To-Sql должны быть сериализуемыми по умолчанию.Только не забудьте выполнить запрос перед возвратом из метода.Если вам нужен специальный формат даты, который не совпадает с сущностями Linq-To-Sql, создайте пользовательский тип данных, который имеет открытый конструктор без параметров и все необходимые свойства с помощью getter и setter.Если вы хотите, чтобы было ясно, макр этот класс с атрибутом DataContract и все свойства с атрибутом DataMember.Верните коллекцию экземпляров этого пользовательского класса из вашей операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...