IIS, преобразующий выходные данные Webservice из JSON в XML - PullRequest
1 голос
/ 12 января 2012

Это проблема, которую мы видели в других местах, с несколькими потенциальными решениями, но мы не можем заставить их работать.

У нас есть набор веб-сервисов ASP.netдо возврата результатов в формате JSON.Мы используем JQuery $ .post для получения результатов (но это почти наверняка не является частью проблемы.) Когда результаты поступают на стороне клиента, они оборачиваются в теги XML.Итак, вместо того, чтобы возвращаться так:

<?xml version="1.0" encoding="utf-8"?>
{data}

... они возвращаются вот так ...

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="[SomeURL.com]">{data}</string>

В процессе тестирования мы обнаружили, что значение по умолчанию вASP.net 3.5 для результатов веб-сервиса был JSON, но в ASP.net 4.0 это было изменено на XML.

Чтобы попытаться проверить это, мы загрузили тестовое приложение веб-службы ASP.net 3.5 и локально этот вывод в формате JSON, как и ожидалось.Затем мы обновили приложение до 4.0, ожидая, что он начнет выводиться в формате XML.Однако локально он продолжал выводить в виде JSON без внешних тегов.

Затем мы переместили это тестовое приложение на наш сервер IIS 7.0 и сразу начали выводить в виде XML.Это означало, что проблема была связана с настройками в IIS по сравнению с локальными настройками.

Затем мы нашли этот пост:

веб-служба asmx, возвращающая xml вместо json в .net 4.0

... и попытался заменить обработчик сценариев 4.0 через web.config на версию 3.5.Однако это тоже не работает.После внесения изменений в файл web.config в области сопоставлений обработчиков IIS появилось следующее:

ScriptHandlerFactory - версия 3.5.ScriptHandlerFactoryAppServices-Integrated-4.0 - версия 4.0.

... но также ...

WebServiceHandlerFactory-Integrated - версия 2.0WebServiceHandlerFactory-Integrated-4.0 - версия 4.0WebServiceHandlerFactory-ISAPI-2,0WebServiceHandlerFactory-ISAPI-2.0-64WebServiceHandlerFactory-ISAPI-4.0_32bitWebServiceHandlerFactory-ISAPI-4.0_64bit

Итак ... вот где мы - возиться с настройками IIS, чтобы попытаться заставить веб-сервис отправлять как JSON.Мы уверены, что это настройка IIS или, по крайней мере, настройка ASP.net 4.0 против 3.5.

В качестве фона веб-служба ASP.net выглядит следующим образом:

<System.Web.Script.Services.ScriptService(Namespace:="[SomeURL.com]")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
Public Class RequestM
Inherits System.Web.Services.WebService

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False, XMLSerializeString:=False)> _
Public Function dataRequestJSON(ByVal JsonRequestObject As String) As String

    Try

        Dim MyNewDataRequest As New DataRequest(JsonRequestObject)
        Dim MyJsonResponse = MyNewDataRequest.JsonResponse
        Return MyJsonResponse

    Catch ex As Exception
        Return ex.Message
    End Try

End Function

Пожалуйста, помогите!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 16 января 2012

Проблема заключалась в форматировании запроса json, хотя это был действительный json, веб-сервер asp.net все еще возвращал xml. Оказалось, что не имеет ничего общего с настройками iis вообще. Должно быть, красная сельдь на других форумах

0 голосов
/ 13 января 2012

Возможно, вам потребуется указать веб-службу ASP.NET 3.5 на пул классических приложений ASP.NET 2.0, это можно сделать в «Расширенных настройках» веб-службы.

...