Share via


피드 사용자 지정(WCF Data Services)

WCF Data Services 는 Open Data Protocol(OData) 를 사용하여 데이터를 피드로 노출합니다. OData 는 데이터 피드의 Atom 및 JSON(JavaScript Object Notation) 형식을 모두 지원합니다. Atom 피드를 사용하는 경우 OData 는 엔터티 및 관계와 같은 데이터를 HTTP 메시지의 본문에 포함할 수 있는 XML 형식으로 serialize(직렬화)하는 표준 방법을 제공합니다. OData 는 엔터티 및 Atom 요소에 포함된 데이터 간의 기본 엔터티 속성 매핑을 정의합니다. 자세한 내용은 OData: Atom Format을 참조하십시오.

데이터 서비스에서 반환된 속성 데이터를 표준 피드 형식이 아니라 사용자 지정 방식으로 serialize(직렬화)해야 하는 응용 프로그램 시나리오가 있을 수도 있습니다. OData 를 사용하면 엔터티의 속성이 엔터티의 사용되지 않는 요소 및 특성이나 피드 항목의 사용자 지정 요소에 매핑될 수 있도록 데이터 피드의 serialization을 사용자 지정할 수 있습니다.

Ee373839.note(ko-kr,VS.100).gif참고:
피드 사용자 지정은 Atom 피드에만 지원됩니다. 반환된 피드에 대해 JSON 형식이 요청되는 경우에는 사용자 지정 피드가 반환되지 않습니다.

WCF Data Services 를 사용하면 수동으로 데이터 모델의 엔터티 형식에 특성을 적용하여 Atom 페이로드에 대한 대체 엔터티 속성 매핑을 정의할 수 있습니다. 데이터 서비스의 데이터 소스 공급자가 이러한 특성의 적용 방법을 결정합니다.

Ee373839.Important(ko-kr,VS.100).gif 참고:
사용자 지정 피드를 정의하는 경우 사용자 지정 매핑이 정의되어 있는 모든 엔터티 속성이 프로젝션에 포함되도록 해야 합니다. 매핑된 엔터티 속성이 프로젝션에 포함되지 않는 경우 데이터가 손실될 수 있습니다. 자세한 내용은 쿼리 프로젝션(WCF Data Services)을 참조하십시오.

Entity Framework 공급자를 사용하여 피드 사용자 지정

Entity Framework 공급자와 함께 사용된 데이터 모델은 .edmx 파일에 XML로 표현됩니다. 이 경우 사용자 지정 피드를 정의하는 특성은 데이터 모델의 엔터티 형식과 속성을 나타내는 EntityTypeProperty 요소에 추가됩니다. 이러한 피드 사용자 지정 특성은 Entity Framework 공급자가 데이터 모델을 정의할 때 사용하는 형식인 [MC-CSDL]: Conceptual Schema Definition File Format에 정의되어 있지 않습니다. 따라서 m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata"에 정의된 특정 스키마 네임스페이스에 피드 사용자 지정 특성을 선언해야 합니다. 다음 XML 조각은 ProductName, ReorderLevelUnitsInStock 속성을 정의하는 Products 엔터티 형식의 Property 요소에 적용되는 피드 사용자 지정 특성을 보여 줍니다.

<Property Name="ProductName" Type="String" Nullable="false"
          MaxLength="40" Unicode="true" FixedLength="false"
          m:FC_TargetPath="SyndicationAuthorName"
          m:FC_ContentKind="text"
          m:FC_KeepInContent="true"
    />
<Property Name="UnitsInStock" Type="Int16"
          m:FC_TargetPath="UnitsInStock"
          m:FC_NsPrefix="Northwind"
          m:FC_NsUri="http://schemas.examples.microsoft.com/dataservices"
          m:FC_KeepInContent="true"
    />
<Property Name="ReorderLevel" Type="Int16"
          m:FC_TargetPath="UnitsInStock/@ReorderLevel"
          m:FC_NsPrefix="Northwind"
          m:FC_NsUri="http://schemas.examples.microsoft.com/dataservices"
          m:FC_KeepInContent="false"
    />

이러한 특성은 Products 엔터티 집합에 대해 다음 사용자 지정 데이터 피드를 생성합니다. 사용자 지정 데이터 피드에서 ProductName 속성 값은 author 요소와 ProductName 속성 요소에 모두 표시되고, UnitsInStock 속성은 고유한 네임스페이스와 특성으로 ReorderLevel 속성을 사용하여 사용자 지정 요소에 표시됩니다.

<entry xml:base="https://localhost:12345/Northwind.svc/" 
         xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" 
         xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
         xmlns="http://www.w3.org/2005/Atom">
  <id>https://localhost:12345/Northwind.svc/Products(1)</id>
  <title type="text" />
  <updated>2009-10-02T05:09:44Z</updated>
  <author>
    <name>Chai</name>
  </author>
  <link rel="edit" title="Products" href="Products(1)" />
  <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Order_Details" 
        type="application/atom+xml;type=feed" title="Order_Details" 
        href="Products(1)/Order_Details" />
  <category term="NorthwindModel.Products" 
            scheme="https://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
  <content type="application/xml">
    <m:properties>
      <d:ProductID m:type="Edm.Int32">1</d:ProductID>
      <d:ProductName>Chai</d:ProductName>
      <d:UnitsInStock m:type="Edm.Int16">39</d:UnitsInStock>
      <d:SupplierID m:type="Edm.Int32">1</d:SupplierID>
      <d:CategoryID m:type="Edm.Int32">1</d:CategoryID>
      <d:QuantityPerUnit>10 boxes x 20 bags</d:QuantityPerUnit>
      <d:UnitPrice m:type="Edm.Decimal">18.0000</d:UnitPrice>
      <d:UnitsOnOrder m:type="Edm.Int16">0</d:UnitsOnOrder>
      <d:Discontinued m:type="Edm.Boolean">false</d:Discontinued>
    </m:properties>
  </content>
  <Northwind:UnitsInStock 
    Northwind:ReorderLevel="10" 
    xmlns:Northwind="http://schemas.examples.microsoft.com/dataservices">39</Northwind:UnitsInStock>
</entry>

자세한 내용은 방법: Entity Framework 공급자를 사용하여 피드 사용자 지정(WCF Data Services)을 참조하십시오.

Ee373839.note(ko-kr,VS.100).gif참고:
Entity Designer에서 데이터 모델 확장을 지원하지 않으므로 데이터 모델이 포함된 XML 파일을 수동으로 수정해야 합니다. 엔터티 데이터 모델 도구에서 생성되는 .edmx 파일에 대한 자세한 내용은 .edmx File Overview (Entity Framework)를 참조하십시오.

사용자 지정 피드 특성

다음 표에서는 데이터 모델을 정의하는 CSDL(개념 스키마 정의 언어)에 추가할 수 있는 피드를 사용자 지정하는 XML 특성을 보여 줍니다. 이러한 특성은 리플렉션 공급자와 함께 사용되는 EntityPropertyMappingAttribute의 속성과 같습니다.

특성 이름 설명

FC_ContentKind

콘텐츠의 형식을 나타냅니다. 다음 키워드는 배포 콘텐츠 형식을 정의합니다.

키워드 설명
text 속성 값이 피드에 텍스트로 표시됩니다.
html 속성 값이 피드에 HTML로 표시됩니다.
xhtml 속성 값이 피드에 XML 형식의 HTML로 표시됩니다.

이러한 키워드는 리플렉션 공급자와 함께 사용되는 SyndicationTextContentKind 열거 값과 같습니다.

FC_NsPrefixFC_NsUri 특성을 사용하는 경우 이 특성은 지원되지 않습니다.

FC_ContentKind 특성의 xhtml 값을 지정하는 경우 속성 값에 올바른 형식의 XML이 포함되도록 해야 합니다. 데이터 서비스는 변환을 수행하지 않고 값을 반환합니다. 반환된 XML의 모든 XML 요소 접두사에 매핑된 피드에 정의된 네임스페이스 URI 및 접두사가 있는지도 확인해야 합니다.

FC_KeepInContent

참조된 속성 값이 피드의 콘텐츠 섹션과 매핑 대상 위치에 모두 포함되어야 함을 나타냅니다. 유효한 값은 truefalse입니다. 결과 피드가 이전 버전의 WCF Data Services 와 호환되게 하려면 true 값을 지정하여 피드의 콘텐츠 섹션에 값이 포함되도록 합니다. 

FC_NsPrefix

배포 이외의 매핑에서 XML 요소의 네임스페이스 접두사입니다. 이 특성은 FC_NsUri 특성과 함께 사용해야 하며, FC_ContentKind 특성과 함께 사용할 수는 없습니다.

FC_NsUri

배포 이외의 매핑에서 XML 요소의 네임스페이스 URI입니다. 이 특성은 FC_NsPrefix 특성과 함께 사용해야 하며, FC_ContentKind 특성과 함께 사용할 수는 없습니다.

FC_SourcePath

이 피드 매핑 규칙이 적용되는 엔터티의 속성 경로입니다. 이 특성은 EntityType 요소와 함께 사용하는 경우에만 지원됩니다.

SourcePath 속성은 복합 형식을 직접 참조할 수 없습니다. 복합 형식의 경우 속성 이름이 백슬래시(/) 문자로 구분되는 경로 식을 사용해야 합니다. 예를 들어, 정수 속성 Age와 복합 속성 Address가 있는 엔터티 형식 Person에 허용되는 값은 다음과 같습니다.

  • Age

  • Address/Street

SourcePath 속성은 공백이나 속성 이름에 사용할 수 없는 다른 문자가 포함된 값으로 설정할 수 없습니다.

FC_TargetPath

속성을 매핑할 결과 피드의 대상 요소 이름입니다. 이 요소는 Atom 사양에 정의된 요소나 사용자 지정 요소일 수 있습니다.

다음 키워드는 OData 피드의 특정 위치를 가리키는 미리 정의된 배포 대상 경로 값입니다.

키워드 설명
SyndicationAuthorEmailatom:author 요소의 atom:email 자식 요소입니다.
SyndicationAuthorNameatom:author 요소의 atom:name 자식 요소입니다.
SyndicationAuthorUriatom:author 요소의 atom:uri 자식 요소입니다.
SyndicationContributorEmailatom:contributor 요소의 atom:email 자식 요소입니다.
SyndicationContributorNameatom:contributor 요소의 atom:name 자식 요소입니다.
SyndicationContributorUriatom:contributor 요소의 atom:uri 자식 요소입니다.
SyndicationCustomProperty
사용자 지정 속성 요소입니다. 사용자 지정 요소에 매핑되는 경우 대상은 중첩된 요소가 백슬래시(/)로 구분되고 특성이 앰퍼샌드(@)로 지정되는 경로 식이어야 합니다. 다음 예제에서 UnitsInStock/@ReorderLevel 문자열은 루트 항목 요소의 자식 요소 UnitsInStock에 대한 ReorderLevel 특성에 속성 값을 매핑합니다.
<Property Name="ReorderLevel" Type="Int16"
          m:FC_TargetPath="UnitsInStock/@ReorderLevel"
          m:FC_NsPrefix="Northwind"
          m:FC_NsUri="http://schemas.examples.microsoft.com/dataservices"
          m:FC_KeepInContent="false"
    />
대상이 사용자 지정 요소 이름인 경우 FC_NsPrefixFC_NsUri 특성도 지정해야 합니다.
SyndicationPublishedatom:published 요소입니다.
SyndicationRightsatom:rights 요소입니다.
SyndicationSummaryatom:summary 요소입니다.
SyndicationTitleatom:title 요소입니다.
SyndicationUpdatedatom:updated 요소입니다.

이러한 키워드는 리플렉션 공급자와 함께 사용되는 SyndicationItemProperty 열거 값과 같습니다.

Ee373839.note(ko-kr,VS.100).gif참고:
특성 이름과 값은 대/소문자를 구분합니다. EntityType 요소나 하나 이상의 Property 요소에 특성을 적용할 수 있지만 둘 다에 적용할 수는 없습니다.

리플렉션 공급자를 사용하여 피드 사용자 지정

리플렉션 공급자를 사용하여 구현된 데이터 모델의 피드를 사용자 지정하려면 데이터 모델의 엔터티 형식을 나타내는 클래스에 EntityPropertyMappingAttribute 특성 인스턴스를 하나 이상 추가합니다. EntityPropertyMappingAttribute 클래스의 속성은 위 단원에 설명된 피드 사용자 지정 특성에 해당합니다. 다음은 두 속성에 모두 사용자 지정 피드 매핑을 정의하는 Order 형식의 선언 예제입니다.

Ee373839.note(ko-kr,VS.100).gif참고:
이 예제의 데이터 모델은 방법: 리플렉션 공급자를 사용하여 데이터 서비스 만들기(WCF Data Services) 항목에 정의되어 있습니다.

<EntityPropertyMappingAttribute("Customer", _
    SyndicationItemProperty.AuthorName, _
    SyndicationTextContentKind.Plaintext, True)> _
<EntityPropertyMapping("OrderId", _
    SyndicationItemProperty.Title, _
    SyndicationTextContentKind.Plaintext, False)> _
<DataServiceKeyAttribute("OrderId")> _
Public Class Order
[EntityPropertyMappingAttribute("Customer", 
    SyndicationItemProperty.AuthorName,
    SyndicationTextContentKind.Plaintext, true)]
[EntityPropertyMapping("OrderId", 
    SyndicationItemProperty.Title, 
    SyndicationTextContentKind.Plaintext, false)]
[DataServiceKeyAttribute("OrderId")]
public class Order

이러한 특성은 Orders 엔터티 집합에 대해 다음 사용자 지정 데이터 피드를 생성합니다. 이 사용자 지정 피드에서 OrderId 속성 값은 entrytitle 요소에만 표시되고, Customer 속성 값은 author 요소와 Customer 속성 요소에 모두 표시됩니다.

<entry xml:base="https://localhost:12345/OrderItems.svc/" 
       xmlns:d="https://schemas.microsoft.com/ado/2007/08/dataservices" 
       xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata" 
       xmlns="http://www.w3.org/2005/Atom">
  <id>https://localhost:12345/OrderItems.svc/Orders(0)</id>
  <title type="text">0</title>
  <updated>2009-07-25T21:11:11Z</updated>
  <author>
    <name>Peter Franken</name>
  </author>
  <link rel="edit" title="Order" href="Orders(0)" />
  <link rel="https://schemas.microsoft.com/ado/2007/08/dataservices/related/Items" 
        type="application/atom+xml;type=feed" title="Items" href="Orders(0)/Items" />
  <category term="CustomDataService.Order" 
            scheme="https://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
  <content type="application/xml">
    <m:properties>
      <d:Customer>Peter Franken</d:Customer>
    </m:properties>
  </content>
</entry>

자세한 내용은 방법: 리플렉션 공급자를 사용하여 피드 사용자 지정(WCF Data Services)을 참조하십시오.

사용자 지정 데이터 서비스 공급자를 사용하여 피드 사용자 지정

사용자 지정 데이터 서비스 공급자를 사용하여 정의된 데이터 모델의 피드 사용자 지정은 데이터 모델의 엔터티 형식을 나타내는 ResourceTypeAddEntityPropertyMappingAttribute를 호출하여 리소스 형식에 대해 정의됩니다. 자세한 내용은 사용자 지정 데이터 서비스 공급자(WCF Data Services)를 참조하십시오.

사용자 지정 피드 사용

응용 프로그램에서 OData 피드를 직접 사용하는 경우 반환된 피드의 모든 사용자 지정 요소와 특성을 처리할 수 있어야 합니다. 데이터 서비스 공급자에 관계없이 데이터 모델에 사용자 지정 피드를 구현한 경우 $metadata 끝점은 사용자 지정 피드 정보를 데이터 서비스에서 반환된 CSDL에 사용자 지정 피드 특성으로 반환합니다. 서비스 참조 추가 대화 상자나 datasvcutil.exe 도구를 사용하여 클라이언트 데이터 서비스 클래스를 생성하는 경우 사용자 지정 피드 특성이 사용되어 데이터 서비스 요청과 응답이 올바르게 처리되도록 합니다.

피드 사용자 지정 고려 사항

사용자 지정 피드 매핑을 정의할 때는 다음을 고려해야 합니다.

  • WCF Data Services 클라이언트는 공백만 포함된 경우 피드의 매핑된 요소를 비어 있는 것으로 처리합니다. 이로 인해 공백만 포함된 매핑된 요소는 클라이언트에서 동일한 공백을 사용하여 구체화되지 않습니다. 클라이언트에서 이 공백을 유지하려면 피드 매핑 특성에서 KeepInContext 값을 true로 설정해야 합니다.

버전 관리 요구 사항

피드 사용자 지정에 대한 OData 프로토콜 버전 관리 요구 사항은 다음과 같습니다.

  • 피드를 사용자 지정하는 경우 클라이언트와 데이터 서비스가 모두 OData 프로토콜 버전 2.0 이상을 지원해야 합니다.

자세한 내용은 여러 버전의 WCF Data Services 작업을 참조하십시오.

참고 항목

개념

리플렉션 공급자(WCF Data Services)
Entity Framework 공급자(WCF Data Services)