IDataServiceStreamProvider.GetWriteStream 方法

定义

返回流,该流由数据服务用于写入从客户端接收的属于指定实体的媒体资源的二进制数据。

public:
 System::IO::Stream ^ GetWriteStream(System::Object ^ entity, System::String ^ etag, Nullable<bool> checkETagForEquality, System::Data::Services::DataServiceOperationContext ^ operationContext);
public System.IO.Stream GetWriteStream (object entity, string etag, bool? checkETagForEquality, System.Data.Services.DataServiceOperationContext operationContext);
abstract member GetWriteStream : obj * string * Nullable<bool> * System.Data.Services.DataServiceOperationContext -> System.IO.Stream
Public Function GetWriteStream (entity As Object, etag As String, checkETagForEquality As Nullable(Of Boolean), operationContext As DataServiceOperationContext) As Stream

参数

entity
Object

作为具有相关媒体资源的媒体链接项的实体。

etag
String

作为发送到数据服务的 HTTP 请求的一部分发送的 eTag 值。

checkETagForEquality
Nullable<Boolean>

一个可以为 null 的 Boolean 值,该值指示客户端请求的并发检查的类型。

operationContext
DataServiceOperationContext

数据服务用来处理请求的 DataServiceOperationContext 实例。

返回

一个有效的 Stream,数据服务使用它来写入从客户端接收的二进制数据的内容。

注解

当与 GetWriteStream 关联的媒体资源正在处理插入或更新操作时,数据服务运行时将调用 entity 方法。

方法 GetWriteStream 不应返回 null 值。

operationContext 将作为自变量提供,因为此接口方法的实现器将需要来自 HTTP 请求标头的信息以便创建写入流。 当您实现此方法时,您必须根据需要执行并发性检查。 如果请求中包含 If-Match 或 If-None-Match 请求标头, etag 则 不会为 null。 在此情况下,这种方法必须执行适当的并发性检查。 如果通过并发性检查,则此方法应返回所请求的流。 如果并发性检查失败,则该方法应引发 DataServiceException 并显示适当的 HTTP 响应代码。

eTag 是 If-Match 或 If-None-Match 标头的值。

支持 的 checkETagForEquality 以下值:

  • true - 当 eTag 表示 If-Match 标头时。

  • false - 当 eTag 表示 If-None-Match 标头时。

  • null - 当请求中不存在 If-Match 或 If-None-Match 标头时。

当您实现此方法时,您不得设置 Content-Type 或 eTag HTTP 响应标头,因为它们由数据服务运行时设置。 您可以通过使用所提供的 operationContext 设置剩余 HTTP 响应标头。

当实现此方法时,您应该只设置成功响应所需的 operationContext 属性。 更改其他 operationContext 属性可能会损坏来自数据服务的响应。

当所有字节都成功都写入流时,数据服务运行时将关闭流。 如果在写入到流时出现错误,数据服务将对客户端生成错误响应。

当您实现 GetWriteStream 方法时,您应引发以下例外,如下所示:

例外类型 条件
ArgumentNullException entityoperationContextnull 时。
ArgumentException entity 不含二进制属性时。
DataServiceException 当不能返回有效的流时。

适用于