如何使用 .net Sdk 版本 3 通过自定义序列化调用 CosmosDb 上的存储过程?
How can I call an stored procedure on CosmosDb with custom serialization with .net Sdk version 3?
我想做的是使用 cosmos .net Sdk 版本 3 调用具有特定 Json 序列化配置的 SP。
对于版本 2,我可以在调用中设置 RequestOptions JsonSerializerSettings 属性。
现在对于版本 3,我没有那个选项,我唯一的选项是在客户端对象级别设置自定义配置。
这是唯一可用的选项吗?
我必须为我需要的每个配置创建一个新客户端吗?
提前致谢
您可以拨打ExecuteStoredProcedureStreamAsync
。参考:https://github.com/Azure/azure-cosmos-dotnet-v3/blob/master/Microsoft.Azure.Cosmos/src/Resource/Scripts/Scripts.cs#L434
它的签名是:
public abstract Task<ResponseMessage> ExecuteStoredProcedureStreamAsync(
string storedProcedureId,
PartitionKey partitionKey,
dynamic[] parameters,
StoredProcedureRequestOptions requestOptions = null,
CancellationToken cancellationToken = default(CancellationToken));
这意味着它会给你一个 ResponseMessage
返回,你可以根据需要反序列化 Content
(Stream)。
如果要序列化Input,还有一个方法:
public abstract Task<ResponseMessage> ExecuteStoredProcedureStreamAsync(
string storedProcedureId,
Stream streamPayload,
PartitionKey partitionKey,
StoredProcedureRequestOptions requestOptions = null,
CancellationToken cancellationToken = default(CancellationToken));
其中 streamPayload
是 Stream
。示例用法:https://github.com/Azure/azure-cosmos-dotnet-v3/blob/fad3daf789458bc73256d4b26bdd1e4cfc83b2ad/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/StoredProcedureTests.cs#L474
MemoryStream streamPayload = new MemoryStream(Encoding.UTF8.GetBytes(@"[""one"",""two"",""three""]"));
ResponseMessage response = await this.scripts.ExecuteStoredProcedureStreamAsync(
storedProcedureId: sprocId,
streamPayload: streamPayload,
partitionKey: new Cosmos.PartitionKey(testPartitionId),
requestOptions: null,
cancellationToken: default(CancellationToken));
我想做的是使用 cosmos .net Sdk 版本 3 调用具有特定 Json 序列化配置的 SP。
对于版本 2,我可以在调用中设置 RequestOptions JsonSerializerSettings 属性。
现在对于版本 3,我没有那个选项,我唯一的选项是在客户端对象级别设置自定义配置。
这是唯一可用的选项吗? 我必须为我需要的每个配置创建一个新客户端吗?
提前致谢
您可以拨打ExecuteStoredProcedureStreamAsync
。参考:https://github.com/Azure/azure-cosmos-dotnet-v3/blob/master/Microsoft.Azure.Cosmos/src/Resource/Scripts/Scripts.cs#L434
它的签名是:
public abstract Task<ResponseMessage> ExecuteStoredProcedureStreamAsync(
string storedProcedureId,
PartitionKey partitionKey,
dynamic[] parameters,
StoredProcedureRequestOptions requestOptions = null,
CancellationToken cancellationToken = default(CancellationToken));
这意味着它会给你一个 ResponseMessage
返回,你可以根据需要反序列化 Content
(Stream)。
如果要序列化Input,还有一个方法:
public abstract Task<ResponseMessage> ExecuteStoredProcedureStreamAsync(
string storedProcedureId,
Stream streamPayload,
PartitionKey partitionKey,
StoredProcedureRequestOptions requestOptions = null,
CancellationToken cancellationToken = default(CancellationToken));
其中 streamPayload
是 Stream
。示例用法:https://github.com/Azure/azure-cosmos-dotnet-v3/blob/fad3daf789458bc73256d4b26bdd1e4cfc83b2ad/Microsoft.Azure.Cosmos/tests/Microsoft.Azure.Cosmos.EmulatorTests/StoredProcedureTests.cs#L474
MemoryStream streamPayload = new MemoryStream(Encoding.UTF8.GetBytes(@"[""one"",""two"",""three""]"));
ResponseMessage response = await this.scripts.ExecuteStoredProcedureStreamAsync(
storedProcedureId: sprocId,
streamPayload: streamPayload,
partitionKey: new Cosmos.PartitionKey(testPartitionId),
requestOptions: null,
cancellationToken: default(CancellationToken));