Проблема Называя Сервисную Библиотеку WCF из jQuery

На Linux можно преобразовать файлы PDF в Постскриптум и использование psnup. Точный способ вызвать его зависит от точно, как Вы хотите, чтобы страницы были соединены, хотите ли Вы их повернутый, какой формат (форматы) бумаги Вы хотите использовать, и т.д. но это будет что-то вроде этого:

pdf2ps infile.pdf infile.ps
psnup -2 infile.ps outfile.ps
ps2pdf outfile.ps outfile.pdf

В зависимости от того, какие инструменты Вы имеете в наличии, у Вас мог бы быть более эффективный способ сделать, это - psnup является, конечно, не единственным путем, но это - относительно известная программа (на Linux так или иначе).

7
задан bean 3 March 2011 в 16:37
поделиться

1 ответ

Я предполагаю, что вы применили WebScriptEnhibitedBehavior (элемент enableWebScript в .config)? Это приводит к тому, что все запросы заключаются в объект JSON с одним полем с именем «d», которое затем содержит объект с вашими именованными параметрами. Поэтому вам нужно будет изменить данные jQuery на:

data: "{d:{logonRequest:" + JSON.stringify(LogonRequest) + "}}"

Либо это, либо удалить поведение enableWebScript, но, если вы это сделаете, вы должны вместо этого применить поведение webHttp. Теперь, к сожалению, кодировка по умолчанию - это XML, и поведение не предлагает никаких переключателей для управления кодировкой для всей службы (плохой дизайн MSFT). Итак, либо вы должны жениться на отдельной кодировке для каждого метода, задав свойства Request / ResponseFormat, либо, как я справлялся с этим в прошлом, я создал "EnhancedWebHttpElement" который применяет тот же WebHttpBehavior, но дает возможность управлять различными свойствами на уровне конфигурации. Преимущество использования этой конфигурации заключается в том, что теперь вы можете предоставлять доступ к одной и той же службе WCF через разные конечные точки, используя кодировку ASP.NET AJAX на одной, простой JSON на другой и, возможно, даже POX на другой.

Вот код:

public sealed class EnhancedWebHttpElement : BehaviorExtensionElement
{
    #region Type specific properties

    [ConfigurationProperty("defaultBodyStyle", DefaultValue=WebMessageBodyStyle.Bare)]
    public WebMessageBodyStyle DefaultBodyStyle
    {
        get
        {
            return (WebMessageBodyStyle)this["defaultBodyStyle"];
        }

        set
        {
            this["defaultBodyStyle"] = value;
        }
    }

    [ConfigurationProperty("defaultOutgoingRequestFormat", DefaultValue=WebMessageFormat.Xml)]
    public WebMessageFormat DefaultOutgoingRequestFormat
    {
        get
        {
            return (WebMessageFormat)this["defaultOutgoingRequestFormat"];
        }

        set
        {
            this["defaultOutgoingRequestFormat"] = value;
        }
    }

    [ConfigurationProperty("defaultOutgoingResponseFormat", DefaultValue=WebMessageFormat.Xml)]
    public WebMessageFormat DefaultOutgoingResponseFormat
    {
        get
        {
            return (WebMessageFormat)this["defaultOutgoingResponseFormat"];
        }

        set
        {
            this["defaultOutgoingResponseFormat"] = value;
        }
    }       

    #endregion

    #region Base class overrides

    protected override object CreateBehavior()
    {
        WebHttpBehavior result = new WebHttpBehavior();

        result.DefaultBodyStyle = this.DefaultBodyStyle;
        result.DefaultOutgoingRequestFormat = this.DefaultOutgoingRequestFormat;
        result.DefaultOutgoingResponseFormat = this.DefaultOutgoingResponseFormat;

        return result;
    }

    public override Type BehaviorType
    {
        get
        {
            return typeof(WebHttpBehavior);
        }
    }

    #endregion
}

И затем вы должны зарегистрировать его:

<system.serviceModel>
    <extensions>
        <behaviorExtensions>
            <add name="enhancedWebHttp" type="MyNamespace.EnhancedWebHttpElement, MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            </behaviorExtensions>
    </extensions>

А затем вы используете его так:

<behavior name="MyBehavior">
    <enhancedWebHttp defaultOutgoingRequestFormat="JSON" defaultOutgoingResponseFormat="JSON" />
</behavior>

ОБНОВЛЕНИЕ:

Этот ответ выше относится строго к .NET 3.x. Если вы используете .NET 4.x, то теперь вы можете использовать свойство DefaultOutgoingResponseFormat , которое отображается в WebHttpElement , чтобы управлять этим. Даже лучше,

13
ответ дан 6 December 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: