вернуть HTML из службы wcf - PullRequest
       26

вернуть HTML из службы wcf

5 голосов
/ 07 января 2010

У меня есть веб-сервис, из которого мне нужно вернуть строку, содержащую html. Этот html является разметкой для элемента управления Select (для использования в поисковых фильтрах jqGrid), например,

<select><option id='1'> value 1 </option></select>  

Мой веб-сервис WCF содержит метод, который возвращает это значение в виде строки ...

public string GetLeadTypeSelect()
{
    return "<select><option id='1'> value 1 </option></select>";
}  

и контракт для этого метода:

[OperationContract]
[WebInvoke(Method = "GET",
    BodyStyle = WebMessageBodyStyle.Bare,
    ResponseFormat = WebMessageFormat.Json)]
string GetLeadTypeSelect();  

Моя проблема в том, что в строку вставляются escape-символы, поэтому возвращаемый HTML становится бесполезным - служба возвращает следующее:

"<select><option id='1'> value 1 <\/option><\/select>"  

Кавычки и экранированные '/' в закрывающих тегах <option> и <select> вызывают проблемы.

jqGrid использует возвращенный HTML для отображения выпадающего списка ...

filterModel: [
    { label: 'Type', name: 'type', stype: 'select', surl: '../../../Services/Leads/GetLeads.svc/GetLeadTypeSelect' },

Итак, мой вопрос: как вернуть чистый HTML обратно клиенту из этого веб-сервиса, чтобы его можно было вставить на мою HTML-страницу?

Заранее спасибо за любую помощь, Колин.

Ответы [ 2 ]

6 голосов
/ 15 декабря 2010

Я знаю, что это старый пост, но для сервиса, который будет размещаться только в IIS, вот простой способ вернуть html:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public Stream getHtml()
{
    // get the html
    var html = DoSomethingToGetHtml();  //Not a built-in .Net method ;)

    // we want our result interpreted as plain html
    WebOperationContext.Current.OutgoingResponse.ContentType = "text/html; charset=utf-8";

    // create a stream from our html because trying to return a string adds an extra header tag
    //      to the response.  Returning a stream returns the html by itself
    var result = new MemoryStream(Encoding.UTF8.GetBytes(html));

    // return the result
    return result;
}

Для этого кода требуется следующее в web.config, где размещается служба:

<system.serviceModel>
    <!-- enable HttpContext.Current by setting aspNetCompatibilityEnabled=true-->
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

    <behaviors>
        <endpointBehaviors>
            <behavior name="webHttpEnabled">              
                <webHttp/>
            </behavior>
        </endpointBehaviors>
    </behaviors>
    ...
<system.serviceModel>

В конфигурации для услуги установите behaviorConfiguration="webHttpEnabled".

Возвращение html таким способом немного ограничивает возможность повторного использования службы, но это простой способ решить проблему, если вы уверены, что служба всегда будет размещаться в IIS.

0 голосов
/ 07 января 2010

Я предполагаю, что вы используете его через Javascript.

Если вы делаете unescape (ответ), ваша проблема должна быть решена.

С другой стороны, если вы используете его не в Javascript, а только на ASP.NET / PHP / любом другом веб-сайте, вам, вероятно, будет лучше, просто вернув массив значений и отображаемых значений, чтобы вы могли повторно использовать веб-сервис в другом коде.

Ваш кусок кода теперь работает только в среде HTML. Что, если вам нужно завтра написать .NET / C ++ / любое другое приложение, которое использует ваш веб-сервис? Тогда вам нужно изменить это. И это не главное для веб-сервисов. Веб-сервисы способствуют повторному использованию кода. И вы боретесь с этим. (и код победит!)

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