WCF Web HTTP biçimlendirmeWCF Web HTTP formatting

WCF Web HTTP programlama modeli yanıt olarak döndürmek bir hizmet işlemi için en iyi biçimi dinamik olarak belirlemenize olanak tanır.The WCF Web HTTP programming model allows you to dynamically determine the best format for a service operation to return its response in. Uygun bir biçim belirlemek için iki yöntem desteklenir: otomatik ve açık.Two methods for determining an appropriate format are supported: automatic and explicit.

Otomatik biçimlendirmeAutomatic formatting

Etkinleştirildiğinde, otomatik biçimlendirme yanıt dönmek en iyi biçimde seçer.When enabled, automatic formatting chooses the best format in which to return the response. En iyi biçim sırayla aşağıdakileri kontrol ederek belirler:It determines the best format by checking the following, in order:

  1. İstek iletisinin Accept üstbilgisindeki medya türleri.The media types in the request message’s Accept header.

  2. İstek iletisi content-type.The content-type of the request message.

  3. İşlemde ayarı varsayılan biçimi.The default format setting in the operation.

  4. WebHttpBehavior ayarı varsayılan biçimi.The default format setting in the WebHttpBehavior.

İstek iletisinde bir Accept üstbilgisi içeriyorsa Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) desteklediği bir tür altyapı arar.If the request message contains an Accept header the Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) infrastructure searches for a type that it supports. Varsa Accept ayardaki, üstbilgi medya türlerinden öncelikleri belirtir.If the Accept header specifies priorities for its media types, they are honored. Uygun bir biçim bulunursa Accept üstbilgisi, istek iletisi içerik türü kullanılır.If no suitable format is found in the Accept header, the content-type of the request message is used. Uygun içerik türü belirtilirse, varsayılan biçimi işlem için ayarını kullanılır.If no suitable content-type is specified, the default format setting for the operation is used. Varsayılan biçimi ile ayarlanır ResponseFormat parametresinin WebGetAttribute ve WebInvokeAttribute öznitelikleri.The default format is set with the ResponseFormat parameter of the WebGetAttribute and WebInvokeAttribute attributes. Varsayılan biçimi işlemi, değerini belirttiyseniz, DefaultOutgoingResponseFormat özelliği kullanılır.If no default format is specified on the operation, the value of the DefaultOutgoingResponseFormat property is used. Otomatik biçimlendirme kullanır AutomaticFormatSelectionEnabled özelliği.Automatic formatting relies on the AutomaticFormatSelectionEnabled property. Bu özellik ayarlandığında true, WCFWCF altyapı kullanmak için en iyi biçim belirler.When this property is set to true, the WCFWCF infrastructure determines the best format to use. Otomatik Biçim Seçimi varsayılan olarak devre dışıdır için geriye dönük uyumluluk.Automatic format selection is disabled by default for backwards compatibility. Otomatik Biçim Seçimi program aracılığıyla veya yapılandırma yoluyla etkinleştirilebilir.Automatic format selection can be enabled programmatically or through configuration. Aşağıdaki örnek kodda Otomatik Biçim Seçimi etkinleştirme gösterir.The following example shows how to enable automatic format selection in code.

// This code assumes the service name is MyService and the service contract is IMyContract     
Uri baseAddress = new Uri("http://localhost:8000");  

WebServiceHost host = new WebServiceHost(typeof(MyService), baseAddress)  
try  
{  
   ServiceEndpoint sep = host.AddServiceEndpoint(typeof(IMyContract), new WebHttpBinding(), "");  
   // Check it see if the WebHttpBehavior already exists  
   WebHttpBehavior whb = sep.Behaviors.Find<WebHttpBehavior>();  

   if (whb != null)  
   {  
      whb.AutomaticFormatSelectionEnabled = true;  
   }  
   else  
   {  
      WebHttpBehavior webBehavior = new WebHttpBehavior();  
      webBehavior.AutomaticFormatSelectionEnabled = true;  
      sep.Behaviors.Add(webBehavior);  
   }  
         // Open host to start listening for messages  
   host.Open();        

  // ...  
}  
  catch(CommunicationException ex)  
  {  
     Console.WriteLine("An exception occurred: " + ex.Message());  
  }  

Otomatik biçimlendirme yapılandırma aracılığıyla etkinleştirilebilir.Automatic formatting can also be enabled through configuration. Ayarlayabileceğiniz AutomaticFormatSelectionEnabled özelliği doğrudan üzerinde WebHttpBehavior veya kullanarak WebHttpEndpoint.You can set the AutomaticFormatSelectionEnabled property directly on the WebHttpBehavior or using the WebHttpEndpoint. Aşağıdaki örnek, Otomatik Biçim Seçimi etkinleştirmek gösterilmiştir WebHttpBehavior.The following example shows how to enable the automatic format selection on the WebHttpBehavior.

<system.serviceModel>  
  <behaviors>  
    <endpointBehaviors>  
      <behavior>  
        <webHttp automaticFormatSelectionEnabled="true" />  
      </behavior>  
    </endpointBehaviors>  
  </behaviors>  
  <standardEndpoints>  
    <webHttpEndpoint>  
      <!-- the "" standard endpoint is used by WebServiceHost for auto creating a web endpoint. -->  
      <standardEndpoint name="" helpEnabled="true" />  
    </webHttpEndpoint>  
  </standardEndpoints>  
</system.serviceModel>  

Aşağıdaki örnek, Otomatik Biçim Seçimi kullanarak etkinleştirmek gösterilmiştir WebHttpEndpoint.The following example shows how to enable automatic format selection using WebHttpEndpoint.

<system.serviceModel>  
    <standardEndpoints>  
      <webHttpEndpoint>  
        <!-- the "" standard endpoint is used by WebServiceHost for auto creating a web endpoint. -->  
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"  />  
      </webHttpEndpoint>  
    </standardEndpoints>  
  </system.serviceModel>  

Explicit biçimlendirmeExplicit formatting

Adından da anlaşılacağı gibi açık biçimlendirmede Geliştirici işlem kodu içinde kullanmak için en iyi biçimini belirler.As the name implies, in explicit formatting the developer determines the best format to use within the operation code. En iyi biçimde XML veya JSON ise Geliştirici ayarlar Format ya da Xml veya Json.If the best format is XML or JSON the developer sets Format to either Xml or Json. Varsa Format özelliği açıkça ayarlanmamışsa, sonra işlemin varsayılan biçimi kullanılır.If the Format property is not explicitly set, then the operation’s default format is used.

Aşağıdaki örnek biçim sorgu dizesi parametresi için kullanılacak biçimi denetler.The following example checks the format query string parameter for a format to use. Belirtilen sahip değilse, işlem ayarlar biçimi kullanılarak Format.If it has been specified, it sets the operation’s format using Format.

public class Service : IService  
{  
    [WebGet]  
     public string EchoWithGet(string s)  
    {  
         // if a format query string parameter has been specified, set the response format to that. If no such  
         // query string parameter exists the Accept header will be used  
        string formatQueryStringValue = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["format"];  
        if (!string.IsNullOrEmpty(formatQueryStringValue))  
        {  
             if (formatQueryStringValue.Equals("xml", System.StringComparison.OrdinalIgnoreCase))  
             {  
                  WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Xml;  
             }  
             else if (formatQueryStringValue.Equals("json", System.StringComparison.OrdinalIgnoreCase))  
            {  
                WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json;  
            }  
            else  
            {  
                 throw new WebFaultException<string>(string.Format("Unsupported format '{0}'", formatQueryStringValue), HttpStatusCode.BadRequest);  
            }  
        }  
        return "You said " + s;  
    }  

XML veya JSON dışında biçimleri desteklemeniz gerekiyorsa, bir dönüş türüne sahip işleminizi tanımlamak Message.If you need to support formats other than XML or JSON, define your operation to have a return type of Message. İşlem kodu içinde kullanın ve sonra oluşturmak için uygun biçimde belirlemek bir Message aşağıdaki yöntemlerden birini kullanarak nesnesi:Within the operation code, determine the appropriate format to use and then create a Message object using one of the following methods:

  • WebOperationContext.CreateAtom10Response

  • WebOperationContext.CreateJsonResponse

  • WebOperationContext.CreateStreamResponse

  • WebOperationContext.CreateTextResponse

  • WebOperationContext.CreateXmlResponse

Bu yöntemlerin her biri içerik alır ve uygun biçimiyle bir ileti oluşturur.Each of these methods takes content and creates a message with the appropriate format. WebOperationContext.Current.IncomingRequest.GetAcceptHeaderElements Yöntemi, azalan tercihlere dosyasındaki istemci tarafından tercih edilen biçimler listesini almak için kullanılabilir.The WebOperationContext.Current.IncomingRequest.GetAcceptHeaderElements method can be used to get a list of formats preferred by the client in order of decreasing preference. Aşağıdaki örnekte nasıl kullanılacağını gösterir WebOperationContext.Current.IncomingRequest.GetAcceptHeaderElements kullanın ve ardından kullanır biçimine belirlemek için uygun yanıt iletisi oluşturmak için yanıt yöntemi oluşturun.The following example shows how to use WebOperationContext.Current.IncomingRequest.GetAcceptHeaderElements to determine the format to use and then uses the appropriate create response method to create the response message.

public class Service : IService  
{  
    public Message EchoListWithGet(string list)  
    {  
        List<string> returnList = new List<string>(list.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries));  
        IList<ContentType> acceptHeaderElements = WebOperationContext.Current.IncomingRequest.GetAcceptHeaderElements();  
        for (int x = 0; x < acceptHeaderElements.Count; x++)  
        {  
            string normalizedMediaType = acceptHeaderElements[x].MediaType.ToLowerInvariant();  
            switch (normalizedMediaType)  
            {  
                case "image/jpeg": return CreateJpegResponse(returnList);  
                case "application/xhtml+xml": return CreateXhtmlResponse(returnList);  
                case "application/atom+xml": return CreateAtom10Response(returnList);  
                case "application/xml": return CreateXmlResponse(returnList);  
                case "application/json": return CreateJsonResponse(returnList);  
          }  
    }  

    // Default response format is XML  
    return CreateXmlResponse(returnList);  
    }  
}  

Ayrıca bkz.See also

UriTemplate
UriTemplateMatch
WCF Web HTTP Programlama ModeliWCF Web HTTP Programming Model
UriTemplate ve UriTemplateTableUriTemplate and UriTemplateTable
WCF Web HTTP Programlama Modeli Genel BakışWCF Web HTTP Programming Model Overview
WCF Web HTTP Programlama Nesnesi ModeliWCF Web HTTP Programming Object Model