WCF Global (.asax) Поведение - PullRequest
2 голосов
/ 25 мая 2010

Я хочу создать глобальную опцию, которая при вызове REST содержит & format = json для вывода ответа в виде строки JSON.

Если я введу следующую строку в моем методе, она будет работать:

WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json;

Однако, если я добавлю эту строку где-нибудь в моем файле Global.asax, я получу исключение nullException для текущего контекста:

String format = "";

if (HttpContext.Current.Request.QueryString["format"] != null)
  format = HttpContext.Current.Request.QueryString["format"];

if (String.Equals("json", format, StringComparison.OrdinalIgnoreCase))
  System.ServiceModel.Web.WebOperationContext.Current.OutgoingResponse.Format = System.ServiceModel.Web.WebMessageFormat.Json;

Здесь сработало исключение:

System.ServiceModel.Web.WebOperationContext.Current

Кто-нибудь знает, как я могу добавить эту функцию в глобальном масштабе (WCF)?

1 Ответ

3 голосов
/ 25 мая 2010

Вы можете добавить свой собственный DispatchMessageInspector в конвейер обработки WCF с помощью служебного поведения. Здесь , как это сделать.

Чтобы применить поведение через файл конфигурации, сначала вы должны получить новый класс из BehaviorExtensionElement и переопределить члены BehaviorType и CreateBehavior. Затем добавьте в раздел конфигурации аналогичный этому (с вашим полным именем типа)

<system.serviceModel>
    <extensions>
        <behaviorExtensions>
            <add name="myBehavior" type="SomeNamespace.MyBehaviorExtensionElement, AssemblyName,
                Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
       </behaviorExtensions>
    </extensions>
</system.serviceModel>

и тот

<behaviors>
    <behavior configurationName="myServiceBehavior">
        <myBehavior />            
    </behavior>
</behaviors>

Наконец примените эту конфигурацию к вашему сервису.

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