diff --git a/src/compiler/csharp_generator.cc b/src/compiler/csharp_generator.cc
index a45408a4cb8..d7ba4f2636a 100644
--- a/src/compiler/csharp_generator.cc
+++ b/src/compiler/csharp_generator.cc
@@ -437,8 +437,8 @@ void GenerateClientStub(Printer* out, const ServiceDescriptor* service,
"/// The channel to use to make remote "
"calls.\n",
"servicename", GetServiceClassName(service));
- out->Print("public $name$(grpc::Channel channel) : base(channel)\n", "name",
- GetClientClassName(service));
+ out->Print("public $name$(grpc::ChannelBase channel) : base(channel)\n",
+ "name", GetClientClassName(service));
out->Print("{\n");
out->Print("}\n");
}
diff --git a/src/csharp/Grpc.Core.Api/ChannelBase.cs b/src/csharp/Grpc.Core.Api/ChannelBase.cs
new file mode 100644
index 00000000000..54546300e81
--- /dev/null
+++ b/src/csharp/Grpc.Core.Api/ChannelBase.cs
@@ -0,0 +1,52 @@
+#region Copyright notice and license
+
+// Copyright 2019 The gRPC Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#endregion
+
+using System;
+using Grpc.Core.Utils;
+
+namespace Grpc.Core
+{
+ ///
+ /// Base class for gRPC channel. Channels are an abstraction of long-lived connections to remote servers.
+ ///
+ public abstract class ChannelBase
+ {
+ private readonly string target;
+
+ ///
+ /// Initializes a new instance of class that connects to a specific host.
+ ///
+ /// Target of the channel.
+ protected ChannelBase(string target)
+ {
+ this.target = GrpcPreconditions.CheckNotNull(target, nameof(target));
+ }
+
+ /// The original target used to create the channel.
+ public string Target
+ {
+ get { return this.target; }
+ }
+
+ ///
+ /// Create a new for the channel.
+ ///
+ /// A new .
+ public abstract CallInvoker CreateCallInvoker();
+ }
+}
diff --git a/src/csharp/Grpc.Core/ClientBase.cs b/src/csharp/Grpc.Core.Api/ClientBase.cs
similarity index 98%
rename from src/csharp/Grpc.Core/ClientBase.cs
rename to src/csharp/Grpc.Core.Api/ClientBase.cs
index 05edce7467d..243c35e20c1 100644
--- a/src/csharp/Grpc.Core/ClientBase.cs
+++ b/src/csharp/Grpc.Core.Api/ClientBase.cs
@@ -51,7 +51,7 @@ namespace Grpc.Core
/// Initializes a new instance of ClientBase class.
///
/// The channel to use for remote call invocation.
- public ClientBase(Channel channel) : base(channel)
+ public ClientBase(ChannelBase channel) : base(channel)
{
}
@@ -113,7 +113,7 @@ namespace Grpc.Core
/// Initializes a new instance of ClientBase class.
///
/// The channel to use for remote call invocation.
- public ClientBase(Channel channel) : this(new DefaultCallInvoker(channel))
+ public ClientBase(ChannelBase channel) : this(channel.CreateCallInvoker())
{
}
diff --git a/src/csharp/Grpc.Core.Api/Internal/UnimplementedCallInvoker.cs b/src/csharp/Grpc.Core.Api/Internal/UnimplementedCallInvoker.cs
new file mode 100644
index 00000000000..c7be74ecf30
--- /dev/null
+++ b/src/csharp/Grpc.Core.Api/Internal/UnimplementedCallInvoker.cs
@@ -0,0 +1,60 @@
+#region Copyright notice and license
+
+// Copyright 2015-2016 gRPC authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#endregion
+
+using System;
+using System.Threading.Tasks;
+using Grpc.Core;
+using Grpc.Core.Utils;
+
+namespace Grpc.Core.Internal
+{
+ ///
+ /// Call invoker that throws NotImplementedException for all requests.
+ ///
+ internal class UnimplementedCallInvoker : CallInvoker
+ {
+ public UnimplementedCallInvoker()
+ {
+ }
+
+ public override TResponse BlockingUnaryCall(Method method, string host, CallOptions options, TRequest request)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override AsyncUnaryCall AsyncUnaryCall(Method method, string host, CallOptions options, TRequest request)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override AsyncServerStreamingCall AsyncServerStreamingCall(Method method, string host, CallOptions options, TRequest request)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override AsyncClientStreamingCall AsyncClientStreamingCall(Method method, string host, CallOptions options)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override AsyncDuplexStreamingCall AsyncDuplexStreamingCall(Method method, string host, CallOptions options)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Core.Api/LiteClientBase.cs b/src/csharp/Grpc.Core.Api/LiteClientBase.cs
index c3215f016a0..132f10a912f 100644
--- a/src/csharp/Grpc.Core.Api/LiteClientBase.cs
+++ b/src/csharp/Grpc.Core.Api/LiteClientBase.cs
@@ -17,6 +17,7 @@
#endregion
using System;
+using Grpc.Core.Internal;
using Grpc.Core.Utils;
namespace Grpc.Core
@@ -58,40 +59,5 @@ namespace Grpc.Core
{
get { return this.callInvoker; }
}
-
- ///
- /// Call invoker that throws NotImplementedException for all requests.
- ///
- private class UnimplementedCallInvoker : CallInvoker
- {
- public UnimplementedCallInvoker()
- {
- }
-
- public override TResponse BlockingUnaryCall(Method method, string host, CallOptions options, TRequest request)
- {
- throw new NotImplementedException();
- }
-
- public override AsyncUnaryCall AsyncUnaryCall(Method method, string host, CallOptions options, TRequest request)
- {
- throw new NotImplementedException();
- }
-
- public override AsyncServerStreamingCall AsyncServerStreamingCall(Method method, string host, CallOptions options, TRequest request)
- {
- throw new NotImplementedException();
- }
-
- public override AsyncClientStreamingCall AsyncClientStreamingCall(Method method, string host, CallOptions options)
- {
- throw new NotImplementedException();
- }
-
- public override AsyncDuplexStreamingCall AsyncDuplexStreamingCall(Method method, string host, CallOptions options)
- {
- throw new NotImplementedException();
- }
- }
}
}
diff --git a/src/csharp/Grpc.Core/Channel.cs b/src/csharp/Grpc.Core/Channel.cs
index 97f79b0fb4f..fb58c077c70 100644
--- a/src/csharp/Grpc.Core/Channel.cs
+++ b/src/csharp/Grpc.Core/Channel.cs
@@ -30,7 +30,7 @@ namespace Grpc.Core
/// More client objects can reuse the same channel. Creating a channel is an expensive operation compared to invoking
/// a remote call so in general you should reuse a single channel for as many calls as possible.
///
- public class Channel
+ public class Channel : ChannelBase
{
static readonly ILogger Logger = GrpcEnvironment.Logger.ForType();
@@ -38,7 +38,6 @@ namespace Grpc.Core
readonly AtomicCounter activeCallCounter = new AtomicCounter();
readonly CancellationTokenSource shutdownTokenSource = new CancellationTokenSource();
- readonly string target;
readonly GrpcEnvironment environment;
readonly CompletionQueueSafeHandle completionQueue;
readonly ChannelSafeHandle handle;
@@ -64,9 +63,8 @@ namespace Grpc.Core
/// Target of the channel.
/// Credentials to secure the channel.
/// Channel options.
- public Channel(string target, ChannelCredentials credentials, IEnumerable options)
+ public Channel(string target, ChannelCredentials credentials, IEnumerable options) : base(target)
{
- this.target = GrpcPreconditions.CheckNotNull(target, "target");
this.options = CreateOptionsDictionary(options);
EnsureUserAgentChannelOption(this.options);
this.environment = GrpcEnvironment.AddRef();
@@ -179,15 +177,6 @@ namespace Grpc.Core
}
}
- /// The original target used to create the channel.
- public string Target
- {
- get
- {
- return this.target;
- }
- }
-
///
/// Returns a token that gets cancelled once ShutdownAsync is invoked.
///
@@ -257,6 +246,15 @@ namespace Grpc.Core
await GrpcEnvironment.ReleaseAsync().ConfigureAwait(false);
}
+ ///
+ /// Create a new for the channel.
+ ///
+ /// A new .
+ public override CallInvoker CreateCallInvoker()
+ {
+ return new DefaultCallInvoker(this);
+ }
+
internal ChannelSafeHandle Handle
{
get
diff --git a/src/csharp/Grpc.Core/ForwardedTypes.cs b/src/csharp/Grpc.Core/ForwardedTypes.cs
index fb99cfc018d..ad30814eb70 100644
--- a/src/csharp/Grpc.Core/ForwardedTypes.cs
+++ b/src/csharp/Grpc.Core/ForwardedTypes.cs
@@ -38,6 +38,8 @@ using Grpc.Core.Utils;
[assembly:TypeForwardedToAttribute(typeof(CallInvoker))]
[assembly:TypeForwardedToAttribute(typeof(CallInvokerExtensions))]
[assembly:TypeForwardedToAttribute(typeof(CallOptions))]
+[assembly:TypeForwardedToAttribute(typeof(ClientBase))]
+[assembly:TypeForwardedToAttribute(typeof(ClientBase<>))]
[assembly:TypeForwardedToAttribute(typeof(ClientInterceptorContext<,>))]
[assembly:TypeForwardedToAttribute(typeof(ContextPropagationOptions))]
[assembly:TypeForwardedToAttribute(typeof(ContextPropagationToken))]
diff --git a/src/csharp/Grpc.Examples/MathGrpc.cs b/src/csharp/Grpc.Examples/MathGrpc.cs
index fab64354411..5186d2f6dae 100644
--- a/src/csharp/Grpc.Examples/MathGrpc.cs
+++ b/src/csharp/Grpc.Examples/MathGrpc.cs
@@ -130,7 +130,7 @@ namespace Math {
{
/// Creates a new client for Math
/// The channel to use to make remote calls.
- public MathClient(grpc::Channel channel) : base(channel)
+ public MathClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for Math that uses a custom CallInvoker.
diff --git a/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj b/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
index 223c9985ecd..05f7320ad57 100755
--- a/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
+++ b/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
@@ -1,4 +1,4 @@
-
+
@@ -10,6 +10,7 @@
+
diff --git a/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj b/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj
index 7e8a8a7de87..391aee81cbc 100755
--- a/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj
+++ b/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj
@@ -1,4 +1,4 @@
-
+
@@ -26,7 +26,7 @@
-
+
None
diff --git a/src/csharp/Grpc.HealthCheck/HealthGrpc.cs b/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
index 7137b907274..d5051f3b05a 100644
--- a/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
+++ b/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
@@ -102,7 +102,7 @@ namespace Grpc.Health.V1 {
{
/// Creates a new client for Health
/// The channel to use to make remote calls.
- public HealthClient(grpc::Channel channel) : base(channel)
+ public HealthClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for Health that uses a custom CallInvoker.
diff --git a/src/csharp/Grpc.IntegrationTesting/BenchmarkServiceGrpc.cs b/src/csharp/Grpc.IntegrationTesting/BenchmarkServiceGrpc.cs
index 5b37b144f2a..4a608be318c 100644
--- a/src/csharp/Grpc.IntegrationTesting/BenchmarkServiceGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/BenchmarkServiceGrpc.cs
@@ -148,7 +148,7 @@ namespace Grpc.Testing {
{
/// Creates a new client for BenchmarkService
/// The channel to use to make remote calls.
- public BenchmarkServiceClient(grpc::Channel channel) : base(channel)
+ public BenchmarkServiceClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for BenchmarkService that uses a custom CallInvoker.
diff --git a/src/csharp/Grpc.IntegrationTesting/EmptyServiceGrpc.cs b/src/csharp/Grpc.IntegrationTesting/EmptyServiceGrpc.cs
index 50c6e159206..30fd6dec542 100644
--- a/src/csharp/Grpc.IntegrationTesting/EmptyServiceGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/EmptyServiceGrpc.cs
@@ -49,7 +49,7 @@ namespace Grpc.Testing {
{
/// Creates a new client for EmptyService
/// The channel to use to make remote calls.
- public EmptyServiceClient(grpc::Channel channel) : base(channel)
+ public EmptyServiceClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for EmptyService that uses a custom CallInvoker.
diff --git a/src/csharp/Grpc.IntegrationTesting/Messages.cs b/src/csharp/Grpc.IntegrationTesting/Messages.cs
index 3b6c0010222..5c5042b75b6 100644
--- a/src/csharp/Grpc.IntegrationTesting/Messages.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Messages.cs
@@ -28,41 +28,42 @@ namespace Grpc.Testing {
"LnRlc3RpbmciGgoJQm9vbFZhbHVlEg0KBXZhbHVlGAEgASgIIkAKB1BheWxv",
"YWQSJwoEdHlwZRgBIAEoDjIZLmdycGMudGVzdGluZy5QYXlsb2FkVHlwZRIM",
"CgRib2R5GAIgASgMIisKCkVjaG9TdGF0dXMSDAoEY29kZRgBIAEoBRIPCgdt",
- "ZXNzYWdlGAIgASgJIs4CCg1TaW1wbGVSZXF1ZXN0EjAKDXJlc3BvbnNlX3R5",
+ "ZXNzYWdlGAIgASgJIuYCCg1TaW1wbGVSZXF1ZXN0EjAKDXJlc3BvbnNlX3R5",
"cGUYASABKA4yGS5ncnBjLnRlc3RpbmcuUGF5bG9hZFR5cGUSFQoNcmVzcG9u",
"c2Vfc2l6ZRgCIAEoBRImCgdwYXlsb2FkGAMgASgLMhUuZ3JwYy50ZXN0aW5n",
"LlBheWxvYWQSFQoNZmlsbF91c2VybmFtZRgEIAEoCBIYChBmaWxsX29hdXRo",
"X3Njb3BlGAUgASgIEjQKE3Jlc3BvbnNlX2NvbXByZXNzZWQYBiABKAsyFy5n",
"cnBjLnRlc3RpbmcuQm9vbFZhbHVlEjEKD3Jlc3BvbnNlX3N0YXR1cxgHIAEo",
"CzIYLmdycGMudGVzdGluZy5FY2hvU3RhdHVzEjIKEWV4cGVjdF9jb21wcmVz",
- "c2VkGAggASgLMhcuZ3JwYy50ZXN0aW5nLkJvb2xWYWx1ZSJfCg5TaW1wbGVS",
- "ZXNwb25zZRImCgdwYXlsb2FkGAEgASgLMhUuZ3JwYy50ZXN0aW5nLlBheWxv",
- "YWQSEAoIdXNlcm5hbWUYAiABKAkSEwoLb2F1dGhfc2NvcGUYAyABKAkidwoZ",
- "U3RyZWFtaW5nSW5wdXRDYWxsUmVxdWVzdBImCgdwYXlsb2FkGAEgASgLMhUu",
- "Z3JwYy50ZXN0aW5nLlBheWxvYWQSMgoRZXhwZWN0X2NvbXByZXNzZWQYAiAB",
- "KAsyFy5ncnBjLnRlc3RpbmcuQm9vbFZhbHVlIj0KGlN0cmVhbWluZ0lucHV0",
- "Q2FsbFJlc3BvbnNlEh8KF2FnZ3JlZ2F0ZWRfcGF5bG9hZF9zaXplGAEgASgF",
- "ImQKElJlc3BvbnNlUGFyYW1ldGVycxIMCgRzaXplGAEgASgFEhMKC2ludGVy",
- "dmFsX3VzGAIgASgFEisKCmNvbXByZXNzZWQYAyABKAsyFy5ncnBjLnRlc3Rp",
- "bmcuQm9vbFZhbHVlIugBChpTdHJlYW1pbmdPdXRwdXRDYWxsUmVxdWVzdBIw",
- "Cg1yZXNwb25zZV90eXBlGAEgASgOMhkuZ3JwYy50ZXN0aW5nLlBheWxvYWRU",
- "eXBlEj0KE3Jlc3BvbnNlX3BhcmFtZXRlcnMYAiADKAsyIC5ncnBjLnRlc3Rp",
- "bmcuUmVzcG9uc2VQYXJhbWV0ZXJzEiYKB3BheWxvYWQYAyABKAsyFS5ncnBj",
- "LnRlc3RpbmcuUGF5bG9hZBIxCg9yZXNwb25zZV9zdGF0dXMYByABKAsyGC5n",
- "cnBjLnRlc3RpbmcuRWNob1N0YXR1cyJFChtTdHJlYW1pbmdPdXRwdXRDYWxs",
- "UmVzcG9uc2USJgoHcGF5bG9hZBgBIAEoCzIVLmdycGMudGVzdGluZy5QYXls",
- "b2FkIjMKD1JlY29ubmVjdFBhcmFtcxIgChhtYXhfcmVjb25uZWN0X2JhY2tv",
- "ZmZfbXMYASABKAUiMwoNUmVjb25uZWN0SW5mbxIOCgZwYXNzZWQYASABKAgS",
- "EgoKYmFja29mZl9tcxgCIAMoBSofCgtQYXlsb2FkVHlwZRIQCgxDT01QUkVT",
- "U0FCTEUQAGIGcHJvdG8z"));
+ "c2VkGAggASgLMhcuZ3JwYy50ZXN0aW5nLkJvb2xWYWx1ZRIWCg5maWxsX3Nl",
+ "cnZlcl9pZBgJIAEoCCJyCg5TaW1wbGVSZXNwb25zZRImCgdwYXlsb2FkGAEg",
+ "ASgLMhUuZ3JwYy50ZXN0aW5nLlBheWxvYWQSEAoIdXNlcm5hbWUYAiABKAkS",
+ "EwoLb2F1dGhfc2NvcGUYAyABKAkSEQoJc2VydmVyX2lkGAQgASgJIncKGVN0",
+ "cmVhbWluZ0lucHV0Q2FsbFJlcXVlc3QSJgoHcGF5bG9hZBgBIAEoCzIVLmdy",
+ "cGMudGVzdGluZy5QYXlsb2FkEjIKEWV4cGVjdF9jb21wcmVzc2VkGAIgASgL",
+ "MhcuZ3JwYy50ZXN0aW5nLkJvb2xWYWx1ZSI9ChpTdHJlYW1pbmdJbnB1dENh",
+ "bGxSZXNwb25zZRIfChdhZ2dyZWdhdGVkX3BheWxvYWRfc2l6ZRgBIAEoBSJk",
+ "ChJSZXNwb25zZVBhcmFtZXRlcnMSDAoEc2l6ZRgBIAEoBRITCgtpbnRlcnZh",
+ "bF91cxgCIAEoBRIrCgpjb21wcmVzc2VkGAMgASgLMhcuZ3JwYy50ZXN0aW5n",
+ "LkJvb2xWYWx1ZSLoAQoaU3RyZWFtaW5nT3V0cHV0Q2FsbFJlcXVlc3QSMAoN",
+ "cmVzcG9uc2VfdHlwZRgBIAEoDjIZLmdycGMudGVzdGluZy5QYXlsb2FkVHlw",
+ "ZRI9ChNyZXNwb25zZV9wYXJhbWV0ZXJzGAIgAygLMiAuZ3JwYy50ZXN0aW5n",
+ "LlJlc3BvbnNlUGFyYW1ldGVycxImCgdwYXlsb2FkGAMgASgLMhUuZ3JwYy50",
+ "ZXN0aW5nLlBheWxvYWQSMQoPcmVzcG9uc2Vfc3RhdHVzGAcgASgLMhguZ3Jw",
+ "Yy50ZXN0aW5nLkVjaG9TdGF0dXMiRQobU3RyZWFtaW5nT3V0cHV0Q2FsbFJl",
+ "c3BvbnNlEiYKB3BheWxvYWQYASABKAsyFS5ncnBjLnRlc3RpbmcuUGF5bG9h",
+ "ZCIzCg9SZWNvbm5lY3RQYXJhbXMSIAoYbWF4X3JlY29ubmVjdF9iYWNrb2Zm",
+ "X21zGAEgASgFIjMKDVJlY29ubmVjdEluZm8SDgoGcGFzc2VkGAEgASgIEhIK",
+ "CmJhY2tvZmZfbXMYAiADKAUqHwoLUGF5bG9hZFR5cGUSEAoMQ09NUFJFU1NB",
+ "QkxFEABiBnByb3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Grpc.Testing.PayloadType), }, new pbr::GeneratedClrTypeInfo[] {
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.BoolValue), global::Grpc.Testing.BoolValue.Parser, new[]{ "Value" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.Payload), global::Grpc.Testing.Payload.Parser, new[]{ "Type", "Body" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.EchoStatus), global::Grpc.Testing.EchoStatus.Parser, new[]{ "Code", "Message" }, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.SimpleRequest), global::Grpc.Testing.SimpleRequest.Parser, new[]{ "ResponseType", "ResponseSize", "Payload", "FillUsername", "FillOauthScope", "ResponseCompressed", "ResponseStatus", "ExpectCompressed" }, null, null, null),
- new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.SimpleResponse), global::Grpc.Testing.SimpleResponse.Parser, new[]{ "Payload", "Username", "OauthScope" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.SimpleRequest), global::Grpc.Testing.SimpleRequest.Parser, new[]{ "ResponseType", "ResponseSize", "Payload", "FillUsername", "FillOauthScope", "ResponseCompressed", "ResponseStatus", "ExpectCompressed", "FillServerId" }, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.SimpleResponse), global::Grpc.Testing.SimpleResponse.Parser, new[]{ "Payload", "Username", "OauthScope", "ServerId" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.StreamingInputCallRequest), global::Grpc.Testing.StreamingInputCallRequest.Parser, new[]{ "Payload", "ExpectCompressed" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.StreamingInputCallResponse), global::Grpc.Testing.StreamingInputCallResponse.Parser, new[]{ "AggregatedPayloadSize" }, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ResponseParameters), global::Grpc.Testing.ResponseParameters.Parser, new[]{ "Size", "IntervalUs", "Compressed" }, null, null, null),
@@ -589,6 +590,7 @@ namespace Grpc.Testing {
responseCompressed_ = other.responseCompressed_ != null ? other.responseCompressed_.Clone() : null;
responseStatus_ = other.responseStatus_ != null ? other.responseStatus_.Clone() : null;
expectCompressed_ = other.expectCompressed_ != null ? other.expectCompressed_.Clone() : null;
+ fillServerId_ = other.fillServerId_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@@ -713,6 +715,20 @@ namespace Grpc.Testing {
}
}
+ /// Field number for the "fill_server_id" field.
+ public const int FillServerIdFieldNumber = 9;
+ private bool fillServerId_;
+ ///
+ /// Whether SimpleResponse should include server_id.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool FillServerId {
+ get { return fillServerId_; }
+ set {
+ fillServerId_ = value;
+ }
+ }
+
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as SimpleRequest);
@@ -734,6 +750,7 @@ namespace Grpc.Testing {
if (!object.Equals(ResponseCompressed, other.ResponseCompressed)) return false;
if (!object.Equals(ResponseStatus, other.ResponseStatus)) return false;
if (!object.Equals(ExpectCompressed, other.ExpectCompressed)) return false;
+ if (FillServerId != other.FillServerId) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -748,6 +765,7 @@ namespace Grpc.Testing {
if (responseCompressed_ != null) hash ^= ResponseCompressed.GetHashCode();
if (responseStatus_ != null) hash ^= ResponseStatus.GetHashCode();
if (expectCompressed_ != null) hash ^= ExpectCompressed.GetHashCode();
+ if (FillServerId != false) hash ^= FillServerId.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@@ -793,6 +811,10 @@ namespace Grpc.Testing {
output.WriteRawTag(66);
output.WriteMessage(ExpectCompressed);
}
+ if (FillServerId != false) {
+ output.WriteRawTag(72);
+ output.WriteBool(FillServerId);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@@ -825,6 +847,9 @@ namespace Grpc.Testing {
if (expectCompressed_ != null) {
size += 1 + pb::CodedOutputStream.ComputeMessageSize(ExpectCompressed);
}
+ if (FillServerId != false) {
+ size += 1 + 1;
+ }
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@@ -872,6 +897,9 @@ namespace Grpc.Testing {
}
ExpectCompressed.MergeFrom(other.ExpectCompressed);
}
+ if (other.FillServerId != false) {
+ FillServerId = other.FillServerId;
+ }
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@@ -927,6 +955,10 @@ namespace Grpc.Testing {
input.ReadMessage(ExpectCompressed);
break;
}
+ case 72: {
+ FillServerId = input.ReadBool();
+ break;
+ }
}
}
}
@@ -964,6 +996,7 @@ namespace Grpc.Testing {
payload_ = other.payload_ != null ? other.payload_.Clone() : null;
username_ = other.username_;
oauthScope_ = other.oauthScope_;
+ serverId_ = other.serverId_;
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
}
@@ -1015,6 +1048,21 @@ namespace Grpc.Testing {
}
}
+ /// Field number for the "server_id" field.
+ public const int ServerIdFieldNumber = 4;
+ private string serverId_ = "";
+ ///
+ /// Server ID. This must be unique among different server instances,
+ /// but the same across all RPC's made to a particular server instance.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string ServerId {
+ get { return serverId_; }
+ set {
+ serverId_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
public override bool Equals(object other) {
return Equals(other as SimpleResponse);
@@ -1031,6 +1079,7 @@ namespace Grpc.Testing {
if (!object.Equals(Payload, other.Payload)) return false;
if (Username != other.Username) return false;
if (OauthScope != other.OauthScope) return false;
+ if (ServerId != other.ServerId) return false;
return Equals(_unknownFields, other._unknownFields);
}
@@ -1040,6 +1089,7 @@ namespace Grpc.Testing {
if (payload_ != null) hash ^= Payload.GetHashCode();
if (Username.Length != 0) hash ^= Username.GetHashCode();
if (OauthScope.Length != 0) hash ^= OauthScope.GetHashCode();
+ if (ServerId.Length != 0) hash ^= ServerId.GetHashCode();
if (_unknownFields != null) {
hash ^= _unknownFields.GetHashCode();
}
@@ -1065,6 +1115,10 @@ namespace Grpc.Testing {
output.WriteRawTag(26);
output.WriteString(OauthScope);
}
+ if (ServerId.Length != 0) {
+ output.WriteRawTag(34);
+ output.WriteString(ServerId);
+ }
if (_unknownFields != null) {
_unknownFields.WriteTo(output);
}
@@ -1082,6 +1136,9 @@ namespace Grpc.Testing {
if (OauthScope.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(OauthScope);
}
+ if (ServerId.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(ServerId);
+ }
if (_unknownFields != null) {
size += _unknownFields.CalculateSize();
}
@@ -1105,6 +1162,9 @@ namespace Grpc.Testing {
if (other.OauthScope.Length != 0) {
OauthScope = other.OauthScope;
}
+ if (other.ServerId.Length != 0) {
+ ServerId = other.ServerId;
+ }
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
}
@@ -1131,6 +1191,10 @@ namespace Grpc.Testing {
OauthScope = input.ReadString();
break;
}
+ case 34: {
+ ServerId = input.ReadString();
+ break;
+ }
}
}
}
diff --git a/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs b/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs
index 9b11e990d2d..fbc3690d2ac 100644
--- a/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/MetricsGrpc.cs
@@ -92,7 +92,7 @@ namespace Grpc.Testing {
{
/// Creates a new client for MetricsService
/// The channel to use to make remote calls.
- public MetricsServiceClient(grpc::Channel channel) : base(channel)
+ public MetricsServiceClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for MetricsService that uses a custom CallInvoker.
diff --git a/src/csharp/Grpc.IntegrationTesting/ReportQpsScenarioServiceGrpc.cs b/src/csharp/Grpc.IntegrationTesting/ReportQpsScenarioServiceGrpc.cs
index 1a505ebc764..e35c7c39fd5 100644
--- a/src/csharp/Grpc.IntegrationTesting/ReportQpsScenarioServiceGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/ReportQpsScenarioServiceGrpc.cs
@@ -67,7 +67,7 @@ namespace Grpc.Testing {
{
/// Creates a new client for ReportQpsScenarioService
/// The channel to use to make remote calls.
- public ReportQpsScenarioServiceClient(grpc::Channel channel) : base(channel)
+ public ReportQpsScenarioServiceClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for ReportQpsScenarioService that uses a custom CallInvoker.
diff --git a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
index e7b93094c65..f358a6d175c 100644
--- a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
@@ -216,7 +216,7 @@ namespace Grpc.Testing {
{
/// Creates a new client for TestService
/// The channel to use to make remote calls.
- public TestServiceClient(grpc::Channel channel) : base(channel)
+ public TestServiceClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for TestService that uses a custom CallInvoker.
@@ -602,7 +602,7 @@ namespace Grpc.Testing {
{
/// Creates a new client for UnimplementedService
/// The channel to use to make remote calls.
- public UnimplementedServiceClient(grpc::Channel channel) : base(channel)
+ public UnimplementedServiceClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for UnimplementedService that uses a custom CallInvoker.
@@ -741,7 +741,7 @@ namespace Grpc.Testing {
{
/// Creates a new client for ReconnectService
/// The channel to use to make remote calls.
- public ReconnectServiceClient(grpc::Channel channel) : base(channel)
+ public ReconnectServiceClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for ReconnectService that uses a custom CallInvoker.
diff --git a/src/csharp/Grpc.IntegrationTesting/WorkerServiceGrpc.cs b/src/csharp/Grpc.IntegrationTesting/WorkerServiceGrpc.cs
index 14c26f99a6b..66378081626 100644
--- a/src/csharp/Grpc.IntegrationTesting/WorkerServiceGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/WorkerServiceGrpc.cs
@@ -138,7 +138,7 @@ namespace Grpc.Testing {
{
/// Creates a new client for WorkerService
/// The channel to use to make remote calls.
- public WorkerServiceClient(grpc::Channel channel) : base(channel)
+ public WorkerServiceClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for WorkerService that uses a custom CallInvoker.
diff --git a/src/csharp/Grpc.Reflection.Tests/Grpc.Reflection.Tests.csproj b/src/csharp/Grpc.Reflection.Tests/Grpc.Reflection.Tests.csproj
index ef9d2a1c570..e19020808f7 100755
--- a/src/csharp/Grpc.Reflection.Tests/Grpc.Reflection.Tests.csproj
+++ b/src/csharp/Grpc.Reflection.Tests/Grpc.Reflection.Tests.csproj
@@ -1,4 +1,4 @@
-
+
@@ -10,6 +10,7 @@
+
diff --git a/src/csharp/Grpc.Reflection/Grpc.Reflection.csproj b/src/csharp/Grpc.Reflection/Grpc.Reflection.csproj
index cf08e58ed65..4dbc8d69390 100755
--- a/src/csharp/Grpc.Reflection/Grpc.Reflection.csproj
+++ b/src/csharp/Grpc.Reflection/Grpc.Reflection.csproj
@@ -26,7 +26,7 @@
-
+
None
diff --git a/src/csharp/Grpc.Reflection/ReflectionGrpc.cs b/src/csharp/Grpc.Reflection/ReflectionGrpc.cs
index f97b3143a69..fa482eba494 100644
--- a/src/csharp/Grpc.Reflection/ReflectionGrpc.cs
+++ b/src/csharp/Grpc.Reflection/ReflectionGrpc.cs
@@ -69,7 +69,7 @@ namespace Grpc.Reflection.V1Alpha {
{
/// Creates a new client for ServerReflection
/// The channel to use to make remote calls.
- public ServerReflectionClient(grpc::Channel channel) : base(channel)
+ public ServerReflectionClient(grpc::ChannelBase channel) : base(channel)
{
}
/// Creates a new client for ServerReflection that uses a custom CallInvoker.