Share via


이진 데이터로 작업(WCF Data Services)

WCF Data Services 클라이언트 라이브러리를 사용하면 다음 방법 중 하나로 Open Data Protocol(OData) 피드에서 이진 데이터를 검색하고 업데이트할 수 있습니다.

  • 엔터티의 기본 형식 속성으로. 이 방법은 메모리에 쉽게 로드할 수 있는 작은 이진 데이터 개체로 작업하는 경우 권장됩니다. 이 경우 이진 속성은 데이터 모델에서 노출하는 엔터티 속성이며, 데이터 서비스는 이진 데이터를 응답 메시지에서 base-64 이진 인코딩 XML로 serialize합니다.

  • 별도의 이진 리소스 스트림으로. 이 방법은 사진, 비디오 또는 다른 형식의 이진 인코딩 데이터를 나타낼 수 있는 BLOB(Binary Large Object) 데이터에 액세스하고 변경하는 경우 권장됩니다.

WCF Data Services 는 OData 에 정의된 대로 HTTP를 사용하여 이진 데이터의 스트리밍을 구현합니다. 이 메커니즘에서 이진 데이터는 미디어 링크 항목이라고 하는 엔터티와 관련되어 있지만 별도로 존재하는 미디어 리소스로 처리됩니다. 자세한 내용은 스트리밍 공급자(WCF Data Services)를 참조하십시오.

Ee473426.Tip(ko-kr,VS.100).gif팁:
사진을 저장하는 OData 서비스에서 이전 이미지 파일을 다운로드하는 WPF(Windows Presentation Foundation) 클라이언트 응용 프로그램을 만드는 방법의 단계별 예제를 보려면 데이터 서비스 스트리밍 공급자 시리즈-2부: 클라이언트에서 미디어 리소스 스트림에 액세스 게시물을 참조하십시오. 블로그 게시물에 나오는 스트림 사진 데이터 서비스에 대한 샘플 코드를 다운로드하려면 MSDN 코드 갤러리(MSDN Code Gallery)의 스트리밍 사진 데이터 서비스 샘플을 참조하십시오.

엔터티 메타데이터

관련 미디어 리소스 스트림이 있는 엔터티는 미디어 링크 항목인 엔터티 형식에 적용된 HasStream 특성을 통해 데이터 서비스 메타데이터에 표시됩니다. 다음 예제에서 PhotoInfo 엔터티는 관련 미디어 리소스가 있는 미디어 링크 항목으로, HasStream 특성을 통해 표시됩니다.

<EntityType xmlns:m="https://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
            Name="PhotoInfo" m:HasStream="true">
  <Key>
    <PropertyRef Name="PhotoId" />
  </Key>
  <Property Name="PhotoId" Type="Int32" Nullable="false" 
            annotation:StoreGeneratedPattern="Identity" />
  <Property Name="FileName" Type="String" Nullable="false" />
  <Property Name="FileSize" Type="Int32" Nullable="true" />
  <Property Name="DateTaken" Type="DateTime" Nullable="true" />
  <Property Name="TakenBy" Type="String" Nullable="true" />
  <Property Name="DateAdded" Type="DateTime" Nullable="false" />
  <Property Name="Exposure" Type="PhotoData.Exposure" Nullable="false" />
  <Property Name="Dimensions" Type="PhotoData.Dimensions" Nullable="false" />
  <Property Name="DateModified" Type="DateTime" Nullable="false" />
  <Property Name="Comments" Type="String" MaxLength="Max" 
            FixedLength="false" Unicode="true" />
  <Property Name="ContentType" Type="String" MaxLength="50" FixedLength="false" Unicode="true" />
</EntityType>

이 항목의 나머지 예제에서는 미디어 리소스 스트림에 액세스하고 변경하는 방법을 보여 줍니다. WCF Data Services 클라이언트 라이브러리를 사용하여 .NET Framework 클라이언트 응용 프로그램에서 미디어 리소스 스트림을 사용하는 방법의 전체 예제는 클라이언트에서 미디어 리소스 스트림에 액세스 게시물을 참조하십시오.

이진 리소스 스트림 액세스

WCF Data Services 클라이언트 라이브러리에서는 OData 기반 데이터 서비스에서 이진 리소스 스트림에 액세스하는 방법을 제공합니다. 미디어 리소스를 다운로드할 때 미디어 리소스의 URI를 사용하거나 미디어 리소스 데이터 자체가 포함된 이진 스트림을 가져올 수 있습니다. 또한 미디어 리소스 데이터를 이진 스트림으로 업로드할 수도 있습니다.

Ee473426.Tip(ko-kr,VS.100).gif팁:
사진을 저장하는 OData 서비스에서 이전 이미지 파일을 다운로드하는 WPF(Windows Presentation Foundation) 클라이언트 응용 프로그램을 만드는 방법의 단계별 예제를 보려면 데이터 서비스 스트리밍 공급자 시리즈-2부: 클라이언트에서 미디어 리소스 스트림에 액세스 게시물을 참조하십시오. 블로그 게시물에 나오는 스트림 사진 데이터 서비스에 대한 샘플 코드를 다운로드하려면 MSDN 코드 갤러리(MSDN Code Gallery)의 스트리밍 사진 데이터 서비스 샘플을 참조하십시오.

이진 스트림의 URI 가져오기

이미지 및 기타 미디어 파일과 같은 특정 유형의 미디어 리소스를 검색할 때 이진 데이터 스트림 자체를 처리하는 것보다 응용 프로그램에 있는 미디어 리소스의 URI를 사용하는 것이 쉬운 경우가 많습니다. 특정 미디어 링크 항목과 연결된 리소스 스트림의 URI를 가져오려면 엔터티를 추적하는 DataServiceContext 인스턴스에서 GetReadStreamUri 메서드를 호출해야 합니다. 다음 예제에서는 GetReadStreamUri 메서드를 호출하여 클라이언트에서 새 이미지를 만드는 데 사용되는 미디어 리소스 스트림의 URI를 가져오는 방법을 보여 줍니다.

' Use the ReadStreamUri of the Media Resource for selected PhotoInfo object
' as the URI source of a new bitmap image.
photoImage.Source = New BitmapImage(context.GetReadStreamUri(currentPhoto))
// Use the ReadStreamUri of the Media Resource for selected PhotoInfo object
// as the URI source of a new bitmap image.
photoImage.Source = new BitmapImage(context.GetReadStreamUri(currentPhoto));

이진 리소스 스트림 다운로드

이진 리소스 스트림을 검색할 때 미디어 링크 항목을 추적하는 DataServiceContext 인스턴스에서 GetReadStream 메서드를 호출해야 합니다. 이 메서드는 리소스가 포함된 스트림에 대한 참조가 있는 DataServiceStreamResponse 개체를 반환하는 데이터 서비스에 요청을 보냅니다. 응용 프로그램에 Stream으로 이진 리소스가 필요한 경우 이 메서드를 사용하십시오. 다음 예제에서는 GetReadStream 메서드를 호출하여 클라이언트에서 새 이미지를 만드는 데 사용되는 스트림을 검색하는 방법을 보여 줍니다.

Ee473426.note(ko-kr,VS.100).gif참고:
이진 스트림이 포함된 응답 메시지의 Content-Length 헤더는 데이터 서비스에서 설정되지 않습니다. 이 값은 이진 데이터 스트림의 실제 길이를 나타내지 않을 수 있습니다.

미디어 리소스를 스트림으로 업로드

미디어 리소스를 삽입하거나 업데이트하려면 엔터티를 추적하는 DataServiceContext 인스턴스에서 SetSaveStream 메서드를 호출합니다. 이 메서드는 제공된 스트림에서 읽은 미디어 리소스가 포함된 요청을 데이터 서비스에 보냅니다. 다음 예제에서는 SetSaveStream 메서드를 호출하여 이미지를 데이터 서비스에 보내는 방법을 보여 줍니다.

' Set the file stream as the source of binary stream 
' to send to the data service. The Slug header is the file name and
' the content type is determined from the file extension. 
' A value of 'true' means that the stream is closed by the client when 
' the upload is complete.
context.SetSaveStream(photoEntity, imageStream, True, _
    photoEntity.ContentType, photoEntity.FileName)
// Set the file stream as the source of binary stream 
// to send to the data service. The Slug header is the file name and
// the content type is determined from the file extension. 
// A value of 'true' means that the stream is closed by the client when 
// the upload is complete.
context.SetSaveStream(photoEntity, imageStream, true,
    photoEntity.ContentType, photoEntity.FileName);

이 예제에서 SetSaveStream 메서드는 closeStream 매개 변수에 true 값을 제공하여 호출됩니다. 이렇게 하면 이진 데이터가 데이터 서비스로 업로드된 후 DataServiceContext가 스트림을 닫습니다.

Ee473426.note(ko-kr,VS.100).gif참고:
SetSaveStream을 호출하면 SaveChanges를 호출할 때까지 데이터 서비스로 스트림이 전송되지 않습니다.

참고 항목

개념

컨트롤에 데이터 바인딩(WCF Data Services)

기타 리소스

WCF Data Services 클라이언트 라이브러리