/// <inheritdoc/> public override async ValueTask<TResponse> InvokeBindingAsync<TRequest, TResponse>( string name, string operation, TRequest data, Dictionary<string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(name, nameof(name)); ArgumentVerifier.ThrowIfNullOrEmpty(operation, nameof(operation)); Autogenerated.InvokeBindingResponse response = await MakeInvokeBindingRequestAsync(name, operation, data, metadata, cancellationToken); return ConvertFromInvokeBindingResponse<TResponse>(response, this.jsonSerializerOptions); }
public override Task PublishEventAsync <TData>( string pubsubName, string topicName, TData data, Dictionary <string, string> metadata, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName)); ArgumentVerifier.ThrowIfNullOrEmpty(topicName, nameof(topicName)); ArgumentVerifier.ThrowIfNull(data, nameof(data)); ArgumentVerifier.ThrowIfNull(metadata, nameof(metadata)); return(MakePublishRequest(pubsubName, topicName, data, metadata, cancellationToken)); }
public override async ValueTask <TResponse> InvokeMethodAsync <TResponse>( string appId, string methodName, HTTPExtension httpExtension = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(appId, nameof(appId)); ArgumentVerifier.ThrowIfNullOrEmpty(methodName, nameof(methodName)); var response = await this.MakeInvokeRequestAsync(appId, methodName, null, httpExtension, cancellationToken); return(response.Data.Value.IsEmpty ? default : TypeConverters.FromAny <TResponse>(response.Data, this.jsonSerializerOptions)); }
/// <inheritdoc/> public override async Task <TValue> GetStateAsync <TValue>( string storeName, string key, ConsistencyMode?consistencyMode = default, IReadOnlyDictionary <string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(storeName, nameof(storeName)); ArgumentVerifier.ThrowIfNullOrEmpty(key, nameof(key)); var envelope = new Autogenerated.GetStateRequest() { StoreName = storeName, Key = key, }; if (metadata != null) { foreach (var kvp in metadata) { envelope.Metadata.Add(kvp.Key, kvp.Value); } } if (consistencyMode != null) { envelope.Consistency = GetStateConsistencyForConsistencyMode(consistencyMode.Value); } var options = CreateCallOptions(headers: null, cancellationToken); Autogenerated.GetStateResponse response; try { response = await client.GetStateAsync(envelope, options); } catch (RpcException ex) { throw new DaprException("State operation failed: the Dapr endpoint indicated a failure. See InnerException for details.", ex); } try { return(TypeConverters.FromJsonByteString <TValue>(response.Data, this.JsonSerializerOptions)); } catch (JsonException ex) { throw new DaprException("State operation failed: the state payload could not be deserialized. See InnerException for details.", ex); } }
public override Task <TValue> GetStateAsync <TValue>(string storeName, string key, ConsistencyMode?consistencyMode = default, IReadOnlyDictionary <string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(storeName, nameof(storeName)); ArgumentVerifier.ThrowIfNullOrEmpty(key, nameof(key)); if (this.State.TryGetValue(key, out var obj)) { return(Task.FromResult((TValue)obj)); } else { return(Task.FromResult(default(TValue))); } }
/// <inheritdoc/> public override Task PublishEventAsync <TData>( string pubsubName, string topicName, TData data, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName)); ArgumentVerifier.ThrowIfNullOrEmpty(topicName, nameof(topicName)); ArgumentVerifier.ThrowIfNull(data, nameof(data)); var content = TypeConverters.ToJsonByteString(data, this.JsonSerializerOptions); return(MakePublishRequest(pubsubName, topicName, content, null, cancellationToken)); }
/// <inheritdoc/> public override async Task InvokeBindingAsync <TRequest>( string bindingName, string operation, TRequest data, IReadOnlyDictionary <string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(bindingName, nameof(bindingName)); ArgumentVerifier.ThrowIfNullOrEmpty(operation, nameof(operation)); var bytes = TypeConverters.ToJsonByteString <TRequest>(data, this.jsonSerializerOptions); _ = await MakeInvokeBindingRequestAsync(bindingName, operation, bytes, metadata, cancellationToken); }
public override async ValueTask <TResponse> InvokeMethodAsync <TResponse>( string appId, string methodName, Dictionary <string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(appId, nameof(appId)); ArgumentVerifier.ThrowIfNullOrEmpty(methodName, nameof(methodName)); var response = await this.MakeInvokeRequestAsync(appId, methodName, null, metadata, cancellationToken); if (response.Data.Value.IsEmpty) { return(default);
public override async Task <IReadOnlyList <BulkStateItem> > GetBulkStateAsync(string storeName, IReadOnlyList <string> keys, int?parallelism, IReadOnlyDictionary <string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(storeName, nameof(storeName)); if (keys.Count == 0) { throw new ArgumentException("keys do not contain any elements"); } var envelope = new Autogenerated.GetBulkStateRequest() { StoreName = storeName, Parallelism = parallelism ?? default }; if (metadata != null) { foreach (var kvp in metadata) { envelope.Metadata.Add(kvp.Key, kvp.Value); } } envelope.Keys.AddRange(keys); var options = CreateCallOptions(headers: null, cancellationToken); Autogenerated.GetBulkStateResponse response; try { response = await client.GetBulkStateAsync(envelope, options); } catch (RpcException ex) { throw new DaprException("State operation failed: the Dapr endpoint indicated a failure. See InnerException for details.", ex); } var bulkResponse = new List <BulkStateItem>(); foreach (var item in response.Items) { bulkResponse.Add(new BulkStateItem(item.Key, item.Data.ToStringUtf8(), item.Etag)); } return(bulkResponse); }
public override async Task <TResponse> InvokeMethodAsync <TResponse>( string appId, string methodName, HttpInvocationOptions httpOptions = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(appId, nameof(appId)); ArgumentVerifier.ThrowIfNullOrEmpty(methodName, nameof(methodName)); Autogenerated.InvokeServiceRequest request; CallOptions callOptions; (request, callOptions) = this.MakeInvokeRequestAsync(appId, methodName, null, httpOptions, cancellationToken); var response = await client.InvokeServiceAsync(request, callOptions); return(response.Data.Value.IsEmpty ? default : TypeConverters.FromAny <TResponse>(response.Data, this.jsonSerializerOptions)); }
public override async Task InvokeMethodAsync <TRequest>( string appId, string methodName, TRequest data, HTTPExtension httpExtension = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(appId, nameof(appId)); ArgumentVerifier.ThrowIfNullOrEmpty(methodName, nameof(methodName)); Any serializedData = null; if (data != null) { serializedData = TypeConverters.ToAny(data, this.jsonSerializerOptions); } _ = await this.MakeInvokeRequestAsync(appId, methodName, serializedData, httpExtension, cancellationToken); }
public override async Task InvokeMethodAsync <TRequest>( string appId, string methodName, TRequest data, Dictionary <string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(appId, nameof(appId)); ArgumentVerifier.ThrowIfNullOrEmpty(methodName, nameof(methodName)); Any serializedData = null; if (data != null) { serializedData = ConvertToAnyAsync(data, this.jsonSerializerOptions); } _ = await this.MakeInvokeRequestAsync(appId, methodName, serializedData, metadata, cancellationToken); }
public override Task <IReadOnlyList <BulkStateItem> > GetBulkStateAsync(string storeName, IReadOnlyList <string> keys, int?parallelism, IReadOnlyDictionary <string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(storeName, nameof(storeName)); var response = new List <BulkStateItem>(); foreach (var key in keys) { if (this.State.TryGetValue(key, out var obj)) { response.Add(new BulkStateItem(key, Encoding.UTF8.GetString(obj as byte[]), "")); } else { response.Add(new BulkStateItem(key, "", "")); } } return(Task.FromResult <IReadOnlyList <BulkStateItem> >(response)); }
public override async ValueTask<TResponse> InvokeMethodAsync<TRequest, TResponse>( string appId, string methodName, TRequest data, HTTPExtension httpExtension = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(appId, nameof(appId)); ArgumentVerifier.ThrowIfNullOrEmpty(methodName, nameof(methodName)); var request = new InvocationRequest<TRequest> { AppId = appId, MethodName = methodName, Body = data, HttpExtension = httpExtension, }; var invokeResponse = await this.MakeInvokeRequestAsyncWithResponse<TRequest, TResponse>(request, false, cancellationToken); return invokeResponse.Body; }
public override async Task<InvocationResponse<byte[]>> InvokeMethodRawAsync( string appId, string methodName, byte[] data, HTTPExtension httpExtension = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(appId, nameof(appId)); ArgumentVerifier.ThrowIfNullOrEmpty(methodName, nameof(methodName)); var request = new InvocationRequest<byte[]> { AppId = appId, MethodName = methodName, Body = data, HttpExtension = httpExtension, }; var invokeResponse = await this.MakeInvokeRequestAsyncWithResponse<byte[], byte[]>(request, true, cancellationToken); return invokeResponse; }
/// <inheritdoc/> public override async Task <TResponse> InvokeBindingAsync <TRequest, TResponse>( string bindingName, string operation, TRequest data, IReadOnlyDictionary <string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(bindingName, nameof(bindingName)); ArgumentVerifier.ThrowIfNullOrEmpty(operation, nameof(operation)); var bytes = TypeConverters.ToJsonByteString <TRequest>(data, this.jsonSerializerOptions); var response = await MakeInvokeBindingRequestAsync(bindingName, operation, bytes, metadata, cancellationToken); try { return(TypeConverters.FromJsonByteString <TResponse>(response.Data, this.JsonSerializerOptions)); } catch (JsonException ex) { throw new DaprException("Binding operation failed: the response payload could not be deserialized. See InnerException for details.", ex); } }
public override HttpRequestMessage CreateInvokeMethodRequest(HttpMethod httpMethod, string appId, string methodName) { ArgumentVerifier.ThrowIfNull(httpMethod, nameof(httpMethod)); ArgumentVerifier.ThrowIfNullOrEmpty(appId, nameof(appId)); ArgumentVerifier.ThrowIfNull(methodName, nameof(methodName)); // Note about this, it's possible to construct invalid stuff using path navigation operators // like `../..`. But the principle of garbage in -> garbage out holds. // // This approach avoids some common pitfalls that could lead to undesired encoding. var path = $"/v1.0/invoke/{appId}/method/{methodName.TrimStart('/')}"; var request = new HttpRequestMessage(httpMethod, new Uri(this.httpEndpoint, path)) { Properties = { { AppIdKey, appId }, { MethodNameKey, methodName }, } }; return(request); }
/// <inheritdoc/> public override async ValueTask<TValue> GetStateAsync<TValue>( string storeName, string key, ConsistencyMode? consistencyMode = default, Dictionary<string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(storeName, nameof(storeName)); ArgumentVerifier.ThrowIfNullOrEmpty(key, nameof(key)); var getStateEnvelope = new Autogenerated.GetStateRequest() { StoreName = storeName, Key = key, }; if (metadata != null) { getStateEnvelope.Metadata.Add(metadata); } if (consistencyMode != null) { getStateEnvelope.Consistency = GetStateConsistencyForConsistencyMode(consistencyMode.Value); } var response = await this.MakeGrpcCallHandleError( options => client.GetStateAsync(getStateEnvelope, options), cancellationToken); if (response.Data.IsEmpty) { return default; } var responseData = response.Data.ToStringUtf8(); return JsonSerializer.Deserialize<TValue>(responseData, this.jsonSerializerOptions); }
public override async Task InvokeMethodAsync <TRequest>( string appId, string methodName, TRequest data, HttpInvocationOptions httpOptions = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(appId, nameof(appId)); ArgumentVerifier.ThrowIfNullOrEmpty(methodName, nameof(methodName)); Any serializedData = null; if (data != null) { serializedData = TypeConverters.ToAny(data, this.jsonSerializerOptions); } Autogenerated.InvokeServiceRequest request; CallOptions callOptions; (request, callOptions) = this.MakeInvokeRequestAsync(appId, methodName, serializedData, httpOptions, cancellationToken); await client.InvokeServiceAsync(request, callOptions); }
/// <inheritdoc/> public override async ValueTask <TValue> GetStateAsync <TValue>(string storeName, string key, ConsistencyMode?consistencyMode = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(storeName, nameof(storeName)); ArgumentVerifier.ThrowIfNullOrEmpty(key, nameof(key)); var getStateEnvelope = new Autogenerated.GetStateRequest() { StoreName = storeName, Key = key, }; if (consistencyMode != null) { getStateEnvelope.Consistency = GetStateConsistencyForConsistencyMode(consistencyMode.Value); } var response = await this.MakeGrpcCallHandleError( options => client.GetStateAsync(getStateEnvelope, options), cancellationToken); if (response.Data.IsEmpty) { return(default);
public override async Task <IReadOnlyList <BulkStateItem> > GetBulkStateAsync(string storeName, IReadOnlyList <string> keys, int?parallelism, IReadOnlyDictionary <string, string> metadata = default, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(storeName, nameof(storeName)); if (keys.Count == 0) { throw new ArgumentException("keys do not contain any elements"); } var getBulkStateEnvelope = new Autogenerated.GetBulkStateRequest() { StoreName = storeName, Parallelism = parallelism ?? default }; if (metadata != null) { foreach (var kvp in metadata) { getBulkStateEnvelope.Metadata.Add(kvp.Key, kvp.Value); } } getBulkStateEnvelope.Keys.AddRange(keys); var response = await this.MakeGrpcCallHandleError( options => client.GetBulkStateAsync(getBulkStateEnvelope, options), cancellationToken); var bulkResponse = new List <BulkStateItem>(); foreach (var item in response.Items) { bulkResponse.Add(new BulkStateItem(item.Key, item.Data.ToStringUtf8(), item.Etag)); } return(bulkResponse); }
/// <inheritdoc/> public override Task PublishEventAsync(string pubsubName, string topicName, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName)); ArgumentVerifier.ThrowIfNullOrEmpty(topicName, nameof(topicName)); return(MakePublishRequest(pubsubName, topicName, string.Empty, cancellationToken)); }
/// <summary> /// Overrides the default endpoint used by IDaprClient for conencting to Dapr runtime. /// </summary> /// <param name="daprEndpoint">Endpoint to use for making calls to Dapr runtime. /// Default endpoint used is http://127.0.0.1:DAPR_GRPC_PORT.</param> /// <returns>DaprClientBuilder instance.</returns> public DaprClientBuilder UseEndpoint(string daprEndpoint) { ArgumentVerifier.ThrowIfNullOrEmpty(daprEndpoint, nameof(daprEndpoint)); this.daprEndpoint = daprEndpoint; return(this); }
/// <inheritdoc/> public override Task PublishEventAsync <TContent>(string topicName, TContent content, CancellationToken cancellationToken = default) { ArgumentVerifier.ThrowIfNullOrEmpty(topicName, nameof(topicName)); ArgumentVerifier.ThrowIfNull(content, nameof(content)); return(MakePublishRequest(topicName, content, cancellationToken)); }
/// <summary> /// Overrides the gRPC endpoint used by <see cref="DaprClient" /> for communicating with the Dapr runtime. /// </summary> /// <param name="grpcEndpoint"> /// The URI endpoint to use for gRPC calls to the Dapr runtime. The default value will be /// <c>http://127.0.0.1:DAPR_GRPC_PORT</c> where <c>DAPR_GRPC_PORT</c> represents the value of the /// <c>DAPR_GRPC_PORT</c> environment variable. /// </param> /// <returns>The <see cref="DaprClientBuilder" /> instance.</returns> public DaprClientBuilder UseGrpcEndpoint(string grpcEndpoint) { ArgumentVerifier.ThrowIfNullOrEmpty(grpcEndpoint, nameof(grpcEndpoint)); this.GrpcEndpoint = grpcEndpoint; return(this); }
/// <summary> /// Overrides the HTTP endpoint used by <see cref="DaprClient" /> for communicating with the Dapr runtime. /// </summary> /// <param name="httpEndpoint"> /// The URI endpoint to use for HTTP calls to the Dapr runtime. The default value will be /// <c>http://127.0.0.1:DAPR_HTTP_PORT</c> where <c>DAPR_HTTP_PORT</c> represents the value of the /// <c>DAPR_HTTP_PORT</c> environment variable. /// </param> /// <returns>The <see cref="DaprClientBuilder" /> instance.</returns> public DaprClientBuilder UseHttpEndpoint(string httpEndpoint) { ArgumentVerifier.ThrowIfNullOrEmpty(httpEndpoint, nameof(httpEndpoint)); this.HttpEndpoint = httpEndpoint; return(this); }