aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.gitmodules5
-rw-r--r--BUILD112
-rw-r--r--Makefile499
-rw-r--r--README.md4
-rw-r--r--build.json196
-rw-r--r--doc/PROTOCOL-HTTP2.md192
-rw-r--r--doc/grpc-auth-support.md289
-rw-r--r--doc/interop-test-descriptions.md204
-rw-r--r--doc/ref/csharp/.gitignore1
-rw-r--r--doc/ref/csharp/html/SearchHelp.aspx233
-rw-r--r--doc/ref/csharp/html/SearchHelp.inc.php173
-rw-r--r--doc/ref/csharp/html/SearchHelp.php58
-rw-r--r--doc/ref/csharp/html/Web.Config31
-rw-r--r--doc/ref/csharp/html/WebKI.xml1005
-rw-r--r--doc/ref/csharp/html/WebTOC.xml523
-rw-r--r--doc/ref/csharp/html/fti/FTI_100.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_101.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_102.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_103.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_104.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_105.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_107.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_108.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_109.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_110.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_111.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_112.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_113.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_114.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_115.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_116.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_117.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_118.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_119.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_122.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_97.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_98.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_99.json1
-rw-r--r--doc/ref/csharp/html/fti/FTI_Files.json1
-rw-r--r--doc/ref/csharp/html/html/Events_T_Grpc_Core_RpcException.htm3
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_Census.htm2
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_DefaultAuthority.htm2
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm2
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm2
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_MaxMessageLength.htm2
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm2
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm2
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm2
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_ContextPropagationOptions_Default.htm4
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm4
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_Metadata_Empty.htm4
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_ServerPort_PickUnused.htm5
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_Status_DefaultCancelled.htm4
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_Status_DefaultSuccess.htm4
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_VersionInfo_CurrentVersion.htm4
-rw-r--r--doc/ref/csharp/html/html/F_Grpc_Core_WriteOptions_Default.htm4
-rw-r--r--doc/ref/csharp/html/html/Fields_T_Grpc_Core_ChannelOptions.htm3
-rw-r--r--doc/ref/csharp/html/html/Fields_T_Grpc_Core_ContextPropagationOptions.htm5
-rw-r--r--doc/ref/csharp/html/html/Fields_T_Grpc_Core_Metadata.htm7
-rw-r--r--doc/ref/csharp/html/html/Fields_T_Grpc_Core_ServerPort.htm6
-rw-r--r--doc/ref/csharp/html/html/Fields_T_Grpc_Core_Status.htm7
-rw-r--r--doc/ref/csharp/html/html/Fields_T_Grpc_Core_VersionInfo.htm5
-rw-r--r--doc/ref/csharp/html/html/Fields_T_Grpc_Core_WriteOptions.htm5
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm12
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Auth_AuthInterceptors_FromCredential.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm8
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm5
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm8
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm8
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm8
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm5
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor.htm19
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm23
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm31
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithCancellationToken.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithDeadline.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithHeaders.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_CallOptions__ctor.htm35
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm19
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm20
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm23
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm22
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm22
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ChannelOption__ctor.htm15
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ChannelOption__ctor_1.htm15
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Channel_ConnectAsync.htm20
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Channel_ShutdownAsync.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Channel_WaitForStateChangedAsync.htm22
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Channel__ctor.htm24
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Channel__ctor_1.htm27
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ClientBase_CreateCall__2.htm22
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ClientBase__ctor.htm11
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ContextPropagationOptions__ctor.htm20
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Credentials__ctor.htm2
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_GrpcEnvironment_SetLogger.htm12
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm11
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm4
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_KeyCertificatePair__ctor.htm15
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Debug.htm16
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Error.htm21
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm16
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm7
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Info.htm16
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Warning.htm21
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm16
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger__ctor.htm2
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Debug.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Error.htm17
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Error_1.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_ForType__1.htm4
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Info.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Warning.htm17
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Warning_1.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Marshaller_1__ctor.htm15
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Marshallers_Create__1.htm18
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add.htm11
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add_1.htm14
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add_2.htm14
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Clear.htm3
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Contains.htm11
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_CopyTo.htm16
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry_ToString.htm5
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry__ctor.htm15
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry__ctor_1.htm15
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_GetEnumerator.htm3
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_IndexOf.htm11
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Insert.htm16
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Remove.htm11
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata_RemoveAt.htm11
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Metadata__ctor.htm4
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Method_2__ctor.htm27
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_RpcException__ctor.htm11
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_RpcException__ctor_1.htm15
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm16
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm14
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerCredentials__ctor.htm2
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerPort__ctor.htm19
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm22
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm22
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm22
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm22
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm5
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm11
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm12
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Server_KillAsync.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_Add.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_Add_1.htm20
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm5
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm5
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Server_ShutdownAsync.htm7
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Server_Start.htm5
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Server__ctor.htm15
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor.htm6
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor_1.htm12
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor_2.htm15
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_SslServerCredentials__ctor.htm13
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_SslServerCredentials__ctor_1.htm19
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Status_ToString.htm5
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Status__ctor.htm15
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm23
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm19
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm32
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm23
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm20
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckArgument.htm12
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm16
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm14
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm18
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckState.htm12
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckState_1.htm16
-rw-r--r--doc/ref/csharp/html/html/M_Grpc_Core_WriteOptions__ctor.htm15
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Auth_AuthInterceptors.htm8
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm16
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm14
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm14
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncUnaryCall_1.htm16
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_CallInvocationDetails_2.htm6
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_CallOptions.htm12
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Calls.htm17
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Channel.htm16
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_ChannelOption.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_ClientBase.htm5
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_ContextPropagationOptions.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_ContextPropagationToken.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Credentials.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_GrpcEnvironment.htm5
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_IAsyncStreamReader_1.htm9
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm5
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_IClientStreamWriter_1.htm12
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_IServerStreamWriter_1.htm9
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_KeyCertificatePair.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Logging_ConsoleLogger.htm5
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Logging_ILogger.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Marshaller_1.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Marshallers.htm5
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Metadata.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Metadata_Entry.htm5
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Method_2.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_RpcException.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server.htm12
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerCallContext.htm9
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerCredentials.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerPort.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerServiceDefinition.htm5
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm13
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server_ServerPortCollection.htm10
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm8
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_SslCredentials.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_SslServerCredentials.htm3
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Status.htm5
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm12
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm5
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_Preconditions.htm15
-rw-r--r--doc/ref/csharp/html/html/Methods_T_Grpc_Core_WriteOptions.htm3
-rw-r--r--doc/ref/csharp/html/html/N_Grpc_Auth.htm6
-rw-r--r--doc/ref/csharp/html/html/N_Grpc_Core.htm133
-rw-r--r--doc/ref/csharp/html/html/N_Grpc_Core_Logging.htm5
-rw-r--r--doc/ref/csharp/html/html/N_Grpc_Core_Utils.htm9
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm9
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_ChannelOption__ctor.htm7
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Channel__ctor.htm8
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm3
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm3
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ILogger_Error.htm3
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ILogger_Warning.htm3
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Metadata_Add.htm3
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Metadata_Entry__ctor.htm7
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_RpcException__ctor.htm7
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm11
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Server_ServerPortCollection_Add.htm8
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_SslCredentials__ctor.htm12
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_SslServerCredentials__ctor.htm9
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm8
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm7
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm7
-rw-r--r--doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckState.htm7
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Channel.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Host.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Method.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Options.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_CancellationToken.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_Deadline.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_Headers.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_PropagationToken.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_WriteOptions.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_IntValue.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_Name.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_StringValue.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_Type.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Channel_ResolvedTarget.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Channel_State.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Channel_Target.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_Channel.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_HeaderInterceptor.htm11
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_Host.htm13
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Credentials_Insecure.htm9
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_GrpcEnvironment_Logger.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm12
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_IHasWriteOptions_WriteOptions.htm9
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_IMethod_FullName.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_IMethod_Name.htm7
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_IMethod_ServiceName.htm7
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_IMethod_Type.htm7
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_KeyCertificatePair_CertificateChain.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_KeyCertificatePair_PrivateKey.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Marshaller_1_Deserializer.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Marshaller_1_Serializer.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Marshallers_StringMarshaller.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Count.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_IsBinary.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_Key.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_Value.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_ValueBytes.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Metadata_IsReadOnly.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Item.htm12
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Method_2_FullName.htm9
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Method_2_Name.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Method_2_RequestMarshaller.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Method_2_ResponseMarshaller.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Method_2_ServiceName.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Method_2_Type.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_RpcException_Status.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_CancellationToken.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Deadline.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Host.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Method.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Peer.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_RequestHeaders.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_ResponseTrailers.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Status.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_WriteOptions.htm12
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerCredentials_Insecure.htm9
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_BoundPort.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Credentials.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Host.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Port.htm6
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Server_Ports.htm9
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Server_Services.htm9
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Server_ShutdownTask.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_SslCredentials_KeyCertificatePair.htm9
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_SslCredentials_RootCertificates.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_RootCertificates.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Status_Detail.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_Status_StatusCode.htm8
-rw-r--r--doc/ref/csharp/html/html/P_Grpc_Core_WriteOptions_Flags.htm8
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm9
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm9
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm7
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncUnaryCall_1.htm7
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_CallInvocationDetails_2.htm15
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_CallOptions.htm13
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_Channel.htm5
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_ChannelOption.htm11
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_ClientBase.htm13
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_ContextPropagationOptions.htm3
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_Credentials.htm6
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_GrpcEnvironment.htm5
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_IAsyncStreamReader_1.htm3
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm8
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_IClientStreamWriter_1.htm8
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_IHasWriteOptions.htm5
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_IMethod.htm12
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_IServerStreamWriter_1.htm8
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_KeyCertificatePair.htm7
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_Marshaller_1.htm7
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_Marshallers.htm5
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_Metadata.htm3
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_Metadata_Entry.htm11
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_Method_2.htm16
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_RpcException.htm5
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_Server.htm11
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerCallContext.htm7
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerCredentials.htm6
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerPort.htm3
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_SslCredentials.htm8
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_SslServerCredentials.htm9
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_Status.htm7
-rw-r--r--doc/ref/csharp/html/html/Properties_T_Grpc_Core_WriteOptions.htm5
-rw-r--r--doc/ref/csharp/html/html/R_Project_Documentation.htm11
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Auth_AuthInterceptors.htm13
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_AsyncClientStreamingCall_2.htm33
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm31
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_AsyncServerStreamingCall_1.htm29
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_AsyncUnaryCall_1.htm31
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_CallInvocationDetails_2.htm33
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_CallOptions.htm31
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Calls.htm24
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Channel.htm31
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ChannelOption.htm23
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ChannelOption_OptionType.htm9
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ChannelOptions.htm7
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ChannelState.htm16
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ClientBase.htm24
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ClientStreamingServerMethod_2.htm21
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_CompressionLevel.htm13
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ContextPropagationOptions.htm15
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ContextPropagationToken.htm10
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Credentials.htm13
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm25
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_GrpcEnvironment.htm11
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_HeaderInterceptor.htm19
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_IAsyncStreamReader_1.htm22
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_IAsyncStreamWriter_1.htm16
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_IClientStreamWriter_1.htm27
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_IHasWriteOptions.htm7
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_IMethod.htm14
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_IServerStreamWriter_1.htm24
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_KeyCertificatePair.htm16
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Logging_ConsoleLogger.htm11
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Logging_ILogger.htm3
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Marshaller_1.htm18
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Marshallers.htm13
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Metadata.htm29
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Metadata_Entry.htm24
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_MethodType.htm5
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Method_2.htm30
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_RpcException.htm21
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Server.htm28
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ServerCallContext.htm17
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ServerCredentials.htm13
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ServerPort.htm16
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ServerServiceDefinition.htm9
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ServerServiceDefinition_Builder.htm19
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_ServerStreamingServerMethod_2.htm25
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Server_ServerPortCollection.htm19
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm17
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_SslCredentials.htm28
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_SslServerCredentials.htm25
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Status.htm24
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_StatusCode.htm52
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_UnaryServerMethod_2.htm21
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm19
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Utils_BenchmarkUtil.htm9
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_Utils_Preconditions.htm19
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_VersionInfo.htm9
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_WriteFlags.htm15
-rw-r--r--doc/ref/csharp/html/html/T_Grpc_Core_WriteOptions.htm17
-rw-r--r--doc/ref/csharp/html/icons/AlertCaution.pngbin0 -> 618 bytes
-rw-r--r--doc/ref/csharp/html/icons/AlertNote.pngbin0 -> 3236 bytes
-rw-r--r--doc/ref/csharp/html/icons/AlertSecurity.pngbin0 -> 503 bytes
-rw-r--r--doc/ref/csharp/html/icons/CFW.gifbin0 -> 588 bytes
-rw-r--r--doc/ref/csharp/html/icons/CodeExample.pngbin0 -> 196 bytes
-rw-r--r--doc/ref/csharp/html/icons/Search.pngbin0 -> 343 bytes
-rw-r--r--doc/ref/csharp/html/icons/SectionCollapsed.pngbin0 -> 229 bytes
-rw-r--r--doc/ref/csharp/html/icons/SectionExpanded.pngbin0 -> 223 bytes
-rw-r--r--doc/ref/csharp/html/icons/TocClose.gifbin0 -> 893 bytes
-rw-r--r--doc/ref/csharp/html/icons/TocCollapsed.gifbin0 -> 838 bytes
-rw-r--r--doc/ref/csharp/html/icons/TocExpanded.gifbin0 -> 837 bytes
-rw-r--r--doc/ref/csharp/html/icons/TocOpen.gifbin0 -> 896 bytes
-rw-r--r--doc/ref/csharp/html/icons/favicon.icobin0 -> 25094 bytes
-rw-r--r--doc/ref/csharp/html/icons/privclass.gifbin0 -> 621 bytes
-rw-r--r--doc/ref/csharp/html/icons/privdelegate.gifbin0 -> 1045 bytes
-rw-r--r--doc/ref/csharp/html/icons/privenumeration.gifbin0 -> 597 bytes
-rw-r--r--doc/ref/csharp/html/icons/privevent.gifbin0 -> 580 bytes
-rw-r--r--doc/ref/csharp/html/icons/privextension.gifbin0 -> 608 bytes
-rw-r--r--doc/ref/csharp/html/icons/privfield.gifbin0 -> 574 bytes
-rw-r--r--doc/ref/csharp/html/icons/privinterface.gifbin0 -> 585 bytes
-rw-r--r--doc/ref/csharp/html/icons/privmethod.gifbin0 -> 603 bytes
-rw-r--r--doc/ref/csharp/html/icons/privproperty.gifbin0 -> 1054 bytes
-rw-r--r--doc/ref/csharp/html/icons/privstructure.gifbin0 -> 630 bytes
-rw-r--r--doc/ref/csharp/html/icons/protclass.gifbin0 -> 600 bytes
-rw-r--r--doc/ref/csharp/html/icons/protdelegate.gifbin0 -> 1041 bytes
-rw-r--r--doc/ref/csharp/html/icons/protenumeration.gifbin0 -> 583 bytes
-rw-r--r--doc/ref/csharp/html/icons/protevent.gifbin0 -> 564 bytes
-rw-r--r--doc/ref/csharp/html/icons/protextension.gifbin0 -> 589 bytes
-rw-r--r--doc/ref/csharp/html/icons/protfield.gifbin0 -> 570 bytes
-rw-r--r--doc/ref/csharp/html/icons/protinterface.gifbin0 -> 562 bytes
-rw-r--r--doc/ref/csharp/html/icons/protmethod.gifbin0 -> 183 bytes
-rw-r--r--doc/ref/csharp/html/icons/protoperator.gifbin0 -> 547 bytes
-rw-r--r--doc/ref/csharp/html/icons/protproperty.gifbin0 -> 1039 bytes
-rw-r--r--doc/ref/csharp/html/icons/protstructure.gifbin0 -> 619 bytes
-rw-r--r--doc/ref/csharp/html/icons/pubclass.gifbin0 -> 368 bytes
-rw-r--r--doc/ref/csharp/html/icons/pubdelegate.gifbin0 -> 1041 bytes
-rw-r--r--doc/ref/csharp/html/icons/pubenumeration.gifbin0 -> 339 bytes
-rw-r--r--doc/ref/csharp/html/icons/pubevent.gifbin0 -> 314 bytes
-rw-r--r--doc/ref/csharp/html/icons/pubextension.gifbin0 -> 551 bytes
-rw-r--r--doc/ref/csharp/html/icons/pubfield.gifbin0 -> 311 bytes
-rw-r--r--doc/ref/csharp/html/icons/pubinterface.gifbin0 -> 314 bytes
-rw-r--r--doc/ref/csharp/html/icons/pubmethod.gifbin0 -> 329 bytes
-rw-r--r--doc/ref/csharp/html/icons/puboperator.gifbin0 -> 310 bytes
-rw-r--r--doc/ref/csharp/html/icons/pubproperty.gifbin0 -> 609 bytes
-rw-r--r--doc/ref/csharp/html/icons/pubstructure.gifbin0 -> 595 bytes
-rw-r--r--doc/ref/csharp/html/icons/slMobile.gifbin0 -> 909 bytes
-rw-r--r--doc/ref/csharp/html/icons/static.gifbin0 -> 879 bytes
-rw-r--r--doc/ref/csharp/html/icons/xna.gifbin0 -> 549 bytes
-rw-r--r--doc/ref/csharp/html/index.html14
-rw-r--r--doc/ref/csharp/html/scripts/branding-Website.js624
-rw-r--r--doc/ref/csharp/html/scripts/branding.js528
-rw-r--r--doc/ref/csharp/html/scripts/jquery-1.11.0.min.js4
-rw-r--r--doc/ref/csharp/html/search.html35
-rw-r--r--doc/ref/csharp/html/styles/branding-Help1.css40
-rw-r--r--doc/ref/csharp/html/styles/branding-HelpViewer.css48
-rw-r--r--doc/ref/csharp/html/styles/branding-Website.css156
-rw-r--r--doc/ref/csharp/html/styles/branding-cs-CZ.css3
-rw-r--r--doc/ref/csharp/html/styles/branding-de-DE.css3
-rw-r--r--doc/ref/csharp/html/styles/branding-en-US.css3
-rw-r--r--doc/ref/csharp/html/styles/branding-es-ES.css3
-rw-r--r--doc/ref/csharp/html/styles/branding-fr-FR.css3
-rw-r--r--doc/ref/csharp/html/styles/branding-it-IT.css3
-rw-r--r--doc/ref/csharp/html/styles/branding-ja-JP.css18
-rw-r--r--doc/ref/csharp/html/styles/branding-ko-KR.css19
-rw-r--r--doc/ref/csharp/html/styles/branding-pl-PL.css3
-rw-r--r--doc/ref/csharp/html/styles/branding-pt-BR.css3
-rw-r--r--doc/ref/csharp/html/styles/branding-ru-RU.css3
-rw-r--r--doc/ref/csharp/html/styles/branding-tr-TR.css3
-rw-r--r--doc/ref/csharp/html/styles/branding-zh-CN.css18
-rw-r--r--doc/ref/csharp/html/styles/branding-zh-TW.css18
-rw-r--r--doc/ref/csharp/html/styles/branding.css561
-rw-r--r--doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ChannelOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ContextPropagationOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/Fields_T_Grpc_Core_Metadata.xml1
-rw-r--r--doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ServerPort.xml1
-rw-r--r--doc/ref/csharp/html/toc/Fields_T_Grpc_Core_Status.xml1
-rw-r--r--doc/ref/csharp/html/toc/Fields_T_Grpc_Core_VersionInfo.xml1
-rw-r--r--doc/ref/csharp/html/toc/Fields_T_Grpc_Core_WriteOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Auth_AuthInterceptors.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncUnaryCall_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_CallInvocationDetails_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_CallOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Calls.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Channel.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ClientBase.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_GrpcEnvironment.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_IAsyncStreamWriter_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_IClientStreamWriter_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Logging_ConsoleLogger.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Logging_ILogger.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Marshallers.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Metadata.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Metadata_Entry.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerCallContext.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerServiceDefinition.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server_ServerPortCollection.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Status.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_BenchmarkUtil.xml1
-rw-r--r--doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_Preconditions.xml1
-rw-r--r--doc/ref/csharp/html/toc/N_Grpc_Auth.xml1
-rw-r--r--doc/ref/csharp/html/toc/N_Grpc_Core.xml1
-rw-r--r--doc/ref/csharp/html/toc/N_Grpc_Core_Logging.xml1
-rw-r--r--doc/ref/csharp/html/toc/N_Grpc_Core_Utils.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_CallInvocationDetails_2__ctor.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_ChannelOption__ctor.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Channel__ctor.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ConsoleLogger_Error.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ILogger_Error.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ILogger_Warning.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Metadata_Add.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Metadata_Entry__ctor.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_RpcException__ctor.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Server_ServerPortCollection_Add.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_SslCredentials__ctor.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_SslServerCredentials__ctor.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.xml1
-rw-r--r--doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckState.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncUnaryCall_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_CallInvocationDetails_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_CallOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Channel.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ChannelOption.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ClientBase.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ContextPropagationOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Credentials.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_GrpcEnvironment.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IAsyncStreamWriter_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IHasWriteOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IMethod.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_KeyCertificatePair.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Marshaller_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Marshallers.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Metadata.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Metadata_Entry.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Method_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_RpcException.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Server.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerCallContext.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerCredentials.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerPort.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_SslCredentials.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_SslServerCredentials.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Status.xml1
-rw-r--r--doc/ref/csharp/html/toc/Properties_T_Grpc_Core_WriteOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/R_Project_Documentation.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Auth_AuthInterceptors.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_AsyncClientStreamingCall_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_AsyncDuplexStreamingCall_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_AsyncServerStreamingCall_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_AsyncUnaryCall_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_CallInvocationDetails_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_CallOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Calls.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Channel.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_ChannelOption.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_ChannelOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_ClientBase.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_ContextPropagationOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_ContextPropagationToken.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Credentials.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_GrpcEnvironment.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_IAsyncStreamReader_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_IAsyncStreamWriter_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_IClientStreamWriter_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_IHasWriteOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_IMethod.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_IServerStreamWriter_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_KeyCertificatePair.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Logging_ConsoleLogger.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Logging_ILogger.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Marshaller_1.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Marshallers.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Metadata.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Metadata_Entry.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Method_2.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_RpcException.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Server.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_ServerCallContext.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_ServerCredentials.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_ServerPort.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_ServerServiceDefinition.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_ServerServiceDefinition_Builder.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Server_ServerPortCollection.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Server_ServiceDefinitionCollection.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_SslCredentials.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_SslServerCredentials.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Status.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Utils_AsyncStreamExtensions.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Utils_BenchmarkUtil.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_Utils_Preconditions.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_VersionInfo.xml1
-rw-r--r--doc/ref/csharp/html/toc/T_Grpc_Core_WriteOptions.xml1
-rw-r--r--doc/ref/csharp/html/toc/roottoc.xml1
-rw-r--r--examples/README.md450
-rw-r--r--examples/cpp/README.md65
-rw-r--r--examples/cpp/cpptutorial.md365
-rw-r--r--examples/cpp/helloworld/Makefile119
-rw-r--r--examples/cpp/helloworld/README.md260
-rw-r--r--examples/cpp/helloworld/greeter_async_client.cc98
-rw-r--r--examples/cpp/helloworld/greeter_async_server.cc136
-rw-r--r--examples/cpp/helloworld/greeter_client.cc (renamed from examples/pubsub/publisher.h)64
-rw-r--r--examples/cpp/helloworld/greeter_server.cc (renamed from test/cpp/server/fixed_size_thread_pool_test.cc)69
-rw-r--r--examples/cpp/route_guide/Makefile113
-rw-r--r--examples/cpp/route_guide/helper.cc178
-rw-r--r--examples/cpp/route_guide/helper.h (renamed from examples/pubsub/subscriber.h)36
-rw-r--r--examples/cpp/route_guide/route_guide_client.cc252
-rw-r--r--examples/cpp/route_guide/route_guide_db.json601
-rw-r--r--examples/cpp/route_guide/route_guide_server.cc202
-rw-r--r--examples/csharp/.gitignore5
-rw-r--r--examples/csharp/.nuget/packages.config4
-rw-r--r--examples/csharp/Greeter.sln42
-rw-r--r--examples/csharp/Greeter/.gitignore2
-rw-r--r--examples/csharp/Greeter/Greeter.csproj81
-rw-r--r--examples/csharp/Greeter/Helloworld.cs617
-rw-r--r--examples/csharp/Greeter/HelloworldGrpc.cs78
-rw-r--r--examples/csharp/Greeter/Properties/AssemblyInfo.cs22
-rw-r--r--examples/csharp/Greeter/packages.config11
-rw-r--r--examples/csharp/Greeter/protos/helloworld.proto52
-rw-r--r--examples/csharp/GreeterClient/.gitignore2
-rw-r--r--examples/csharp/GreeterClient/GreeterClient.csproj84
-rw-r--r--examples/csharp/GreeterClient/Program.cs25
-rw-r--r--examples/csharp/GreeterClient/Properties/AssemblyInfo.cs22
-rw-r--r--examples/csharp/GreeterClient/packages.config11
-rw-r--r--examples/csharp/GreeterServer/.gitignore2
-rw-r--r--examples/csharp/GreeterServer/GreeterServer.csproj84
-rw-r--r--examples/csharp/GreeterServer/Program.cs37
-rw-r--r--examples/csharp/GreeterServer/Properties/AssemblyInfo.cs22
-rw-r--r--examples/csharp/GreeterServer/packages.config11
-rw-r--r--examples/csharp/README.md72
-rw-r--r--examples/csharp/route_guide/.gitignore5
-rw-r--r--examples/csharp/route_guide/.nuget/packages.config4
-rw-r--r--examples/csharp/route_guide/README.md409
-rw-r--r--examples/csharp/route_guide/RouteGuide.sln39
-rw-r--r--examples/csharp/route_guide/RouteGuide/Properties/AssemblyInfo.cs36
-rw-r--r--examples/csharp/route_guide/RouteGuide/RouteGuide.cs1873
-rw-r--r--examples/csharp/route_guide/RouteGuide/RouteGuide.csproj101
-rw-r--r--examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs123
-rw-r--r--examples/csharp/route_guide/RouteGuide/RouteGuideUtil.cs67
-rw-r--r--examples/csharp/route_guide/RouteGuide/packages.config12
-rw-r--r--examples/csharp/route_guide/RouteGuide/protos/route_guide.proto123
-rw-r--r--examples/csharp/route_guide/RouteGuide/route_guide_db.json601
-rw-r--r--examples/csharp/route_guide/RouteGuideClient/App.config6
-rw-r--r--examples/csharp/route_guide/RouteGuideClient/Program.cs223
-rw-r--r--examples/csharp/route_guide/RouteGuideClient/Properties/AssemblyInfo.cs36
-rw-r--r--examples/csharp/route_guide/RouteGuideClient/RouteGuideClient.csproj100
-rw-r--r--examples/csharp/route_guide/RouteGuideClient/packages.config11
-rw-r--r--examples/csharp/route_guide/RouteGuideServer/App.config6
-rw-r--r--examples/csharp/route_guide/RouteGuideServer/Program.cs30
-rw-r--r--examples/csharp/route_guide/RouteGuideServer/Properties/AssemblyInfo.cs36
-rw-r--r--examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs184
-rw-r--r--examples/csharp/route_guide/RouteGuideServer/RouteGuideServer.csproj101
-rw-r--r--examples/csharp/route_guide/RouteGuideServer/packages.config11
-rw-r--r--examples/node/.gitignore3
-rw-r--r--examples/node/README.md60
-rw-r--r--examples/node/greeter_client.js52
-rw-r--r--examples/node/greeter_server.js63
-rw-r--r--examples/node/helloworld.proto50
-rw-r--r--examples/node/package.json10
-rw-r--r--examples/node/route_guide/README.md362
-rw-r--r--examples/node/route_guide/route_guide.proto120
-rw-r--r--examples/node/route_guide/route_guide_client.js231
-rw-r--r--examples/node/route_guide/route_guide_db.json601
-rw-r--r--examples/node/route_guide/route_guide_server.js249
-rw-r--r--examples/objective-c/auth_sample/AuthSample.xcodeproj/project.pbxproj366
-rw-r--r--examples/objective-c/auth_sample/AuthSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--examples/objective-c/auth_sample/AuthTestService.podspec35
-rw-r--r--examples/objective-c/auth_sample/MakeRPCViewController.h40
-rw-r--r--examples/objective-c/auth_sample/MakeRPCViewController.m100
-rw-r--r--examples/objective-c/auth_sample/Misc/AppDelegate.h38
-rw-r--r--examples/objective-c/auth_sample/Misc/AppDelegate.m (renamed from test/cpp/server/dynamic_thread_pool_test.cc)56
-rw-r--r--examples/objective-c/auth_sample/Misc/Base.lproj/Main.storyboard154
-rw-r--r--examples/objective-c/auth_sample/Misc/GoogleService-Info.plist10
-rw-r--r--examples/objective-c/auth_sample/Misc/Images.xcassets/AppIcon.appiconset/Contents.json68
-rw-r--r--examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/Contents.json12
-rw-r--r--examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/first.pdfbin0 -> 2465 bytes
-rw-r--r--examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/Contents.json12
-rw-r--r--examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/second.pdfbin0 -> 2423 bytes
-rw-r--r--examples/objective-c/auth_sample/Misc/Info.plist80
-rw-r--r--examples/objective-c/auth_sample/Misc/main.m41
-rw-r--r--examples/objective-c/auth_sample/Podfile10
-rw-r--r--examples/objective-c/auth_sample/README.md189
-rw-r--r--examples/objective-c/auth_sample/SelectUserViewController.h42
-rw-r--r--examples/objective-c/auth_sample/SelectUserViewController.m (renamed from src/cpp/client/channel.h)76
-rw-r--r--examples/objective-c/helloworld/HelloWorld.podspec35
-rw-r--r--examples/objective-c/helloworld/HelloWorld.xcodeproj/project.pbxproj349
-rw-r--r--examples/objective-c/helloworld/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--examples/objective-c/helloworld/HelloWorld/AppDelegate.h38
-rw-r--r--examples/objective-c/helloworld/HelloWorld/AppDelegate.m (renamed from src/cpp/client/internal_stub.cc)5
-rw-r--r--examples/objective-c/helloworld/HelloWorld/Base.lproj/Main.storyboard25
-rw-r--r--examples/objective-c/helloworld/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json68
-rw-r--r--examples/objective-c/helloworld/HelloWorld/Info.plist47
-rw-r--r--examples/objective-c/helloworld/HelloWorld/ViewController.m40
-rw-r--r--examples/objective-c/helloworld/Podfile7
-rw-r--r--examples/objective-c/helloworld/README.md56
-rw-r--r--examples/objective-c/helloworld/main.m51
-rw-r--r--examples/objective-c/route_guide/Misc/AppDelegate.h38
-rw-r--r--examples/objective-c/route_guide/Misc/AppDelegate.m37
-rw-r--r--examples/objective-c/route_guide/Misc/Base.lproj/Main.storyboard193
-rw-r--r--examples/objective-c/route_guide/Misc/Images.xcassets/AppIcon.appiconset/Contents.json68
-rw-r--r--examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/Contents.json12
-rw-r--r--examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/first.pdfbin0 -> 2465 bytes
-rw-r--r--examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/Contents.json12
-rw-r--r--examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/second.pdfbin0 -> 2423 bytes
-rw-r--r--examples/objective-c/route_guide/Misc/Info.plist57
-rw-r--r--examples/objective-c/route_guide/Misc/main.m41
-rw-r--r--examples/objective-c/route_guide/Podfile7
-rw-r--r--examples/objective-c/route_guide/README.md360
-rw-r--r--examples/objective-c/route_guide/RouteGuide.podspec35
-rw-r--r--examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.pbxproj366
-rw-r--r--examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--examples/objective-c/route_guide/ViewControllers.m228
-rw-r--r--examples/objective-c/route_guide/route_guide_db.json121
-rw-r--r--examples/php/.gitignore2
-rw-r--r--examples/php/README.md64
-rw-r--r--examples/php/composer.json17
-rw-r--r--examples/php/greeter_client.php49
-rw-r--r--examples/php/helloworld.php160
-rw-r--r--examples/php/helloworld.proto50
-rw-r--r--examples/php/route_guide/README.md262
-rw-r--r--examples/php/route_guide/route_guide.php731
-rw-r--r--examples/php/route_guide/route_guide.proto120
-rw-r--r--examples/php/route_guide/route_guide_client.php205
-rwxr-xr-xexamples/php/route_guide/run_route_guide_client.sh36
-rwxr-xr-xexamples/php/run_greeter_client.sh35
-rw-r--r--examples/protos/README.md8
-rw-r--r--examples/protos/auth_sample.proto57
-rw-r--r--examples/protos/hellostreamingworld.proto54
-rw-r--r--examples/protos/helloworld.proto51
-rw-r--r--examples/protos/route_guide.proto124
-rw-r--r--examples/pubsub/README22
-rw-r--r--examples/pubsub/main.cc148
-rw-r--r--examples/pubsub/publisher.cc121
-rw-r--r--examples/pubsub/publisher_test.cc155
-rw-r--r--examples/pubsub/subscriber.cc115
-rw-r--r--examples/pubsub/subscriber_test.cc154
-rw-r--r--examples/python/helloworld/.gitignore1
-rw-r--r--examples/python/helloworld/README.md116
-rwxr-xr-xexamples/python/helloworld/greeter_client.py44
-rw-r--r--examples/python/helloworld/greeter_server.py56
-rwxr-xr-xexamples/python/helloworld/run_client.sh8
-rwxr-xr-xexamples/python/helloworld/run_codegen.sh4
-rwxr-xr-xexamples/python/helloworld/run_server.sh9
-rw-r--r--examples/python/route_guide/.gitignore1
-rw-r--r--examples/python/route_guide/README.md303
-rwxr-xr-xexamples/python/route_guide/route_guide_client.py130
-rw-r--r--examples/python/route_guide/route_guide_db.json601
-rw-r--r--examples/python/route_guide/route_guide_pb2.py370
-rwxr-xr-xexamples/python/route_guide/route_guide_resources.py53
-rw-r--r--examples/python/route_guide/route_guide_server.py134
-rwxr-xr-xexamples/python/route_guide/run_client.sh8
-rwxr-xr-xexamples/python/route_guide/run_codegen.sh4
-rwxr-xr-xexamples/python/route_guide/run_server.sh8
-rw-r--r--examples/ruby/.gitignore15
-rw-r--r--examples/ruby/Gemfile6
-rw-r--r--examples/ruby/README.md61
-rwxr-xr-xexamples/ruby/greeter_client.rb50
-rwxr-xr-xexamples/ruby/greeter_server.rb60
-rw-r--r--examples/ruby/grpc-demo.gemspec23
-rw-r--r--examples/ruby/lib/helloworld.rb18
-rw-r--r--examples/ruby/lib/helloworld_services.rb24
-rw-r--r--examples/ruby/lib/route_guide.rb37
-rw-r--r--examples/ruby/lib/route_guide_services.rb27
-rw-r--r--examples/ruby/route_guide/README.md285
-rwxr-xr-xexamples/ruby/route_guide/route_guide_client.rb165
-rwxr-xr-xexamples/ruby/route_guide/route_guide_server.rb211
-rw-r--r--gRPC.podspec13
-rw-r--r--include/grpc++/channel.h (renamed from include/grpc++/channel_interface.h)90
-rw-r--r--include/grpc++/client_context.h29
-rw-r--r--include/grpc++/completion_queue.h9
-rw-r--r--include/grpc++/create_channel.h13
-rw-r--r--include/grpc++/credentials.h8
-rw-r--r--include/grpc++/generic/async_generic_service.h (renamed from include/grpc++/async_generic_service.h)10
-rw-r--r--include/grpc++/generic/generic_stub.h (renamed from include/grpc++/generic_stub.h)15
-rw-r--r--include/grpc++/impl/call.h27
-rw-r--r--include/grpc++/impl/client_unary_call.h9
-rw-r--r--include/grpc++/impl/proto_utils.h4
-rw-r--r--include/grpc++/impl/rpc_method.h14
-rw-r--r--include/grpc++/impl/rpc_service_method.h24
-rw-r--r--include/grpc++/impl/service_type.h4
-rw-r--r--include/grpc++/impl/sync.h2
-rw-r--r--include/grpc++/impl/thd.h2
-rw-r--r--include/grpc++/server.h21
-rw-r--r--include/grpc++/server_builder.h10
-rw-r--r--include/grpc++/server_context.h11
-rw-r--r--include/grpc++/server_credentials.h2
-rw-r--r--include/grpc++/support/async_stream.h (renamed from include/grpc++/stream.h)364
-rw-r--r--include/grpc++/support/async_unary_call.h (renamed from include/grpc++/async_unary_call.h)14
-rw-r--r--include/grpc++/support/auth_context.h (renamed from include/grpc++/auth_context.h)15
-rw-r--r--include/grpc++/support/byte_buffer.h (renamed from include/grpc++/byte_buffer.h)12
-rw-r--r--include/grpc++/support/channel_arguments.h (renamed from include/grpc++/channel_arguments.h)8
-rw-r--r--include/grpc++/support/config.h (renamed from include/grpc++/config.h)6
-rw-r--r--include/grpc++/support/config_protobuf.h (renamed from include/grpc++/config_protobuf.h)6
-rw-r--r--include/grpc++/support/slice.h (renamed from include/grpc++/slice.h)8
-rw-r--r--include/grpc++/support/status.h (renamed from include/grpc++/status.h)10
-rw-r--r--include/grpc++/support/status_code_enum.h (renamed from include/grpc++/status_code_enum.h)6
-rw-r--r--include/grpc++/support/string_ref.h120
-rw-r--r--include/grpc++/support/stub_options.h (renamed from include/grpc++/stub_options.h)6
-rw-r--r--include/grpc++/support/sync_stream.h392
-rw-r--r--include/grpc++/support/time.h (renamed from include/grpc++/time.h)8
-rw-r--r--include/grpc/compression.h26
-rw-r--r--include/grpc/grpc.h22
-rw-r--r--include/grpc/grpc_security.h48
-rw-r--r--include/grpc/support/time.h3
-rw-r--r--src/compiler/config.h4
-rw-r--r--src/compiler/cpp_generator.cc79
-rw-r--r--src/compiler/csharp_generator.cc59
-rw-r--r--src/compiler/csharp_generator.h5
-rw-r--r--src/compiler/python_generator.cc2
-rw-r--r--src/core/census/grpc_filter.c (renamed from src/core/channel/census_filter.c)65
-rw-r--r--src/core/census/grpc_filter.h (renamed from src/core/channel/census_filter.h)6
-rw-r--r--src/core/channel/channel_args.c63
-rw-r--r--src/core/channel/channel_args.h20
-rw-r--r--src/core/channel/compress_filter.h2
-rw-r--r--src/core/channel/http_client_filter.c33
-rw-r--r--src/core/client_config/resolver_factory.c8
-rw-r--r--src/core/client_config/resolver_factory.h12
-rw-r--r--src/core/client_config/resolver_registry.c91
-rw-r--r--src/core/client_config/resolver_registry.h15
-rw-r--r--src/core/client_config/resolvers/dns_resolver.c25
-rw-r--r--src/core/client_config/resolvers/sockaddr_resolver.c108
-rw-r--r--src/core/client_config/resolvers/zookeeper_resolver.c11
-rw-r--r--src/core/iomgr/pollset.h7
-rw-r--r--src/core/iomgr/pollset_multipoller_with_epoll.c2
-rw-r--r--src/core/iomgr/pollset_multipoller_with_poll_posix.c2
-rw-r--r--src/core/iomgr/pollset_posix.c15
-rw-r--r--src/core/iomgr/pollset_posix.h6
-rw-r--r--src/core/iomgr/pollset_windows.c10
-rw-r--r--src/core/iomgr/tcp_windows.c1
-rw-r--r--src/core/iomgr/udp_server.c2
-rw-r--r--src/core/profiling/basic_timers.c10
-rw-r--r--src/core/security/client_auth_filter.c3
-rw-r--r--src/core/security/credentials.c35
-rw-r--r--src/core/security/google_default_credentials.c8
-rw-r--r--src/core/security/security_connector.c20
-rw-r--r--src/core/security/server_auth_filter.c28
-rw-r--r--src/core/support/log_win32.c10
-rw-r--r--src/core/support/time_posix.c14
-rw-r--r--src/core/support/time_precise.h (renamed from src/core/profiling/timers_preciseclock.h)56
-rw-r--r--src/core/support/time_win32.c4
-rw-r--r--src/core/surface/call.c5
-rw-r--r--src/core/surface/channel.c44
-rw-r--r--src/core/surface/channel_create.c4
-rw-r--r--src/core/surface/completion_queue.c16
-rw-r--r--src/core/surface/init.c8
-rw-r--r--src/core/surface/secure_channel_create.c8
-rw-r--r--src/core/surface/server.c5
-rw-r--r--src/core/transport/chttp2/stream_encoder.c12
-rw-r--r--src/core/transport/chttp2/stream_lists.c44
-rw-r--r--src/core/transport/metadata.c24
-rw-r--r--src/core/transport/metadata.h1
-rw-r--r--src/cpp/client/channel.cc15
-rw-r--r--src/cpp/client/channel_arguments.cc3
-rw-r--r--src/cpp/client/client_context.cc4
-rw-r--r--src/cpp/client/create_channel.cc25
-rw-r--r--src/cpp/client/create_channel_internal.cc46
-rw-r--r--src/cpp/client/create_channel_internal.h (renamed from include/grpc++/impl/internal_stub.h)24
-rw-r--r--src/cpp/client/generic_stub.cc5
-rw-r--r--src/cpp/client/insecure_credentials.cc18
-rw-r--r--src/cpp/client/secure_channel_arguments.cc4
-rw-r--r--src/cpp/client/secure_credentials.cc31
-rw-r--r--src/cpp/client/secure_credentials.h4
-rw-r--r--src/cpp/common/auth_property_iterator.cc8
-rw-r--r--src/cpp/common/call.cc16
-rw-r--r--src/cpp/common/completion_queue.cc2
-rw-r--r--src/cpp/common/create_auth_context.h2
-rw-r--r--src/cpp/common/insecure_create_auth_context.cc2
-rw-r--r--src/cpp/common/secure_auth_context.cc17
-rw-r--r--src/cpp/common/secure_auth_context.h8
-rw-r--r--src/cpp/common/secure_create_auth_context.cc2
-rw-r--r--src/cpp/proto/proto_utils.cc2
-rw-r--r--src/cpp/server/async_generic_service.cc2
-rw-r--r--src/cpp/server/create_default_thread_pool.cc3
-rw-r--r--src/cpp/server/dynamic_thread_pool.cc3
-rw-r--r--src/cpp/server/dynamic_thread_pool.h (renamed from include/grpc++/dynamic_thread_pool.h)16
-rw-r--r--src/cpp/server/fixed_size_thread_pool.cc2
-rw-r--r--src/cpp/server/fixed_size_thread_pool.h (renamed from include/grpc++/fixed_size_thread_pool.h)14
-rw-r--r--src/cpp/server/secure_server_credentials.cc2
-rw-r--r--src/cpp/server/secure_server_credentials.h4
-rw-r--r--src/cpp/server/server.cc117
-rw-r--r--src/cpp/server/server_builder.cc16
-rw-r--r--src/cpp/server/server_context.cc9
-rw-r--r--src/cpp/server/thread_pool_interface.h (renamed from include/grpc++/thread_pool_interface.h)6
-rw-r--r--src/cpp/util/byte_buffer.cc2
-rw-r--r--src/cpp/util/slice.cc2
-rw-r--r--src/cpp/util/status.cc2
-rw-r--r--src/cpp/util/string_ref.cc115
-rw-r--r--src/cpp/util/time.cc4
-rw-r--r--src/csharp/.gitignore4
-rw-r--r--src/csharp/Grpc.Auth/AuthInterceptors.cs6
-rw-r--r--src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj2
-rw-r--r--src/csharp/Grpc.Core.Tests/GrpcEnvironmentTest.cs7
-rw-r--r--src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs222
-rw-r--r--src/csharp/Grpc.Core.Tests/MarshallingErrorsTest.cs176
-rw-r--r--src/csharp/Grpc.Core.Tests/MetadataTest.cs11
-rw-r--r--src/csharp/Grpc.Core.Tests/MockServiceHelper.cs80
-rw-r--r--src/csharp/Grpc.Core.Tests/ResponseHeadersTest.cs77
-rw-r--r--src/csharp/Grpc.Core/AsyncClientStreamingCall.cs17
-rw-r--r--src/csharp/Grpc.Core/AsyncDuplexStreamingCall.cs18
-rw-r--r--src/csharp/Grpc.Core/AsyncServerStreamingCall.cs17
-rw-r--r--src/csharp/Grpc.Core/AsyncUnaryCall.cs16
-rw-r--r--src/csharp/Grpc.Core/CallInvocationDetails.cs10
-rw-r--r--src/csharp/Grpc.Core/CallOptions.cs3
-rw-r--r--src/csharp/Grpc.Core/Calls.cs9
-rw-r--r--src/csharp/Grpc.Core/Channel.cs6
-rw-r--r--src/csharp/Grpc.Core/ChannelOptions.cs24
-rw-r--r--src/csharp/Grpc.Core/ClientBase.cs9
-rw-r--r--src/csharp/Grpc.Core/ContextPropagationToken.cs8
-rw-r--r--src/csharp/Grpc.Core/Grpc.Core.csproj1
-rw-r--r--src/csharp/Grpc.Core/GrpcEnvironment.cs9
-rw-r--r--src/csharp/Grpc.Core/IAsyncStreamReader.cs2
-rw-r--r--src/csharp/Grpc.Core/IAsyncStreamWriter.cs4
-rw-r--r--src/csharp/Grpc.Core/IClientStreamWriter.cs2
-rw-r--r--src/csharp/Grpc.Core/Internal/AsyncCall.cs160
-rw-r--r--src/csharp/Grpc.Core/Internal/AsyncCallBase.cs96
-rw-r--r--src/csharp/Grpc.Core/Internal/AsyncCallServer.cs13
-rw-r--r--src/csharp/Grpc.Core/Internal/CallSafeHandle.cs55
-rw-r--r--src/csharp/Grpc.Core/Internal/ChannelArgsSafeHandle.cs2
-rw-r--r--src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs2
-rw-r--r--src/csharp/Grpc.Core/Internal/ClientResponseStream.cs8
-rw-r--r--src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs2
-rw-r--r--src/csharp/Grpc.Core/Internal/CredentialsSafeHandle.cs2
-rw-r--r--src/csharp/Grpc.Core/Internal/INativeCall.cs85
-rw-r--r--src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs2
-rw-r--r--src/csharp/Grpc.Core/Internal/ServerCredentialsSafeHandle.cs2
-rw-r--r--src/csharp/Grpc.Core/Marshaller.cs2
-rw-r--r--src/csharp/Grpc.Core/Metadata.cs32
-rw-r--r--src/csharp/Grpc.Core/Method.cs2
-rw-r--r--src/csharp/Grpc.Core/Server.cs8
-rw-r--r--src/csharp/Grpc.Core/ServerCallContext.cs10
-rw-r--r--src/csharp/Grpc.Core/ServerMethods.cs8
-rw-r--r--src/csharp/Grpc.Core/ServerServiceDefinition.cs50
-rw-r--r--src/csharp/Grpc.Core/Utils/Preconditions.cs9
-rw-r--r--src/csharp/Grpc.Core/VersionInfo.cs4
-rw-r--r--src/csharp/Grpc.Core/WriteOptions.cs7
-rw-r--r--src/csharp/Grpc.Examples.MathClient/MathClient.cs2
-rw-r--r--src/csharp/Grpc.Examples.MathServer/MathServer.cs2
-rw-r--r--src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj7
-rw-r--r--src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs26
-rw-r--r--src/csharp/Grpc.Examples.Tests/packages.config2
-rw-r--r--src/csharp/Grpc.Examples/Grpc.Examples.csproj7
-rw-r--r--src/csharp/Grpc.Examples/Math.cs1651
-rw-r--r--src/csharp/Grpc.Examples/MathExamples.cs28
-rw-r--r--src/csharp/Grpc.Examples/MathGrpc.cs72
-rw-r--r--src/csharp/Grpc.Examples/MathServiceImpl.cs10
-rw-r--r--src/csharp/Grpc.Examples/packages.config2
-rw-r--r--src/csharp/Grpc.Examples/proto/math.proto16
-rw-r--r--src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj8
-rw-r--r--src/csharp/Grpc.HealthCheck.Tests/HealthClientServerTest.cs4
-rw-r--r--src/csharp/Grpc.HealthCheck.Tests/HealthServiceImplTest.cs2
-rw-r--r--src/csharp/Grpc.HealthCheck.Tests/packages.config2
-rw-r--r--src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj8
-rw-r--r--src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.nuspec2
-rw-r--r--src/csharp/Grpc.HealthCheck/Health.cs716
-rw-r--r--src/csharp/Grpc.HealthCheck/HealthGrpc.cs10
-rw-r--r--src/csharp/Grpc.HealthCheck/HealthServiceImpl.cs12
-rw-r--r--src/csharp/Grpc.HealthCheck/packages.config2
-rw-r--r--src/csharp/Grpc.HealthCheck/proto/health.proto8
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Empty.cs284
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj16
-rw-r--r--src/csharp/Grpc.IntegrationTesting/InteropClient.cs151
-rw-r--r--src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs2
-rw-r--r--src/csharp/Grpc.IntegrationTesting/InteropServer.cs3
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Messages.cs3205
-rw-r--r--src/csharp/Grpc.IntegrationTesting/SslCredentialsTest.cs4
-rw-r--r--src/csharp/Grpc.IntegrationTesting/Test.cs48
-rw-r--r--src/csharp/Grpc.IntegrationTesting/TestCredentials.cs2
-rw-r--r--src/csharp/Grpc.IntegrationTesting/TestGrpc.cs110
-rw-r--r--src/csharp/Grpc.IntegrationTesting/TestServiceImpl.cs23
-rw-r--r--src/csharp/Grpc.IntegrationTesting/packages.config1
-rw-r--r--src/csharp/Grpc.IntegrationTesting/proto/empty.proto2
-rw-r--r--src/csharp/Grpc.IntegrationTesting/proto/messages.proto36
-rw-r--r--src/csharp/Grpc.IntegrationTesting/proto/test.proto2
-rw-r--r--src/csharp/Grpc.Tools.nuspec7
-rw-r--r--src/csharp/README.md6
-rw-r--r--src/csharp/build_packages.bat9
-rw-r--r--src/csharp/doc/grpc_csharp_public.shfbproj12
-rw-r--r--src/csharp/ext/grpc_csharp_ext.c63
-rwxr-xr-xsrc/csharp/generate_proto_csharp.sh8
-rw-r--r--src/node/ext/call.cc23
-rw-r--r--src/node/ext/channel.cc2
-rw-r--r--src/node/ext/credentials.cc11
-rw-r--r--src/node/ext/server.cc51
-rw-r--r--src/node/ext/server.h3
-rw-r--r--src/node/ext/server_credentials.cc62
-rw-r--r--src/node/index.js15
-rw-r--r--src/node/interop/interop_client.js8
-rw-r--r--src/node/interop/interop_server.js4
-rw-r--r--src/node/src/client.js61
-rw-r--r--src/node/src/metadata.js181
-rw-r--r--src/node/src/server.js86
-rw-r--r--src/node/test/call_test.js2
-rw-r--r--src/node/test/end_to_end_test.js2
-rw-r--r--src/node/test/health_test.js2
-rw-r--r--src/node/test/interop_sanity_test.js2
-rw-r--r--src/node/test/math_client_test.js2
-rw-r--r--src/node/test/metadata_test.js193
-rw-r--r--src/node/test/server_test.js35
-rw-r--r--src/node/test/surface_test.js78
-rw-r--r--src/objective-c/GRPCClient/private/GRPCSecureChannel.m7
-rw-r--r--src/objective-c/README.md2
-rw-r--r--src/objective-c/tests/GRPCClientTests.m62
-rw-r--r--src/objective-c/tests/LocalClearTextTests.m2
-rw-r--r--src/php/ext/grpc/channel.c2
-rw-r--r--src/php/ext/grpc/credentials.c6
-rw-r--r--src/php/ext/grpc/server_credentials.c2
-rw-r--r--src/php/tests/generated_code/AbstractGeneratedCodeTest.php4
-rwxr-xr-xsrc/php/tests/interop/interop_client.php11
-rw-r--r--src/python/README.md14
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types.h2
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types/channel.c5
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types/client_credentials.c20
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types/server.c16
-rw-r--r--src/python/grpcio/grpc/_adapter/_c/types/server_credentials.c13
-rw-r--r--src/python/grpcio/grpc/_adapter/_intermediary_low.py5
-rw-r--r--src/python/grpcio/grpc/_adapter/_low.py3
-rw-r--r--src/python/grpcio/grpc/_adapter/fore.py2
-rw-r--r--src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxd2
-rw-r--r--src/python/grpcio/grpc/_links/invocation.py12
-rw-r--r--src/python/grpcio/grpc/_links/service.py65
-rw-r--r--src/python/grpcio/grpc/beta/__init__.py28
-rw-r--r--src/python/grpcio/grpc/beta/_connectivity_channel.py148
-rw-r--r--src/python/grpcio/grpc/beta/beta.py114
-rw-r--r--src/python/grpcio/grpc/beta/utilities.py161
-rw-r--r--src/python/grpcio/grpc/framework/core/__init__.py30
-rw-r--r--src/python/grpcio/grpc/framework/core/_constants.py59
-rw-r--r--src/python/grpcio/grpc/framework/core/_context.py92
-rw-r--r--src/python/grpcio/grpc/framework/core/_emission.py98
-rw-r--r--src/python/grpcio/grpc/framework/core/_end.py251
-rw-r--r--src/python/grpcio/grpc/framework/core/_expiration.py152
-rw-r--r--src/python/grpcio/grpc/framework/core/_ingestion.py426
-rw-r--r--src/python/grpcio/grpc/framework/core/_interfaces.py314
-rw-r--r--src/python/grpcio/grpc/framework/core/_operation.py192
-rw-r--r--src/python/grpcio/grpc/framework/core/_reception.py139
-rw-r--r--src/python/grpcio/grpc/framework/core/_termination.py212
-rw-r--r--src/python/grpcio/grpc/framework/core/_transmission.py302
-rw-r--r--src/python/grpcio/grpc/framework/core/_utilities.py46
-rw-r--r--src/python/grpcio/grpc/framework/core/implementations.py62
-rw-r--r--src/python/grpcio/grpc/framework/crust/__init__.py30
-rw-r--r--src/python/grpcio/grpc/framework/crust/_calls.py204
-rw-r--r--src/python/grpcio/grpc/framework/crust/_control.py545
-rw-r--r--src/python/grpcio/grpc/framework/crust/_service.py166
-rw-r--r--src/python/grpcio/grpc/framework/crust/implementations.py352
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/base/base.py60
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/face/__init__.py30
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/face/face.py933
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/face/utilities.py178
-rw-r--r--src/python/grpcio/grpc/framework/interfaces/links/links.py26
-rw-r--r--src/python/grpcio_test/grpc_interop/client.py8
-rw-r--r--src/python/grpcio_test/grpc_interop/methods.py16
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_links_test.py4
-rw-r--r--src/python/grpcio_test/grpc_test/_adapter/_low_test.py199
-rw-r--r--src/python/grpcio_test/grpc_test/_core_over_links_base_interface_test.py165
-rw-r--r--src/python/grpcio_test/grpc_test/_crust_over_core_over_links_face_interface_test.py160
-rw-r--r--src/python/grpcio_test/grpc_test/_cython/adapter_low_test.py2
-rw-r--r--src/python/grpcio_test/grpc_test/_links/_lonely_invocation_link_test.py2
-rw-r--r--src/python/grpcio_test/grpc_test/_links/_transmission_test.py33
-rw-r--r--src/python/grpcio_test/grpc_test/beta/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/beta/_connectivity_channel_test.py180
-rw-r--r--src/python/grpcio_test/grpc_test/beta/_utilities_test.py123
-rw-r--r--src/python/grpcio_test/grpc_test/framework/_crust_over_core_face_interface_test.py111
-rw-r--r--src/python/grpcio_test/grpc_test/framework/common/test_control.py10
-rw-r--r--src/python/grpcio_test/grpc_test/framework/core/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/framework/core/_base_interface_test.py96
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/base/test_cases.py8
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/_3069_test_constant.py37
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/__init__.py30
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/_blocking_invocation_inline_service.py251
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/_digest.py444
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/_event_invocation_synchronous_event_service.py380
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/_future_invocation_asynchronous_event_service.py379
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/_invocation.py213
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/_receiver.py95
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/_service.py332
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/_stock_service.py396
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/test_cases.py67
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/face/test_interfaces.py229
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/links/test_cases.py4
-rw-r--r--src/python/grpcio_test/grpc_test/framework/interfaces/links/test_utilities.py101
-rw-r--r--src/python/grpcio_test/setup.py1
-rw-r--r--src/ruby/ext/grpc/rb_channel.c2
-rw-r--r--src/ruby/ext/grpc/rb_credentials.c11
-rw-r--r--src/ruby/ext/grpc/rb_server_credentials.c5
-rw-r--r--templates/Makefile.template12
-rw-r--r--templates/vsprojects/vcxproj_defs.include2
-rw-r--r--test/core/channel/channel_args_test.c141
-rw-r--r--test/core/end2end/dualstack_socket_test.c36
-rw-r--r--test/core/end2end/fixtures/chttp2_fake_security.c5
-rw-r--r--test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c9
-rw-r--r--test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_poll.c9
-rw-r--r--test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_proxy.c15
-rw-r--r--test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c13
-rw-r--r--test/core/end2end/tests/default_host.c2
-rw-r--r--test/core/end2end/tests/request_response_with_payload_and_call_creds.c6
-rw-r--r--test/core/fling/server.c4
-rw-r--r--test/core/httpcli/httpcli_test.c6
-rw-r--r--test/core/iomgr/endpoint_tests.c9
-rw-r--r--test/core/iomgr/fd_posix_test.c12
-rw-r--r--test/core/iomgr/tcp_client_posix_test.c40
-rw-r--r--test/core/iomgr/tcp_posix_test.c15
-rw-r--r--test/core/iomgr/tcp_server_posix_test.c3
-rw-r--r--test/core/iomgr/udp_server_test.c5
-rw-r--r--test/core/security/credentials_test.c42
-rw-r--r--test/core/security/fetch_oauth2.c6
-rw-r--r--test/core/security/oauth2_utils.c2
-rw-r--r--test/core/security/print_google_default_creds_token.c4
-rw-r--r--test/core/security/verify_jwt.c2
-rw-r--r--test/core/util/port_posix.c2
-rw-r--r--test/core/util/reconnect_server.c3
-rw-r--r--test/core/util/test_config.h2
-rw-r--r--test/cpp/client/channel_arguments_test.cc2
-rw-r--r--test/cpp/common/auth_property_iterator_test.cc17
-rw-r--r--test/cpp/common/secure_auth_context_test.cc27
-rw-r--r--test/cpp/end2end/async_end2end_test.cc301
-rw-r--r--test/cpp/end2end/client_crash_test.cc23
-rw-r--r--test/cpp/end2end/client_crash_test_server.cc1
-rw-r--r--test/cpp/end2end/end2end_test.cc87
-rw-r--r--test/cpp/end2end/generic_end2end_test.cc34
-rw-r--r--test/cpp/end2end/mock_test.cc29
-rw-r--r--test/cpp/end2end/server_crash_test.cc21
-rw-r--r--test/cpp/end2end/server_crash_test_client.cc8
-rw-r--r--test/cpp/end2end/shutdown_test.cc22
-rw-r--r--test/cpp/end2end/thread_stress_test.cc29
-rw-r--r--test/cpp/end2end/zookeeper_test.cc17
-rw-r--r--test/cpp/interop/client.cc5
-rw-r--r--test/cpp/interop/client_helper.cc13
-rw-r--r--test/cpp/interop/client_helper.h5
-rw-r--r--test/cpp/interop/interop_client.cc43
-rw-r--r--test/cpp/interop/interop_client.h10
-rw-r--r--test/cpp/interop/interop_test.cc11
-rw-r--r--test/cpp/interop/reconnect_interop_client.cc7
-rw-r--r--test/cpp/interop/reconnect_interop_server.cc9
-rw-r--r--test/cpp/interop/server.cc22
-rw-r--r--test/cpp/interop/server_helper.cc1
-rw-r--r--test/cpp/qps/client.h12
-rw-r--r--test/cpp/qps/client_async.cc6
-rw-r--r--test/cpp/qps/client_sync.cc9
-rw-r--r--test/cpp/qps/driver.cc30
-rw-r--r--test/cpp/qps/interarrival.h2
-rw-r--r--test/cpp/qps/perf_db_client.h7
-rw-r--r--test/cpp/qps/qps_interarrival_test.cc4
-rw-r--r--test/cpp/qps/qps_openloop_test.cc4
-rw-r--r--test/cpp/qps/qps_test.cc4
-rw-r--r--test/cpp/qps/qps_test_with_poll.cc4
-rw-r--r--test/cpp/qps/qps_worker.cc5
-rw-r--r--test/cpp/qps/report.h7
-rw-r--r--test/cpp/qps/server_async.cc10
-rw-r--r--test/cpp/qps/server_sync.cc23
-rw-r--r--test/cpp/qps/stats.h3
-rw-r--r--test/cpp/qps/sync_streaming_ping_pong_test.cc4
-rw-r--r--test/cpp/qps/sync_unary_ping_pong_test.cc4
-rw-r--r--test/cpp/qps/timer.cc1
-rw-r--r--test/cpp/qps/worker.cc2
-rw-r--r--test/cpp/util/byte_buffer_test.cc4
-rw-r--r--test/cpp/util/cli_call.cc23
-rw-r--r--test/cpp/util/cli_call.h19
-rw-r--r--test/cpp/util/cli_call_test.cc36
-rw-r--r--test/cpp/util/create_test_channel.cc16
-rw-r--r--test/cpp/util/create_test_channel.h11
-rw-r--r--test/cpp/util/grpc_cli.cc35
-rw-r--r--test/cpp/util/slice_test.cc2
-rw-r--r--test/cpp/util/status_test.cc3
-rw-r--r--test/cpp/util/string_ref_helper.cc44
-rw-r--r--test/cpp/util/string_ref_helper.h47
-rw-r--r--test/cpp/util/string_ref_test.cc215
-rw-r--r--test/cpp/util/time_test.cc2
m---------third_party/googletest0
m---------third_party/protobuf0
-rw-r--r--tools/codegen/core/gen_legal_metadata_characters.c76
-rw-r--r--tools/doxygen/Doxyfile.c++36
-rw-r--r--tools/doxygen/Doxyfile.c++.internal44
-rw-r--r--tools/doxygen/Doxyfile.core.internal7
-rwxr-xr-xtools/jenkins/run_jenkins.sh6
-rwxr-xr-xtools/run_tests/build_php.sh1
-rwxr-xr-xtools/run_tests/jobset.py10
-rw-r--r--tools/run_tests/run_csharp.bat2
-rwxr-xr-xtools/run_tests/run_python.sh12
-rwxr-xr-xtools/run_tests/run_sanity.sh3
-rwxr-xr-xtools/run_tests/run_tests.py26
-rw-r--r--tools/run_tests/sources_and_headers.json352
-rw-r--r--tools/run_tests/tests.json40
-rw-r--r--vsprojects/Grpc.mak60
-rw-r--r--vsprojects/README.md13
-rw-r--r--vsprojects/build_plugins.bat23
-rw-r--r--vsprojects/gpr/gpr.vcxproj1
-rw-r--r--vsprojects/gpr/gpr.vcxproj.filters3
-rw-r--r--vsprojects/grpc++/grpc++.vcxproj47
-rw-r--r--vsprojects/grpc++/grpc++.vcxproj.filters112
-rw-r--r--vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj47
-rw-r--r--vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj.filters112
-rw-r--r--vsprojects/grpc/grpc.vcxproj7
-rw-r--r--vsprojects/grpc/grpc.vcxproj.filters17
-rw-r--r--vsprojects/grpc_cpp_plugin/grpc_cpp_plugin.vcxproj1
-rw-r--r--vsprojects/grpc_csharp_plugin/grpc_csharp_plugin.vcxproj1
-rw-r--r--vsprojects/grpc_objective_c_plugin/grpc_objective_c_plugin.vcxproj1
-rw-r--r--vsprojects/grpc_plugin_support/grpc_plugin_support.vcxproj4
-rw-r--r--vsprojects/grpc_python_plugin/grpc_python_plugin.vcxproj1
-rw-r--r--vsprojects/grpc_ruby_plugin/grpc_ruby_plugin.vcxproj1
-rw-r--r--vsprojects/grpc_unsecure/grpc_unsecure.vcxproj7
-rw-r--r--vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters17
-rw-r--r--vsprojects/protobuf.props2
-rw-r--r--vsprojects/protoc.props2
1238 files changed, 44926 insertions, 8988 deletions
diff --git a/.gitmodules b/.gitmodules
index a5cf3aaaee..2d0c009760 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -8,7 +8,10 @@
[submodule "third_party/protobuf"]
path = third_party/protobuf
url = https://github.com/google/protobuf.git
- branch = v3.0.0-alpha-3
+ branch = v3.0.0-beta-1
[submodule "third_party/gflags"]
path = third_party/gflags
url = https://github.com/gflags/gflags.git
+[submodule "third_party/googletest"]
+ path = third_party/googletest
+ url = https://github.com/google/googletest.git
diff --git a/BUILD b/BUILD
index 7eb59797d4..d612d9c1ea 100644
--- a/BUILD
+++ b/BUILD
@@ -51,6 +51,7 @@ cc_library(
"src/core/support/string.h",
"src/core/support/string_win32.h",
"src/core/support/thd_internal.h",
+ "src/core/support/time_precise.h",
"src/core/support/alloc.c",
"src/core/support/cmdline.c",
"src/core/support/cpu_iphone.c",
@@ -143,7 +144,7 @@ cc_library(
"src/core/tsi/ssl_transport_security.h",
"src/core/tsi/transport_security.h",
"src/core/tsi/transport_security_interface.h",
- "src/core/channel/census_filter.h",
+ "src/core/census/grpc_filter.h",
"src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h",
"src/core/channel/client_channel.h",
@@ -208,7 +209,8 @@ cc_library(
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
"src/core/profiling/timers.h",
- "src/core/profiling/timers_preciseclock.h",
+ "src/core/statistics/census_interface.h",
+ "src/core/statistics/census_rpc_stats.h",
"src/core/surface/byte_buffer_queue.h",
"src/core/surface/call.h",
"src/core/surface/channel.h",
@@ -267,6 +269,7 @@ cc_library(
"src/core/tsi/ssl_transport_security.c",
"src/core/tsi/transport_security.c",
"src/core/census/grpc_context.c",
+ "src/core/census/grpc_filter.c",
"src/core/channel/channel_args.c",
"src/core/channel/channel_stack.c",
"src/core/channel/client_channel.c",
@@ -409,7 +412,7 @@ cc_library(
cc_library(
name = "grpc_unsecure",
srcs = [
- "src/core/channel/census_filter.h",
+ "src/core/census/grpc_filter.h",
"src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h",
"src/core/channel/client_channel.h",
@@ -474,7 +477,8 @@ cc_library(
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
"src/core/profiling/timers.h",
- "src/core/profiling/timers_preciseclock.h",
+ "src/core/statistics/census_interface.h",
+ "src/core/statistics/census_rpc_stats.h",
"src/core/surface/byte_buffer_queue.h",
"src/core/surface/call.h",
"src/core/surface/channel.h",
@@ -513,6 +517,7 @@ cc_library(
"src/core/census/rpc_stat_id.h",
"src/core/surface/init_unsecure.c",
"src/core/census/grpc_context.c",
+ "src/core/census/grpc_filter.c",
"src/core/channel/channel_args.c",
"src/core/channel/channel_stack.c",
"src/core/channel/client_channel.c",
@@ -675,8 +680,11 @@ cc_library(
"src/cpp/client/secure_credentials.h",
"src/cpp/common/secure_auth_context.h",
"src/cpp/server/secure_server_credentials.h",
- "src/cpp/client/channel.h",
+ "src/cpp/client/create_channel_internal.h",
"src/cpp/common/create_auth_context.h",
+ "src/cpp/server/dynamic_thread_pool.h",
+ "src/cpp/server/fixed_size_thread_pool.h",
+ "src/cpp/server/thread_pool_interface.h",
"src/cpp/client/secure_channel_arguments.cc",
"src/cpp/client/secure_credentials.cc",
"src/cpp/common/auth_property_iterator.cc",
@@ -687,10 +695,10 @@ cc_library(
"src/cpp/client/channel_arguments.cc",
"src/cpp/client/client_context.cc",
"src/cpp/client/create_channel.cc",
+ "src/cpp/client/create_channel_internal.cc",
"src/cpp/client/credentials.cc",
"src/cpp/client/generic_stub.cc",
"src/cpp/client/insecure_credentials.cc",
- "src/cpp/client/internal_stub.cc",
"src/cpp/common/call.cc",
"src/cpp/common/completion_queue.cc",
"src/cpp/common/rpc_method.cc",
@@ -707,28 +715,20 @@ cc_library(
"src/cpp/util/byte_buffer.cc",
"src/cpp/util/slice.cc",
"src/cpp/util/status.cc",
+ "src/cpp/util/string_ref.cc",
"src/cpp/util/time.cc",
],
hdrs = [
- "include/grpc++/async_generic_service.h",
- "include/grpc++/async_unary_call.h",
- "include/grpc++/auth_context.h",
- "include/grpc++/byte_buffer.h",
- "include/grpc++/channel_arguments.h",
- "include/grpc++/channel_interface.h",
+ "include/grpc++/channel.h",
"include/grpc++/client_context.h",
"include/grpc++/completion_queue.h",
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
"include/grpc++/create_channel.h",
"include/grpc++/credentials.h",
- "include/grpc++/dynamic_thread_pool.h",
- "include/grpc++/fixed_size_thread_pool.h",
- "include/grpc++/generic_stub.h",
+ "include/grpc++/generic/async_generic_service.h",
+ "include/grpc++/generic/generic_stub.h",
"include/grpc++/impl/call.h",
"include/grpc++/impl/client_unary_call.h",
"include/grpc++/impl/grpc_library.h",
- "include/grpc++/impl/internal_stub.h",
"include/grpc++/impl/proto_utils.h",
"include/grpc++/impl/rpc_method.h",
"include/grpc++/impl/rpc_service_method.h",
@@ -744,13 +744,20 @@ cc_library(
"include/grpc++/server_builder.h",
"include/grpc++/server_context.h",
"include/grpc++/server_credentials.h",
- "include/grpc++/slice.h",
- "include/grpc++/status.h",
- "include/grpc++/status_code_enum.h",
- "include/grpc++/stream.h",
- "include/grpc++/stub_options.h",
- "include/grpc++/thread_pool_interface.h",
- "include/grpc++/time.h",
+ "include/grpc++/support/async_stream.h",
+ "include/grpc++/support/async_unary_call.h",
+ "include/grpc++/support/auth_context.h",
+ "include/grpc++/support/byte_buffer.h",
+ "include/grpc++/support/channel_arguments.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
+ "include/grpc++/support/slice.h",
+ "include/grpc++/support/status.h",
+ "include/grpc++/support/status_code_enum.h",
+ "include/grpc++/support/string_ref.h",
+ "include/grpc++/support/stub_options.h",
+ "include/grpc++/support/sync_stream.h",
+ "include/grpc++/support/time.h",
],
includes = [
"include",
@@ -767,17 +774,20 @@ cc_library(
cc_library(
name = "grpc++_unsecure",
srcs = [
- "src/cpp/client/channel.h",
+ "src/cpp/client/create_channel_internal.h",
"src/cpp/common/create_auth_context.h",
+ "src/cpp/server/dynamic_thread_pool.h",
+ "src/cpp/server/fixed_size_thread_pool.h",
+ "src/cpp/server/thread_pool_interface.h",
"src/cpp/common/insecure_create_auth_context.cc",
"src/cpp/client/channel.cc",
"src/cpp/client/channel_arguments.cc",
"src/cpp/client/client_context.cc",
"src/cpp/client/create_channel.cc",
+ "src/cpp/client/create_channel_internal.cc",
"src/cpp/client/credentials.cc",
"src/cpp/client/generic_stub.cc",
"src/cpp/client/insecure_credentials.cc",
- "src/cpp/client/internal_stub.cc",
"src/cpp/common/call.cc",
"src/cpp/common/completion_queue.cc",
"src/cpp/common/rpc_method.cc",
@@ -794,28 +804,20 @@ cc_library(
"src/cpp/util/byte_buffer.cc",
"src/cpp/util/slice.cc",
"src/cpp/util/status.cc",
+ "src/cpp/util/string_ref.cc",
"src/cpp/util/time.cc",
],
hdrs = [
- "include/grpc++/async_generic_service.h",
- "include/grpc++/async_unary_call.h",
- "include/grpc++/auth_context.h",
- "include/grpc++/byte_buffer.h",
- "include/grpc++/channel_arguments.h",
- "include/grpc++/channel_interface.h",
+ "include/grpc++/channel.h",
"include/grpc++/client_context.h",
"include/grpc++/completion_queue.h",
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
"include/grpc++/create_channel.h",
"include/grpc++/credentials.h",
- "include/grpc++/dynamic_thread_pool.h",
- "include/grpc++/fixed_size_thread_pool.h",
- "include/grpc++/generic_stub.h",
+ "include/grpc++/generic/async_generic_service.h",
+ "include/grpc++/generic/generic_stub.h",
"include/grpc++/impl/call.h",
"include/grpc++/impl/client_unary_call.h",
"include/grpc++/impl/grpc_library.h",
- "include/grpc++/impl/internal_stub.h",
"include/grpc++/impl/proto_utils.h",
"include/grpc++/impl/rpc_method.h",
"include/grpc++/impl/rpc_service_method.h",
@@ -831,13 +833,20 @@ cc_library(
"include/grpc++/server_builder.h",
"include/grpc++/server_context.h",
"include/grpc++/server_credentials.h",
- "include/grpc++/slice.h",
- "include/grpc++/status.h",
- "include/grpc++/status_code_enum.h",
- "include/grpc++/stream.h",
- "include/grpc++/stub_options.h",
- "include/grpc++/thread_pool_interface.h",
- "include/grpc++/time.h",
+ "include/grpc++/support/async_stream.h",
+ "include/grpc++/support/async_unary_call.h",
+ "include/grpc++/support/auth_context.h",
+ "include/grpc++/support/byte_buffer.h",
+ "include/grpc++/support/channel_arguments.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
+ "include/grpc++/support/slice.h",
+ "include/grpc++/support/status.h",
+ "include/grpc++/support/status_code_enum.h",
+ "include/grpc++/support/string_ref.h",
+ "include/grpc++/support/stub_options.h",
+ "include/grpc++/support/sync_stream.h",
+ "include/grpc++/support/time.h",
],
includes = [
"include",
@@ -854,8 +863,8 @@ cc_library(
cc_library(
name = "grpc_plugin_support",
srcs = [
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
"src/compiler/config.h",
"src/compiler/cpp_generator.h",
"src/compiler/cpp_generator_helpers.h",
@@ -982,6 +991,7 @@ objc_library(
"src/core/support/string.h",
"src/core/support/string_win32.h",
"src/core/support/thd_internal.h",
+ "src/core/support/time_precise.h",
],
includes = [
"include",
@@ -1017,6 +1027,7 @@ objc_library(
"src/core/tsi/ssl_transport_security.c",
"src/core/tsi/transport_security.c",
"src/core/census/grpc_context.c",
+ "src/core/census/grpc_filter.c",
"src/core/channel/channel_args.c",
"src/core/channel/channel_stack.c",
"src/core/channel/client_channel.c",
@@ -1156,7 +1167,7 @@ objc_library(
"src/core/tsi/ssl_transport_security.h",
"src/core/tsi/transport_security.h",
"src/core/tsi/transport_security_interface.h",
- "src/core/channel/census_filter.h",
+ "src/core/census/grpc_filter.h",
"src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h",
"src/core/channel/client_channel.h",
@@ -1221,7 +1232,8 @@ objc_library(
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
"src/core/profiling/timers.h",
- "src/core/profiling/timers_preciseclock.h",
+ "src/core/statistics/census_interface.h",
+ "src/core/statistics/census_rpc_stats.h",
"src/core/surface/byte_buffer_queue.h",
"src/core/surface/call.h",
"src/core/surface/channel.h",
diff --git a/Makefile b/Makefile
index 31628b4412..135d38ccd8 100644
--- a/Makefile
+++ b/Makefile
@@ -299,11 +299,7 @@ LIBS = m z pthread
LDFLAGS += -pthread
endif
-ifneq ($(wildcard /usr/src/gtest/src/gtest-all.cc),)
-GTEST_LIB = /usr/src/gtest/src/gtest-all.cc -I/usr/src/gtest
-else
-GTEST_LIB = -lgtest
-endif
+GTEST_LIB = -Ithird_party/googletest/include -Ithird_party/googletest third_party/googletest/src/gtest-all.cc
GTEST_LIB += -lgflags
ifeq ($(V),1)
E = @:
@@ -612,6 +608,8 @@ PROTOBUF_PKG_CONFIG = false
PC_REQUIRES_GRPCXX =
PC_LIBS_GRPCXX =
+CPPFLAGS := -Ithird_party/googletest/include $(CPPFLAGS)
+
ifeq ($(HAS_SYSTEM_PROTOBUF),true)
ifeq ($(HAS_PKG_CONFIG),true)
PROTOBUF_PKG_CONFIG = true
@@ -793,6 +791,7 @@ fling_server: $(BINDIR)/$(CONFIG)/fling_server
fling_stream_test: $(BINDIR)/$(CONFIG)/fling_stream_test
fling_test: $(BINDIR)/$(CONFIG)/fling_test
gen_hpack_tables: $(BINDIR)/$(CONFIG)/gen_hpack_tables
+gen_legal_metadata_characters: $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters
gpr_cmdline_test: $(BINDIR)/$(CONFIG)/gpr_cmdline_test
gpr_env_test: $(BINDIR)/$(CONFIG)/gpr_env_test
gpr_file_test: $(BINDIR)/$(CONFIG)/gpr_file_test
@@ -811,6 +810,7 @@ gpr_useful_test: $(BINDIR)/$(CONFIG)/gpr_useful_test
grpc_auth_context_test: $(BINDIR)/$(CONFIG)/grpc_auth_context_test
grpc_base64_test: $(BINDIR)/$(CONFIG)/grpc_base64_test
grpc_byte_buffer_reader_test: $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test
+grpc_channel_args_test: $(BINDIR)/$(CONFIG)/grpc_channel_args_test
grpc_channel_stack_test: $(BINDIR)/$(CONFIG)/grpc_channel_stack_test
grpc_completion_queue_test: $(BINDIR)/$(CONFIG)/grpc_completion_queue_test
grpc_create_jwt: $(BINDIR)/$(CONFIG)/grpc_create_jwt
@@ -861,10 +861,9 @@ client_crash_test_server: $(BINDIR)/$(CONFIG)/client_crash_test_server
credentials_test: $(BINDIR)/$(CONFIG)/credentials_test
cxx_byte_buffer_test: $(BINDIR)/$(CONFIG)/cxx_byte_buffer_test
cxx_slice_test: $(BINDIR)/$(CONFIG)/cxx_slice_test
+cxx_string_ref_test: $(BINDIR)/$(CONFIG)/cxx_string_ref_test
cxx_time_test: $(BINDIR)/$(CONFIG)/cxx_time_test
-dynamic_thread_pool_test: $(BINDIR)/$(CONFIG)/dynamic_thread_pool_test
end2end_test: $(BINDIR)/$(CONFIG)/end2end_test
-fixed_size_thread_pool_test: $(BINDIR)/$(CONFIG)/fixed_size_thread_pool_test
generic_end2end_test: $(BINDIR)/$(CONFIG)/generic_end2end_test
grpc_cli: $(BINDIR)/$(CONFIG)/grpc_cli
grpc_cpp_plugin: $(BINDIR)/$(CONFIG)/grpc_cpp_plugin
@@ -876,9 +875,6 @@ interop_client: $(BINDIR)/$(CONFIG)/interop_client
interop_server: $(BINDIR)/$(CONFIG)/interop_server
interop_test: $(BINDIR)/$(CONFIG)/interop_test
mock_test: $(BINDIR)/$(CONFIG)/mock_test
-pubsub_client: $(BINDIR)/$(CONFIG)/pubsub_client
-pubsub_publisher_test: $(BINDIR)/$(CONFIG)/pubsub_publisher_test
-pubsub_subscriber_test: $(BINDIR)/$(CONFIG)/pubsub_subscriber_test
qps_driver: $(BINDIR)/$(CONFIG)/qps_driver
qps_interarrival_test: $(BINDIR)/$(CONFIG)/qps_interarrival_test
qps_openloop_test: $(BINDIR)/$(CONFIG)/qps_openloop_test
@@ -1652,8 +1648,8 @@ else
$(Q)(cd third_party/openssl ; CC="$(CC) $(PIC_CPPFLAGS) -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_EXTRA)" ./config no-asm $(OPENSSL_CONFIG_$(CONFIG)))
endif
endif
- $(Q)$(MAKE) -C third_party/openssl clean
- $(Q)(unset CPPFLAGS; $(MAKE) -C third_party/openssl build_crypto build_ssl)
+ $(Q)$(MAKE) -j 1 -C third_party/openssl clean
+ $(Q)(unset CPPFLAGS; $(MAKE) -j 1 -C third_party/openssl build_crypto build_ssl)
$(Q)mkdir -p $(LIBDIR)/$(CONFIG)/openssl
$(Q)cp third_party/openssl/libssl.a third_party/openssl/libcrypto.a $(LIBDIR)/$(CONFIG)/openssl
@@ -1731,12 +1727,12 @@ endif
buildtests: buildtests_c buildtests_cxx buildtests_zookeeper
-buildtests_c: privatelibs_c $(BINDIR)/$(CONFIG)/alarm_heap_test $(BINDIR)/$(CONFIG)/alarm_list_test $(BINDIR)/$(CONFIG)/alarm_test $(BINDIR)/$(CONFIG)/alpn_test $(BINDIR)/$(CONFIG)/bin_encoder_test $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test $(BINDIR)/$(CONFIG)/chttp2_stream_encoder_test $(BINDIR)/$(CONFIG)/chttp2_stream_map_test $(BINDIR)/$(CONFIG)/compression_test $(BINDIR)/$(CONFIG)/dualstack_socket_test $(BINDIR)/$(CONFIG)/fd_conservation_posix_test $(BINDIR)/$(CONFIG)/fd_posix_test $(BINDIR)/$(CONFIG)/fling_client $(BINDIR)/$(CONFIG)/fling_server $(BINDIR)/$(CONFIG)/fling_stream_test $(BINDIR)/$(CONFIG)/fling_test $(BINDIR)/$(CONFIG)/gpr_cmdline_test $(BINDIR)/$(CONFIG)/gpr_env_test $(BINDIR)/$(CONFIG)/gpr_file_test $(BINDIR)/$(CONFIG)/gpr_histogram_test $(BINDIR)/$(CONFIG)/gpr_host_port_test $(BINDIR)/$(CONFIG)/gpr_log_test $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test $(BINDIR)/$(CONFIG)/gpr_slice_test $(BINDIR)/$(CONFIG)/gpr_stack_lockfree_test $(BINDIR)/$(CONFIG)/gpr_string_test $(BINDIR)/$(CONFIG)/gpr_sync_test $(BINDIR)/$(CONFIG)/gpr_thd_test $(BINDIR)/$(CONFIG)/gpr_time_test $(BINDIR)/$(CONFIG)/gpr_tls_test $(BINDIR)/$(CONFIG)/gpr_useful_test $(BINDIR)/$(CONFIG)/grpc_auth_context_test $(BINDIR)/$(CONFIG)/grpc_base64_test $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test $(BINDIR)/$(CONFIG)/grpc_channel_stack_test $(BINDIR)/$(CONFIG)/grpc_completion_queue_test $(BINDIR)/$(CONFIG)/grpc_credentials_test $(BINDIR)/$(CONFIG)/grpc_json_token_test $(BINDIR)/$(CONFIG)/grpc_jwt_verifier_test $(BINDIR)/$(CONFIG)/grpc_security_connector_test $(BINDIR)/$(CONFIG)/grpc_stream_op_test $(BINDIR)/$(CONFIG)/hpack_parser_test $(BINDIR)/$(CONFIG)/hpack_table_test $(BINDIR)/$(CONFIG)/httpcli_format_request_test $(BINDIR)/$(CONFIG)/httpcli_parser_test $(BINDIR)/$(CONFIG)/httpcli_test $(BINDIR)/$(CONFIG)/json_rewrite $(BINDIR)/$(CONFIG)/json_rewrite_test $(BINDIR)/$(CONFIG)/json_test $(BINDIR)/$(CONFIG)/lame_client_test $(BINDIR)/$(CONFIG)/message_compress_test $(BINDIR)/$(CONFIG)/multi_init_test $(BINDIR)/$(CONFIG)/multiple_server_queues_test $(BINDIR)/$(CONFIG)/murmur_hash_test $(BINDIR)/$(CONFIG)/no_server_test $(BINDIR)/$(CONFIG)/resolve_address_test $(BINDIR)/$(CONFIG)/secure_endpoint_test $(BINDIR)/$(CONFIG)/sockaddr_utils_test $(BINDIR)/$(CONFIG)/tcp_client_posix_test $(BINDIR)/$(CONFIG)/tcp_posix_test $(BINDIR)/$(CONFIG)/tcp_server_posix_test $(BINDIR)/$(CONFIG)/time_averaged_stats_test $(BINDIR)/$(CONFIG)/timeout_encoding_test $(BINDIR)/$(CONFIG)/timers_test $(BINDIR)/$(CONFIG)/transport_metadata_test $(BINDIR)/$(CONFIG)/transport_security_test $(BINDIR)/$(CONFIG)/udp_server_test $(BINDIR)/$(CONFIG)/uri_parser_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_default_host_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_default_host_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_default_host_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_default_host_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_default_host_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_default_host_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_default_host_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_default_host_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_default_host_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_channel_connectivity_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_default_host_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_channel_connectivity_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_default_host_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_channel_connectivity_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_channel_connectivity_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_channel_connectivity_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_default_host_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_default_host_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test
+buildtests_c: privatelibs_c $(BINDIR)/$(CONFIG)/alarm_heap_test $(BINDIR)/$(CONFIG)/alarm_list_test $(BINDIR)/$(CONFIG)/alarm_test $(BINDIR)/$(CONFIG)/alpn_test $(BINDIR)/$(CONFIG)/bin_encoder_test $(BINDIR)/$(CONFIG)/chttp2_status_conversion_test $(BINDIR)/$(CONFIG)/chttp2_stream_encoder_test $(BINDIR)/$(CONFIG)/chttp2_stream_map_test $(BINDIR)/$(CONFIG)/compression_test $(BINDIR)/$(CONFIG)/dualstack_socket_test $(BINDIR)/$(CONFIG)/fd_conservation_posix_test $(BINDIR)/$(CONFIG)/fd_posix_test $(BINDIR)/$(CONFIG)/fling_client $(BINDIR)/$(CONFIG)/fling_server $(BINDIR)/$(CONFIG)/fling_stream_test $(BINDIR)/$(CONFIG)/fling_test $(BINDIR)/$(CONFIG)/gpr_cmdline_test $(BINDIR)/$(CONFIG)/gpr_env_test $(BINDIR)/$(CONFIG)/gpr_file_test $(BINDIR)/$(CONFIG)/gpr_histogram_test $(BINDIR)/$(CONFIG)/gpr_host_port_test $(BINDIR)/$(CONFIG)/gpr_log_test $(BINDIR)/$(CONFIG)/gpr_slice_buffer_test $(BINDIR)/$(CONFIG)/gpr_slice_test $(BINDIR)/$(CONFIG)/gpr_stack_lockfree_test $(BINDIR)/$(CONFIG)/gpr_string_test $(BINDIR)/$(CONFIG)/gpr_sync_test $(BINDIR)/$(CONFIG)/gpr_thd_test $(BINDIR)/$(CONFIG)/gpr_time_test $(BINDIR)/$(CONFIG)/gpr_tls_test $(BINDIR)/$(CONFIG)/gpr_useful_test $(BINDIR)/$(CONFIG)/grpc_auth_context_test $(BINDIR)/$(CONFIG)/grpc_base64_test $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test $(BINDIR)/$(CONFIG)/grpc_channel_args_test $(BINDIR)/$(CONFIG)/grpc_channel_stack_test $(BINDIR)/$(CONFIG)/grpc_completion_queue_test $(BINDIR)/$(CONFIG)/grpc_credentials_test $(BINDIR)/$(CONFIG)/grpc_json_token_test $(BINDIR)/$(CONFIG)/grpc_jwt_verifier_test $(BINDIR)/$(CONFIG)/grpc_security_connector_test $(BINDIR)/$(CONFIG)/grpc_stream_op_test $(BINDIR)/$(CONFIG)/hpack_parser_test $(BINDIR)/$(CONFIG)/hpack_table_test $(BINDIR)/$(CONFIG)/httpcli_format_request_test $(BINDIR)/$(CONFIG)/httpcli_parser_test $(BINDIR)/$(CONFIG)/httpcli_test $(BINDIR)/$(CONFIG)/json_rewrite $(BINDIR)/$(CONFIG)/json_rewrite_test $(BINDIR)/$(CONFIG)/json_test $(BINDIR)/$(CONFIG)/lame_client_test $(BINDIR)/$(CONFIG)/message_compress_test $(BINDIR)/$(CONFIG)/multi_init_test $(BINDIR)/$(CONFIG)/multiple_server_queues_test $(BINDIR)/$(CONFIG)/murmur_hash_test $(BINDIR)/$(CONFIG)/no_server_test $(BINDIR)/$(CONFIG)/resolve_address_test $(BINDIR)/$(CONFIG)/secure_endpoint_test $(BINDIR)/$(CONFIG)/sockaddr_utils_test $(BINDIR)/$(CONFIG)/tcp_client_posix_test $(BINDIR)/$(CONFIG)/tcp_posix_test $(BINDIR)/$(CONFIG)/tcp_server_posix_test $(BINDIR)/$(CONFIG)/time_averaged_stats_test $(BINDIR)/$(CONFIG)/timeout_encoding_test $(BINDIR)/$(CONFIG)/timers_test $(BINDIR)/$(CONFIG)/transport_metadata_test $(BINDIR)/$(CONFIG)/transport_security_test $(BINDIR)/$(CONFIG)/udp_server_test $(BINDIR)/$(CONFIG)/uri_parser_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_default_host_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fake_security_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_default_host_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_default_host_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_default_host_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_default_host_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_no_op_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_default_host_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_default_host_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_poll_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_default_host_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_channel_connectivity_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_default_host_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_no_op_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_simple_ssl_with_oauth2_fullstack_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_bad_hostname_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_accept_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_accept_and_writes_closed_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_before_invoke_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_in_a_vacuum_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_census_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_inflight_calls_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_tags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_empty_batch_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_graceful_server_shutdown_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_invoke_large_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_max_concurrent_streams_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_max_message_length_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_no_op_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_ping_pong_streaming_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_registered_call_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_binary_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_payload_and_call_creds_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_trailing_metadata_and_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_compressed_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_flags_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_large_metadata_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_payload_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_server_finishes_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_simple_request_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_simple_request_with_high_initial_sequence_number_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_channel_connectivity_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_default_host_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_channel_connectivity_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_default_host_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_compression_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_channel_connectivity_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_channel_connectivity_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_uds_posix_with_poll_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_channel_connectivity_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_default_host_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_poll_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_default_host_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_disappearing_server_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_delayed_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_one_byte_at_a_time_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_bad_hostname_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_accept_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_accept_and_writes_closed_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_after_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_before_invoke_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_cancel_in_a_vacuum_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_census_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_inflight_calls_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_tags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_empty_batch_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_graceful_server_shutdown_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_invoke_large_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_max_concurrent_streams_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_max_message_length_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_no_op_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_ping_pong_streaming_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_registered_call_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_binary_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_response_with_trailing_metadata_and_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_compressed_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_flags_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_large_metadata_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_request_with_payload_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_server_finishes_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_simple_request_unsecure_test $(BINDIR)/$(CONFIG)/chttp2_socket_pair_with_grpc_trace_simple_request_with_high_initial_sequence_number_unsecure_test $(BINDIR)/$(CONFIG)/connection_prefix_bad_client_test $(BINDIR)/$(CONFIG)/initial_settings_frame_bad_client_test
-buildtests_cxx: buildtests_zookeeper privatelibs_cxx $(BINDIR)/$(CONFIG)/async_end2end_test $(BINDIR)/$(CONFIG)/async_streaming_ping_pong_test $(BINDIR)/$(CONFIG)/async_unary_ping_pong_test $(BINDIR)/$(CONFIG)/auth_property_iterator_test $(BINDIR)/$(CONFIG)/channel_arguments_test $(BINDIR)/$(CONFIG)/cli_call_test $(BINDIR)/$(CONFIG)/client_crash_test $(BINDIR)/$(CONFIG)/client_crash_test_server $(BINDIR)/$(CONFIG)/credentials_test $(BINDIR)/$(CONFIG)/cxx_byte_buffer_test $(BINDIR)/$(CONFIG)/cxx_slice_test $(BINDIR)/$(CONFIG)/cxx_time_test $(BINDIR)/$(CONFIG)/dynamic_thread_pool_test $(BINDIR)/$(CONFIG)/end2end_test $(BINDIR)/$(CONFIG)/fixed_size_thread_pool_test $(BINDIR)/$(CONFIG)/generic_end2end_test $(BINDIR)/$(CONFIG)/grpc_cli $(BINDIR)/$(CONFIG)/interop_client $(BINDIR)/$(CONFIG)/interop_server $(BINDIR)/$(CONFIG)/interop_test $(BINDIR)/$(CONFIG)/mock_test $(BINDIR)/$(CONFIG)/qps_interarrival_test $(BINDIR)/$(CONFIG)/qps_openloop_test $(BINDIR)/$(CONFIG)/qps_test $(BINDIR)/$(CONFIG)/reconnect_interop_client $(BINDIR)/$(CONFIG)/reconnect_interop_server $(BINDIR)/$(CONFIG)/secure_auth_context_test $(BINDIR)/$(CONFIG)/server_crash_test $(BINDIR)/$(CONFIG)/server_crash_test_client $(BINDIR)/$(CONFIG)/status_test $(BINDIR)/$(CONFIG)/sync_streaming_ping_pong_test $(BINDIR)/$(CONFIG)/sync_unary_ping_pong_test $(BINDIR)/$(CONFIG)/thread_stress_test
+buildtests_cxx: buildtests_zookeeper privatelibs_cxx $(BINDIR)/$(CONFIG)/async_end2end_test $(BINDIR)/$(CONFIG)/async_streaming_ping_pong_test $(BINDIR)/$(CONFIG)/async_unary_ping_pong_test $(BINDIR)/$(CONFIG)/auth_property_iterator_test $(BINDIR)/$(CONFIG)/channel_arguments_test $(BINDIR)/$(CONFIG)/cli_call_test $(BINDIR)/$(CONFIG)/client_crash_test $(BINDIR)/$(CONFIG)/client_crash_test_server $(BINDIR)/$(CONFIG)/credentials_test $(BINDIR)/$(CONFIG)/cxx_byte_buffer_test $(BINDIR)/$(CONFIG)/cxx_slice_test $(BINDIR)/$(CONFIG)/cxx_string_ref_test $(BINDIR)/$(CONFIG)/cxx_time_test $(BINDIR)/$(CONFIG)/end2end_test $(BINDIR)/$(CONFIG)/generic_end2end_test $(BINDIR)/$(CONFIG)/grpc_cli $(BINDIR)/$(CONFIG)/interop_client $(BINDIR)/$(CONFIG)/interop_server $(BINDIR)/$(CONFIG)/interop_test $(BINDIR)/$(CONFIG)/mock_test $(BINDIR)/$(CONFIG)/qps_interarrival_test $(BINDIR)/$(CONFIG)/qps_openloop_test $(BINDIR)/$(CONFIG)/qps_test $(BINDIR)/$(CONFIG)/reconnect_interop_client $(BINDIR)/$(CONFIG)/reconnect_interop_server $(BINDIR)/$(CONFIG)/secure_auth_context_test $(BINDIR)/$(CONFIG)/server_crash_test $(BINDIR)/$(CONFIG)/server_crash_test_client $(BINDIR)/$(CONFIG)/shutdown_test $(BINDIR)/$(CONFIG)/status_test $(BINDIR)/$(CONFIG)/sync_streaming_ping_pong_test $(BINDIR)/$(CONFIG)/sync_unary_ping_pong_test $(BINDIR)/$(CONFIG)/thread_stress_test
ifeq ($(HAS_ZOOKEEPER),true)
-buildtests_zookeeper: privatelibs_zookeeper $(BINDIR)/$(CONFIG)/shutdown_test $(BINDIR)/$(CONFIG)/zookeeper_test
+buildtests_zookeeper: privatelibs_zookeeper $(BINDIR)/$(CONFIG)/zookeeper_test
else
buildtests_zookeeper:
endif
@@ -1811,6 +1807,8 @@ test_c: buildtests_c
$(Q) $(BINDIR)/$(CONFIG)/grpc_base64_test || ( echo test grpc_base64_test failed ; exit 1 )
$(E) "[RUN] Testing grpc_byte_buffer_reader_test"
$(Q) $(BINDIR)/$(CONFIG)/grpc_byte_buffer_reader_test || ( echo test grpc_byte_buffer_reader_test failed ; exit 1 )
+ $(E) "[RUN] Testing grpc_channel_args_test"
+ $(Q) $(BINDIR)/$(CONFIG)/grpc_channel_args_test || ( echo test grpc_channel_args_test failed ; exit 1 )
$(E) "[RUN] Testing grpc_channel_stack_test"
$(Q) $(BINDIR)/$(CONFIG)/grpc_channel_stack_test || ( echo test grpc_channel_stack_test failed ; exit 1 )
$(E) "[RUN] Testing grpc_completion_queue_test"
@@ -3327,14 +3325,12 @@ test_cxx: test_zookeeper buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/cxx_byte_buffer_test || ( echo test cxx_byte_buffer_test failed ; exit 1 )
$(E) "[RUN] Testing cxx_slice_test"
$(Q) $(BINDIR)/$(CONFIG)/cxx_slice_test || ( echo test cxx_slice_test failed ; exit 1 )
+ $(E) "[RUN] Testing cxx_string_ref_test"
+ $(Q) $(BINDIR)/$(CONFIG)/cxx_string_ref_test || ( echo test cxx_string_ref_test failed ; exit 1 )
$(E) "[RUN] Testing cxx_time_test"
$(Q) $(BINDIR)/$(CONFIG)/cxx_time_test || ( echo test cxx_time_test failed ; exit 1 )
- $(E) "[RUN] Testing dynamic_thread_pool_test"
- $(Q) $(BINDIR)/$(CONFIG)/dynamic_thread_pool_test || ( echo test dynamic_thread_pool_test failed ; exit 1 )
$(E) "[RUN] Testing end2end_test"
$(Q) $(BINDIR)/$(CONFIG)/end2end_test || ( echo test end2end_test failed ; exit 1 )
- $(E) "[RUN] Testing fixed_size_thread_pool_test"
- $(Q) $(BINDIR)/$(CONFIG)/fixed_size_thread_pool_test || ( echo test fixed_size_thread_pool_test failed ; exit 1 )
$(E) "[RUN] Testing generic_end2end_test"
$(Q) $(BINDIR)/$(CONFIG)/generic_end2end_test || ( echo test generic_end2end_test failed ; exit 1 )
$(E) "[RUN] Testing interop_test"
@@ -3349,6 +3345,8 @@ test_cxx: test_zookeeper buildtests_cxx
$(Q) $(BINDIR)/$(CONFIG)/secure_auth_context_test || ( echo test secure_auth_context_test failed ; exit 1 )
$(E) "[RUN] Testing server_crash_test"
$(Q) $(BINDIR)/$(CONFIG)/server_crash_test || ( echo test server_crash_test failed ; exit 1 )
+ $(E) "[RUN] Testing shutdown_test"
+ $(Q) $(BINDIR)/$(CONFIG)/shutdown_test || ( echo test shutdown_test failed ; exit 1 )
$(E) "[RUN] Testing status_test"
$(Q) $(BINDIR)/$(CONFIG)/status_test || ( echo test status_test failed ; exit 1 )
$(E) "[RUN] Testing sync_streaming_ping_pong_test"
@@ -3364,8 +3362,6 @@ flaky_test_cxx: buildtests_cxx
ifeq ($(HAS_ZOOKEEPER),true)
test_zookeeper: buildtests_zookeeper
- $(E) "[RUN] Testing shutdown_test"
- $(Q) $(BINDIR)/$(CONFIG)/shutdown_test || ( echo test shutdown_test failed ; exit 1 )
$(E) "[RUN] Testing zookeeper_test"
$(Q) $(BINDIR)/$(CONFIG)/zookeeper_test || ( echo test zookeeper_test failed ; exit 1 )
@@ -3386,7 +3382,7 @@ test_python: static_c
tools: tools_c tools_cxx
-tools_c: privatelibs_c $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/grpc_create_jwt $(BINDIR)/$(CONFIG)/grpc_fetch_oauth2 $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token $(BINDIR)/$(CONFIG)/grpc_verify_jwt
+tools_c: privatelibs_c $(BINDIR)/$(CONFIG)/gen_hpack_tables $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters $(BINDIR)/$(CONFIG)/grpc_create_jwt $(BINDIR)/$(CONFIG)/grpc_fetch_oauth2 $(BINDIR)/$(CONFIG)/grpc_print_google_default_creds_token $(BINDIR)/$(CONFIG)/grpc_verify_jwt
tools_cxx: privatelibs_cxx
@@ -3490,51 +3486,6 @@ $(LIBDIR)/$(CONFIG)/pkgconfig/grpc++_unsecure.pc:
$(Q) echo "$(GRPCXX_UNSECURE_PC_FILE)" | tr , '\n' >$@
ifeq ($(NO_PROTOC),true)
-$(GENDIR)/examples/pubsub/empty.pb.cc: protoc_dep_error
-$(GENDIR)/examples/pubsub/empty.grpc.pb.cc: protoc_dep_error
-else
-$(GENDIR)/examples/pubsub/empty.pb.cc: examples/pubsub/empty.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
- $(E) "[PROTOC] Generating protobuf CC file from $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) $<
-
-$(GENDIR)/examples/pubsub/empty.grpc.pb.cc: examples/pubsub/empty.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
- $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
-endif
-
-ifeq ($(NO_PROTOC),true)
-$(GENDIR)/examples/pubsub/label.pb.cc: protoc_dep_error
-$(GENDIR)/examples/pubsub/label.grpc.pb.cc: protoc_dep_error
-else
-$(GENDIR)/examples/pubsub/label.pb.cc: examples/pubsub/label.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
- $(E) "[PROTOC] Generating protobuf CC file from $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) $<
-
-$(GENDIR)/examples/pubsub/label.grpc.pb.cc: examples/pubsub/label.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
- $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
-endif
-
-ifeq ($(NO_PROTOC),true)
-$(GENDIR)/examples/pubsub/pubsub.pb.cc: protoc_dep_error
-$(GENDIR)/examples/pubsub/pubsub.grpc.pb.cc: protoc_dep_error
-else
-$(GENDIR)/examples/pubsub/pubsub.pb.cc: examples/pubsub/pubsub.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
- $(E) "[PROTOC] Generating protobuf CC file from $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --cpp_out=$(GENDIR) $<
-
-$(GENDIR)/examples/pubsub/pubsub.grpc.pb.cc: examples/pubsub/pubsub.proto $(PROTOBUF_DEP) $(PROTOC_PLUGINS)
- $(E) "[GRPC] Generating gRPC's protobuf service CC file from $<"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(PROTOC) --grpc_out=$(GENDIR) --plugin=protoc-gen-grpc=$(BINDIR)/$(CONFIG)/grpc_cpp_plugin $<
-endif
-
-ifeq ($(NO_PROTOC),true)
$(GENDIR)/test/cpp/qps/perf_db.pb.cc: protoc_dep_error
$(GENDIR)/test/cpp/qps/perf_db.grpc.pb.cc: protoc_dep_error
else
@@ -4081,6 +4032,7 @@ LIBGRPC_SRC = \
src/core/tsi/ssl_transport_security.c \
src/core/tsi/transport_security.c \
src/core/census/grpc_context.c \
+ src/core/census/grpc_filter.c \
src/core/channel/channel_args.c \
src/core/channel/channel_stack.c \
src/core/channel/client_channel.c \
@@ -4354,6 +4306,7 @@ endif
LIBGRPC_UNSECURE_SRC = \
src/core/surface/init_unsecure.c \
src/core/census/grpc_context.c \
+ src/core/census/grpc_filter.c \
src/core/channel/channel_args.c \
src/core/channel/channel_stack.c \
src/core/channel/client_channel.c \
@@ -4606,10 +4559,10 @@ LIBGRPC++_SRC = \
src/cpp/client/channel_arguments.cc \
src/cpp/client/client_context.cc \
src/cpp/client/create_channel.cc \
+ src/cpp/client/create_channel_internal.cc \
src/cpp/client/credentials.cc \
src/cpp/client/generic_stub.cc \
src/cpp/client/insecure_credentials.cc \
- src/cpp/client/internal_stub.cc \
src/cpp/common/call.cc \
src/cpp/common/completion_queue.cc \
src/cpp/common/rpc_method.cc \
@@ -4626,28 +4579,20 @@ LIBGRPC++_SRC = \
src/cpp/util/byte_buffer.cc \
src/cpp/util/slice.cc \
src/cpp/util/status.cc \
+ src/cpp/util/string_ref.cc \
src/cpp/util/time.cc \
PUBLIC_HEADERS_CXX += \
- include/grpc++/async_generic_service.h \
- include/grpc++/async_unary_call.h \
- include/grpc++/auth_context.h \
- include/grpc++/byte_buffer.h \
- include/grpc++/channel_arguments.h \
- include/grpc++/channel_interface.h \
+ include/grpc++/channel.h \
include/grpc++/client_context.h \
include/grpc++/completion_queue.h \
- include/grpc++/config.h \
- include/grpc++/config_protobuf.h \
include/grpc++/create_channel.h \
include/grpc++/credentials.h \
- include/grpc++/dynamic_thread_pool.h \
- include/grpc++/fixed_size_thread_pool.h \
- include/grpc++/generic_stub.h \
+ include/grpc++/generic/async_generic_service.h \
+ include/grpc++/generic/generic_stub.h \
include/grpc++/impl/call.h \
include/grpc++/impl/client_unary_call.h \
include/grpc++/impl/grpc_library.h \
- include/grpc++/impl/internal_stub.h \
include/grpc++/impl/proto_utils.h \
include/grpc++/impl/rpc_method.h \
include/grpc++/impl/rpc_service_method.h \
@@ -4663,13 +4608,20 @@ PUBLIC_HEADERS_CXX += \
include/grpc++/server_builder.h \
include/grpc++/server_context.h \
include/grpc++/server_credentials.h \
- include/grpc++/slice.h \
- include/grpc++/status.h \
- include/grpc++/status_code_enum.h \
- include/grpc++/stream.h \
- include/grpc++/stub_options.h \
- include/grpc++/thread_pool_interface.h \
- include/grpc++/time.h \
+ include/grpc++/support/async_stream.h \
+ include/grpc++/support/async_unary_call.h \
+ include/grpc++/support/auth_context.h \
+ include/grpc++/support/byte_buffer.h \
+ include/grpc++/support/channel_arguments.h \
+ include/grpc++/support/config.h \
+ include/grpc++/support/config_protobuf.h \
+ include/grpc++/support/slice.h \
+ include/grpc++/support/status.h \
+ include/grpc++/support/status_code_enum.h \
+ include/grpc++/support/string_ref.h \
+ include/grpc++/support/stub_options.h \
+ include/grpc++/support/sync_stream.h \
+ include/grpc++/support/time.h \
LIBGRPC++_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_SRC))))
@@ -4794,6 +4746,7 @@ LIBGRPC++_TEST_UTIL_SRC = \
$(GENDIR)/test/cpp/util/echo_duplicate.pb.cc $(GENDIR)/test/cpp/util/echo_duplicate.grpc.pb.cc \
test/cpp/util/cli_call.cc \
test/cpp/util/create_test_channel.cc \
+ test/cpp/util/string_ref_helper.cc \
test/cpp/util/subprocess.cc \
@@ -4840,6 +4793,7 @@ endif
endif
$(OBJDIR)/$(CONFIG)/test/cpp/util/cli_call.o: $(GENDIR)/test/cpp/util/messages.pb.cc $(GENDIR)/test/cpp/util/messages.grpc.pb.cc $(GENDIR)/test/cpp/util/echo.pb.cc $(GENDIR)/test/cpp/util/echo.grpc.pb.cc $(GENDIR)/test/cpp/util/echo_duplicate.pb.cc $(GENDIR)/test/cpp/util/echo_duplicate.grpc.pb.cc
$(OBJDIR)/$(CONFIG)/test/cpp/util/create_test_channel.o: $(GENDIR)/test/cpp/util/messages.pb.cc $(GENDIR)/test/cpp/util/messages.grpc.pb.cc $(GENDIR)/test/cpp/util/echo.pb.cc $(GENDIR)/test/cpp/util/echo.grpc.pb.cc $(GENDIR)/test/cpp/util/echo_duplicate.pb.cc $(GENDIR)/test/cpp/util/echo_duplicate.grpc.pb.cc
+$(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_helper.o: $(GENDIR)/test/cpp/util/messages.pb.cc $(GENDIR)/test/cpp/util/messages.grpc.pb.cc $(GENDIR)/test/cpp/util/echo.pb.cc $(GENDIR)/test/cpp/util/echo.grpc.pb.cc $(GENDIR)/test/cpp/util/echo_duplicate.pb.cc $(GENDIR)/test/cpp/util/echo_duplicate.grpc.pb.cc
$(OBJDIR)/$(CONFIG)/test/cpp/util/subprocess.o: $(GENDIR)/test/cpp/util/messages.pb.cc $(GENDIR)/test/cpp/util/messages.grpc.pb.cc $(GENDIR)/test/cpp/util/echo.pb.cc $(GENDIR)/test/cpp/util/echo.grpc.pb.cc $(GENDIR)/test/cpp/util/echo_duplicate.pb.cc $(GENDIR)/test/cpp/util/echo_duplicate.grpc.pb.cc
@@ -4849,10 +4803,10 @@ LIBGRPC++_UNSECURE_SRC = \
src/cpp/client/channel_arguments.cc \
src/cpp/client/client_context.cc \
src/cpp/client/create_channel.cc \
+ src/cpp/client/create_channel_internal.cc \
src/cpp/client/credentials.cc \
src/cpp/client/generic_stub.cc \
src/cpp/client/insecure_credentials.cc \
- src/cpp/client/internal_stub.cc \
src/cpp/common/call.cc \
src/cpp/common/completion_queue.cc \
src/cpp/common/rpc_method.cc \
@@ -4869,28 +4823,20 @@ LIBGRPC++_UNSECURE_SRC = \
src/cpp/util/byte_buffer.cc \
src/cpp/util/slice.cc \
src/cpp/util/status.cc \
+ src/cpp/util/string_ref.cc \
src/cpp/util/time.cc \
PUBLIC_HEADERS_CXX += \
- include/grpc++/async_generic_service.h \
- include/grpc++/async_unary_call.h \
- include/grpc++/auth_context.h \
- include/grpc++/byte_buffer.h \
- include/grpc++/channel_arguments.h \
- include/grpc++/channel_interface.h \
+ include/grpc++/channel.h \
include/grpc++/client_context.h \
include/grpc++/completion_queue.h \
- include/grpc++/config.h \
- include/grpc++/config_protobuf.h \
include/grpc++/create_channel.h \
include/grpc++/credentials.h \
- include/grpc++/dynamic_thread_pool.h \
- include/grpc++/fixed_size_thread_pool.h \
- include/grpc++/generic_stub.h \
+ include/grpc++/generic/async_generic_service.h \
+ include/grpc++/generic/generic_stub.h \
include/grpc++/impl/call.h \
include/grpc++/impl/client_unary_call.h \
include/grpc++/impl/grpc_library.h \
- include/grpc++/impl/internal_stub.h \
include/grpc++/impl/proto_utils.h \
include/grpc++/impl/rpc_method.h \
include/grpc++/impl/rpc_service_method.h \
@@ -4906,13 +4852,20 @@ PUBLIC_HEADERS_CXX += \
include/grpc++/server_builder.h \
include/grpc++/server_context.h \
include/grpc++/server_credentials.h \
- include/grpc++/slice.h \
- include/grpc++/status.h \
- include/grpc++/status_code_enum.h \
- include/grpc++/stream.h \
- include/grpc++/stub_options.h \
- include/grpc++/thread_pool_interface.h \
- include/grpc++/time.h \
+ include/grpc++/support/async_stream.h \
+ include/grpc++/support/async_unary_call.h \
+ include/grpc++/support/auth_context.h \
+ include/grpc++/support/byte_buffer.h \
+ include/grpc++/support/channel_arguments.h \
+ include/grpc++/support/config.h \
+ include/grpc++/support/config_protobuf.h \
+ include/grpc++/support/slice.h \
+ include/grpc++/support/status.h \
+ include/grpc++/support/status_code_enum.h \
+ include/grpc++/support/string_ref.h \
+ include/grpc++/support/stub_options.h \
+ include/grpc++/support/sync_stream.h \
+ include/grpc++/support/time.h \
LIBGRPC++_UNSECURE_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBGRPC++_UNSECURE_SRC))))
@@ -5204,59 +5157,6 @@ endif
$(OBJDIR)/$(CONFIG)/test/cpp/interop/server.o: $(GENDIR)/test/proto/empty.pb.cc $(GENDIR)/test/proto/empty.grpc.pb.cc $(GENDIR)/test/proto/messages.pb.cc $(GENDIR)/test/proto/messages.grpc.pb.cc $(GENDIR)/test/proto/test.pb.cc $(GENDIR)/test/proto/test.grpc.pb.cc
-LIBPUBSUB_CLIENT_LIB_SRC = \
- $(GENDIR)/examples/pubsub/label.pb.cc $(GENDIR)/examples/pubsub/label.grpc.pb.cc \
- $(GENDIR)/examples/pubsub/empty.pb.cc $(GENDIR)/examples/pubsub/empty.grpc.pb.cc \
- $(GENDIR)/examples/pubsub/pubsub.pb.cc $(GENDIR)/examples/pubsub/pubsub.grpc.pb.cc \
- examples/pubsub/publisher.cc \
- examples/pubsub/subscriber.cc \
-
-
-LIBPUBSUB_CLIENT_LIB_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(LIBPUBSUB_CLIENT_LIB_SRC))))
-
-ifeq ($(NO_SECURE),true)
-
-# You can't build secure libraries if you don't have OpenSSL.
-
-$(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a: openssl_dep_error
-
-
-else
-
-ifeq ($(NO_PROTOBUF),true)
-
-# You can't build a C++ library if you don't have protobuf - a bit overreached, but still okay.
-
-$(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a: protobuf_dep_error
-
-
-else
-
-$(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a: $(ZLIB_DEP) $(OPENSSL_DEP) $(PROTOBUF_DEP) $(LIBPUBSUB_CLIENT_LIB_OBJS)
- $(E) "[AR] Creating $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) rm -f $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a
- $(Q) $(AR) rcs $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBPUBSUB_CLIENT_LIB_OBJS)
-ifeq ($(SYSTEM),Darwin)
- $(Q) ranlib $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a
-endif
-
-
-
-
-endif
-
-endif
-
-ifneq ($(NO_SECURE),true)
-ifneq ($(NO_DEPS),true)
--include $(LIBPUBSUB_CLIENT_LIB_OBJS:.o=.dep)
-endif
-endif
-$(OBJDIR)/$(CONFIG)/examples/pubsub/publisher.o: $(GENDIR)/examples/pubsub/label.pb.cc $(GENDIR)/examples/pubsub/label.grpc.pb.cc $(GENDIR)/examples/pubsub/empty.pb.cc $(GENDIR)/examples/pubsub/empty.grpc.pb.cc $(GENDIR)/examples/pubsub/pubsub.pb.cc $(GENDIR)/examples/pubsub/pubsub.grpc.pb.cc
-$(OBJDIR)/$(CONFIG)/examples/pubsub/subscriber.o: $(GENDIR)/examples/pubsub/label.pb.cc $(GENDIR)/examples/pubsub/label.grpc.pb.cc $(GENDIR)/examples/pubsub/empty.pb.cc $(GENDIR)/examples/pubsub/empty.grpc.pb.cc $(GENDIR)/examples/pubsub/pubsub.pb.cc $(GENDIR)/examples/pubsub/pubsub.grpc.pb.cc
-
-
LIBQPS_SRC = \
$(GENDIR)/test/cpp/qps/qpstest.pb.cc $(GENDIR)/test/cpp/qps/qpstest.grpc.pb.cc \
$(GENDIR)/test/cpp/qps/perf_db.pb.cc $(GENDIR)/test/cpp/qps/perf_db.grpc.pb.cc \
@@ -7122,6 +7022,35 @@ endif
endif
+GEN_LEGAL_METADATA_CHARACTERS_SRC = \
+ tools/codegen/core/gen_legal_metadata_characters.c \
+
+GEN_LEGAL_METADATA_CHARACTERS_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GEN_LEGAL_METADATA_CHARACTERS_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/gen_legal_metadata_characters: openssl_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/gen_legal_metadata_characters: $(GEN_LEGAL_METADATA_CHARACTERS_OBJS)
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(GEN_LEGAL_METADATA_CHARACTERS_OBJS) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/gen_legal_metadata_characters
+
+endif
+
+$(OBJDIR)/$(CONFIG)/tools/codegen/core/gen_legal_metadata_characters.o:
+deps_gen_legal_metadata_characters: $(GEN_LEGAL_METADATA_CHARACTERS_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(GEN_LEGAL_METADATA_CHARACTERS_OBJS:.o=.dep)
+endif
+endif
+
+
GPR_CMDLINE_TEST_SRC = \
test/core/support/cmdline_test.c \
@@ -7644,6 +7573,35 @@ endif
endif
+GRPC_CHANNEL_ARGS_TEST_SRC = \
+ test/core/channel/channel_args_test.c \
+
+GRPC_CHANNEL_ARGS_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(GRPC_CHANNEL_ARGS_TEST_SRC))))
+ifeq ($(NO_SECURE),true)
+
+# You can't build secure targets if you don't have OpenSSL.
+
+$(BINDIR)/$(CONFIG)/grpc_channel_args_test: openssl_dep_error
+
+else
+
+$(BINDIR)/$(CONFIG)/grpc_channel_args_test: $(GRPC_CHANNEL_ARGS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+ $(E) "[LD] Linking $@"
+ $(Q) mkdir -p `dirname $@`
+ $(Q) $(LD) $(LDFLAGS) $(GRPC_CHANNEL_ARGS_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/grpc_channel_args_test
+
+endif
+
+$(OBJDIR)/$(CONFIG)/test/core/channel/channel_args_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+deps_grpc_channel_args_test: $(GRPC_CHANNEL_ARGS_TEST_OBJS:.o=.dep)
+
+ifneq ($(NO_SECURE),true)
+ifneq ($(NO_DEPS),true)
+-include $(GRPC_CHANNEL_ARGS_TEST_OBJS:.o=.dep)
+endif
+endif
+
+
GRPC_CHANNEL_STACK_TEST_SRC = \
test/core/channel/channel_stack_test.c \
@@ -8916,16 +8874,16 @@ $(BINDIR)/$(CONFIG)/auth_property_iterator_test: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/auth_property_iterator_test: $(PROTOBUF_DEP) $(AUTH_PROPERTY_ITERATOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/auth_property_iterator_test: $(PROTOBUF_DEP) $(AUTH_PROPERTY_ITERATOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(AUTH_PROPERTY_ITERATOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/auth_property_iterator_test
+ $(Q) $(LDXX) $(LDFLAGS) $(AUTH_PROPERTY_ITERATOR_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/auth_property_iterator_test
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/common/auth_property_iterator_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/common/auth_property_iterator_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_auth_property_iterator_test: $(AUTH_PROPERTY_ITERATOR_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
@@ -9215,15 +9173,15 @@ endif
endif
-CXX_TIME_TEST_SRC = \
- test/cpp/util/time_test.cc \
+CXX_STRING_REF_TEST_SRC = \
+ test/cpp/util/string_ref_test.cc \
-CXX_TIME_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CXX_TIME_TEST_SRC))))
+CXX_STRING_REF_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CXX_STRING_REF_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
-$(BINDIR)/$(CONFIG)/cxx_time_test: openssl_dep_error
+$(BINDIR)/$(CONFIG)/cxx_string_ref_test: openssl_dep_error
else
@@ -9232,38 +9190,38 @@ ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
-$(BINDIR)/$(CONFIG)/cxx_time_test: protobuf_dep_error
+$(BINDIR)/$(CONFIG)/cxx_string_ref_test: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/cxx_time_test: $(PROTOBUF_DEP) $(CXX_TIME_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/cxx_string_ref_test: $(PROTOBUF_DEP) $(CXX_STRING_REF_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(CXX_TIME_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/cxx_time_test
+ $(Q) $(LDXX) $(LDFLAGS) $(CXX_STRING_REF_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/cxx_string_ref_test
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/util/time_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
-deps_cxx_time_test: $(CXX_TIME_TEST_OBJS:.o=.dep)
+$(OBJDIR)/$(CONFIG)/test/cpp/util/string_ref_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a
+deps_cxx_string_ref_test: $(CXX_STRING_REF_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
--include $(CXX_TIME_TEST_OBJS:.o=.dep)
+-include $(CXX_STRING_REF_TEST_OBJS:.o=.dep)
endif
endif
-DYNAMIC_THREAD_POOL_TEST_SRC = \
- test/cpp/server/dynamic_thread_pool_test.cc \
+CXX_TIME_TEST_SRC = \
+ test/cpp/util/time_test.cc \
-DYNAMIC_THREAD_POOL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(DYNAMIC_THREAD_POOL_TEST_SRC))))
+CXX_TIME_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(CXX_TIME_TEST_SRC))))
ifeq ($(NO_SECURE),true)
# You can't build secure targets if you don't have OpenSSL.
-$(BINDIR)/$(CONFIG)/dynamic_thread_pool_test: openssl_dep_error
+$(BINDIR)/$(CONFIG)/cxx_time_test: openssl_dep_error
else
@@ -9272,25 +9230,25 @@ ifeq ($(NO_PROTOBUF),true)
# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
-$(BINDIR)/$(CONFIG)/dynamic_thread_pool_test: protobuf_dep_error
+$(BINDIR)/$(CONFIG)/cxx_time_test: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/dynamic_thread_pool_test: $(PROTOBUF_DEP) $(DYNAMIC_THREAD_POOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/cxx_time_test: $(PROTOBUF_DEP) $(CXX_TIME_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(DYNAMIC_THREAD_POOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/dynamic_thread_pool_test
+ $(Q) $(LDXX) $(LDFLAGS) $(CXX_TIME_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/cxx_time_test
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/server/dynamic_thread_pool_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
-deps_dynamic_thread_pool_test: $(DYNAMIC_THREAD_POOL_TEST_OBJS:.o=.dep)
+$(OBJDIR)/$(CONFIG)/test/cpp/util/time_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+deps_cxx_time_test: $(CXX_TIME_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
ifneq ($(NO_DEPS),true)
--include $(DYNAMIC_THREAD_POOL_TEST_OBJS:.o=.dep)
+-include $(CXX_TIME_TEST_OBJS:.o=.dep)
endif
endif
@@ -9335,46 +9293,6 @@ endif
endif
-FIXED_SIZE_THREAD_POOL_TEST_SRC = \
- test/cpp/server/fixed_size_thread_pool_test.cc \
-
-FIXED_SIZE_THREAD_POOL_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(FIXED_SIZE_THREAD_POOL_TEST_SRC))))
-ifeq ($(NO_SECURE),true)
-
-# You can't build secure targets if you don't have OpenSSL.
-
-$(BINDIR)/$(CONFIG)/fixed_size_thread_pool_test: openssl_dep_error
-
-else
-
-
-ifeq ($(NO_PROTOBUF),true)
-
-# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
-
-$(BINDIR)/$(CONFIG)/fixed_size_thread_pool_test: protobuf_dep_error
-
-else
-
-$(BINDIR)/$(CONFIG)/fixed_size_thread_pool_test: $(PROTOBUF_DEP) $(FIXED_SIZE_THREAD_POOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
- $(E) "[LD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(FIXED_SIZE_THREAD_POOL_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/fixed_size_thread_pool_test
-
-endif
-
-endif
-
-$(OBJDIR)/$(CONFIG)/test/cpp/server/fixed_size_thread_pool_test.o: $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
-deps_fixed_size_thread_pool_test: $(FIXED_SIZE_THREAD_POOL_TEST_OBJS:.o=.dep)
-
-ifneq ($(NO_SECURE),true)
-ifneq ($(NO_DEPS),true)
--include $(FIXED_SIZE_THREAD_POOL_TEST_OBJS:.o=.dep)
-endif
-endif
-
-
GENERIC_END2END_TEST_SRC = \
test/cpp/end2end/generic_end2end_test.cc \
@@ -9733,126 +9651,6 @@ endif
endif
-PUBSUB_CLIENT_SRC = \
- examples/pubsub/main.cc \
-
-PUBSUB_CLIENT_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PUBSUB_CLIENT_SRC))))
-ifeq ($(NO_SECURE),true)
-
-# You can't build secure targets if you don't have OpenSSL.
-
-$(BINDIR)/$(CONFIG)/pubsub_client: openssl_dep_error
-
-else
-
-
-ifeq ($(NO_PROTOBUF),true)
-
-# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
-
-$(BINDIR)/$(CONFIG)/pubsub_client: protobuf_dep_error
-
-else
-
-$(BINDIR)/$(CONFIG)/pubsub_client: $(PROTOBUF_DEP) $(PUBSUB_CLIENT_OBJS) $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
- $(E) "[LD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(PUBSUB_CLIENT_OBJS) $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/pubsub_client
-
-endif
-
-endif
-
-$(OBJDIR)/$(CONFIG)/examples/pubsub/main.o: $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_config.a
-deps_pubsub_client: $(PUBSUB_CLIENT_OBJS:.o=.dep)
-
-ifneq ($(NO_SECURE),true)
-ifneq ($(NO_DEPS),true)
--include $(PUBSUB_CLIENT_OBJS:.o=.dep)
-endif
-endif
-
-
-PUBSUB_PUBLISHER_TEST_SRC = \
- examples/pubsub/publisher_test.cc \
-
-PUBSUB_PUBLISHER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PUBSUB_PUBLISHER_TEST_SRC))))
-ifeq ($(NO_SECURE),true)
-
-# You can't build secure targets if you don't have OpenSSL.
-
-$(BINDIR)/$(CONFIG)/pubsub_publisher_test: openssl_dep_error
-
-else
-
-
-ifeq ($(NO_PROTOBUF),true)
-
-# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
-
-$(BINDIR)/$(CONFIG)/pubsub_publisher_test: protobuf_dep_error
-
-else
-
-$(BINDIR)/$(CONFIG)/pubsub_publisher_test: $(PROTOBUF_DEP) $(PUBSUB_PUBLISHER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
- $(E) "[LD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(PUBSUB_PUBLISHER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/pubsub_publisher_test
-
-endif
-
-endif
-
-$(OBJDIR)/$(CONFIG)/examples/pubsub/publisher_test.o: $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
-deps_pubsub_publisher_test: $(PUBSUB_PUBLISHER_TEST_OBJS:.o=.dep)
-
-ifneq ($(NO_SECURE),true)
-ifneq ($(NO_DEPS),true)
--include $(PUBSUB_PUBLISHER_TEST_OBJS:.o=.dep)
-endif
-endif
-
-
-PUBSUB_SUBSCRIBER_TEST_SRC = \
- examples/pubsub/subscriber_test.cc \
-
-PUBSUB_SUBSCRIBER_TEST_OBJS = $(addprefix $(OBJDIR)/$(CONFIG)/, $(addsuffix .o, $(basename $(PUBSUB_SUBSCRIBER_TEST_SRC))))
-ifeq ($(NO_SECURE),true)
-
-# You can't build secure targets if you don't have OpenSSL.
-
-$(BINDIR)/$(CONFIG)/pubsub_subscriber_test: openssl_dep_error
-
-else
-
-
-ifeq ($(NO_PROTOBUF),true)
-
-# You can't build the protoc plugins or protobuf-enabled targets if you don't have protobuf 3.0.0+.
-
-$(BINDIR)/$(CONFIG)/pubsub_subscriber_test: protobuf_dep_error
-
-else
-
-$(BINDIR)/$(CONFIG)/pubsub_subscriber_test: $(PROTOBUF_DEP) $(PUBSUB_SUBSCRIBER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
- $(E) "[LD] Linking $@"
- $(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(PUBSUB_SUBSCRIBER_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) -o $(BINDIR)/$(CONFIG)/pubsub_subscriber_test
-
-endif
-
-endif
-
-$(OBJDIR)/$(CONFIG)/examples/pubsub/subscriber_test.o: $(LIBDIR)/$(CONFIG)/libpubsub_client_lib.a $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
-deps_pubsub_subscriber_test: $(PUBSUB_SUBSCRIBER_TEST_OBJS:.o=.dep)
-
-ifneq ($(NO_SECURE),true)
-ifneq ($(NO_DEPS),true)
--include $(PUBSUB_SUBSCRIBER_TEST_OBJS:.o=.dep)
-endif
-endif
-
-
QPS_DRIVER_SRC = \
test/cpp/qps/qps_driver.cc \
@@ -10166,16 +9964,16 @@ $(BINDIR)/$(CONFIG)/secure_auth_context_test: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/secure_auth_context_test: $(PROTOBUF_DEP) $(SECURE_AUTH_CONTEXT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/secure_auth_context_test: $(PROTOBUF_DEP) $(SECURE_AUTH_CONTEXT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(SECURE_AUTH_CONTEXT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/secure_auth_context_test
+ $(Q) $(LDXX) $(LDFLAGS) $(SECURE_AUTH_CONTEXT_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/secure_auth_context_test
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/common/secure_auth_context_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/common/secure_auth_context_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_secure_auth_context_test: $(SECURE_AUTH_CONTEXT_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
@@ -10286,16 +10084,16 @@ $(BINDIR)/$(CONFIG)/shutdown_test: protobuf_dep_error
else
-$(BINDIR)/$(CONFIG)/shutdown_test: $(PROTOBUF_DEP) $(SHUTDOWN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(BINDIR)/$(CONFIG)/shutdown_test: $(PROTOBUF_DEP) $(SHUTDOWN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
$(E) "[LD] Linking $@"
$(Q) mkdir -p `dirname $@`
- $(Q) $(LDXX) $(LDFLAGS) $(SHUTDOWN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a -lzookeeper_mt $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/shutdown_test
+ $(Q) $(LDXX) $(LDFLAGS) $(SHUTDOWN_TEST_OBJS) $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a $(LDLIBSXX) $(LDLIBS_PROTOBUF) $(LDLIBS) $(LDLIBS_SECURE) $(GTEST_LIB) -o $(BINDIR)/$(CONFIG)/shutdown_test
endif
endif
-$(OBJDIR)/$(CONFIG)/test/cpp/end2end/shutdown_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc_zookeeper.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
+$(OBJDIR)/$(CONFIG)/test/cpp/end2end/shutdown_test.o: $(LIBDIR)/$(CONFIG)/libgrpc++_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc_test_util.a $(LIBDIR)/$(CONFIG)/libgrpc++.a $(LIBDIR)/$(CONFIG)/libgrpc.a $(LIBDIR)/$(CONFIG)/libgpr_test_util.a $(LIBDIR)/$(CONFIG)/libgpr.a
deps_shutdown_test: $(SHUTDOWN_TEST_OBJS:.o=.dep)
ifneq ($(NO_SECURE),true)
@@ -20627,8 +20425,6 @@ ifneq ($(OPENSSL_DEP),)
# This is to ensure the embedded OpenSSL is built beforehand, properly
# installing headers to their final destination on the drive. We need this
# otherwise parallel compilation will fail if a source is compiled first.
-examples/pubsub/publisher.cc: $(OPENSSL_DEP)
-examples/pubsub/subscriber.cc: $(OPENSSL_DEP)
src/core/httpcli/httpcli_security_connector.c: $(OPENSSL_DEP)
src/core/security/base64.c: $(OPENSSL_DEP)
src/core/security/client_auth_filter.c: $(OPENSSL_DEP)
@@ -20685,6 +20481,7 @@ test/cpp/qps/timer.cc: $(OPENSSL_DEP)
test/cpp/util/benchmark_config.cc: $(OPENSSL_DEP)
test/cpp/util/cli_call.cc: $(OPENSSL_DEP)
test/cpp/util/create_test_channel.cc: $(OPENSSL_DEP)
+test/cpp/util/string_ref_helper.cc: $(OPENSSL_DEP)
test/cpp/util/subprocess.cc: $(OPENSSL_DEP)
test/cpp/util/test_config.cc: $(OPENSSL_DEP)
endif
diff --git a/README.md b/README.md
index f830629816..ab1004f9d5 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@ Copyright 2015 Google Inc.
#Documentation
-You can find more detailed documentation and examples in the [grpc-common repository](http://github.com/grpc/grpc-common).
+You can find more detailed documentation and examples in the [doc](doc) and [examples](examples) directories respectively.
#Installation
@@ -95,7 +95,7 @@ messages are delivered in the order they were sent.
#Protocol
-The [gRPC protocol](https://github.com/grpc/grpc-common/blob/master/PROTOCOL-HTTP2.md) specifies the abstract requirements for communication between
+The [gRPC protocol](doc/PROTOCOL-HTTP2.md) specifies the abstract requirements for communication between
clients and servers. A concrete embedding over HTTP/2 completes the picture by
fleshing out the details of each of the required operations.
diff --git a/build.json b/build.json
index bd707d2e34..a451fc342f 100644
--- a/build.json
+++ b/build.json
@@ -30,25 +30,16 @@
{
"name": "grpc++_base",
"public_headers": [
- "include/grpc++/async_generic_service.h",
- "include/grpc++/async_unary_call.h",
- "include/grpc++/auth_context.h",
- "include/grpc++/byte_buffer.h",
- "include/grpc++/channel_arguments.h",
- "include/grpc++/channel_interface.h",
+ "include/grpc++/channel.h",
"include/grpc++/client_context.h",
"include/grpc++/completion_queue.h",
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
"include/grpc++/create_channel.h",
"include/grpc++/credentials.h",
- "include/grpc++/dynamic_thread_pool.h",
- "include/grpc++/fixed_size_thread_pool.h",
- "include/grpc++/generic_stub.h",
+ "include/grpc++/generic/async_generic_service.h",
+ "include/grpc++/generic/generic_stub.h",
"include/grpc++/impl/call.h",
"include/grpc++/impl/client_unary_call.h",
"include/grpc++/impl/grpc_library.h",
- "include/grpc++/impl/internal_stub.h",
"include/grpc++/impl/proto_utils.h",
"include/grpc++/impl/rpc_method.h",
"include/grpc++/impl/rpc_service_method.h",
@@ -64,27 +55,37 @@
"include/grpc++/server_builder.h",
"include/grpc++/server_context.h",
"include/grpc++/server_credentials.h",
- "include/grpc++/slice.h",
- "include/grpc++/status.h",
- "include/grpc++/status_code_enum.h",
- "include/grpc++/stream.h",
- "include/grpc++/stub_options.h",
- "include/grpc++/thread_pool_interface.h",
- "include/grpc++/time.h"
+ "include/grpc++/support/async_stream.h",
+ "include/grpc++/support/async_unary_call.h",
+ "include/grpc++/support/auth_context.h",
+ "include/grpc++/support/byte_buffer.h",
+ "include/grpc++/support/channel_arguments.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
+ "include/grpc++/support/slice.h",
+ "include/grpc++/support/status.h",
+ "include/grpc++/support/status_code_enum.h",
+ "include/grpc++/support/string_ref.h",
+ "include/grpc++/support/stub_options.h",
+ "include/grpc++/support/sync_stream.h",
+ "include/grpc++/support/time.h"
],
"headers": [
- "src/cpp/client/channel.h",
- "src/cpp/common/create_auth_context.h"
+ "src/cpp/client/create_channel_internal.h",
+ "src/cpp/common/create_auth_context.h",
+ "src/cpp/server/dynamic_thread_pool.h",
+ "src/cpp/server/fixed_size_thread_pool.h",
+ "src/cpp/server/thread_pool_interface.h"
],
"src": [
"src/cpp/client/channel.cc",
"src/cpp/client/channel_arguments.cc",
"src/cpp/client/client_context.cc",
"src/cpp/client/create_channel.cc",
+ "src/cpp/client/create_channel_internal.cc",
"src/cpp/client/credentials.cc",
"src/cpp/client/generic_stub.cc",
"src/cpp/client/insecure_credentials.cc",
- "src/cpp/client/internal_stub.cc",
"src/cpp/common/call.cc",
"src/cpp/common/completion_queue.cc",
"src/cpp/common/rpc_method.cc",
@@ -101,6 +102,7 @@
"src/cpp/util/byte_buffer.cc",
"src/cpp/util/slice.cc",
"src/cpp/util/status.cc",
+ "src/cpp/util/string_ref.cc",
"src/cpp/util/time.cc"
]
},
@@ -114,7 +116,7 @@
"include/grpc/status.h"
],
"headers": [
- "src/core/channel/census_filter.h",
+ "src/core/census/grpc_filter.h",
"src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h",
"src/core/channel/client_channel.h",
@@ -179,7 +181,8 @@
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
"src/core/profiling/timers.h",
- "src/core/profiling/timers_preciseclock.h",
+ "src/core/statistics/census_interface.h",
+ "src/core/statistics/census_rpc_stats.h",
"src/core/surface/byte_buffer_queue.h",
"src/core/surface/call.h",
"src/core/surface/channel.h",
@@ -217,6 +220,7 @@
],
"src": [
"src/core/census/grpc_context.c",
+ "src/core/census/grpc_filter.c",
"src/core/channel/channel_args.c",
"src/core/channel/channel_stack.c",
"src/core/channel/client_channel.c",
@@ -399,7 +403,8 @@
"src/core/support/stack_lockfree.h",
"src/core/support/string.h",
"src/core/support/string_win32.h",
- "src/core/support/thd_internal.h"
+ "src/core/support/thd_internal.h",
+ "src/core/support/time_precise.h"
],
"src": [
"src/core/support/alloc.c",
@@ -658,6 +663,7 @@
"headers": [
"test/cpp/util/cli_call.h",
"test/cpp/util/create_test_channel.h",
+ "test/cpp/util/string_ref_helper.h",
"test/cpp/util/subprocess.h"
],
"src": [
@@ -666,6 +672,7 @@
"test/cpp/util/echo_duplicate.proto",
"test/cpp/util/cli_call.cc",
"test/cpp/util/create_test_channel.cc",
+ "test/cpp/util/string_ref_helper.cc",
"test/cpp/util/subprocess.cc"
],
"deps": [
@@ -697,8 +704,8 @@
"build": "protoc",
"language": "c++",
"headers": [
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
"src/compiler/config.h",
"src/compiler/cpp_generator.h",
"src/compiler/cpp_generator_helpers.h",
@@ -807,27 +814,6 @@
]
},
{
- "name": "pubsub_client_lib",
- "build": "do_not_build",
- "language": "c++",
- "headers": [
- "examples/pubsub/publisher.h",
- "examples/pubsub/subscriber.h"
- ],
- "src": [
- "examples/pubsub/label.proto",
- "examples/pubsub/empty.proto",
- "examples/pubsub/pubsub.proto",
- "examples/pubsub/publisher.cc",
- "examples/pubsub/subscriber.cc"
- ],
- "deps": [
- "grpc++",
- "grpc",
- "gpr"
- ]
- },
- {
"name": "qps",
"build": "private",
"language": "c++",
@@ -1144,6 +1130,15 @@
]
},
{
+ "name": "gen_legal_metadata_characters",
+ "build": "tool",
+ "language": "c",
+ "src": [
+ "tools/codegen/core/gen_legal_metadata_characters.c"
+ ],
+ "deps": []
+ },
+ {
"name": "gpr_cmdline_test",
"build": "test",
"language": "c",
@@ -1366,6 +1361,20 @@
]
},
{
+ "name": "grpc_channel_args_test",
+ "build": "test",
+ "language": "c",
+ "src": [
+ "test/core/channel/channel_args_test.c"
+ ],
+ "deps": [
+ "grpc_test_util",
+ "grpc",
+ "gpr_test_util",
+ "gpr"
+ ]
+ },
+ {
"name": "grpc_channel_stack_test",
"build": "test",
"language": "c",
@@ -1999,8 +2008,11 @@
"test/cpp/common/auth_property_iterator_test.cc"
],
"deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
"grpc++",
"grpc",
+ "gpr_test_util",
"gpr"
]
},
@@ -2115,26 +2127,22 @@
]
},
{
- "name": "cxx_time_test",
+ "name": "cxx_string_ref_test",
"build": "test",
"language": "c++",
"src": [
- "test/cpp/util/time_test.cc"
+ "test/cpp/util/string_ref_test.cc"
],
"deps": [
- "grpc_test_util",
- "grpc++",
- "grpc",
- "gpr_test_util",
- "gpr"
+ "grpc++"
]
},
{
- "name": "dynamic_thread_pool_test",
+ "name": "cxx_time_test",
"build": "test",
"language": "c++",
"src": [
- "test/cpp/server/dynamic_thread_pool_test.cc"
+ "test/cpp/util/time_test.cc"
],
"deps": [
"grpc_test_util",
@@ -2161,21 +2169,6 @@
]
},
{
- "name": "fixed_size_thread_pool_test",
- "build": "test",
- "language": "c++",
- "src": [
- "test/cpp/server/fixed_size_thread_pool_test.cc"
- ],
- "deps": [
- "grpc_test_util",
- "grpc++",
- "grpc",
- "gpr_test_util",
- "gpr"
- ]
- },
- {
"name": "generic_end2end_test",
"build": "test",
"language": "c++",
@@ -2356,58 +2349,6 @@
]
},
{
- "name": "pubsub_client",
- "build": "do_not_build",
- "run": false,
- "language": "c++",
- "src": [
- "examples/pubsub/main.cc"
- ],
- "deps": [
- "pubsub_client_lib",
- "grpc_test_util",
- "grpc++",
- "grpc",
- "gpr_test_util",
- "gpr",
- "grpc++_test_config"
- ]
- },
- {
- "name": "pubsub_publisher_test",
- "build": "do_not_build",
- "language": "c++",
- "src": [
- "examples/pubsub/publisher_test.cc"
- ],
- "deps": [
- "pubsub_client_lib",
- "grpc++_test_util",
- "grpc_test_util",
- "grpc++",
- "grpc",
- "gpr_test_util",
- "gpr"
- ]
- },
- {
- "name": "pubsub_subscriber_test",
- "build": "do_not_build",
- "language": "c++",
- "src": [
- "examples/pubsub/subscriber_test.cc"
- ],
- "deps": [
- "pubsub_client_lib",
- "grpc++_test_util",
- "grpc_test_util",
- "grpc++",
- "grpc",
- "gpr_test_util",
- "gpr"
- ]
- },
- {
"name": "qps_driver",
"build": "benchmark",
"language": "c++",
@@ -2570,8 +2511,11 @@
"test/cpp/common/secure_auth_context_test.cc"
],
"deps": [
+ "grpc++_test_util",
+ "grpc_test_util",
"grpc++",
"grpc",
+ "gpr_test_util",
"gpr"
]
},
@@ -2624,13 +2568,9 @@
"grpc++_test_util",
"grpc_test_util",
"grpc++",
- "grpc_zookeeper",
"grpc",
"gpr_test_util",
"gpr"
- ],
- "external_deps": [
- "zookeeper"
]
},
{
diff --git a/doc/PROTOCOL-HTTP2.md b/doc/PROTOCOL-HTTP2.md
new file mode 100644
index 0000000000..d3fbb60d60
--- /dev/null
+++ b/doc/PROTOCOL-HTTP2.md
@@ -0,0 +1,192 @@
+# gRPC over HTTP2
+
+## Introduction
+This document serves as a detailed description for an implementation of gRPC carried over HTTP2 draft 17 framing. It assumes familiarity with the HTTP2 specification.
+
+## Protocol
+Production rules are using <a href="http://tools.ietf.org/html/rfc5234">ABNF syntax</a>.
+
+### Outline
+
+The following is the general sequence of message atoms in a GRPC request & response message stream
+
+* Request → Request-Headers *Delimited-Message EOS
+* Response → (Response-Headers *Delimited-Message Trailers) / Trailers-Only
+
+
+### Requests
+
+* Request → Request-Headers *Delimited-Message EOS
+
+Request-Headers are delivered as HTTP2 headers in HEADERS + CONTINUATION frames.
+
+* **Request-Headers** → Call-Definition *Custom-Metadata
+* **Call-Definition** → Method Scheme Path TE [Authority] [Timeout] [Content-Type] [Message-Type] [Message-Encoding] [Message-Accept-Encoding] [User-Agent]
+* **Method** → “:method POST”
+* **Scheme** → “:scheme ” (“http” / “https”)
+* **Path** → “:path” {_path identifying method within exposed API_}
+* **Authority** → “:authority” {_virtual host name of authority_}
+* **TE** → “te” “trailers” # Used to detect incompatible proxies
+* **Timeout** → “grpc-timeout” TimeoutValue TimeoutUnit
+* **TimeoutValue** → {_positive integer as ASCII string of at most 8 digits_}
+* **TimeoutUnit** → Hour / Minute / Second / Millisecond / Microsecond / Nanosecond
+* **Hour** → “H”
+* **Minute** → “M”
+* **Second** → “S”
+* **Millisecond** → “m”
+* **Microsecond** → “u”
+* **Nanosecond** → “n”
+* **Content-Type** → “content-type” “application/grpc” [(“+proto” / “+json” / {_custom_})]
+* **Content-Coding** → “gzip” / “deflate” / “snappy” / {_custom_}
+* **Message-Encoding** → “grpc-encoding” Content-Coding
+* **Message-Accept-Encoding** → “grpc-accept-encoding” Content-Coding *("," Content-Coding)
+* **User-Agent** → “user-agent” {_structured user-agent string_}
+* **Message-Type** → “grpc-message-type” {_type name for message schema_}
+* **Custom-Metadata** → Binary-Header / ASCII-Header
+* **Binary-Header** → {lowercase ASCII header name ending in “-bin” } {_base64 encoded value_}
+* **ASCII-Header** → {lowercase ASCII header name} {_value_}
+
+
+HTTP2 requires that reserved headers, ones starting with “:” appear before all other headers. Additionally implementations should send **Timeout** immediately after the reserved headers and they should send the **Call-Definition** headers before sending **Custom-Metadata**.
+
+If **Timeout** is omitted a server should assume an infinite timeout. Client implementations are free to send a default minimum timeout based on their deployment requirements.
+
+**Custom-Metadata** is an arbitrary set of key-value pairs defined by the application layer. Aside from transport limits on the total length of HTTP2 HEADERS the only other constraint is that header names starting with “grpc-” are reserved for future use.
+
+Note that HTTP2 does not allow arbitrary octet sequences for header values so binary header values must be encoded using Base64 as per https://tools.ietf.org/html/rfc4648#section-4. Implementations MUST accept padded and un-padded values and should emit un-padded values. Applications define binary headers by having their names end with “-bin”. Runtime libraries use this suffix to detect binary headers and properly apply base64 encoding & decoding as headers are sent and received.
+
+The repeated sequence of **Delimited-Message** items is delivered in DATA frames
+
+* **Delimited-Message** → Compressed-Flag Message-Length Message
+* **Compressed-Flag** → 0 / 1 # encoded as 1 byte unsigned integer
+* **Message-Length** → {_length of Message_} # encoded as 4 byte unsigned integer
+* **Message** → *{binary octet}
+
+A **Compressed-Flag** value of 1 indicates that the binary octet sequence of **Message** is compressed using the mechanism declared by the **Message-Encoding** header. A value of 0 indicates that no encoding of **Message** bytes has occurred. Compression contexts are NOT maintained over message boundaries, implementations must create a new context for each message in the stream. If the **Message-Encoding** header is omitted then the **Compressed-Flag** must be 0.
+
+For requests, **EOS** (end-of-stream) is indicated by the presence of the END_STREAM flag on the last received DATA frame. In scenarios where the **Request** stream needs to be closed but no data remains to be sent implementations MUST send an empty DATA frame with this flag set.
+
+###Responses
+
+* **Response** → (Response-Headers *Delimited-Message Trailers) / Trailers-Only
+* **Response-Headers** → HTTP-Status [Message-Encoding] [Message-Accept-Encoding] Content-Type *Custom-Metadata
+* **Trailers-Only** → HTTP-Status Content-Type Trailers
+* **Trailers** → Status [Status-Message] *Custom-Metadata
+* **HTTP-Status** → “:status 200”
+* **Status** → “grpc-status” <status-code-as-ASCII-string>
+* **Status-Message** → “grpc-message” <descriptive text for status as ASCII string>
+
+**Response-Headers** & **Trailers-Only** are each delivered in a single HTTP2 HEADERS frame block. Most responses are expected to have both headers and trailers but **Trailers-Only** is permitted for calls that produce an immediate error. Status must be sent in **Trailers** even if the status code is OK.
+
+For responses end-of-stream is indicated by the presence of the END_STREAM flag on the last received HEADERS frame that carries **Trailers**.
+
+Implementations should expect broken deployments to send non-200 HTTP status codes in responses as well as a variety of non-GRPC content-types and to omit **Status** & **Status-Message**. Implementations must synthesize a **Status** & **Status-Message** to propagate to the application layer when this occurs.
+
+####Example
+
+Sample unary-call showing HTTP2 framing sequence
+
+**Request**
+
+```
+HEADERS (flags = END_HEADERS)
+:method = POST
+:scheme = http
+:path = /google.pubsub.v2.PublisherService/CreateTopic
+:authority = pubsub.googleapis.com
+grpc-timeout = 1S
+content-type = application/grpc+proto
+grpc-encoding = gzip
+authorization = Bearer y235.wef315yfh138vh31hv93hv8h3v
+
+DATA (flags = END_STREAM)
+<Delimited Message>
+```
+**Response**
+```
+HEADERS (flags = END_HEADERS)
+:status = 200
+grpc-encoding = gzip
+
+DATA
+<Delimited Message>
+
+HEADERS (flags = END_STREAM, END_HEADERS)
+grpc-status = 0 # OK
+trace-proto-bin = jher831yy13JHy3hc
+```
+####User Agents
+
+While the protocol does not require a user-agent to function it is recommended that clients provide a structured user-agent string that provides a basic description of the calling library, version & platform to facilitate issue diagnosis in heterogeneous environments. The following structure is recommended to library developers
+```
+User-Agent → “grpc-” Language ?(“-” Variant) “/” Version ?( “ (“ *(AdditionalProperty “;”) “)” )
+```
+E.g.
+
+```
+grpc-java/1.2.3
+grpc-ruby/1.2.3
+grpc-ruby-jruby/1.3.4
+grpc-java-android/0.9.1 (gingerbread/1.2.4; nexus5; tmobile)
+```
+####HTTP2 Transport Mapping
+
+#####Stream Identification
+All GRPC calls need to specify an internal ID. We will use HTTP2 stream-ids as call identifiers in this scheme. NOTE: These id’s are contextual to an open HTTP2 session and will not be unique within a given process that is handling more than one HTTP2 session nor can they be used as GUIDs.
+
+#####Data Frames
+DATA frame boundaries have no relation to **Delimited-Message** boundaries and implementations should make no assumptions about their alignment.
+
+#####Errors
+
+When an application or runtime error occurs during an RPC a **Status** and **Status-Message** are delivered in **Trailers**.
+
+In some cases it is possible that the framing of the message stream has become corrupt and the RPC runtime will choose to use an **RST_STREAM** frame to indicate this state to its peer. RPC runtime implementations should interpret RST_STREAM as immediate full-closure of the stream and should propagate an error up to the calling application layer.
+
+The following mapping from RST_STREAM error codes to GRPC error codes is applied.
+
+HTTP2 Code|GRPC Code
+----------|-----------
+NO_ERROR(0)|INTERNAL - An explicit GRPC status of OK should have been sent but this might be used to aggressively lameduck in some scenarios.
+PROTOCOL_ERROR(1)|INTERNAL
+INTERNAL_ERROR(2)|INTERNAL
+FLOW_CONTROL_ERROR(3)|INTERNAL
+SETTINGS_TIMEOUT(4)|INTERNAL
+STREAM_CLOSED|No mapping as there is no open stream to propagate to. Implementations should log.
+FRAME_SIZE_ERROR|INTERNAL
+REFUSED_STREAM|UNAVAILABLE - Indicates that no processing occurred and the request can be retried, possibly elsewhere.
+CANCEL(8)|Mapped to call cancellation when sent by a client.Mapped to CANCELLED when sent by a server. Note that servers should only use this mechanism when they need to cancel a call but the payload byte sequence is incomplete.
+COMPRESSION_ERROR|INTERNAL
+CONNECT_ERROR|INTERNAL
+ENHANCE_YOUR_CALM|RESOURCE_EXHAUSTED ...with additional error detail provided by runtime to indicate that the exhausted resource is bandwidth.
+INADEQUATE_SECURITY| PERMISSION_DENIED … with additional detail indicating that permission was denied as protocol is not secure enough for call.
+
+
+#####Security
+
+The HTTP2 specification mandates the use of TLS 1.2 or higher when TLS is used with HTTP2. It also places some additional constraints on the allowed ciphers in deployments to avoid known-problems as well as requiring SNI support. It is also expected that HTTP2 will be used in conjunction with proprietary transport security mechanisms about which the specification can make no meaningful recommendations.
+
+#####Connection Management
+######GOAWAY Frame
+Sent by servers to clients to indicate that they will no longer accept any new streams on the associated connections. This frame includes the id of the last successfully accepted stream by the server. Clients should consider any stream initiated after the last successfully accepted stream as UNAVAILABLE and retry the call elsewhere. Clients are free to continue working with the already accepted streams until they complete or the connection is terminated.
+
+Servers should send GOAWAY before terminating a connection to reliably inform clients which work has been accepted by the server and is being executed.
+
+######PING Frame
+Both clients and servers can send a PING frame that the peer must respond to by precisely echoing what they received. This is used to assert that the connection is still live as well as providing a means to estimate end-to-end latency. If a server initiated PING does not receive a response within the deadline expected by the runtime all outstanding calls on the server will be closed with a CANCELLED status. An expired client initiated PING will cause all calls to be closed with an UNAVAILABLE status. Note that the frequency of PINGs is highly dependent on the network environment, implementations are free to adjust PING frequency based on network and application requirements.
+
+######Connection failure
+If a detectable connection failure occurs on the client all calls will be closed with an UNAVAILABLE status. For servers open calls will be closed with a CANCELLED status.
+
+
+### Appendix A - GRPC for Protobuf
+
+The service interfaces declared by protobuf are easily mapped onto GRPC by code generation extensions to protoc. The following defines the mapping to be used
+
+
+* **Path** → / Service-Name / {_method name_}
+* **Service-Name** → ?( {_proto package name_} "." ) {_service name_}
+* **Message-Type** → {_fully qualified proto message name_}
+* **Content-Type** → "application/grpc+proto"
+
+
diff --git a/doc/grpc-auth-support.md b/doc/grpc-auth-support.md
new file mode 100644
index 0000000000..800fbedd80
--- /dev/null
+++ b/doc/grpc-auth-support.md
@@ -0,0 +1,289 @@
+#gRPC Authentication support
+
+gRPC is designed to plug-in a number of authentication mechanisms. This document
+provides a quick overview of the various auth mechanisms supported, discusses
+the API with some examples, and concludes with a discussion of extensibility.
+More documentation and examples are coming soon!
+
+## Supported auth mechanisms
+
+###SSL/TLS
+gRPC has SSL/TLS integration and promotes the use of SSL/TLS to authenticate the
+server, and encrypt all the data exchanged between the client and the server.
+Optional mechanisms are available for clients to provide certificates to
+accomplish mutual authentication.
+
+###OAuth 2.0
+gRPC provides a generic mechanism (described below) to attach metadata to
+requests and responses. This mechanism can be used to attach OAuth 2.0 Access
+Tokens to RPCs being made at a client. Additional support for acquiring Access
+Tokens while accessing Google APIs through gRPC is provided for certain auth
+flows, demonstrated through code examples below.
+
+## API
+To reduce complexity and minimize API clutter, gRPC works with a unified concept
+of a Credentials object. Users construct gRPC credentials using corresponding
+bootstrap credentials (e.g., SSL client certs or Service Account Keys), and use
+the credentials while creating a gRPC channel to any server. Depending on the
+type of credential supplied, the channel uses the credentials during the initial
+SSL/TLS handshake with the server, or uses the credential to generate and
+attach Access Tokens to each request being made on the channel.
+
+###SSL/TLS for server authentication and encryption
+This is the simplest authentication scenario, where a client just wants to
+authenticate the server and encrypt all data.
+
+```cpp
+SslCredentialsOptions ssl_opts; // Options to override SSL params, empty by default
+// Create the credentials object by providing service account key in constructor
+std::unique_ptr<Credentials> creds = CredentialsFactory::SslCredentials(ssl_opts);
+// Create a channel using the credentials created in the previous step
+std::shared_ptr<ChannelInterface> channel = CreateChannel(server_name, creds, channel_args);
+// Create a stub on the channel
+std::unique_ptr<Greeter::Stub> stub(Greeter::NewStub(channel));
+// Make actual RPC calls on the stub.
+grpc::Status s = stub->sayHello(&context, *request, response);
+```
+
+For advanced use cases such as modifying the root CA or using client certs,
+the corresponding options can be set in the SslCredentialsOptions parameter
+passed to the factory method.
+
+
+###Authenticating with Google
+
+gRPC applications can use a simple API to create a credential that works in various deployment scenarios.
+
+```cpp
+std::unique_ptr<Credentials> creds = CredentialsFactory::GoogleDefaultCredentials();
+// Create a channel, stub and make RPC calls (same as in the previous example)
+std::shared_ptr<ChannelInterface> channel = CreateChannel(server_name, creds, channel_args);
+std::unique_ptr<Greeter::Stub> stub(Greeter::NewStub(channel));
+grpc::Status s = stub->sayHello(&context, *request, response);
+```
+
+This credential works for applications using Service Accounts as well as for
+applications running in [Google Compute Engine (GCE)](https://cloud.google.com/compute/). In the former case, the
+service account’s private keys are loaded from the file named in the environment
+variable `GOOGLE_APPLICATION_CREDENTIALS`. The
+keys are used to generate bearer tokens that are attached to each outgoing RPC
+on the corresponding channel.
+
+For applications running in GCE, a default service account and corresponding
+OAuth scopes can be configured during VM setup. At run-time, this credential
+handles communication with the authentication systems to obtain OAuth2 access
+tokens and attaches them to each outgoing RPC on the corresponding channel.
+Extending gRPC to support other authentication mechanisms
+The gRPC protocol is designed with a general mechanism for sending metadata
+associated with RPC. Clients can send metadata at the beginning of an RPC and
+servers can send back metadata at the beginning and end of the RPC. This
+provides a natural mechanism to support OAuth2 and other authentication
+mechanisms that need attach bearer tokens to individual request.
+
+In the simplest case, there is a single line of code required on the client
+to add a specific token as metadata to an RPC and a corresponding access on
+the server to retrieve this piece of metadata. The generation of the token
+on the client side and its verification at the server can be done separately.
+
+A deeper integration can be achieved by plugging in a gRPC credentials implementation for any custom authentication mechanism that needs to attach per-request tokens. gRPC internals also allow switching out SSL/TLS with other encryption mechanisms.
+
+## Examples
+
+These authentication mechanisms will be available in all gRPC's supported languages.
+The following sections demonstrate how authentication and authorization features described above appear in each language: more languages are coming soon.
+
+###SSL/TLS for server authentication and encryption (Ruby)
+```ruby
+# Base case - No encryption
+stub = Helloworld::Greeter::Stub.new('localhost:50051')
+...
+
+# With server authentication SSL/TLS
+creds = GRPC::Core::Credentials.new(load_certs) # load_certs typically loads a CA roots file
+stub = Helloworld::Greeter::Stub.new('localhost:50051', creds: creds)
+```
+
+###SSL/TLS for server authentication and encryption (C#)
+```csharp
+// Base case - No encryption
+var channel = new Channel("localhost:50051");
+var client = new Greeter.GreeterClient(channel);
+...
+
+// With server authentication SSL/TLS
+var credentials = new SslCredentials(File.ReadAllText("ca.pem")); // Load a CA file
+var channel = new Channel("localhost:50051", credentials);
+var client = new Greeter.GreeterClient(channel);
+```
+
+###SSL/TLS for server authentication and encryption (Objective-C)
+
+The default for Objective-C is to use SSL/TLS, as that's the most common use case when accessing
+remote APIs.
+
+```objective-c
+// Base case - With server authentication SSL/TLS
+HLWGreeter *client = [[HLWGreeter alloc] initWithHost:@"localhost:50051"];
+// Same as using @"https://localhost:50051".
+...
+
+// No encryption
+HLWGreeter *client = [[HLWGreeter alloc] initWithHost:@"http://localhost:50051"];
+// Specifying the HTTP scheme explicitly forces no encryption.
+```
+
+###SSL/TLS for server authentication and encryption (Python)
+```python
+# Base case - No encryption
+stub = early_adopter_create_GreeterService_stub('localhost', 50051)
+...
+
+# With server authentication SSL/TLS
+stub = early_adopter_create_GreeterService_stub(
+ 'localhost', 50051, secure=True, root_certificates=open('ca.pem').read())
+...
+```
+n.b.: the beta API will look different
+
+###Authenticating with Google (Ruby)
+```ruby
+# Base case - No encryption/authorization
+stub = Helloworld::Greeter::Stub.new('localhost:50051')
+...
+
+# Authenticating with Google
+require 'googleauth' # from http://www.rubydoc.info/gems/googleauth/0.1.0
+...
+creds = GRPC::Core::Credentials.new(load_certs) # load_certs typically loads a CA roots file
+scope = 'https://www.googleapis.com/auth/grpc-testing'
+authorization = Google::Auth.get_application_default(scope)
+stub = Helloworld::Greeter::Stub.new('localhost:50051',
+ creds: creds,
+ update_metadata: authorization.updater_proc)
+```
+
+###Authenticating with Google (Node.js)
+
+```node
+// Base case - No encryption/authorization
+var stub = new helloworld.Greeter('localhost:50051');
+...
+// Authenticating with Google
+var GoogleAuth = require('google-auth-library'); // from https://www.npmjs.com/package/google-auth-library
+...
+var creds = grpc.Credentials.createSsl(load_certs); // load_certs typically loads a CA roots file
+var scope = 'https://www.googleapis.com/auth/grpc-testing';
+(new GoogleAuth()).getApplicationDefault(function(err, auth) {
+ if (auth.createScopeRequired()) {
+ auth = auth.createScoped(scope);
+ }
+ var stub = new helloworld.Greeter('localhost:50051',
+ {credentials: creds},
+ grpc.getGoogleAuthDelegate(auth));
+});
+```
+
+###Authenticating with Google (C#)
+```csharp
+// Base case - No encryption/authorization
+var channel = new Channel("localhost:50051");
+var client = new Greeter.GreeterClient(channel);
+...
+
+// Authenticating with Google
+using Grpc.Auth; // from Grpc.Auth NuGet package
+...
+var credentials = new SslCredentials(File.ReadAllText("ca.pem")); // Load a CA file
+var channel = new Channel("localhost:50051", credentials);
+
+string scope = "https://www.googleapis.com/auth/grpc-testing";
+var authorization = GoogleCredential.GetApplicationDefault();
+if (authorization.IsCreateScopedRequired)
+{
+ authorization = credential.CreateScoped(new[] { scope });
+}
+var client = new Greeter.GreeterClient(channel,
+ new StubConfiguration(OAuth2InterceptorFactory.Create(credential)));
+```
+
+###Authenticating with Google (PHP)
+```php
+// Base case - No encryption/authorization
+$client = new helloworld\GreeterClient(
+ new Grpc\BaseStub('localhost:50051', []));
+...
+
+// Authenticating with Google
+// the environment variable "GOOGLE_APPLICATION_CREDENTIALS" needs to be set
+$scope = "https://www.googleapis.com/auth/grpc-testing";
+$auth = Google\Auth\ApplicationDefaultCredentials::getCredentials($scope);
+$opts = [
+ 'credentials' => Grpc\Credentials::createSsl(file_get_contents('ca.pem'));
+ 'update_metadata' => $auth->getUpdateMetadataFunc(),
+];
+
+$client = new helloworld\GreeterClient(
+ new Grpc\BaseStub('localhost:50051', $opts));
+
+```
+
+###Authenticating with Google (Objective-C)
+
+This example uses the [Google iOS Sign-In library](https://developers.google.com/identity/sign-in/ios/),
+but it's easily extrapolated to any other OAuth2 library.
+
+```objective-c
+// Base case - No authentication
+[client sayHelloWithRequest:request handler:^(HLWHelloReply *response, NSError *error) {
+ ...
+}];
+
+...
+
+// Authenticating with Google
+
+// When signing the user in, ask her for the relevant scopes.
+GIDSignIn.sharedInstance.scopes = @[@"https://www.googleapis.com/auth/grpc-testing"];
+
+...
+
+#import <ProtoRPC/ProtoRPC.h>
+
+// Create a not-yet-started RPC. We want to set the request headers on this object before starting
+// it.
+ProtoRPC *call =
+ [client RPCToSayHelloWithRequest:request handler:^(HLWHelloReply *response, NSError *error) {
+ ...
+ }];
+
+// Set the access token to be used.
+NSString *accessToken = GIDSignIn.sharedInstance.currentUser.authentication.accessToken;
+call.requestMetadata[@"Authorization"] = [@"Bearer " stringByAppendingString:accessToken]}];
+
+// Start the RPC.
+[call start];
+```
+
+You can see a working example app, with a more detailed explanation, [here](examples/objective-c/auth_sample).
+
+### Authenticating with Google (Python)
+```python
+# Base case - No encryption
+stub = early_adopter_create_GreeterService_stub('localhost', 50051)
+...
+
+# With server authentication SSL/TLS
+import oauth2client.client
+credentials = oauth2client.GoogleCredentials.get_application_default()
+scope = 'https://www.googleapis.com/auth/grpc-testing'
+scoped_credentials = credentials.create_scoped([scope])
+access_token = scoped_credentials.get_access_token().access_token
+metadata_transformer = (
+ lambda x: [('Authorization', 'Bearer {}'.format(access_token))])
+
+stub = early_adopter_create_GreeterService_stub(
+ 'localhost', 50051, secure=True, root_certificates=open('ca.pem').read(),
+ metadata_transformer=metadata_transformer)
+...
+```
+n.b.: the beta API will look different
diff --git a/doc/interop-test-descriptions.md b/doc/interop-test-descriptions.md
index 84ceaa3081..98cd5ab4fc 100644
--- a/doc/interop-test-descriptions.md
+++ b/doc/interop-test-descriptions.md
@@ -4,7 +4,7 @@ Interoperability Test Case Descriptions
Client and server use
[test.proto](https://github.com/grpc/grpc/blob/master/test/proto/test.proto)
and the [gRPC over HTTP/2 v2
-protocol](https://github.com/grpc/grpc-common/blob/master/PROTOCOL-HTTP2.md).
+protocol](doc/PROTOCOL-HTTP2.md).
Client
------
@@ -91,6 +91,87 @@ Client asserts:
* clients are free to assert that the response payload body contents are zero
and comparing the entire response message against a golden response
+### large_compressed_unary
+
+This test verifies compressed unary calls succeed in sending messages. It
+sends one unary request for every combination of compression algorithm and
+payload type.
+
+In all scenarios, whether compression was actually performed is determined by
+the compression bit in the response's message flags. The response's compression
+value indicates which algorithm was used if said compression bit is set.
+
+
+Server features:
+* [UnaryCall][]
+* [Compressable Payload][]
+* [Uncompressable Payload][]
+* [Random Payload][]
+
+Procedure:
+ 1. Client calls UnaryCall with:
+
+ ```
+ {
+ response_compression: <one of {NONE, GZIP, DEFLATE}>
+ response_type: COMPRESSABLE
+ response_size: 314159
+ payload:{
+ body: 271828 bytes of zeros
+ }
+ }
+ ```
+ Client asserts:
+ * call was successful
+ * response payload type is COMPRESSABLE
+ * response compression is consistent with the requested one.
+ * if `response_compression == NONE`, the response MUST NOT have the
+ compressed message flag set.
+ * if `response_compression != NONE`, the response MUST have the compressed
+ message flag set.
+ * response payload body is 314159 bytes in size
+ * clients are free to assert that the response payload body contents are
+ zero and comparing the entire response message against a golden response
+
+
+ 2. Client calls UnaryCall with:
+ ```
+ {
+ response_compression: <one of {NONE, GZIP, DEFLATE}>
+ response_type: UNCOMPRESSABLE
+ response_size: 314159
+ payload:{
+ body: 271828 bytes of zeros
+ }
+ }
+ ```
+ Client asserts:
+ * call was successful
+ * response payload type is UNCOMPRESSABLE
+ * response compression is consistent with the requested one.
+ * the response MUST NOT have the compressed message flag set.
+ * response payload body is 314159 bytes in size
+ * clients are free to assert that the response payload body contents are
+ identical to the golden uncompressable data at `test/cpp/interop/rnd.dat`.
+
+
+ 3. Client calls UnaryCall with:
+ ```
+ {
+ response_compression: <one of {NONE, GZIP, DEFLATE}>
+ response_type: RANDOM
+ response_size: 314159
+ payload:{
+ body: 271828 bytes of zeros
+ }
+ }
+ ```
+ Client asserts:
+ * call was successful
+ * response payload type is either COMPRESSABLE or UNCOMPRESSABLE
+ * the behavior is consistent with the randomly chosen incoming payload type,
+ as described in their respective sections.
+
### client_streaming
This test verifies that client-only streaming succeeds.
@@ -184,6 +265,112 @@ Client asserts:
* clients are free to assert that the response payload body contents are zero
and comparing the entire response messages against golden responses
+### server_compressed_streaming
+
+This test verifies that server-only compressed streaming succeeds.
+
+Server features:
+* [StreamingOutputCall][]
+* [Compressable Payload][]
+* [Uncompressable Payload][]
+* [Random Payload][]
+
+
+Procedure:
+ 1. Client calls StreamingOutputCall with:
+
+ ```
+ {
+ response_compression: <one of {NONE, GZIP, DEFLATE}>
+ response_type:COMPRESSABLE
+ response_parameters:{
+ size: 31415
+ }
+ response_parameters:{
+ size: 9
+ }
+ response_parameters:{
+ size: 2653
+ }
+ response_parameters:{
+ size: 58979
+ }
+ }
+ ```
+
+ Client asserts:
+ * call was successful
+ * exactly four responses
+ * response payloads are COMPRESSABLE
+ * response compression is consistent with the requested one.
+ * if `response_compression == NONE`, the response MUST NOT have the
+ compressed message flag set.
+ * if `response_compression != NONE`, the response MUST have the compressed
+ message flag set.
+ * response payload bodies are sized (in order): 31415, 9, 2653, 58979
+ * clients are free to assert that the response payload body contents are
+ zero and comparing the entire response messages against golden responses
+
+
+ 2. Client calls StreamingOutputCall with:
+
+ ```
+ {
+ response_compression: <one of {NONE, GZIP, DEFLATE}>
+ response_type:UNCOMPRESSABLE
+ response_parameters:{
+ size: 31415
+ }
+ response_parameters:{
+ size: 9
+ }
+ response_parameters:{
+ size: 2653
+ }
+ response_parameters:{
+ size: 58979
+ }
+ }
+ ```
+
+ Client asserts:
+ * call was successful
+ * exactly four responses
+ * response payloads are UNCOMPRESSABLE
+ * response compressions are consistent with the requested one.
+ * the responses MUST NOT have the compressed message flag set.
+ * response payload bodies are sized (in order): 31415, 9, 2653, 58979
+ * clients are free to assert that the body of the responses are identical to
+ the golden uncompressable data at `test/cpp/interop/rnd.dat`.
+
+
+ 3. Client calls StreamingOutputCall with:
+
+ ```
+ {
+ response_compression: <one of {NONE, GZIP, DEFLATE}>
+ response_type:RANDOM
+ response_parameters:{
+ size: 31415
+ }
+ response_parameters:{
+ size: 9
+ }
+ response_parameters:{
+ size: 2653
+ }
+ response_parameters:{
+ size: 58979
+ }
+ }
+ ```
+
+ Client asserts:
+ * call was successful
+ * response payload type is either COMPRESSABLE or UNCOMPRESSABLE
+ * the behavior is consistent with the randomly chosen incoming payload type,
+ as described in their respective sections.
+
### ping_pong
This test verifies that full duplex bidi is supported.
@@ -825,6 +1012,21 @@ When the client requests COMPRESSABLE payload, the response includes a payload
of the size requested containing all zeros and the payload type is
COMPRESSABLE.
+### Uncompressable Payload
+[Uncompressable Payload]: #uncompressable-payload
+
+When the client requests UNCOMPRESSABLE payload, the response includes a payload
+of the size requested containing uncompressable data and the payload type is
+UNCOMPRESSABLE. A 512 kB dump from /dev/urandom is the current golden data,
+stored at `test/cpp/interop/rnd.dat`
+
+### Random Payload
+[Random Payload]: #random-payload
+
+When the client requests RANDOM payload, the response includes either a randomly
+chosen COMPRESSABLE or UNCOMPRESSABLE payload. The data and the payload type
+will be consistent with this choice.
+
### Echo Status
[Echo Status]: #echo-status
When the client sends a response_status in the request payload, the server closes
diff --git a/doc/ref/csharp/.gitignore b/doc/ref/csharp/.gitignore
new file mode 100644
index 0000000000..809997171c
--- /dev/null
+++ b/doc/ref/csharp/.gitignore
@@ -0,0 +1 @@
+LastBuild.log
diff --git a/doc/ref/csharp/html/SearchHelp.aspx b/doc/ref/csharp/html/SearchHelp.aspx
new file mode 100644
index 0000000000..6e2a17b6ab
--- /dev/null
+++ b/doc/ref/csharp/html/SearchHelp.aspx
@@ -0,0 +1,233 @@
+<%@ Page Language="C#" EnableViewState="False" %>
+
+<script runat="server">
+//===============================================================================================================
+// System : Sandcastle Help File Builder
+// File : SearchHelp.aspx
+// Author : Eric Woodruff (Eric@EWoodruff.us)
+// Updated : 05/15/2014
+// Note : Copyright 2007-2015, Eric Woodruff, All rights reserved
+// Compiler: Microsoft C#
+//
+// This file contains the code used to search for keywords within the help topics using the full-text index
+// files created by the help file builder.
+//
+// This code is published under the Microsoft Public License (Ms-PL). A copy of the license should be
+// distributed with the code. It can also be found at the project website: https://GitHub.com/EWSoftware/SHFB. This
+// notice, the author's name, and all copyright notices must remain intact in all applications, documentation,
+// and source files.
+//
+// Date Who Comments
+// ==============================================================================================================
+// 06/24/2007 EFW Created the code
+// 02/17/2012 EFW Switched to JSON serialization to support websites that use something other than ASP.NET
+// such as PHP.
+// 05/15/2014 EFW Updated for use with the lightweight website presentation styles
+//===============================================================================================================
+
+/// <summary>
+/// This class is used to track the results and their rankings
+/// </summary>
+private class Ranking
+{
+ public string Filename, PageTitle;
+ public int Rank;
+
+ public Ranking(string file, string title, int rank)
+ {
+ Filename = file;
+ PageTitle = title;
+ Rank = rank;
+ }
+}
+
+/// <summary>
+/// Render the search results
+/// </summary>
+/// <param name="writer">The writer to which the results are written</param>
+protected override void Render(HtmlTextWriter writer)
+{
+ JavaScriptSerializer jss = new JavaScriptSerializer();
+ string searchText, ftiFile;
+ char letter;
+ bool sortByTitle = false;
+
+ jss.MaxJsonLength = Int32.MaxValue;
+
+ // The keywords for which to search should be passed in the query string
+ searchText = this.Request.QueryString["Keywords"];
+
+ if(String.IsNullOrEmpty(searchText))
+ {
+ writer.Write("<strong>Nothing found</strong>");
+ return;
+ }
+
+ // An optional SortByTitle option can also be specified
+ if(this.Request.QueryString["SortByTitle"] != null)
+ sortByTitle = Convert.ToBoolean(this.Request.QueryString["SortByTitle"]);
+
+ List<string> keywords = this.ParseKeywords(searchText);
+ List<char> letters = new List<char>();
+ List<string> fileList;
+ Dictionary<string, List<long>> ftiWords, wordDictionary = new Dictionary<string,List<long>>();
+
+ // Load the file index
+ using(StreamReader sr = new StreamReader(Server.MapPath("fti/FTI_Files.json")))
+ {
+ fileList = jss.Deserialize<List<string>>(sr.ReadToEnd());
+ }
+
+ // Load the required word index files
+ foreach(string word in keywords)
+ {
+ letter = word[0];
+
+ if(!letters.Contains(letter))
+ {
+ letters.Add(letter);
+ ftiFile = Server.MapPath(String.Format(CultureInfo.InvariantCulture, "fti/FTI_{0}.json", (int)letter));
+
+ if(File.Exists(ftiFile))
+ {
+ using(StreamReader sr = new StreamReader(ftiFile))
+ {
+ ftiWords = jss.Deserialize<Dictionary<string, List<long>>>(sr.ReadToEnd());
+ }
+
+ foreach(string ftiWord in ftiWords.Keys)
+ wordDictionary.Add(ftiWord, ftiWords[ftiWord]);
+ }
+ }
+ }
+
+ // Perform the search and return the results as a block of HTML
+ writer.Write(this.Search(keywords, fileList, wordDictionary, sortByTitle));
+}
+
+/// <summary>
+/// Split the search text up into keywords
+/// </summary>
+/// <param name="keywords">The keywords to parse</param>
+/// <returns>A list containing the words for which to search</returns>
+private List<string> ParseKeywords(string keywords)
+{
+ List<string> keywordList = new List<string>();
+ string checkWord;
+ string[] words = Regex.Split(keywords, @"\W+");
+
+ foreach(string word in words)
+ {
+ checkWord = word.ToLower(CultureInfo.InvariantCulture);
+
+ if(checkWord.Length > 2 && !Char.IsDigit(checkWord[0]) && !keywordList.Contains(checkWord))
+ keywordList.Add(checkWord);
+ }
+
+ return keywordList;
+}
+
+/// <summary>
+/// Search for the specified keywords and return the results as a block of HTML
+/// </summary>
+/// <param name="keywords">The keywords for which to search</param>
+/// <param name="fileInfo">The file list</param>
+/// <param name="wordDictionary">The dictionary used to find the words</param>
+/// <param name="sortByTitle">True to sort by title, false to sort by ranking</param>
+/// <returns>A block of HTML representing the search results</returns>
+private string Search(List<string> keywords, List<string> fileInfo,
+ Dictionary<string, List<long>> wordDictionary, bool sortByTitle)
+{
+ StringBuilder sb = new StringBuilder(10240);
+ Dictionary<string, List<long>> matches = new Dictionary<string, List<long>>();
+ List<long> occurrences;
+ List<int> matchingFileIndices = new List<int>(), occurrenceIndices = new List<int>();
+ List<Ranking> rankings = new List<Ranking>();
+
+ string filename, title;
+ string[] fileIndex;
+ bool isFirst = true;
+ int idx, wordCount, matchCount;
+
+ foreach(string word in keywords)
+ {
+ if(!wordDictionary.TryGetValue(word, out occurrences))
+ return "<strong>Nothing found</strong>";
+
+ matches.Add(word, occurrences);
+ occurrenceIndices.Clear();
+
+ // Get a list of the file indices for this match
+ foreach(long entry in occurrences)
+ occurrenceIndices.Add((int)(entry >> 16));
+
+ if(isFirst)
+ {
+ isFirst = false;
+ matchingFileIndices.AddRange(occurrenceIndices);
+ }
+ else
+ {
+ // After the first match, remove files that do not appear for
+ // all found keywords.
+ for(idx = 0; idx < matchingFileIndices.Count; idx++)
+ if(!occurrenceIndices.Contains(matchingFileIndices[idx]))
+ {
+ matchingFileIndices.RemoveAt(idx);
+ idx--;
+ }
+ }
+ }
+
+ if(matchingFileIndices.Count == 0)
+ return "<strong>Nothing found</strong>";
+
+ // Rank the files based on the number of times the words occurs
+ foreach(int index in matchingFileIndices)
+ {
+ // Split out the title, filename, and word count
+ fileIndex = fileInfo[index].Split('\x0');
+
+ title = fileIndex[0];
+ filename = fileIndex[1];
+ wordCount = Convert.ToInt32(fileIndex[2]);
+ matchCount = 0;
+
+ foreach(string word in keywords)
+ {
+ occurrences = matches[word];
+
+ foreach(long entry in occurrences)
+ if((int)(entry >> 16) == index)
+ matchCount += (int)(entry & 0xFFFF);
+ }
+
+ rankings.Add(new Ranking(filename, title, matchCount * 1000 / wordCount));
+
+ if(rankings.Count > 99)
+ break;
+ }
+
+ // Sort by rank in descending order or by page title in ascending order
+ rankings.Sort(delegate (Ranking x, Ranking y)
+ {
+ if(!sortByTitle)
+ return y.Rank - x.Rank;
+
+ return x.PageTitle.CompareTo(y.PageTitle);
+ });
+
+ // Format the file list and return the results
+ sb.Append("<ol>");
+
+ foreach(Ranking r in rankings)
+ sb.AppendFormat("<li><a href=\"{0}\" target=\"_blank\">{1}</a></li>", r.Filename, r.PageTitle);
+
+ sb.Append("</ol>");
+
+ if(rankings.Count < matchingFileIndices.Count)
+ sb.AppendFormat("<p>Omitted {0} more results</p>", matchingFileIndices.Count - rankings.Count);
+
+ return sb.ToString();
+}
+</script>
diff --git a/doc/ref/csharp/html/SearchHelp.inc.php b/doc/ref/csharp/html/SearchHelp.inc.php
new file mode 100644
index 0000000000..b905e130cf
--- /dev/null
+++ b/doc/ref/csharp/html/SearchHelp.inc.php
@@ -0,0 +1,173 @@
+<?
+// Contributed to the Sandcastle Help File Builder project by Thomas Levesque
+
+class Ranking
+{
+ public $filename;
+ public $pageTitle;
+ public $rank;
+
+ function __construct($file, $title, $rank)
+ {
+ $this->filename = $file;
+ $this->pageTitle = $title;
+ $this->rank = $rank;
+ }
+}
+
+
+/// <summary>
+/// Split the search text up into keywords
+/// </summary>
+/// <param name="keywords">The keywords to parse</param>
+/// <returns>A list containing the words for which to search</returns>
+function ParseKeywords($keywords)
+{
+ $keywordList = array();
+ $words = preg_split("/[^\w]+/", $keywords);
+
+ foreach($words as $word)
+ {
+ $checkWord = strtolower($word);
+ $first = substr($checkWord, 0, 1);
+ if(strlen($checkWord) > 2 && !ctype_digit($first) && !in_array($checkWord, $keywordList))
+ {
+ array_push($keywordList, $checkWord);
+ }
+ }
+
+ return $keywordList;
+}
+
+
+/// <summary>
+/// Search for the specified keywords and return the results as a block of
+/// HTML.
+/// </summary>
+/// <param name="keywords">The keywords for which to search</param>
+/// <param name="fileInfo">The file list</param>
+/// <param name="wordDictionary">The dictionary used to find the words</param>
+/// <param name="sortByTitle">True to sort by title, false to sort by
+/// ranking</param>
+/// <returns>A block of HTML representing the search results.</returns>
+function Search($keywords, $fileInfo, $wordDictionary, $sortByTitle)
+{
+ $sb = "<ol>";
+ $matches = array();
+ $matchingFileIndices = array();
+ $rankings = array();
+
+ $isFirst = true;
+
+ foreach($keywords as $word)
+ {
+ if (!array_key_exists($word, $wordDictionary))
+ {
+ return "<strong>Nothing found</strong>";
+ }
+ $occurrences = $wordDictionary[$word];
+
+ $matches[$word] = $occurrences;
+ $occurrenceIndices = array();
+
+ // Get a list of the file indices for this match
+ foreach($occurrences as $entry)
+ array_push($occurrenceIndices, ($entry >> 16));
+
+ if($isFirst)
+ {
+ $isFirst = false;
+ foreach($occurrenceIndices as $i)
+ {
+ array_push($matchingFileIndices, $i);
+ }
+ }
+ else
+ {
+ // After the first match, remove files that do not appear for
+ // all found keywords.
+ for($idx = 0; $idx < count($matchingFileIndices); $idx++)
+ {
+ if (!in_array($matchingFileIndices[$idx], $occurrenceIndices))
+ {
+ array_splice($matchingFileIndices, $idx, 1);
+ $idx--;
+ }
+ }
+ }
+ }
+
+ if(count($matchingFileIndices) == 0)
+ {
+ return "<strong>Nothing found</strong>";
+ }
+
+ // Rank the files based on the number of times the words occurs
+ foreach($matchingFileIndices as $index)
+ {
+ // Split out the title, filename, and word count
+ $fileIndex = explode("\x00", $fileInfo[$index]);
+
+ $title = $fileIndex[0];
+ $filename = $fileIndex[1];
+ $wordCount = intval($fileIndex[2]);
+ $matchCount = 0;
+
+ foreach($keywords as $words)
+ {
+ $occurrences = $matches[$word];
+
+ foreach($occurrences as $entry)
+ {
+ if(($entry >> 16) == $index)
+ $matchCount += $entry & 0xFFFF;
+ }
+ }
+
+ $r = new Ranking($filename, $title, $matchCount * 1000 / $wordCount);
+ array_push($rankings, $r);
+
+ if(count($rankings) > 99)
+ break;
+ }
+
+ // Sort by rank in descending order or by page title in ascending order
+ if($sortByTitle)
+ {
+ usort($rankings, "cmprankbytitle");
+ }
+ else
+ {
+ usort($rankings, "cmprank");
+ }
+
+ // Format the file list and return the results
+ foreach($rankings as $r)
+ {
+ $f = $r->filename;
+ $t = $r->pageTitle;
+ $sb .= "<li><a href=\"$f\" target=\"_blank\">$t</a></li>";
+ }
+
+ $sb .= "</ol";
+
+ if(count($rankings) < count($matchingFileIndices))
+ {
+ $c = count(matchingFileIndices) - count(rankings);
+ $sb .= "<p>Omitted $c more results</p>";
+ }
+
+ return $sb;
+}
+
+function cmprank($x, $y)
+{
+ return $y->rank - $x->rank;
+}
+
+function cmprankbytitle($x, $y)
+{
+ return strcmp($x->pageTitle, $y->pageTitle);
+}
+
+?>
diff --git a/doc/ref/csharp/html/SearchHelp.php b/doc/ref/csharp/html/SearchHelp.php
new file mode 100644
index 0000000000..eaa1e117f9
--- /dev/null
+++ b/doc/ref/csharp/html/SearchHelp.php
@@ -0,0 +1,58 @@
+<?
+// Contributed to the Sandcastle Help File Builder project by Thomas Levesque
+
+include("SearchHelp.inc.php");
+
+ $sortByTitle = false;
+
+ // The keywords for which to search should be passed in the query string
+ $searchText = $_GET["Keywords"];
+
+ if(empty($searchText))
+ {
+ ?>
+ <strong>Nothing found</strong>
+ <?
+ return;
+ }
+
+ // An optional SortByTitle option can also be specified
+ if($_GET["SortByTitle"] == "true")
+ $sortByTitle = true;
+
+ $keywords = ParseKeywords($searchText);
+ $letters = array();
+ $wordDictionary = array();
+
+ // Load the file index
+ $json = file_get_contents("fti/FTI_Files.json");
+ $fileList = json_decode($json);
+
+ // Load the required word index files
+ foreach($keywords as $word)
+ {
+ $letter = substr($word, 0, 1);
+
+ if(!in_array($letter, $letters))
+ {
+ array_push($letters, $letter);
+ $ascii = ord($letter);
+ $ftiFile = "fti/FTI_$ascii.json";
+
+ if(file_exists($ftiFile))
+ {
+ $json = file_get_contents($ftiFile);
+ $ftiWords = json_decode($json, true);
+
+ foreach($ftiWords as $ftiWord => $val)
+ {
+ $wordDictionary[$ftiWord] = $val;
+ }
+ }
+ }
+ }
+
+ // Perform the search and return the results as a block of HTML
+ $results = Search($keywords, $fileList, $wordDictionary, $sortByTitle);
+ echo $results;
+?> \ No newline at end of file
diff --git a/doc/ref/csharp/html/Web.Config b/doc/ref/csharp/html/Web.Config
new file mode 100644
index 0000000000..26672e8189
--- /dev/null
+++ b/doc/ref/csharp/html/Web.Config
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
+ <system.web>
+ <compilation debug="false">
+ <assemblies>
+ <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
+ </assemblies>
+ </compilation>
+ <pages>
+ <namespaces>
+ <add namespace="System"/>
+ <add namespace="System.Collections.Generic"/>
+ <add namespace="System.Globalization"/>
+ <add namespace="System.IO"/>
+ <add namespace="System.Text"/>
+ <add namespace="System.Text.RegularExpressions"/>
+ <add namespace="System.Web"/>
+ <add namespace="System.Web.Script.Serialization"/>
+ <add namespace="System.Web.UI"/>
+ <add namespace="System.Xml"/>
+ <add namespace="System.Xml.Serialization" />
+ <add namespace="System.Xml.XPath"/>
+ </namespaces>
+ </pages>
+ </system.web>
+ <appSettings>
+ <!-- Increase this value if you get an "Operation is not valid due to the current state of the object" error
+ when using the search page. -->
+ <add key="aspnet:MaxJsonDeserializerMembers" value="100000" />
+ </appSettings>
+</configuration>
diff --git a/doc/ref/csharp/html/WebKI.xml b/doc/ref/csharp/html/WebKI.xml
new file mode 100644
index 0000000000..1318ed5f17
--- /dev/null
+++ b/doc/ref/csharp/html/WebKI.xml
@@ -0,0 +1,1005 @@
+<?xml version="1.0" encoding="utf-8"?>
+<HelpKI>
+ <HelpKINode Title="Aborted enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Add method">
+ <HelpKINode Title="Metadata.Add Method " Url="html/Overload_Grpc_Core_Metadata_Add.htm" />
+ <HelpKINode Title="Server.ServiceDefinitionCollection.Add Method " Url="html/M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm" />
+ <HelpKINode Title="ServerPortCollection.Add Method " Url="html/Overload_Grpc_Core_Server_ServerPortCollection_Add.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AddMethod method" Url="html/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm" />
+ <HelpKINode Title="AlreadyExists enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall(Of TRequest, TResponse) class">
+ <HelpKINode Title="AsyncClientStreamingCall(TRequest, TResponse) Class" Url="html/T_Grpc_Core_AsyncClientStreamingCall_2.htm" />
+ <HelpKINode Title="about AsyncClientStreamingCall(Of TRequest, TResponse) class" Url="html/T_Grpc_Core_AsyncClientStreamingCall_2.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AsyncClientStreamingCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall(Of TRequest, TResponse).Dispose method" Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall(Of TRequest, TResponse).GetAwaiter method" Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall(Of TRequest, TResponse).GetStatus method" Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall(Of TRequest, TResponse).GetTrailers method" Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall(Of TRequest, TResponse).RequestStream property" Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall(Of TRequest, TResponse).ResponseAsync property" Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall(Of TRequest, TResponse).ResponseHeadersAsync property" Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall&lt;TRequest, TResponse&gt; class">
+ <HelpKINode Title="AsyncClientStreamingCall(TRequest, TResponse) Class" Url="html/T_Grpc_Core_AsyncClientStreamingCall_2.htm" />
+ <HelpKINode Title="about AsyncClientStreamingCall&lt;TRequest, TResponse&gt; class" Url="html/T_Grpc_Core_AsyncClientStreamingCall_2.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AsyncClientStreamingCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall&lt;TRequest, TResponse&gt;.Dispose method" Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall&lt;TRequest, TResponse&gt;.GetAwaiter method" Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall&lt;TRequest, TResponse&gt;.GetStatus method" Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall&lt;TRequest, TResponse&gt;.GetTrailers method" Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall&lt;TRequest, TResponse&gt;.RequestStream property" Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall&lt;TRequest, TResponse&gt;.ResponseAsync property" Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm" />
+ <HelpKINode Title="AsyncClientStreamingCall&lt;TRequest, TResponse&gt;.ResponseHeadersAsync property" Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(Of TRequest, TResponse) class">
+ <HelpKINode Title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" Url="html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" />
+ <HelpKINode Title="about AsyncDuplexStreamingCall(Of TRequest, TResponse) class" Url="html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AsyncDuplexStreamingCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(Of TRequest, TResponse).Dispose method" Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(Of TRequest, TResponse).GetStatus method" Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(Of TRequest, TResponse).GetTrailers method" Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(Of TRequest, TResponse).RequestStream property" Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(Of TRequest, TResponse).ResponseHeadersAsync property" Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(Of TRequest, TResponse).ResponseStream property" Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt; class">
+ <HelpKINode Title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" Url="html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" />
+ <HelpKINode Title="about AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt; class" Url="html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt;.Dispose method" Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt;.GetStatus method" Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt;.GetTrailers method" Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt;.RequestStream property" Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt;.ResponseHeadersAsync property" Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt;.ResponseStream property" Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(Of TResponse) class">
+ <HelpKINode Title="AsyncServerStreamingCall(TResponse) Class" Url="html/T_Grpc_Core_AsyncServerStreamingCall_1.htm" />
+ <HelpKINode Title="about AsyncServerStreamingCall(Of TResponse) class" Url="html/T_Grpc_Core_AsyncServerStreamingCall_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AsyncServerStreamingCall(Of TResponse).Dispose method" Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(Of TResponse).GetStatus method" Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(Of TResponse).GetTrailers method" Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(Of TResponse).ResponseHeadersAsync property" Url="html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(Of TResponse).ResponseStream property" Url="html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall&lt;TResponse&gt; class">
+ <HelpKINode Title="AsyncServerStreamingCall(TResponse) Class" Url="html/T_Grpc_Core_AsyncServerStreamingCall_1.htm" />
+ <HelpKINode Title="about AsyncServerStreamingCall&lt;TResponse&gt; class" Url="html/T_Grpc_Core_AsyncServerStreamingCall_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AsyncServerStreamingCall&lt;TResponse&gt;.Dispose method" Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall&lt;TResponse&gt;.GetStatus method" Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall&lt;TResponse&gt;.GetTrailers method" Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall&lt;TResponse&gt;.ResponseHeadersAsync property" Url="html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall&lt;TResponse&gt;.ResponseStream property" Url="html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm" />
+ <HelpKINode Title="AsyncStreamExtensions class">
+ <HelpKINode Title="AsyncStreamExtensions Class" Url="html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm" />
+ <HelpKINode Title="about AsyncStreamExtensions class" Url="html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AsyncStreamExtensions.ForEachAsync(Of T) method" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm" />
+ <HelpKINode Title="AsyncStreamExtensions.ForEachAsync&lt;T&gt; method" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm" />
+ <HelpKINode Title="AsyncStreamExtensions.ToListAsync(Of T) method" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm" />
+ <HelpKINode Title="AsyncStreamExtensions.ToListAsync&lt;T&gt; method" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm" />
+ <HelpKINode Title="AsyncStreamExtensions.WriteAllAsync method" Url="html/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm" />
+ <HelpKINode Title="AsyncUnaryCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" />
+ <HelpKINode Title="AsyncUnaryCall(Of TResponse) class">
+ <HelpKINode Title="AsyncUnaryCall(TResponse) Class" Url="html/T_Grpc_Core_AsyncUnaryCall_1.htm" />
+ <HelpKINode Title="about AsyncUnaryCall(Of TResponse) class" Url="html/T_Grpc_Core_AsyncUnaryCall_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_AsyncUnaryCall_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_AsyncUnaryCall_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AsyncUnaryCall(Of TResponse).Dispose method" Url="html/M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm" />
+ <HelpKINode Title="AsyncUnaryCall(Of TResponse).GetAwaiter method" Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm" />
+ <HelpKINode Title="AsyncUnaryCall(Of TResponse).GetStatus method" Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm" />
+ <HelpKINode Title="AsyncUnaryCall(Of TResponse).GetTrailers method" Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm" />
+ <HelpKINode Title="AsyncUnaryCall(Of TResponse).ResponseAsync property" Url="html/P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm" />
+ <HelpKINode Title="AsyncUnaryCall(Of TResponse).ResponseHeadersAsync property" Url="html/P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AsyncUnaryCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" />
+ <HelpKINode Title="AsyncUnaryCall&lt;TResponse&gt; class">
+ <HelpKINode Title="AsyncUnaryCall(TResponse) Class" Url="html/T_Grpc_Core_AsyncUnaryCall_1.htm" />
+ <HelpKINode Title="about AsyncUnaryCall&lt;TResponse&gt; class" Url="html/T_Grpc_Core_AsyncUnaryCall_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_AsyncUnaryCall_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_AsyncUnaryCall_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AsyncUnaryCall&lt;TResponse&gt;.Dispose method" Url="html/M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm" />
+ <HelpKINode Title="AsyncUnaryCall&lt;TResponse&gt;.GetAwaiter method" Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm" />
+ <HelpKINode Title="AsyncUnaryCall&lt;TResponse&gt;.GetStatus method" Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm" />
+ <HelpKINode Title="AsyncUnaryCall&lt;TResponse&gt;.GetTrailers method" Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm" />
+ <HelpKINode Title="AsyncUnaryCall&lt;TResponse&gt;.ResponseAsync property" Url="html/P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm" />
+ <HelpKINode Title="AsyncUnaryCall&lt;TResponse&gt;.ResponseHeadersAsync property" Url="html/P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AuthInterceptors class">
+ <HelpKINode Title="AuthInterceptors Class" Url="html/T_Grpc_Auth_AuthInterceptors.htm" />
+ <HelpKINode Title="about AuthInterceptors class" Url="html/T_Grpc_Auth_AuthInterceptors.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Auth_AuthInterceptors.htm" />
+ </HelpKINode>
+ <HelpKINode Title="AuthInterceptors.FromAccessToken method" Url="html/M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm" />
+ <HelpKINode Title="AuthInterceptors.FromCredential method" Url="html/M_Grpc_Auth_AuthInterceptors_FromCredential.htm" />
+ <HelpKINode Title="BenchmarkUtil class">
+ <HelpKINode Title="BenchmarkUtil Class" Url="html/T_Grpc_Core_Utils_BenchmarkUtil.htm" />
+ <HelpKINode Title="about BenchmarkUtil class" Url="html/T_Grpc_Core_Utils_BenchmarkUtil.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm" />
+ </HelpKINode>
+ <HelpKINode Title="BenchmarkUtil.RunBenchmark method" Url="html/M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm" />
+ <HelpKINode Title="BinaryHeaderSuffix field" Url="html/F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm" />
+ <HelpKINode Title="BlockingUnaryCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" />
+ <HelpKINode Title="BlockingUnaryCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" />
+ <HelpKINode Title="BoundPort property" Url="html/P_Grpc_Core_ServerPort_BoundPort.htm" />
+ <HelpKINode Title="BufferHint enumeration member" Url="html/T_Grpc_Core_WriteFlags.htm" />
+ <HelpKINode Title="Build method" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm" />
+ <HelpKINode Title="Builder class">
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" />
+ </HelpKINode>
+ <HelpKINode Title="CallInvocationDetails(Of TRequest, TResponse) structure">
+ <HelpKINode Title="CallInvocationDetails(TRequest, TResponse) Structure" Url="html/T_Grpc_Core_CallInvocationDetails_2.htm" />
+ <HelpKINode Title="about CallInvocationDetails(Of TRequest, TResponse) structure" Url="html/T_Grpc_Core_CallInvocationDetails_2.htm" />
+ <HelpKINode Title="constructor" Url="html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_CallInvocationDetails_2.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_CallInvocationDetails_2.htm" />
+ </HelpKINode>
+ <HelpKINode Title="CallInvocationDetails(Of TRequest, TResponse).CallInvocationDetails constructor" Url="html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm" />
+ <HelpKINode Title="CallInvocationDetails(Of TRequest, TResponse).Channel property" Url="html/P_Grpc_Core_CallInvocationDetails_2_Channel.htm" />
+ <HelpKINode Title="CallInvocationDetails(Of TRequest, TResponse).Host property" Url="html/P_Grpc_Core_CallInvocationDetails_2_Host.htm" />
+ <HelpKINode Title="CallInvocationDetails(Of TRequest, TResponse).Method property" Url="html/P_Grpc_Core_CallInvocationDetails_2_Method.htm" />
+ <HelpKINode Title="CallInvocationDetails(Of TRequest, TResponse).Options property" Url="html/P_Grpc_Core_CallInvocationDetails_2_Options.htm" />
+ <HelpKINode Title="CallInvocationDetails(Of TRequest, TResponse).RequestMarshaller property" Url="html/P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" />
+ <HelpKINode Title="CallInvocationDetails(Of TRequest, TResponse).ResponseMarshaller property" Url="html/P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" />
+ <HelpKINode Title="CallInvocationDetails(Of TRequest, TResponse).WithOptions method" Url="html/M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm" />
+ <HelpKINode Title="CallInvocationDetails&lt;TRequest, TResponse&gt; structure">
+ <HelpKINode Title="CallInvocationDetails(TRequest, TResponse) Structure" Url="html/T_Grpc_Core_CallInvocationDetails_2.htm" />
+ <HelpKINode Title="about CallInvocationDetails&lt;TRequest, TResponse&gt; structure" Url="html/T_Grpc_Core_CallInvocationDetails_2.htm" />
+ <HelpKINode Title="constructor" Url="html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_CallInvocationDetails_2.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_CallInvocationDetails_2.htm" />
+ </HelpKINode>
+ <HelpKINode Title="CallInvocationDetails&lt;TRequest, TResponse&gt;.CallInvocationDetails constructor" Url="html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm" />
+ <HelpKINode Title="CallInvocationDetails&lt;TRequest, TResponse&gt;.Channel property" Url="html/P_Grpc_Core_CallInvocationDetails_2_Channel.htm" />
+ <HelpKINode Title="CallInvocationDetails&lt;TRequest, TResponse&gt;.Host property" Url="html/P_Grpc_Core_CallInvocationDetails_2_Host.htm" />
+ <HelpKINode Title="CallInvocationDetails&lt;TRequest, TResponse&gt;.Method property" Url="html/P_Grpc_Core_CallInvocationDetails_2_Method.htm" />
+ <HelpKINode Title="CallInvocationDetails&lt;TRequest, TResponse&gt;.Options property" Url="html/P_Grpc_Core_CallInvocationDetails_2_Options.htm" />
+ <HelpKINode Title="CallInvocationDetails&lt;TRequest, TResponse&gt;.RequestMarshaller property" Url="html/P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" />
+ <HelpKINode Title="CallInvocationDetails&lt;TRequest, TResponse&gt;.ResponseMarshaller property" Url="html/P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" />
+ <HelpKINode Title="CallInvocationDetails&lt;TRequest, TResponse&gt;.WithOptions method" Url="html/M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm" />
+ <HelpKINode Title="CallOptions structure">
+ <HelpKINode Title="CallOptions Structure" Url="html/T_Grpc_Core_CallOptions.htm" />
+ <HelpKINode Title="about CallOptions structure" Url="html/T_Grpc_Core_CallOptions.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_CallOptions__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_CallOptions.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_CallOptions.htm" />
+ </HelpKINode>
+ <HelpKINode Title="CallOptions.CallOptions constructor" Url="html/M_Grpc_Core_CallOptions__ctor.htm" />
+ <HelpKINode Title="CallOptions.CancellationToken property" Url="html/P_Grpc_Core_CallOptions_CancellationToken.htm" />
+ <HelpKINode Title="CallOptions.Deadline property" Url="html/P_Grpc_Core_CallOptions_Deadline.htm" />
+ <HelpKINode Title="CallOptions.Headers property" Url="html/P_Grpc_Core_CallOptions_Headers.htm" />
+ <HelpKINode Title="CallOptions.PropagationToken property" Url="html/P_Grpc_Core_CallOptions_PropagationToken.htm" />
+ <HelpKINode Title="CallOptions.WithCancellationToken method" Url="html/M_Grpc_Core_CallOptions_WithCancellationToken.htm" />
+ <HelpKINode Title="CallOptions.WithDeadline method" Url="html/M_Grpc_Core_CallOptions_WithDeadline.htm" />
+ <HelpKINode Title="CallOptions.WithHeaders method" Url="html/M_Grpc_Core_CallOptions_WithHeaders.htm" />
+ <HelpKINode Title="CallOptions.WriteOptions property" Url="html/P_Grpc_Core_CallOptions_WriteOptions.htm" />
+ <HelpKINode Title="Calls class">
+ <HelpKINode Title="Calls Class" Url="html/T_Grpc_Core_Calls.htm" />
+ <HelpKINode Title="about Calls class" Url="html/T_Grpc_Core_Calls.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Calls.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Calls.AsyncClientStreamingCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" />
+ <HelpKINode Title="Calls.AsyncClientStreamingCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" />
+ <HelpKINode Title="Calls.AsyncDuplexStreamingCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" />
+ <HelpKINode Title="Calls.AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" />
+ <HelpKINode Title="Calls.AsyncServerStreamingCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" />
+ <HelpKINode Title="Calls.AsyncServerStreamingCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" />
+ <HelpKINode Title="Calls.AsyncUnaryCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" />
+ <HelpKINode Title="Calls.AsyncUnaryCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" />
+ <HelpKINode Title="Calls.BlockingUnaryCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" />
+ <HelpKINode Title="Calls.BlockingUnaryCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" />
+ <HelpKINode Title="CancellationToken property">
+ <HelpKINode Title="CallOptions.CancellationToken Property " Url="html/P_Grpc_Core_CallOptions_CancellationToken.htm" />
+ <HelpKINode Title="ServerCallContext.CancellationToken Property " Url="html/P_Grpc_Core_ServerCallContext_CancellationToken.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Cancelled enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Census field" Url="html/F_Grpc_Core_ChannelOptions_Census.htm" />
+ <HelpKINode Title="CertificateChain property" Url="html/P_Grpc_Core_KeyCertificatePair_CertificateChain.htm" />
+ <HelpKINode Title="Channel class">
+ <HelpKINode Title="Channel Class" Url="html/T_Grpc_Core_Channel.htm" />
+ <HelpKINode Title="about Channel class" Url="html/T_Grpc_Core_Channel.htm" />
+ <HelpKINode Title="constructor" Url="html/Overload_Grpc_Core_Channel__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Channel.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Channel.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Channel property">
+ <HelpKINode Title="CallInvocationDetails(TRequest, TResponse).Channel Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Channel.htm" />
+ <HelpKINode Title="ClientBase.Channel Property " Url="html/P_Grpc_Core_ClientBase_Channel.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Channel.Channel constructor" Url="html/Overload_Grpc_Core_Channel__ctor.htm" />
+ <HelpKINode Title="Channel.ConnectAsync method" Url="html/M_Grpc_Core_Channel_ConnectAsync.htm" />
+ <HelpKINode Title="Channel.ResolvedTarget property" Url="html/P_Grpc_Core_Channel_ResolvedTarget.htm" />
+ <HelpKINode Title="Channel.ShutdownAsync method" Url="html/M_Grpc_Core_Channel_ShutdownAsync.htm" />
+ <HelpKINode Title="Channel.State property" Url="html/P_Grpc_Core_Channel_State.htm" />
+ <HelpKINode Title="Channel.Target property" Url="html/P_Grpc_Core_Channel_Target.htm" />
+ <HelpKINode Title="Channel.WaitForStateChangedAsync method" Url="html/M_Grpc_Core_Channel_WaitForStateChangedAsync.htm" />
+ <HelpKINode Title="ChannelOption class">
+ <HelpKINode Title="ChannelOption Class" Url="html/T_Grpc_Core_ChannelOption.htm" />
+ <HelpKINode Title="about ChannelOption class" Url="html/T_Grpc_Core_ChannelOption.htm" />
+ <HelpKINode Title="constructor" Url="html/Overload_Grpc_Core_ChannelOption__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_ChannelOption.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_ChannelOption.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ChannelOption.ChannelOption constructor" Url="html/Overload_Grpc_Core_ChannelOption__ctor.htm" />
+ <HelpKINode Title="ChannelOption.IntValue property" Url="html/P_Grpc_Core_ChannelOption_IntValue.htm" />
+ <HelpKINode Title="ChannelOption.Name property" Url="html/P_Grpc_Core_ChannelOption_Name.htm" />
+ <HelpKINode Title="ChannelOption.OptionType enumeration" Url="html/T_Grpc_Core_ChannelOption_OptionType.htm" />
+ <HelpKINode Title="ChannelOption.StringValue property" Url="html/P_Grpc_Core_ChannelOption_StringValue.htm" />
+ <HelpKINode Title="ChannelOption.Type property" Url="html/P_Grpc_Core_ChannelOption_Type.htm" />
+ <HelpKINode Title="ChannelOptions class">
+ <HelpKINode Title="ChannelOptions Class" Url="html/T_Grpc_Core_ChannelOptions.htm" />
+ <HelpKINode Title="about ChannelOptions class" Url="html/T_Grpc_Core_ChannelOptions.htm" />
+ <HelpKINode Title="fields" Url="html/Fields_T_Grpc_Core_ChannelOptions.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ChannelOptions.Census field" Url="html/F_Grpc_Core_ChannelOptions_Census.htm" />
+ <HelpKINode Title="ChannelOptions.DefaultAuthority field" Url="html/F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" />
+ <HelpKINode Title="ChannelOptions.Http2InitialSequenceNumber field" Url="html/F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" />
+ <HelpKINode Title="ChannelOptions.MaxConcurrentStreams field" Url="html/F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" />
+ <HelpKINode Title="ChannelOptions.MaxMessageLength field" Url="html/F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" />
+ <HelpKINode Title="ChannelOptions.PrimaryUserAgentString field" Url="html/F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" />
+ <HelpKINode Title="ChannelOptions.SecondaryUserAgentString field" Url="html/F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" />
+ <HelpKINode Title="ChannelOptions.SslTargetNameOverride field" Url="html/F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" />
+ <HelpKINode Title="ChannelState enumeration" Url="html/T_Grpc_Core_ChannelState.htm" />
+ <HelpKINode Title="CheckArgument method" Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm" />
+ <HelpKINode Title="CheckNotNull method" Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm" />
+ <HelpKINode Title="CheckState method" Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckState.htm" />
+ <HelpKINode Title="Clear method" Url="html/M_Grpc_Core_Metadata_Clear.htm" />
+ <HelpKINode Title="ClientBase class">
+ <HelpKINode Title="ClientBase Class" Url="html/T_Grpc_Core_ClientBase.htm" />
+ <HelpKINode Title="about ClientBase class" Url="html/T_Grpc_Core_ClientBase.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_ClientBase__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_ClientBase.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_ClientBase.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ClientBase.Channel property" Url="html/P_Grpc_Core_ClientBase_Channel.htm" />
+ <HelpKINode Title="ClientBase.ClientBase constructor" Url="html/M_Grpc_Core_ClientBase__ctor.htm" />
+ <HelpKINode Title="ClientBase.CreateCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_ClientBase_CreateCall__2.htm" />
+ <HelpKINode Title="ClientBase.CreateCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_ClientBase_CreateCall__2.htm" />
+ <HelpKINode Title="ClientBase.HeaderInterceptor property" Url="html/P_Grpc_Core_ClientBase_HeaderInterceptor.htm" />
+ <HelpKINode Title="ClientBase.Host property" Url="html/P_Grpc_Core_ClientBase_Host.htm" />
+ <HelpKINode Title="ClientStreaming enumeration member" Url="html/T_Grpc_Core_MethodType.htm" />
+ <HelpKINode Title="ClientStreamingServerMethod(Of TRequest, TResponse) delegate" Url="html/T_Grpc_Core_ClientStreamingServerMethod_2.htm" />
+ <HelpKINode Title="ClientStreamingServerMethod&lt;TRequest, TResponse&gt; delegate" Url="html/T_Grpc_Core_ClientStreamingServerMethod_2.htm" />
+ <HelpKINode Title="CompleteAsync method" Url="html/M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm" />
+ <HelpKINode Title="CompressionLevel enumeration" Url="html/T_Grpc_Core_CompressionLevel.htm" />
+ <HelpKINode Title="ConnectAsync method" Url="html/M_Grpc_Core_Channel_ConnectAsync.htm" />
+ <HelpKINode Title="Connecting enumeration member" Url="html/T_Grpc_Core_ChannelState.htm" />
+ <HelpKINode Title="ConsoleLogger class">
+ <HelpKINode Title="ConsoleLogger Class" Url="html/T_Grpc_Core_Logging_ConsoleLogger.htm" />
+ <HelpKINode Title="about ConsoleLogger class" Url="html/T_Grpc_Core_Logging_ConsoleLogger.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_Logging_ConsoleLogger__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ConsoleLogger.ConsoleLogger constructor" Url="html/M_Grpc_Core_Logging_ConsoleLogger__ctor.htm" />
+ <HelpKINode Title="ConsoleLogger.Debug method" Url="html/M_Grpc_Core_Logging_ConsoleLogger_Debug.htm" />
+ <HelpKINode Title="ConsoleLogger.Error method" Url="html/Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm" />
+ <HelpKINode Title="ConsoleLogger.ForType(Of T) method" Url="html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm" />
+ <HelpKINode Title="ConsoleLogger.ForType&lt;T&gt; method" Url="html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm" />
+ <HelpKINode Title="ConsoleLogger.Info method" Url="html/M_Grpc_Core_Logging_ConsoleLogger_Info.htm" />
+ <HelpKINode Title="ConsoleLogger.Warning method" Url="html/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm" />
+ <HelpKINode Title="Contains method" Url="html/M_Grpc_Core_Metadata_Contains.htm" />
+ <HelpKINode Title="ContextPropagationOptions class">
+ <HelpKINode Title="ContextPropagationOptions Class" Url="html/T_Grpc_Core_ContextPropagationOptions.htm" />
+ <HelpKINode Title="about ContextPropagationOptions class" Url="html/T_Grpc_Core_ContextPropagationOptions.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_ContextPropagationOptions__ctor.htm" />
+ <HelpKINode Title="fields" Url="html/Fields_T_Grpc_Core_ContextPropagationOptions.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_ContextPropagationOptions.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_ContextPropagationOptions.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ContextPropagationOptions.ContextPropagationOptions constructor" Url="html/M_Grpc_Core_ContextPropagationOptions__ctor.htm" />
+ <HelpKINode Title="ContextPropagationOptions.Default field" Url="html/F_Grpc_Core_ContextPropagationOptions_Default.htm" />
+ <HelpKINode Title="ContextPropagationOptions.IsPropagateCancellation property" Url="html/P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm" />
+ <HelpKINode Title="ContextPropagationOptions.IsPropagateDeadline property" Url="html/P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm" />
+ <HelpKINode Title="ContextPropagationToken class">
+ <HelpKINode Title="ContextPropagationToken Class" Url="html/T_Grpc_Core_ContextPropagationToken.htm" />
+ <HelpKINode Title="about ContextPropagationToken class" Url="html/T_Grpc_Core_ContextPropagationToken.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_ContextPropagationToken.htm" />
+ </HelpKINode>
+ <HelpKINode Title="CopyTo method" Url="html/M_Grpc_Core_Metadata_CopyTo.htm" />
+ <HelpKINode Title="Count property" Url="html/P_Grpc_Core_Metadata_Count.htm" />
+ <HelpKINode Title="Create(Of T) method" Url="html/M_Grpc_Core_Marshallers_Create__1.htm" />
+ <HelpKINode Title="Create&lt;T&gt; method" Url="html/M_Grpc_Core_Marshallers_Create__1.htm" />
+ <HelpKINode Title="CreateBuilder method" Url="html/M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm" />
+ <HelpKINode Title="CreateCall(Of TRequest, TResponse) method" Url="html/M_Grpc_Core_ClientBase_CreateCall__2.htm" />
+ <HelpKINode Title="CreateCall&lt;TRequest, TResponse&gt; method" Url="html/M_Grpc_Core_ClientBase_CreateCall__2.htm" />
+ <HelpKINode Title="CreatePropagationToken method" Url="html/M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm" />
+ <HelpKINode Title="Credentials class">
+ <HelpKINode Title="Credentials Class" Url="html/T_Grpc_Core_Credentials.htm" />
+ <HelpKINode Title="about Credentials class" Url="html/T_Grpc_Core_Credentials.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_Credentials__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Credentials.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Credentials.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Credentials property" Url="html/P_Grpc_Core_ServerPort_Credentials.htm" />
+ <HelpKINode Title="Credentials.Credentials constructor" Url="html/M_Grpc_Core_Credentials__ctor.htm" />
+ <HelpKINode Title="Credentials.Insecure property" Url="html/P_Grpc_Core_Credentials_Insecure.htm" />
+ <HelpKINode Title="CurrentVersion field" Url="html/F_Grpc_Core_VersionInfo_CurrentVersion.htm" />
+ <HelpKINode Title="DataLoss enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Deadline property">
+ <HelpKINode Title="CallOptions.Deadline Property " Url="html/P_Grpc_Core_CallOptions_Deadline.htm" />
+ <HelpKINode Title="ServerCallContext.Deadline Property " Url="html/P_Grpc_Core_ServerCallContext_Deadline.htm" />
+ </HelpKINode>
+ <HelpKINode Title="DeadlineExceeded enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Debug method">
+ <HelpKINode Title="ConsoleLogger.Debug Method " Url="html/M_Grpc_Core_Logging_ConsoleLogger_Debug.htm" />
+ <HelpKINode Title="ILogger.Debug Method " Url="html/M_Grpc_Core_Logging_ILogger_Debug.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Default field">
+ <HelpKINode Title="ContextPropagationOptions.Default Field" Url="html/F_Grpc_Core_ContextPropagationOptions_Default.htm" />
+ <HelpKINode Title="WriteOptions.Default Field" Url="html/F_Grpc_Core_WriteOptions_Default.htm" />
+ </HelpKINode>
+ <HelpKINode Title="DefaultAuthority field" Url="html/F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" />
+ <HelpKINode Title="DefaultCancelled field" Url="html/F_Grpc_Core_Status_DefaultCancelled.htm" />
+ <HelpKINode Title="DefaultSuccess field" Url="html/F_Grpc_Core_Status_DefaultSuccess.htm" />
+ <HelpKINode Title="Deserializer property" Url="html/P_Grpc_Core_Marshaller_1_Deserializer.htm" />
+ <HelpKINode Title="Detail property" Url="html/P_Grpc_Core_Status_Detail.htm" />
+ <HelpKINode Title="Dispose method">
+ <HelpKINode Title="AsyncClientStreamingCall(TRequest, TResponse).Dispose Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(TRequest, TResponse).Dispose Method " Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(TResponse).Dispose Method " Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm" />
+ <HelpKINode Title="AsyncUnaryCall(TResponse).Dispose Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm" />
+ </HelpKINode>
+ <HelpKINode Title="DuplexStreaming enumeration member" Url="html/T_Grpc_Core_MethodType.htm" />
+ <HelpKINode Title="DuplexStreamingServerMethod(Of TRequest, TResponse) delegate" Url="html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm" />
+ <HelpKINode Title="DuplexStreamingServerMethod&lt;TRequest, TResponse&gt; delegate" Url="html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm" />
+ <HelpKINode Title="Empty field" Url="html/F_Grpc_Core_Metadata_Empty.htm" />
+ <HelpKINode Title="Entry structure">
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Metadata_Entry.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Metadata_Entry.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Error method">
+ <HelpKINode Title="ConsoleLogger.Error Method " Url="html/Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm" />
+ <HelpKINode Title="ILogger.Error Method " Url="html/Overload_Grpc_Core_Logging_ILogger_Error.htm" />
+ </HelpKINode>
+ <HelpKINode Title="FailedPrecondition enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="FatalFailure enumeration member" Url="html/T_Grpc_Core_ChannelState.htm" />
+ <HelpKINode Title="Flags property" Url="html/P_Grpc_Core_WriteOptions_Flags.htm" />
+ <HelpKINode Title="ForceClientAuthentication property" Url="html/P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm" />
+ <HelpKINode Title="ForEachAsync(Of T) method" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm" />
+ <HelpKINode Title="ForEachAsync&lt;T&gt; method" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm" />
+ <HelpKINode Title="ForType(Of T) method">
+ <HelpKINode Title="ConsoleLogger.ForType(T) Method " Url="html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm" />
+ <HelpKINode Title="ILogger.ForType(T) Method " Url="html/M_Grpc_Core_Logging_ILogger_ForType__1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ForType&lt;T&gt; method">
+ <HelpKINode Title="ConsoleLogger.ForType(T) Method " Url="html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm" />
+ <HelpKINode Title="ILogger.ForType(T) Method " Url="html/M_Grpc_Core_Logging_ILogger_ForType__1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="FromAccessToken method" Url="html/M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm" />
+ <HelpKINode Title="FromCredential method" Url="html/M_Grpc_Auth_AuthInterceptors_FromCredential.htm" />
+ <HelpKINode Title="FullName property">
+ <HelpKINode Title="IMethod.FullName Property " Url="html/P_Grpc_Core_IMethod_FullName.htm" />
+ <HelpKINode Title="Method(TRequest, TResponse).FullName Property " Url="html/P_Grpc_Core_Method_2_FullName.htm" />
+ </HelpKINode>
+ <HelpKINode Title="GetAwaiter method">
+ <HelpKINode Title="AsyncClientStreamingCall(TRequest, TResponse).GetAwaiter Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm" />
+ <HelpKINode Title="AsyncUnaryCall(TResponse).GetAwaiter Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm" />
+ </HelpKINode>
+ <HelpKINode Title="GetEnumerator method">
+ <HelpKINode Title="Metadata.GetEnumerator Method " Url="html/M_Grpc_Core_Metadata_GetEnumerator.htm" />
+ <HelpKINode Title="Server.ServerPortCollection.GetEnumerator Method " Url="html/M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm" />
+ <HelpKINode Title="Server.ServiceDefinitionCollection.GetEnumerator Method " Url="html/M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm" />
+ </HelpKINode>
+ <HelpKINode Title="GetStatus method">
+ <HelpKINode Title="AsyncClientStreamingCall(TRequest, TResponse).GetStatus Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(TRequest, TResponse).GetStatus Method " Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(TResponse).GetStatus Method " Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm" />
+ <HelpKINode Title="AsyncUnaryCall(TResponse).GetStatus Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm" />
+ </HelpKINode>
+ <HelpKINode Title="GetTrailers method">
+ <HelpKINode Title="AsyncClientStreamingCall(TRequest, TResponse).GetTrailers Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(TRequest, TResponse).GetTrailers Method " Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(TResponse).GetTrailers Method " Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm" />
+ <HelpKINode Title="AsyncUnaryCall(TResponse).GetTrailers Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Grpc.Auth namespace" Url="html/N_Grpc_Auth.htm" />
+ <HelpKINode Title="Grpc.Auth.AuthInterceptors class" Url="html/T_Grpc_Auth_AuthInterceptors.htm" />
+ <HelpKINode Title="Grpc.Core namespace" Url="html/N_Grpc_Core.htm" />
+ <HelpKINode Title="Grpc.Core.AsyncClientStreamingCall(Of TRequest, TResponse) class" Url="html/T_Grpc_Core_AsyncClientStreamingCall_2.htm" />
+ <HelpKINode Title="Grpc.Core.AsyncClientStreamingCall&lt;TRequest, TResponse&gt; class" Url="html/T_Grpc_Core_AsyncClientStreamingCall_2.htm" />
+ <HelpKINode Title="Grpc.Core.AsyncDuplexStreamingCall(Of TRequest, TResponse) class" Url="html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" />
+ <HelpKINode Title="Grpc.Core.AsyncDuplexStreamingCall&lt;TRequest, TResponse&gt; class" Url="html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" />
+ <HelpKINode Title="Grpc.Core.AsyncServerStreamingCall(Of TResponse) class" Url="html/T_Grpc_Core_AsyncServerStreamingCall_1.htm" />
+ <HelpKINode Title="Grpc.Core.AsyncServerStreamingCall&lt;TResponse&gt; class" Url="html/T_Grpc_Core_AsyncServerStreamingCall_1.htm" />
+ <HelpKINode Title="Grpc.Core.AsyncUnaryCall(Of TResponse) class" Url="html/T_Grpc_Core_AsyncUnaryCall_1.htm" />
+ <HelpKINode Title="Grpc.Core.AsyncUnaryCall&lt;TResponse&gt; class" Url="html/T_Grpc_Core_AsyncUnaryCall_1.htm" />
+ <HelpKINode Title="Grpc.Core.CallInvocationDetails(Of TRequest, TResponse) structure" Url="html/T_Grpc_Core_CallInvocationDetails_2.htm" />
+ <HelpKINode Title="Grpc.Core.CallInvocationDetails&lt;TRequest, TResponse&gt; structure" Url="html/T_Grpc_Core_CallInvocationDetails_2.htm" />
+ <HelpKINode Title="Grpc.Core.CallOptions structure" Url="html/T_Grpc_Core_CallOptions.htm" />
+ <HelpKINode Title="Grpc.Core.Calls class" Url="html/T_Grpc_Core_Calls.htm" />
+ <HelpKINode Title="Grpc.Core.Channel class" Url="html/T_Grpc_Core_Channel.htm" />
+ <HelpKINode Title="Grpc.Core.ChannelOption class" Url="html/T_Grpc_Core_ChannelOption.htm" />
+ <HelpKINode Title="Grpc.Core.ChannelOption.OptionType enumeration" Url="html/T_Grpc_Core_ChannelOption_OptionType.htm" />
+ <HelpKINode Title="Grpc.Core.ChannelOptions class" Url="html/T_Grpc_Core_ChannelOptions.htm" />
+ <HelpKINode Title="Grpc.Core.ChannelState enumeration" Url="html/T_Grpc_Core_ChannelState.htm" />
+ <HelpKINode Title="Grpc.Core.ClientBase class" Url="html/T_Grpc_Core_ClientBase.htm" />
+ <HelpKINode Title="Grpc.Core.ClientStreamingServerMethod(Of TRequest, TResponse) delegate" Url="html/T_Grpc_Core_ClientStreamingServerMethod_2.htm" />
+ <HelpKINode Title="Grpc.Core.ClientStreamingServerMethod&lt;TRequest, TResponse&gt; delegate" Url="html/T_Grpc_Core_ClientStreamingServerMethod_2.htm" />
+ <HelpKINode Title="Grpc.Core.CompressionLevel enumeration" Url="html/T_Grpc_Core_CompressionLevel.htm" />
+ <HelpKINode Title="Grpc.Core.ContextPropagationOptions class" Url="html/T_Grpc_Core_ContextPropagationOptions.htm" />
+ <HelpKINode Title="Grpc.Core.ContextPropagationToken class" Url="html/T_Grpc_Core_ContextPropagationToken.htm" />
+ <HelpKINode Title="Grpc.Core.Credentials class" Url="html/T_Grpc_Core_Credentials.htm" />
+ <HelpKINode Title="Grpc.Core.DuplexStreamingServerMethod(Of TRequest, TResponse) delegate" Url="html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm" />
+ <HelpKINode Title="Grpc.Core.DuplexStreamingServerMethod&lt;TRequest, TResponse&gt; delegate" Url="html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm" />
+ <HelpKINode Title="Grpc.Core.GrpcEnvironment class" Url="html/T_Grpc_Core_GrpcEnvironment.htm" />
+ <HelpKINode Title="Grpc.Core.HeaderInterceptor delegate" Url="html/T_Grpc_Core_HeaderInterceptor.htm" />
+ <HelpKINode Title="Grpc.Core.IAsyncStreamReader(Of T) interface" Url="html/T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ <HelpKINode Title="Grpc.Core.IAsyncStreamReader&lt;T&gt; interface" Url="html/T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ <HelpKINode Title="Grpc.Core.IAsyncStreamWriter(Of T) interface" Url="html/T_Grpc_Core_IAsyncStreamWriter_1.htm" />
+ <HelpKINode Title="Grpc.Core.IAsyncStreamWriter&lt;T&gt; interface" Url="html/T_Grpc_Core_IAsyncStreamWriter_1.htm" />
+ <HelpKINode Title="Grpc.Core.IClientStreamWriter(Of T) interface" Url="html/T_Grpc_Core_IClientStreamWriter_1.htm" />
+ <HelpKINode Title="Grpc.Core.IClientStreamWriter&lt;T&gt; interface" Url="html/T_Grpc_Core_IClientStreamWriter_1.htm" />
+ <HelpKINode Title="Grpc.Core.IHasWriteOptions interface" Url="html/T_Grpc_Core_IHasWriteOptions.htm" />
+ <HelpKINode Title="Grpc.Core.IMethod interface" Url="html/T_Grpc_Core_IMethod.htm" />
+ <HelpKINode Title="Grpc.Core.IServerStreamWriter(Of T) interface" Url="html/T_Grpc_Core_IServerStreamWriter_1.htm" />
+ <HelpKINode Title="Grpc.Core.IServerStreamWriter&lt;T&gt; interface" Url="html/T_Grpc_Core_IServerStreamWriter_1.htm" />
+ <HelpKINode Title="Grpc.Core.KeyCertificatePair class" Url="html/T_Grpc_Core_KeyCertificatePair.htm" />
+ <HelpKINode Title="Grpc.Core.Logging namespace" Url="html/N_Grpc_Core_Logging.htm" />
+ <HelpKINode Title="Grpc.Core.Logging.ConsoleLogger class" Url="html/T_Grpc_Core_Logging_ConsoleLogger.htm" />
+ <HelpKINode Title="Grpc.Core.Logging.ILogger interface" Url="html/T_Grpc_Core_Logging_ILogger.htm" />
+ <HelpKINode Title="Grpc.Core.Marshaller(Of T) structure" Url="html/T_Grpc_Core_Marshaller_1.htm" />
+ <HelpKINode Title="Grpc.Core.Marshaller&lt;T&gt; structure" Url="html/T_Grpc_Core_Marshaller_1.htm" />
+ <HelpKINode Title="Grpc.Core.Marshallers class" Url="html/T_Grpc_Core_Marshallers.htm" />
+ <HelpKINode Title="Grpc.Core.Metadata class" Url="html/T_Grpc_Core_Metadata.htm" />
+ <HelpKINode Title="Grpc.Core.Metadata.Entry structure" Url="html/T_Grpc_Core_Metadata_Entry.htm" />
+ <HelpKINode Title="Grpc.Core.Method(Of TRequest, TResponse) class" Url="html/T_Grpc_Core_Method_2.htm" />
+ <HelpKINode Title="Grpc.Core.Method&lt;TRequest, TResponse&gt; class" Url="html/T_Grpc_Core_Method_2.htm" />
+ <HelpKINode Title="Grpc.Core.MethodType enumeration" Url="html/T_Grpc_Core_MethodType.htm" />
+ <HelpKINode Title="Grpc.Core.RpcException class" Url="html/T_Grpc_Core_RpcException.htm" />
+ <HelpKINode Title="Grpc.Core.Server class" Url="html/T_Grpc_Core_Server.htm" />
+ <HelpKINode Title="Grpc.Core.Server.ServerPortCollection class" Url="html/T_Grpc_Core_Server_ServerPortCollection.htm" />
+ <HelpKINode Title="Grpc.Core.Server.ServiceDefinitionCollection class" Url="html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm" />
+ <HelpKINode Title="Grpc.Core.ServerCallContext class" Url="html/T_Grpc_Core_ServerCallContext.htm" />
+ <HelpKINode Title="Grpc.Core.ServerCredentials class" Url="html/T_Grpc_Core_ServerCredentials.htm" />
+ <HelpKINode Title="Grpc.Core.ServerPort class" Url="html/T_Grpc_Core_ServerPort.htm" />
+ <HelpKINode Title="Grpc.Core.ServerServiceDefinition class" Url="html/T_Grpc_Core_ServerServiceDefinition.htm" />
+ <HelpKINode Title="Grpc.Core.ServerServiceDefinition.Builder class" Url="html/T_Grpc_Core_ServerServiceDefinition_Builder.htm" />
+ <HelpKINode Title="Grpc.Core.ServerStreamingServerMethod(Of TRequest, TResponse) delegate" Url="html/T_Grpc_Core_ServerStreamingServerMethod_2.htm" />
+ <HelpKINode Title="Grpc.Core.ServerStreamingServerMethod&lt;TRequest, TResponse&gt; delegate" Url="html/T_Grpc_Core_ServerStreamingServerMethod_2.htm" />
+ <HelpKINode Title="Grpc.Core.SslCredentials class" Url="html/T_Grpc_Core_SslCredentials.htm" />
+ <HelpKINode Title="Grpc.Core.SslServerCredentials class" Url="html/T_Grpc_Core_SslServerCredentials.htm" />
+ <HelpKINode Title="Grpc.Core.Status structure" Url="html/T_Grpc_Core_Status.htm" />
+ <HelpKINode Title="Grpc.Core.StatusCode enumeration" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Grpc.Core.UnaryServerMethod(Of TRequest, TResponse) delegate" Url="html/T_Grpc_Core_UnaryServerMethod_2.htm" />
+ <HelpKINode Title="Grpc.Core.UnaryServerMethod&lt;TRequest, TResponse&gt; delegate" Url="html/T_Grpc_Core_UnaryServerMethod_2.htm" />
+ <HelpKINode Title="Grpc.Core.Utils namespace" Url="html/N_Grpc_Core_Utils.htm" />
+ <HelpKINode Title="Grpc.Core.Utils.AsyncStreamExtensions class" Url="html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm" />
+ <HelpKINode Title="Grpc.Core.Utils.BenchmarkUtil class" Url="html/T_Grpc_Core_Utils_BenchmarkUtil.htm" />
+ <HelpKINode Title="Grpc.Core.Utils.Preconditions class" Url="html/T_Grpc_Core_Utils_Preconditions.htm" />
+ <HelpKINode Title="Grpc.Core.VersionInfo class" Url="html/T_Grpc_Core_VersionInfo.htm" />
+ <HelpKINode Title="Grpc.Core.WriteFlags enumeration" Url="html/T_Grpc_Core_WriteFlags.htm" />
+ <HelpKINode Title="Grpc.Core.WriteOptions class" Url="html/T_Grpc_Core_WriteOptions.htm" />
+ <HelpKINode Title="GrpcEnvironment class">
+ <HelpKINode Title="GrpcEnvironment Class" Url="html/T_Grpc_Core_GrpcEnvironment.htm" />
+ <HelpKINode Title="about GrpcEnvironment class" Url="html/T_Grpc_Core_GrpcEnvironment.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_GrpcEnvironment.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_GrpcEnvironment.htm" />
+ </HelpKINode>
+ <HelpKINode Title="GrpcEnvironment.Logger property" Url="html/P_Grpc_Core_GrpcEnvironment_Logger.htm" />
+ <HelpKINode Title="GrpcEnvironment.SetLogger method" Url="html/M_Grpc_Core_GrpcEnvironment_SetLogger.htm" />
+ <HelpKINode Title="HeaderInterceptor delegate" Url="html/T_Grpc_Core_HeaderInterceptor.htm" />
+ <HelpKINode Title="HeaderInterceptor property" Url="html/P_Grpc_Core_ClientBase_HeaderInterceptor.htm" />
+ <HelpKINode Title="Headers property" Url="html/P_Grpc_Core_CallOptions_Headers.htm" />
+ <HelpKINode Title="High enumeration member" Url="html/T_Grpc_Core_CompressionLevel.htm" />
+ <HelpKINode Title="Host property">
+ <HelpKINode Title="CallInvocationDetails(TRequest, TResponse).Host Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Host.htm" />
+ <HelpKINode Title="ClientBase.Host Property " Url="html/P_Grpc_Core_ClientBase_Host.htm" />
+ <HelpKINode Title="ServerCallContext.Host Property " Url="html/P_Grpc_Core_ServerCallContext_Host.htm" />
+ <HelpKINode Title="ServerPort.Host Property " Url="html/P_Grpc_Core_ServerPort_Host.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Http2InitialSequenceNumber field" Url="html/F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" />
+ <HelpKINode Title="IAsyncStreamReader(Of T) interface">
+ <HelpKINode Title="IAsyncStreamReader(T) Interface" Url="html/T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ <HelpKINode Title="about IAsyncStreamReader(Of T) interface" Url="html/T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="IAsyncStreamReader&lt;T&gt; interface">
+ <HelpKINode Title="IAsyncStreamReader(T) Interface" Url="html/T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ <HelpKINode Title="about IAsyncStreamReader&lt;T&gt; interface" Url="html/T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="IAsyncStreamWriter(Of T) interface">
+ <HelpKINode Title="IAsyncStreamWriter(T) Interface" Url="html/T_Grpc_Core_IAsyncStreamWriter_1.htm" />
+ <HelpKINode Title="about IAsyncStreamWriter(Of T) interface" Url="html/T_Grpc_Core_IAsyncStreamWriter_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="IAsyncStreamWriter(Of T).WriteAsync method" Url="html/M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm" />
+ <HelpKINode Title="IAsyncStreamWriter(Of T).WriteOptions property" Url="html/P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm" />
+ <HelpKINode Title="IAsyncStreamWriter&lt;T&gt; interface">
+ <HelpKINode Title="IAsyncStreamWriter(T) Interface" Url="html/T_Grpc_Core_IAsyncStreamWriter_1.htm" />
+ <HelpKINode Title="about IAsyncStreamWriter&lt;T&gt; interface" Url="html/T_Grpc_Core_IAsyncStreamWriter_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="IAsyncStreamWriter&lt;T&gt;.WriteAsync method" Url="html/M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm" />
+ <HelpKINode Title="IAsyncStreamWriter&lt;T&gt;.WriteOptions property" Url="html/P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm" />
+ <HelpKINode Title="IClientStreamWriter(Of T) interface">
+ <HelpKINode Title="IClientStreamWriter(T) Interface" Url="html/T_Grpc_Core_IClientStreamWriter_1.htm" />
+ <HelpKINode Title="about IClientStreamWriter(Of T) interface" Url="html/T_Grpc_Core_IClientStreamWriter_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_IClientStreamWriter_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_IClientStreamWriter_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="IClientStreamWriter(Of T).CompleteAsync method" Url="html/M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm" />
+ <HelpKINode Title="IClientStreamWriter&lt;T&gt; interface">
+ <HelpKINode Title="IClientStreamWriter(T) Interface" Url="html/T_Grpc_Core_IClientStreamWriter_1.htm" />
+ <HelpKINode Title="about IClientStreamWriter&lt;T&gt; interface" Url="html/T_Grpc_Core_IClientStreamWriter_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_IClientStreamWriter_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_IClientStreamWriter_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="IClientStreamWriter&lt;T&gt;.CompleteAsync method" Url="html/M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm" />
+ <HelpKINode Title="Idle enumeration member" Url="html/T_Grpc_Core_ChannelState.htm" />
+ <HelpKINode Title="IHasWriteOptions interface">
+ <HelpKINode Title="IHasWriteOptions Interface" Url="html/T_Grpc_Core_IHasWriteOptions.htm" />
+ <HelpKINode Title="about IHasWriteOptions interface" Url="html/T_Grpc_Core_IHasWriteOptions.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_IHasWriteOptions.htm" />
+ </HelpKINode>
+ <HelpKINode Title="IHasWriteOptions.WriteOptions property" Url="html/P_Grpc_Core_IHasWriteOptions_WriteOptions.htm" />
+ <HelpKINode Title="ILogger interface">
+ <HelpKINode Title="ILogger Interface" Url="html/T_Grpc_Core_Logging_ILogger.htm" />
+ <HelpKINode Title="about ILogger interface" Url="html/T_Grpc_Core_Logging_ILogger.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Logging_ILogger.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ILogger.Debug method" Url="html/M_Grpc_Core_Logging_ILogger_Debug.htm" />
+ <HelpKINode Title="ILogger.Error method" Url="html/Overload_Grpc_Core_Logging_ILogger_Error.htm" />
+ <HelpKINode Title="ILogger.ForType(Of T) method" Url="html/M_Grpc_Core_Logging_ILogger_ForType__1.htm" />
+ <HelpKINode Title="ILogger.ForType&lt;T&gt; method" Url="html/M_Grpc_Core_Logging_ILogger_ForType__1.htm" />
+ <HelpKINode Title="ILogger.Info method" Url="html/M_Grpc_Core_Logging_ILogger_Info.htm" />
+ <HelpKINode Title="ILogger.Warning method" Url="html/Overload_Grpc_Core_Logging_ILogger_Warning.htm" />
+ <HelpKINode Title="IMethod interface">
+ <HelpKINode Title="IMethod Interface" Url="html/T_Grpc_Core_IMethod.htm" />
+ <HelpKINode Title="about IMethod interface" Url="html/T_Grpc_Core_IMethod.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_IMethod.htm" />
+ </HelpKINode>
+ <HelpKINode Title="IMethod.FullName property" Url="html/P_Grpc_Core_IMethod_FullName.htm" />
+ <HelpKINode Title="IMethod.Name property" Url="html/P_Grpc_Core_IMethod_Name.htm" />
+ <HelpKINode Title="IMethod.ServiceName property" Url="html/P_Grpc_Core_IMethod_ServiceName.htm" />
+ <HelpKINode Title="IMethod.Type property" Url="html/P_Grpc_Core_IMethod_Type.htm" />
+ <HelpKINode Title="IndexOf method" Url="html/M_Grpc_Core_Metadata_IndexOf.htm" />
+ <HelpKINode Title="Info method">
+ <HelpKINode Title="ConsoleLogger.Info Method " Url="html/M_Grpc_Core_Logging_ConsoleLogger_Info.htm" />
+ <HelpKINode Title="ILogger.Info Method " Url="html/M_Grpc_Core_Logging_ILogger_Info.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Insecure property">
+ <HelpKINode Title="Credentials.Insecure Property " Url="html/P_Grpc_Core_Credentials_Insecure.htm" />
+ <HelpKINode Title="ServerCredentials.Insecure Property " Url="html/P_Grpc_Core_ServerCredentials_Insecure.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Insert method" Url="html/M_Grpc_Core_Metadata_Insert.htm" />
+ <HelpKINode Title="Integer enumeration member" Url="html/T_Grpc_Core_ChannelOption_OptionType.htm" />
+ <HelpKINode Title="Internal enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="IntValue property" Url="html/P_Grpc_Core_ChannelOption_IntValue.htm" />
+ <HelpKINode Title="InvalidArgument enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="IsBinary property" Url="html/P_Grpc_Core_Metadata_Entry_IsBinary.htm" />
+ <HelpKINode Title="IServerStreamWriter(Of T) interface">
+ <HelpKINode Title="IServerStreamWriter(T) Interface" Url="html/T_Grpc_Core_IServerStreamWriter_1.htm" />
+ <HelpKINode Title="about IServerStreamWriter(Of T) interface" Url="html/T_Grpc_Core_IServerStreamWriter_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_IServerStreamWriter_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_IServerStreamWriter_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="IServerStreamWriter&lt;T&gt; interface">
+ <HelpKINode Title="IServerStreamWriter(T) Interface" Url="html/T_Grpc_Core_IServerStreamWriter_1.htm" />
+ <HelpKINode Title="about IServerStreamWriter&lt;T&gt; interface" Url="html/T_Grpc_Core_IServerStreamWriter_1.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_IServerStreamWriter_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_IServerStreamWriter_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="IsPropagateCancellation property" Url="html/P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm" />
+ <HelpKINode Title="IsPropagateDeadline property" Url="html/P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm" />
+ <HelpKINode Title="IsReadOnly property" Url="html/P_Grpc_Core_Metadata_IsReadOnly.htm" />
+ <HelpKINode Title="Item property" Url="html/P_Grpc_Core_Metadata_Item.htm" />
+ <HelpKINode Title="Key property" Url="html/P_Grpc_Core_Metadata_Entry_Key.htm" />
+ <HelpKINode Title="KeyCertificatePair class">
+ <HelpKINode Title="KeyCertificatePair Class" Url="html/T_Grpc_Core_KeyCertificatePair.htm" />
+ <HelpKINode Title="about KeyCertificatePair class" Url="html/T_Grpc_Core_KeyCertificatePair.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_KeyCertificatePair__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_KeyCertificatePair.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_KeyCertificatePair.htm" />
+ </HelpKINode>
+ <HelpKINode Title="KeyCertificatePair property" Url="html/P_Grpc_Core_SslCredentials_KeyCertificatePair.htm" />
+ <HelpKINode Title="KeyCertificatePair.CertificateChain property" Url="html/P_Grpc_Core_KeyCertificatePair_CertificateChain.htm" />
+ <HelpKINode Title="KeyCertificatePair.KeyCertificatePair constructor" Url="html/M_Grpc_Core_KeyCertificatePair__ctor.htm" />
+ <HelpKINode Title="KeyCertificatePair.PrivateKey property" Url="html/P_Grpc_Core_KeyCertificatePair_PrivateKey.htm" />
+ <HelpKINode Title="KeyCertificatePairs property" Url="html/P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm" />
+ <HelpKINode Title="KillAsync method" Url="html/M_Grpc_Core_Server_KillAsync.htm" />
+ <HelpKINode Title="Logger property" Url="html/P_Grpc_Core_GrpcEnvironment_Logger.htm" />
+ <HelpKINode Title="Low enumeration member" Url="html/T_Grpc_Core_CompressionLevel.htm" />
+ <HelpKINode Title="Marshaller(Of T) structure">
+ <HelpKINode Title="Marshaller(T) Structure" Url="html/T_Grpc_Core_Marshaller_1.htm" />
+ <HelpKINode Title="about Marshaller(Of T) structure" Url="html/T_Grpc_Core_Marshaller_1.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_Marshaller_1__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Marshaller_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Marshaller_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Marshaller(Of T).Deserializer property" Url="html/P_Grpc_Core_Marshaller_1_Deserializer.htm" />
+ <HelpKINode Title="Marshaller(Of T).Marshaller constructor" Url="html/M_Grpc_Core_Marshaller_1__ctor.htm" />
+ <HelpKINode Title="Marshaller(Of T).Serializer property" Url="html/P_Grpc_Core_Marshaller_1_Serializer.htm" />
+ <HelpKINode Title="Marshaller&lt;T&gt; structure">
+ <HelpKINode Title="Marshaller(T) Structure" Url="html/T_Grpc_Core_Marshaller_1.htm" />
+ <HelpKINode Title="about Marshaller&lt;T&gt; structure" Url="html/T_Grpc_Core_Marshaller_1.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_Marshaller_1__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Marshaller_1.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Marshaller_1.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Marshaller&lt;T&gt;.Deserializer property" Url="html/P_Grpc_Core_Marshaller_1_Deserializer.htm" />
+ <HelpKINode Title="Marshaller&lt;T&gt;.Marshaller constructor" Url="html/M_Grpc_Core_Marshaller_1__ctor.htm" />
+ <HelpKINode Title="Marshaller&lt;T&gt;.Serializer property" Url="html/P_Grpc_Core_Marshaller_1_Serializer.htm" />
+ <HelpKINode Title="Marshallers class">
+ <HelpKINode Title="Marshallers Class" Url="html/T_Grpc_Core_Marshallers.htm" />
+ <HelpKINode Title="about Marshallers class" Url="html/T_Grpc_Core_Marshallers.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Marshallers.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Marshallers.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Marshallers.Create(Of T) method" Url="html/M_Grpc_Core_Marshallers_Create__1.htm" />
+ <HelpKINode Title="Marshallers.Create&lt;T&gt; method" Url="html/M_Grpc_Core_Marshallers_Create__1.htm" />
+ <HelpKINode Title="Marshallers.StringMarshaller property" Url="html/P_Grpc_Core_Marshallers_StringMarshaller.htm" />
+ <HelpKINode Title="MaxConcurrentStreams field" Url="html/F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" />
+ <HelpKINode Title="MaxMessageLength field" Url="html/F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" />
+ <HelpKINode Title="Medium enumeration member" Url="html/T_Grpc_Core_CompressionLevel.htm" />
+ <HelpKINode Title="Metadata class">
+ <HelpKINode Title="Metadata Class" Url="html/T_Grpc_Core_Metadata.htm" />
+ <HelpKINode Title="about Metadata class" Url="html/T_Grpc_Core_Metadata.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_Metadata__ctor.htm" />
+ <HelpKINode Title="fields" Url="html/Fields_T_Grpc_Core_Metadata.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Metadata.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Metadata.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Metadata.Add method" Url="html/Overload_Grpc_Core_Metadata_Add.htm" />
+ <HelpKINode Title="Metadata.BinaryHeaderSuffix field" Url="html/F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm" />
+ <HelpKINode Title="Metadata.Clear method" Url="html/M_Grpc_Core_Metadata_Clear.htm" />
+ <HelpKINode Title="Metadata.Contains method" Url="html/M_Grpc_Core_Metadata_Contains.htm" />
+ <HelpKINode Title="Metadata.CopyTo method" Url="html/M_Grpc_Core_Metadata_CopyTo.htm" />
+ <HelpKINode Title="Metadata.Count property" Url="html/P_Grpc_Core_Metadata_Count.htm" />
+ <HelpKINode Title="Metadata.Empty field" Url="html/F_Grpc_Core_Metadata_Empty.htm" />
+ <HelpKINode Title="Metadata.Entry structure">
+ <HelpKINode Title="Metadata.Entry Structure" Url="html/T_Grpc_Core_Metadata_Entry.htm" />
+ <HelpKINode Title="about Metadata.Entry structure" Url="html/T_Grpc_Core_Metadata_Entry.htm" />
+ <HelpKINode Title="constructor" Url="html/Overload_Grpc_Core_Metadata_Entry__ctor.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Metadata.Entry.Entry constructor" Url="html/Overload_Grpc_Core_Metadata_Entry__ctor.htm" />
+ <HelpKINode Title="Metadata.Entry.IsBinary property" Url="html/P_Grpc_Core_Metadata_Entry_IsBinary.htm" />
+ <HelpKINode Title="Metadata.Entry.Key property" Url="html/P_Grpc_Core_Metadata_Entry_Key.htm" />
+ <HelpKINode Title="Metadata.Entry.ToString method" Url="html/M_Grpc_Core_Metadata_Entry_ToString.htm" />
+ <HelpKINode Title="Metadata.Entry.Value property" Url="html/P_Grpc_Core_Metadata_Entry_Value.htm" />
+ <HelpKINode Title="Metadata.Entry.ValueBytes property" Url="html/P_Grpc_Core_Metadata_Entry_ValueBytes.htm" />
+ <HelpKINode Title="Metadata.GetEnumerator method" Url="html/M_Grpc_Core_Metadata_GetEnumerator.htm" />
+ <HelpKINode Title="Metadata.IndexOf method" Url="html/M_Grpc_Core_Metadata_IndexOf.htm" />
+ <HelpKINode Title="Metadata.Insert method" Url="html/M_Grpc_Core_Metadata_Insert.htm" />
+ <HelpKINode Title="Metadata.IsReadOnly property" Url="html/P_Grpc_Core_Metadata_IsReadOnly.htm" />
+ <HelpKINode Title="Metadata.Item property" Url="html/P_Grpc_Core_Metadata_Item.htm" />
+ <HelpKINode Title="Metadata.Metadata constructor" Url="html/M_Grpc_Core_Metadata__ctor.htm" />
+ <HelpKINode Title="Metadata.Remove method" Url="html/M_Grpc_Core_Metadata_Remove.htm" />
+ <HelpKINode Title="Metadata.RemoveAt method" Url="html/M_Grpc_Core_Metadata_RemoveAt.htm" />
+ <HelpKINode Title="Method property">
+ <HelpKINode Title="CallInvocationDetails(TRequest, TResponse).Method Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Method.htm" />
+ <HelpKINode Title="ServerCallContext.Method Property " Url="html/P_Grpc_Core_ServerCallContext_Method.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Method(Of TRequest, TResponse) class">
+ <HelpKINode Title="Method(TRequest, TResponse) Class" Url="html/T_Grpc_Core_Method_2.htm" />
+ <HelpKINode Title="about Method(Of TRequest, TResponse) class" Url="html/T_Grpc_Core_Method_2.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_Method_2__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Method_2.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Method_2.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Method(Of TRequest, TResponse).FullName property" Url="html/P_Grpc_Core_Method_2_FullName.htm" />
+ <HelpKINode Title="Method(Of TRequest, TResponse).Method constructor" Url="html/M_Grpc_Core_Method_2__ctor.htm" />
+ <HelpKINode Title="Method(Of TRequest, TResponse).Name property" Url="html/P_Grpc_Core_Method_2_Name.htm" />
+ <HelpKINode Title="Method(Of TRequest, TResponse).RequestMarshaller property" Url="html/P_Grpc_Core_Method_2_RequestMarshaller.htm" />
+ <HelpKINode Title="Method(Of TRequest, TResponse).ResponseMarshaller property" Url="html/P_Grpc_Core_Method_2_ResponseMarshaller.htm" />
+ <HelpKINode Title="Method(Of TRequest, TResponse).ServiceName property" Url="html/P_Grpc_Core_Method_2_ServiceName.htm" />
+ <HelpKINode Title="Method(Of TRequest, TResponse).Type property" Url="html/P_Grpc_Core_Method_2_Type.htm" />
+ <HelpKINode Title="Method&lt;TRequest, TResponse&gt; class">
+ <HelpKINode Title="Method(TRequest, TResponse) Class" Url="html/T_Grpc_Core_Method_2.htm" />
+ <HelpKINode Title="about Method&lt;TRequest, TResponse&gt; class" Url="html/T_Grpc_Core_Method_2.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_Method_2__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Method_2.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Method_2.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Method&lt;TRequest, TResponse&gt;.FullName property" Url="html/P_Grpc_Core_Method_2_FullName.htm" />
+ <HelpKINode Title="Method&lt;TRequest, TResponse&gt;.Method constructor" Url="html/M_Grpc_Core_Method_2__ctor.htm" />
+ <HelpKINode Title="Method&lt;TRequest, TResponse&gt;.Name property" Url="html/P_Grpc_Core_Method_2_Name.htm" />
+ <HelpKINode Title="Method&lt;TRequest, TResponse&gt;.RequestMarshaller property" Url="html/P_Grpc_Core_Method_2_RequestMarshaller.htm" />
+ <HelpKINode Title="Method&lt;TRequest, TResponse&gt;.ResponseMarshaller property" Url="html/P_Grpc_Core_Method_2_ResponseMarshaller.htm" />
+ <HelpKINode Title="Method&lt;TRequest, TResponse&gt;.ServiceName property" Url="html/P_Grpc_Core_Method_2_ServiceName.htm" />
+ <HelpKINode Title="Method&lt;TRequest, TResponse&gt;.Type property" Url="html/P_Grpc_Core_Method_2_Type.htm" />
+ <HelpKINode Title="MethodType enumeration" Url="html/T_Grpc_Core_MethodType.htm" />
+ <HelpKINode Title="Name property">
+ <HelpKINode Title="ChannelOption.Name Property " Url="html/P_Grpc_Core_ChannelOption_Name.htm" />
+ <HelpKINode Title="IMethod.Name Property " Url="html/P_Grpc_Core_IMethod_Name.htm" />
+ <HelpKINode Title="Method(TRequest, TResponse).Name Property " Url="html/P_Grpc_Core_Method_2_Name.htm" />
+ </HelpKINode>
+ <HelpKINode Title="NoCompress enumeration member" Url="html/T_Grpc_Core_WriteFlags.htm" />
+ <HelpKINode Title="None enumeration member" Url="html/T_Grpc_Core_CompressionLevel.htm" />
+ <HelpKINode Title="NotFound enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="OK enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Options property" Url="html/P_Grpc_Core_CallInvocationDetails_2_Options.htm" />
+ <HelpKINode Title="OutOfRange enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Peer property" Url="html/P_Grpc_Core_ServerCallContext_Peer.htm" />
+ <HelpKINode Title="PermissionDenied enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="PickUnused field" Url="html/F_Grpc_Core_ServerPort_PickUnused.htm" />
+ <HelpKINode Title="Port property" Url="html/P_Grpc_Core_ServerPort_Port.htm" />
+ <HelpKINode Title="Ports property" Url="html/P_Grpc_Core_Server_Ports.htm" />
+ <HelpKINode Title="Preconditions class">
+ <HelpKINode Title="Preconditions Class" Url="html/T_Grpc_Core_Utils_Preconditions.htm" />
+ <HelpKINode Title="about Preconditions class" Url="html/T_Grpc_Core_Utils_Preconditions.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Utils_Preconditions.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Preconditions.CheckArgument method" Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm" />
+ <HelpKINode Title="Preconditions.CheckNotNull method" Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm" />
+ <HelpKINode Title="Preconditions.CheckState method" Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckState.htm" />
+ <HelpKINode Title="PrimaryUserAgentString field" Url="html/F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" />
+ <HelpKINode Title="PrivateKey property" Url="html/P_Grpc_Core_KeyCertificatePair_PrivateKey.htm" />
+ <HelpKINode Title="PropagationToken property" Url="html/P_Grpc_Core_CallOptions_PropagationToken.htm" />
+ <HelpKINode Title="Ready enumeration member" Url="html/T_Grpc_Core_ChannelState.htm" />
+ <HelpKINode Title="Remove method" Url="html/M_Grpc_Core_Metadata_Remove.htm" />
+ <HelpKINode Title="RemoveAt method" Url="html/M_Grpc_Core_Metadata_RemoveAt.htm" />
+ <HelpKINode Title="RequestHeaders property" Url="html/P_Grpc_Core_ServerCallContext_RequestHeaders.htm" />
+ <HelpKINode Title="RequestMarshaller property">
+ <HelpKINode Title="CallInvocationDetails(TRequest, TResponse).RequestMarshaller Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" />
+ <HelpKINode Title="Method(TRequest, TResponse).RequestMarshaller Property " Url="html/P_Grpc_Core_Method_2_RequestMarshaller.htm" />
+ </HelpKINode>
+ <HelpKINode Title="RequestStream property">
+ <HelpKINode Title="AsyncClientStreamingCall(TRequest, TResponse).RequestStream Property " Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(TRequest, TResponse).RequestStream Property " Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ResolvedTarget property" Url="html/P_Grpc_Core_Channel_ResolvedTarget.htm" />
+ <HelpKINode Title="ResourceExhausted enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="ResponseAsync property">
+ <HelpKINode Title="AsyncClientStreamingCall(TRequest, TResponse).ResponseAsync Property " Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm" />
+ <HelpKINode Title="AsyncUnaryCall(TResponse).ResponseAsync Property " Url="html/P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ResponseHeadersAsync property">
+ <HelpKINode Title="AsyncClientStreamingCall(TRequest, TResponse).ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AsyncDuplexStreamingCall(TRequest, TResponse).ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(TResponse).ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm" />
+ <HelpKINode Title="AsyncUnaryCall(TResponse).ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ResponseMarshaller property">
+ <HelpKINode Title="CallInvocationDetails(TRequest, TResponse).ResponseMarshaller Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" />
+ <HelpKINode Title="Method(TRequest, TResponse).ResponseMarshaller Property " Url="html/P_Grpc_Core_Method_2_ResponseMarshaller.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ResponseStream property">
+ <HelpKINode Title="AsyncDuplexStreamingCall(TRequest, TResponse).ResponseStream Property " Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm" />
+ <HelpKINode Title="AsyncServerStreamingCall(TResponse).ResponseStream Property " Url="html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ResponseTrailers property" Url="html/P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" />
+ <HelpKINode Title="RootCertificates property">
+ <HelpKINode Title="SslCredentials.RootCertificates Property " Url="html/P_Grpc_Core_SslCredentials_RootCertificates.htm" />
+ <HelpKINode Title="SslServerCredentials.RootCertificates Property " Url="html/P_Grpc_Core_SslServerCredentials_RootCertificates.htm" />
+ </HelpKINode>
+ <HelpKINode Title="RpcException class">
+ <HelpKINode Title="RpcException Class" Url="html/T_Grpc_Core_RpcException.htm" />
+ <HelpKINode Title="about RpcException class" Url="html/T_Grpc_Core_RpcException.htm" />
+ <HelpKINode Title="constructor" Url="html/Overload_Grpc_Core_RpcException__ctor.htm" />
+ <HelpKINode Title="events" Url="html/Events_T_Grpc_Core_RpcException.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_RpcException.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_RpcException.htm" />
+ </HelpKINode>
+ <HelpKINode Title="RpcException.RpcException constructor" Url="html/Overload_Grpc_Core_RpcException__ctor.htm" />
+ <HelpKINode Title="RpcException.Status property" Url="html/P_Grpc_Core_RpcException_Status.htm" />
+ <HelpKINode Title="RunBenchmark method" Url="html/M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm" />
+ <HelpKINode Title="SecondaryUserAgentString field" Url="html/F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" />
+ <HelpKINode Title="Serializer property" Url="html/P_Grpc_Core_Marshaller_1_Serializer.htm" />
+ <HelpKINode Title="Server class">
+ <HelpKINode Title="Server Class" Url="html/T_Grpc_Core_Server.htm" />
+ <HelpKINode Title="about Server class" Url="html/T_Grpc_Core_Server.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_Server__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Server.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Server.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Server.KillAsync method" Url="html/M_Grpc_Core_Server_KillAsync.htm" />
+ <HelpKINode Title="Server.Ports property" Url="html/P_Grpc_Core_Server_Ports.htm" />
+ <HelpKINode Title="Server.Server constructor" Url="html/M_Grpc_Core_Server__ctor.htm" />
+ <HelpKINode Title="Server.ServerPortCollection class">
+ <HelpKINode Title="Server.ServerPortCollection Class" Url="html/T_Grpc_Core_Server_ServerPortCollection.htm" />
+ <HelpKINode Title="about Server.ServerPortCollection class" Url="html/T_Grpc_Core_Server_ServerPortCollection.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Server.ServerPortCollection.Add method" Url="html/Overload_Grpc_Core_Server_ServerPortCollection_Add.htm" />
+ <HelpKINode Title="Server.ServerPortCollection.GetEnumerator method" Url="html/M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm" />
+ <HelpKINode Title="Server.ServiceDefinitionCollection class">
+ <HelpKINode Title="Server.ServiceDefinitionCollection Class" Url="html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm" />
+ <HelpKINode Title="about Server.ServiceDefinitionCollection class" Url="html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Server.ServiceDefinitionCollection.Add method" Url="html/M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm" />
+ <HelpKINode Title="Server.ServiceDefinitionCollection.GetEnumerator method" Url="html/M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm" />
+ <HelpKINode Title="Server.Services property" Url="html/P_Grpc_Core_Server_Services.htm" />
+ <HelpKINode Title="Server.ShutdownAsync method" Url="html/M_Grpc_Core_Server_ShutdownAsync.htm" />
+ <HelpKINode Title="Server.ShutdownTask property" Url="html/P_Grpc_Core_Server_ShutdownTask.htm" />
+ <HelpKINode Title="Server.Start method" Url="html/M_Grpc_Core_Server_Start.htm" />
+ <HelpKINode Title="ServerCallContext class">
+ <HelpKINode Title="ServerCallContext Class" Url="html/T_Grpc_Core_ServerCallContext.htm" />
+ <HelpKINode Title="about ServerCallContext class" Url="html/T_Grpc_Core_ServerCallContext.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_ServerCallContext.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_ServerCallContext.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ServerCallContext.CancellationToken property" Url="html/P_Grpc_Core_ServerCallContext_CancellationToken.htm" />
+ <HelpKINode Title="ServerCallContext.CreatePropagationToken method" Url="html/M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm" />
+ <HelpKINode Title="ServerCallContext.Deadline property" Url="html/P_Grpc_Core_ServerCallContext_Deadline.htm" />
+ <HelpKINode Title="ServerCallContext.Host property" Url="html/P_Grpc_Core_ServerCallContext_Host.htm" />
+ <HelpKINode Title="ServerCallContext.Method property" Url="html/P_Grpc_Core_ServerCallContext_Method.htm" />
+ <HelpKINode Title="ServerCallContext.Peer property" Url="html/P_Grpc_Core_ServerCallContext_Peer.htm" />
+ <HelpKINode Title="ServerCallContext.RequestHeaders property" Url="html/P_Grpc_Core_ServerCallContext_RequestHeaders.htm" />
+ <HelpKINode Title="ServerCallContext.ResponseTrailers property" Url="html/P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" />
+ <HelpKINode Title="ServerCallContext.Status property" Url="html/P_Grpc_Core_ServerCallContext_Status.htm" />
+ <HelpKINode Title="ServerCallContext.WriteOptions property" Url="html/P_Grpc_Core_ServerCallContext_WriteOptions.htm" />
+ <HelpKINode Title="ServerCallContext.WriteResponseHeadersAsync method" Url="html/M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm" />
+ <HelpKINode Title="ServerCredentials class">
+ <HelpKINode Title="ServerCredentials Class" Url="html/T_Grpc_Core_ServerCredentials.htm" />
+ <HelpKINode Title="about ServerCredentials class" Url="html/T_Grpc_Core_ServerCredentials.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_ServerCredentials__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_ServerCredentials.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_ServerCredentials.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ServerCredentials.Insecure property" Url="html/P_Grpc_Core_ServerCredentials_Insecure.htm" />
+ <HelpKINode Title="ServerCredentials.ServerCredentials constructor" Url="html/M_Grpc_Core_ServerCredentials__ctor.htm" />
+ <HelpKINode Title="ServerPort class">
+ <HelpKINode Title="ServerPort Class" Url="html/T_Grpc_Core_ServerPort.htm" />
+ <HelpKINode Title="about ServerPort class" Url="html/T_Grpc_Core_ServerPort.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_ServerPort__ctor.htm" />
+ <HelpKINode Title="fields" Url="html/Fields_T_Grpc_Core_ServerPort.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_ServerPort.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_ServerPort.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ServerPort.BoundPort property" Url="html/P_Grpc_Core_ServerPort_BoundPort.htm" />
+ <HelpKINode Title="ServerPort.Credentials property" Url="html/P_Grpc_Core_ServerPort_Credentials.htm" />
+ <HelpKINode Title="ServerPort.Host property" Url="html/P_Grpc_Core_ServerPort_Host.htm" />
+ <HelpKINode Title="ServerPort.PickUnused field" Url="html/F_Grpc_Core_ServerPort_PickUnused.htm" />
+ <HelpKINode Title="ServerPort.Port property" Url="html/P_Grpc_Core_ServerPort_Port.htm" />
+ <HelpKINode Title="ServerPort.ServerPort constructor" Url="html/M_Grpc_Core_ServerPort__ctor.htm" />
+ <HelpKINode Title="ServerPortCollection class">
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Server_ServerPortCollection.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ServerServiceDefinition class">
+ <HelpKINode Title="ServerServiceDefinition Class" Url="html/T_Grpc_Core_ServerServiceDefinition.htm" />
+ <HelpKINode Title="about ServerServiceDefinition class" Url="html/T_Grpc_Core_ServerServiceDefinition.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_ServerServiceDefinition.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ServerServiceDefinition.Builder class">
+ <HelpKINode Title="ServerServiceDefinition.Builder Class" Url="html/T_Grpc_Core_ServerServiceDefinition_Builder.htm" />
+ <HelpKINode Title="about ServerServiceDefinition.Builder class" Url="html/T_Grpc_Core_ServerServiceDefinition_Builder.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ServerServiceDefinition.Builder.AddMethod method" Url="html/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm" />
+ <HelpKINode Title="ServerServiceDefinition.Builder.Build method" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm" />
+ <HelpKINode Title="ServerServiceDefinition.Builder.Builder constructor" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm" />
+ <HelpKINode Title="ServerServiceDefinition.CreateBuilder method" Url="html/M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm" />
+ <HelpKINode Title="ServerStreaming enumeration member" Url="html/T_Grpc_Core_MethodType.htm" />
+ <HelpKINode Title="ServerStreamingServerMethod(Of TRequest, TResponse) delegate" Url="html/T_Grpc_Core_ServerStreamingServerMethod_2.htm" />
+ <HelpKINode Title="ServerStreamingServerMethod&lt;TRequest, TResponse&gt; delegate" Url="html/T_Grpc_Core_ServerStreamingServerMethod_2.htm" />
+ <HelpKINode Title="ServiceDefinitionCollection class">
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ServiceName property">
+ <HelpKINode Title="IMethod.ServiceName Property " Url="html/P_Grpc_Core_IMethod_ServiceName.htm" />
+ <HelpKINode Title="Method(TRequest, TResponse).ServiceName Property " Url="html/P_Grpc_Core_Method_2_ServiceName.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Services property" Url="html/P_Grpc_Core_Server_Services.htm" />
+ <HelpKINode Title="SetLogger method" Url="html/M_Grpc_Core_GrpcEnvironment_SetLogger.htm" />
+ <HelpKINode Title="ShutdownAsync method">
+ <HelpKINode Title="Channel.ShutdownAsync Method " Url="html/M_Grpc_Core_Channel_ShutdownAsync.htm" />
+ <HelpKINode Title="Server.ShutdownAsync Method " Url="html/M_Grpc_Core_Server_ShutdownAsync.htm" />
+ </HelpKINode>
+ <HelpKINode Title="ShutdownTask property" Url="html/P_Grpc_Core_Server_ShutdownTask.htm" />
+ <HelpKINode Title="SslCredentials class">
+ <HelpKINode Title="SslCredentials Class" Url="html/T_Grpc_Core_SslCredentials.htm" />
+ <HelpKINode Title="about SslCredentials class" Url="html/T_Grpc_Core_SslCredentials.htm" />
+ <HelpKINode Title="constructor" Url="html/Overload_Grpc_Core_SslCredentials__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_SslCredentials.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_SslCredentials.htm" />
+ </HelpKINode>
+ <HelpKINode Title="SslCredentials.KeyCertificatePair property" Url="html/P_Grpc_Core_SslCredentials_KeyCertificatePair.htm" />
+ <HelpKINode Title="SslCredentials.RootCertificates property" Url="html/P_Grpc_Core_SslCredentials_RootCertificates.htm" />
+ <HelpKINode Title="SslCredentials.SslCredentials constructor" Url="html/Overload_Grpc_Core_SslCredentials__ctor.htm" />
+ <HelpKINode Title="SslServerCredentials class">
+ <HelpKINode Title="SslServerCredentials Class" Url="html/T_Grpc_Core_SslServerCredentials.htm" />
+ <HelpKINode Title="about SslServerCredentials class" Url="html/T_Grpc_Core_SslServerCredentials.htm" />
+ <HelpKINode Title="constructor" Url="html/Overload_Grpc_Core_SslServerCredentials__ctor.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_SslServerCredentials.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_SslServerCredentials.htm" />
+ </HelpKINode>
+ <HelpKINode Title="SslServerCredentials.ForceClientAuthentication property" Url="html/P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm" />
+ <HelpKINode Title="SslServerCredentials.KeyCertificatePairs property" Url="html/P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm" />
+ <HelpKINode Title="SslServerCredentials.RootCertificates property" Url="html/P_Grpc_Core_SslServerCredentials_RootCertificates.htm" />
+ <HelpKINode Title="SslServerCredentials.SslServerCredentials constructor" Url="html/Overload_Grpc_Core_SslServerCredentials__ctor.htm" />
+ <HelpKINode Title="SslTargetNameOverride field" Url="html/F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" />
+ <HelpKINode Title="Start method" Url="html/M_Grpc_Core_Server_Start.htm" />
+ <HelpKINode Title="State property" Url="html/P_Grpc_Core_Channel_State.htm" />
+ <HelpKINode Title="Status property">
+ <HelpKINode Title="RpcException.Status Property " Url="html/P_Grpc_Core_RpcException_Status.htm" />
+ <HelpKINode Title="ServerCallContext.Status Property " Url="html/P_Grpc_Core_ServerCallContext_Status.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Status structure">
+ <HelpKINode Title="Status Structure" Url="html/T_Grpc_Core_Status.htm" />
+ <HelpKINode Title="about Status structure" Url="html/T_Grpc_Core_Status.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_Status__ctor.htm" />
+ <HelpKINode Title="fields" Url="html/Fields_T_Grpc_Core_Status.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_Status.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_Status.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Status.DefaultCancelled field" Url="html/F_Grpc_Core_Status_DefaultCancelled.htm" />
+ <HelpKINode Title="Status.DefaultSuccess field" Url="html/F_Grpc_Core_Status_DefaultSuccess.htm" />
+ <HelpKINode Title="Status.Detail property" Url="html/P_Grpc_Core_Status_Detail.htm" />
+ <HelpKINode Title="Status.Status constructor" Url="html/M_Grpc_Core_Status__ctor.htm" />
+ <HelpKINode Title="Status.StatusCode property" Url="html/P_Grpc_Core_Status_StatusCode.htm" />
+ <HelpKINode Title="Status.ToString method" Url="html/M_Grpc_Core_Status_ToString.htm" />
+ <HelpKINode Title="StatusCode enumeration" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="StatusCode property" Url="html/P_Grpc_Core_Status_StatusCode.htm" />
+ <HelpKINode Title="String enumeration member" Url="html/T_Grpc_Core_ChannelOption_OptionType.htm" />
+ <HelpKINode Title="StringMarshaller property" Url="html/P_Grpc_Core_Marshallers_StringMarshaller.htm" />
+ <HelpKINode Title="StringValue property" Url="html/P_Grpc_Core_ChannelOption_StringValue.htm" />
+ <HelpKINode Title="Target property" Url="html/P_Grpc_Core_Channel_Target.htm" />
+ <HelpKINode Title="ToListAsync(Of T) method" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm" />
+ <HelpKINode Title="ToListAsync&lt;T&gt; method" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm" />
+ <HelpKINode Title="ToString method">
+ <HelpKINode Title="Metadata.Entry.ToString Method " Url="html/M_Grpc_Core_Metadata_Entry_ToString.htm" />
+ <HelpKINode Title="Status.ToString Method " Url="html/M_Grpc_Core_Status_ToString.htm" />
+ </HelpKINode>
+ <HelpKINode Title="TransientFailure enumeration member" Url="html/T_Grpc_Core_ChannelState.htm" />
+ <HelpKINode Title="Type property">
+ <HelpKINode Title="ChannelOption.Type Property " Url="html/P_Grpc_Core_ChannelOption_Type.htm" />
+ <HelpKINode Title="IMethod.Type Property " Url="html/P_Grpc_Core_IMethod_Type.htm" />
+ <HelpKINode Title="Method(TRequest, TResponse).Type Property " Url="html/P_Grpc_Core_Method_2_Type.htm" />
+ </HelpKINode>
+ <HelpKINode Title="Unary enumeration member" Url="html/T_Grpc_Core_MethodType.htm" />
+ <HelpKINode Title="UnaryServerMethod(Of TRequest, TResponse) delegate" Url="html/T_Grpc_Core_UnaryServerMethod_2.htm" />
+ <HelpKINode Title="UnaryServerMethod&lt;TRequest, TResponse&gt; delegate" Url="html/T_Grpc_Core_UnaryServerMethod_2.htm" />
+ <HelpKINode Title="Unauthenticated enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Unavailable enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Unimplemented enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Unknown enumeration member" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpKINode Title="Value property" Url="html/P_Grpc_Core_Metadata_Entry_Value.htm" />
+ <HelpKINode Title="ValueBytes property" Url="html/P_Grpc_Core_Metadata_Entry_ValueBytes.htm" />
+ <HelpKINode Title="VersionInfo class">
+ <HelpKINode Title="VersionInfo Class" Url="html/T_Grpc_Core_VersionInfo.htm" />
+ <HelpKINode Title="about VersionInfo class" Url="html/T_Grpc_Core_VersionInfo.htm" />
+ <HelpKINode Title="fields" Url="html/Fields_T_Grpc_Core_VersionInfo.htm" />
+ </HelpKINode>
+ <HelpKINode Title="VersionInfo.CurrentVersion field" Url="html/F_Grpc_Core_VersionInfo_CurrentVersion.htm" />
+ <HelpKINode Title="WaitForStateChangedAsync method" Url="html/M_Grpc_Core_Channel_WaitForStateChangedAsync.htm" />
+ <HelpKINode Title="Warning method">
+ <HelpKINode Title="ConsoleLogger.Warning Method " Url="html/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm" />
+ <HelpKINode Title="ILogger.Warning Method " Url="html/Overload_Grpc_Core_Logging_ILogger_Warning.htm" />
+ </HelpKINode>
+ <HelpKINode Title="WithCancellationToken method" Url="html/M_Grpc_Core_CallOptions_WithCancellationToken.htm" />
+ <HelpKINode Title="WithDeadline method" Url="html/M_Grpc_Core_CallOptions_WithDeadline.htm" />
+ <HelpKINode Title="WithHeaders method" Url="html/M_Grpc_Core_CallOptions_WithHeaders.htm" />
+ <HelpKINode Title="WithOptions method" Url="html/M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm" />
+ <HelpKINode Title="WriteAllAsync method" Url="html/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm" />
+ <HelpKINode Title="WriteAsync method" Url="html/M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm" />
+ <HelpKINode Title="WriteFlags enumeration" Url="html/T_Grpc_Core_WriteFlags.htm" />
+ <HelpKINode Title="WriteOptions class">
+ <HelpKINode Title="WriteOptions Class" Url="html/T_Grpc_Core_WriteOptions.htm" />
+ <HelpKINode Title="about WriteOptions class" Url="html/T_Grpc_Core_WriteOptions.htm" />
+ <HelpKINode Title="constructor" Url="html/M_Grpc_Core_WriteOptions__ctor.htm" />
+ <HelpKINode Title="fields" Url="html/Fields_T_Grpc_Core_WriteOptions.htm" />
+ <HelpKINode Title="methods" Url="html/Methods_T_Grpc_Core_WriteOptions.htm" />
+ <HelpKINode Title="properties" Url="html/Properties_T_Grpc_Core_WriteOptions.htm" />
+ </HelpKINode>
+ <HelpKINode Title="WriteOptions property">
+ <HelpKINode Title="CallOptions.WriteOptions Property " Url="html/P_Grpc_Core_CallOptions_WriteOptions.htm" />
+ <HelpKINode Title="IAsyncStreamWriter(T).WriteOptions Property " Url="html/P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm" />
+ <HelpKINode Title="IHasWriteOptions.WriteOptions Property " Url="html/P_Grpc_Core_IHasWriteOptions_WriteOptions.htm" />
+ <HelpKINode Title="ServerCallContext.WriteOptions Property " Url="html/P_Grpc_Core_ServerCallContext_WriteOptions.htm" />
+ </HelpKINode>
+ <HelpKINode Title="WriteOptions.Default field" Url="html/F_Grpc_Core_WriteOptions_Default.htm" />
+ <HelpKINode Title="WriteOptions.Flags property" Url="html/P_Grpc_Core_WriteOptions_Flags.htm" />
+ <HelpKINode Title="WriteOptions.WriteOptions constructor" Url="html/M_Grpc_Core_WriteOptions__ctor.htm" />
+ <HelpKINode Title="WriteResponseHeadersAsync method" Url="html/M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm" />
+</HelpKI>
diff --git a/doc/ref/csharp/html/WebTOC.xml b/doc/ref/csharp/html/WebTOC.xml
new file mode 100644
index 0000000000..63da550f44
--- /dev/null
+++ b/doc/ref/csharp/html/WebTOC.xml
@@ -0,0 +1,523 @@
+<?xml version="1.0" encoding="utf-8"?>
+<HelpTOC>
+
+ <HelpTOCNode Id="99ef1ac3-191d-4e4f-9bc8-74352a862ec4" Title="Namespaces" Url="html/R_Project_Documentation.htm">
+ <HelpTOCNode Id="4fb087a0-0c31-4543-8b29-7b9740334f73" Title="Grpc.Auth" Url="html/N_Grpc_Auth.htm">
+ <HelpTOCNode Id="1987ce1f-94cc-4bce-8e43-19759c74132b" Title="AuthInterceptors Class" Url="html/T_Grpc_Auth_AuthInterceptors.htm">
+ <HelpTOCNode Id="0703fe79-f006-463e-b258-6896e18413c8" Title="AuthInterceptors Methods" Url="html/Methods_T_Grpc_Auth_AuthInterceptors.htm">
+ <HelpTOCNode Title="FromAccessToken Method " Url="html/M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm" />
+ <HelpTOCNode Title="FromCredential Method " Url="html/M_Grpc_Auth_AuthInterceptors_FromCredential.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="b7d00d8c-ddae-4df5-ae4a-9c6b14a57519" Title="Grpc.Core" Url="html/N_Grpc_Core.htm">
+ <HelpTOCNode Id="25ef63ae-1bf8-411e-9808-e60ff5c27062" Title="AsyncClientStreamingCall(TRequest, TResponse) Class" Url="html/T_Grpc_Core_AsyncClientStreamingCall_2.htm">
+ <HelpTOCNode Id="3c82f904-a574-4811-9151-bd9bd00550d6" Title="AsyncClientStreamingCall(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm">
+ <HelpTOCNode Title="RequestStream Property " Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm" />
+ <HelpTOCNode Title="ResponseAsync Property " Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm" />
+ <HelpTOCNode Title="ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="01928221-e085-4913-8a55-ab2003c07b52" Title="AsyncClientStreamingCall(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm">
+ <HelpTOCNode Title="Dispose Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm" />
+ <HelpTOCNode Title="GetAwaiter Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm" />
+ <HelpTOCNode Title="GetStatus Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm" />
+ <HelpTOCNode Title="GetTrailers Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="64d758f3-3b89-4445-b9fe-864a1f4ecc09" Title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" Url="html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">
+ <HelpTOCNode Id="03ecf596-76d4-4e4b-8aa7-35c74f9c2a4d" Title="AsyncDuplexStreamingCall(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">
+ <HelpTOCNode Title="RequestStream Property " Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm" />
+ <HelpTOCNode Title="ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm" />
+ <HelpTOCNode Title="ResponseStream Property " Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="918a83fd-570e-4e4e-a673-d2df2a41090a" Title="AsyncDuplexStreamingCall(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">
+ <HelpTOCNode Title="Dispose Method " Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm" />
+ <HelpTOCNode Title="GetStatus Method " Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm" />
+ <HelpTOCNode Title="GetTrailers Method " Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="db112032-ef26-407a-8aef-4bd5e9e51b30" Title="AsyncServerStreamingCall(TResponse) Class" Url="html/T_Grpc_Core_AsyncServerStreamingCall_1.htm">
+ <HelpTOCNode Id="d3f8a1be-8ffe-44d1-9c21-361a77a59f26" Title="AsyncServerStreamingCall(TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm">
+ <HelpTOCNode Title="ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm" />
+ <HelpTOCNode Title="ResponseStream Property " Url="html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="b5c92c91-96d0-4cb5-9ca2-7e2bde39e47c" Title="AsyncServerStreamingCall(TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm">
+ <HelpTOCNode Title="Dispose Method " Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm" />
+ <HelpTOCNode Title="GetStatus Method " Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm" />
+ <HelpTOCNode Title="GetTrailers Method " Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="d2ddfcd9-ebc5-43f2-9054-1697572874d5" Title="AsyncUnaryCall(TResponse) Class" Url="html/T_Grpc_Core_AsyncUnaryCall_1.htm">
+ <HelpTOCNode Id="e6d76953-ca0c-4211-82e5-116c69e5b43e" Title="AsyncUnaryCall(TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncUnaryCall_1.htm">
+ <HelpTOCNode Title="ResponseAsync Property " Url="html/P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm" />
+ <HelpTOCNode Title="ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="36ce22b5-b6c2-4601-9037-adfe892ed976" Title="AsyncUnaryCall(TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncUnaryCall_1.htm">
+ <HelpTOCNode Title="Dispose Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm" />
+ <HelpTOCNode Title="GetAwaiter Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm" />
+ <HelpTOCNode Title="GetStatus Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm" />
+ <HelpTOCNode Title="GetTrailers Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="e272cc27-608b-46e6-abe7-9655e6d90df0" Title="CallInvocationDetails(TRequest, TResponse) Structure" Url="html/T_Grpc_Core_CallInvocationDetails_2.htm">
+ <HelpTOCNode Id="c29d79be-04d1-448c-b6b8-cdd08ebe3d4a" Title="CallInvocationDetails(TRequest, TResponse) Constructor " Url="html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm">
+ <HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)" Url="html/M_Grpc_Core_CallInvocationDetails_2__ctor.htm" />
+ <HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)" Url="html/M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm" />
+ <HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)" Url="html/M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="473238e3-f673-4b5e-8f28-856e23613981" Title="CallInvocationDetails(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_CallInvocationDetails_2.htm">
+ <HelpTOCNode Title="Channel Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Channel.htm" />
+ <HelpTOCNode Title="Host Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Host.htm" />
+ <HelpTOCNode Title="Method Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Method.htm" />
+ <HelpTOCNode Title="Options Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Options.htm" />
+ <HelpTOCNode Title="RequestMarshaller Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" />
+ <HelpTOCNode Title="ResponseMarshaller Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="62c7468b-9b2b-4869-8de0-412744a4da91" Title="CallInvocationDetails(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_CallInvocationDetails_2.htm">
+ <HelpTOCNode Title="WithOptions Method " Url="html/M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="24946a6a-fd6f-4c40-85ec-50f0fc3f4ffb" Title="CallOptions Structure" Url="html/T_Grpc_Core_CallOptions.htm">
+ <HelpTOCNode Title="CallOptions Constructor " Url="html/M_Grpc_Core_CallOptions__ctor.htm" />
+ <HelpTOCNode Id="a687274d-aad6-48e2-8013-ecf468e6ef2d" Title="CallOptions Properties" Url="html/Properties_T_Grpc_Core_CallOptions.htm">
+ <HelpTOCNode Title="CancellationToken Property " Url="html/P_Grpc_Core_CallOptions_CancellationToken.htm" />
+ <HelpTOCNode Title="Deadline Property " Url="html/P_Grpc_Core_CallOptions_Deadline.htm" />
+ <HelpTOCNode Title="Headers Property " Url="html/P_Grpc_Core_CallOptions_Headers.htm" />
+ <HelpTOCNode Title="PropagationToken Property " Url="html/P_Grpc_Core_CallOptions_PropagationToken.htm" />
+ <HelpTOCNode Title="WriteOptions Property " Url="html/P_Grpc_Core_CallOptions_WriteOptions.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="d9305a3f-a129-407b-9456-492e3a2228a0" Title="CallOptions Methods" Url="html/Methods_T_Grpc_Core_CallOptions.htm">
+ <HelpTOCNode Title="WithCancellationToken Method " Url="html/M_Grpc_Core_CallOptions_WithCancellationToken.htm" />
+ <HelpTOCNode Title="WithDeadline Method " Url="html/M_Grpc_Core_CallOptions_WithDeadline.htm" />
+ <HelpTOCNode Title="WithHeaders Method " Url="html/M_Grpc_Core_CallOptions_WithHeaders.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="ab223075-d269-49b4-92d7-ce69d4ca4b4e" Title="Calls Class" Url="html/T_Grpc_Core_Calls.htm">
+ <HelpTOCNode Id="0706d54b-54c4-44d5-90cf-8ba232d1965a" Title="Calls Methods" Url="html/Methods_T_Grpc_Core_Calls.htm">
+ <HelpTOCNode Title="AsyncClientStreamingCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" />
+ <HelpTOCNode Title="AsyncDuplexStreamingCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" />
+ <HelpTOCNode Title="AsyncServerStreamingCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" />
+ <HelpTOCNode Title="AsyncUnaryCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" />
+ <HelpTOCNode Title="BlockingUnaryCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="d862ceb3-3a34-47c5-b3aa-2f5616e3cad4" Title="Channel Class" Url="html/T_Grpc_Core_Channel.htm">
+ <HelpTOCNode Id="18933ee0-95a7-4a12-acdb-05803845efc8" Title="Channel Constructor " Url="html/Overload_Grpc_Core_Channel__ctor.htm">
+ <HelpTOCNode Title="Channel Constructor (String, Credentials, IEnumerable(ChannelOption))" Url="html/M_Grpc_Core_Channel__ctor.htm" />
+ <HelpTOCNode Title="Channel Constructor (String, Int32, Credentials, IEnumerable(ChannelOption))" Url="html/M_Grpc_Core_Channel__ctor_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="e9257938-4557-4035-8c2d-9d7e8aedd598" Title="Channel Properties" Url="html/Properties_T_Grpc_Core_Channel.htm">
+ <HelpTOCNode Title="ResolvedTarget Property " Url="html/P_Grpc_Core_Channel_ResolvedTarget.htm" />
+ <HelpTOCNode Title="State Property " Url="html/P_Grpc_Core_Channel_State.htm" />
+ <HelpTOCNode Title="Target Property " Url="html/P_Grpc_Core_Channel_Target.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="897e0ff0-8820-47d2-860a-4ca3602f836c" Title="Channel Methods" Url="html/Methods_T_Grpc_Core_Channel.htm">
+ <HelpTOCNode Title="ConnectAsync Method " Url="html/M_Grpc_Core_Channel_ConnectAsync.htm" />
+ <HelpTOCNode Title="ShutdownAsync Method " Url="html/M_Grpc_Core_Channel_ShutdownAsync.htm" />
+ <HelpTOCNode Title="WaitForStateChangedAsync Method " Url="html/M_Grpc_Core_Channel_WaitForStateChangedAsync.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="f0103838-be43-46f6-a022-647b30d4a3df" Title="ChannelOption Class" Url="html/T_Grpc_Core_ChannelOption.htm">
+ <HelpTOCNode Id="419e7c87-a890-494e-a5e0-74e5820f5925" Title="ChannelOption Constructor " Url="html/Overload_Grpc_Core_ChannelOption__ctor.htm">
+ <HelpTOCNode Title="ChannelOption Constructor (String, Int32)" Url="html/M_Grpc_Core_ChannelOption__ctor.htm" />
+ <HelpTOCNode Title="ChannelOption Constructor (String, String)" Url="html/M_Grpc_Core_ChannelOption__ctor_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="00f94e4d-e531-4677-bb8d-54a71fe94bd5" Title="ChannelOption Properties" Url="html/Properties_T_Grpc_Core_ChannelOption.htm">
+ <HelpTOCNode Title="IntValue Property " Url="html/P_Grpc_Core_ChannelOption_IntValue.htm" />
+ <HelpTOCNode Title="Name Property " Url="html/P_Grpc_Core_ChannelOption_Name.htm" />
+ <HelpTOCNode Title="StringValue Property " Url="html/P_Grpc_Core_ChannelOption_StringValue.htm" />
+ <HelpTOCNode Title="Type Property " Url="html/P_Grpc_Core_ChannelOption_Type.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="ChannelOption Methods" Url="html/Methods_T_Grpc_Core_ChannelOption.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="ChannelOption.OptionType Enumeration" Url="html/T_Grpc_Core_ChannelOption_OptionType.htm" />
+ <HelpTOCNode Id="f20d85db-61c5-4b58-a949-f1f2cd9df295" Title="ChannelOptions Class" Url="html/T_Grpc_Core_ChannelOptions.htm">
+ <HelpTOCNode Id="0b243553-4a9e-41ff-baa3-9a7872003252" Title="ChannelOptions Fields" Url="html/Fields_T_Grpc_Core_ChannelOptions.htm">
+ <HelpTOCNode Title="Census Field" Url="html/F_Grpc_Core_ChannelOptions_Census.htm" />
+ <HelpTOCNode Title="DefaultAuthority Field" Url="html/F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" />
+ <HelpTOCNode Title="Http2InitialSequenceNumber Field" Url="html/F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" />
+ <HelpTOCNode Title="MaxConcurrentStreams Field" Url="html/F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" />
+ <HelpTOCNode Title="MaxMessageLength Field" Url="html/F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" />
+ <HelpTOCNode Title="PrimaryUserAgentString Field" Url="html/F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" />
+ <HelpTOCNode Title="SecondaryUserAgentString Field" Url="html/F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" />
+ <HelpTOCNode Title="SslTargetNameOverride Field" Url="html/F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Title="ChannelState Enumeration" Url="html/T_Grpc_Core_ChannelState.htm" />
+ <HelpTOCNode Id="1ad15b1e-abc8-4dda-860c-22a4462a9c41" Title="ClientBase Class" Url="html/T_Grpc_Core_ClientBase.htm">
+ <HelpTOCNode Title="ClientBase Constructor " Url="html/M_Grpc_Core_ClientBase__ctor.htm" />
+ <HelpTOCNode Id="c304c5ea-13cf-4a02-b3a2-3c2273cba628" Title="ClientBase Properties" Url="html/Properties_T_Grpc_Core_ClientBase.htm">
+ <HelpTOCNode Title="Channel Property " Url="html/P_Grpc_Core_ClientBase_Channel.htm" />
+ <HelpTOCNode Title="HeaderInterceptor Property " Url="html/P_Grpc_Core_ClientBase_HeaderInterceptor.htm" />
+ <HelpTOCNode Title="Host Property " Url="html/P_Grpc_Core_ClientBase_Host.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="a640e9d6-9acc-4fa9-95b7-a4aac2862c65" Title="ClientBase Methods" Url="html/Methods_T_Grpc_Core_ClientBase.htm">
+ <HelpTOCNode Title="CreateCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_ClientBase_CreateCall__2.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" Url="html/T_Grpc_Core_ClientStreamingServerMethod_2.htm" />
+ <HelpTOCNode Title="CompressionLevel Enumeration" Url="html/T_Grpc_Core_CompressionLevel.htm" />
+ <HelpTOCNode Id="dbd91489-e56f-4cd2-8039-a10c0da5ff4c" Title="ContextPropagationOptions Class" Url="html/T_Grpc_Core_ContextPropagationOptions.htm">
+ <HelpTOCNode Title="ContextPropagationOptions Constructor " Url="html/M_Grpc_Core_ContextPropagationOptions__ctor.htm" />
+ <HelpTOCNode Id="69b7c88c-670e-435c-a274-7aca7e48090f" Title="ContextPropagationOptions Properties" Url="html/Properties_T_Grpc_Core_ContextPropagationOptions.htm">
+ <HelpTOCNode Title="IsPropagateCancellation Property " Url="html/P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm" />
+ <HelpTOCNode Title="IsPropagateDeadline Property " Url="html/P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="ContextPropagationOptions Methods" Url="html/Methods_T_Grpc_Core_ContextPropagationOptions.htm" />
+ <HelpTOCNode Id="0b020f8b-4de1-4f03-834b-00e7c8dc8352" Title="ContextPropagationOptions Fields" Url="html/Fields_T_Grpc_Core_ContextPropagationOptions.htm">
+ <HelpTOCNode Title="Default Field" Url="html/F_Grpc_Core_ContextPropagationOptions_Default.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="d40552a2-3013-4004-bade-17e9d4760b86" Title="ContextPropagationToken Class" Url="html/T_Grpc_Core_ContextPropagationToken.htm">
+ <HelpTOCNode Title="ContextPropagationToken Methods" Url="html/Methods_T_Grpc_Core_ContextPropagationToken.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="e5d569d9-b865-4283-8085-20b02c8fe61c" Title="Credentials Class" Url="html/T_Grpc_Core_Credentials.htm">
+ <HelpTOCNode Title="Credentials Constructor " Url="html/M_Grpc_Core_Credentials__ctor.htm" />
+ <HelpTOCNode Id="254817e8-86c9-4ee7-ad0f-7b5e4545e975" Title="Credentials Properties" Url="html/Properties_T_Grpc_Core_Credentials.htm">
+ <HelpTOCNode Title="Insecure Property " Url="html/P_Grpc_Core_Credentials_Insecure.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="Credentials Methods" Url="html/Methods_T_Grpc_Core_Credentials.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" Url="html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm" />
+ <HelpTOCNode Id="4d583c99-71d3-4807-8c5b-70b084b23f04" Title="GrpcEnvironment Class" Url="html/T_Grpc_Core_GrpcEnvironment.htm">
+ <HelpTOCNode Id="629e105c-2323-458d-826e-7e1ca31a6ca2" Title="GrpcEnvironment Properties" Url="html/Properties_T_Grpc_Core_GrpcEnvironment.htm">
+ <HelpTOCNode Title="Logger Property " Url="html/P_Grpc_Core_GrpcEnvironment_Logger.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="a9a95b9f-e072-48ae-9a7a-d88fead5e886" Title="GrpcEnvironment Methods" Url="html/Methods_T_Grpc_Core_GrpcEnvironment.htm">
+ <HelpTOCNode Title="SetLogger Method " Url="html/M_Grpc_Core_GrpcEnvironment_SetLogger.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Title="HeaderInterceptor Delegate" Url="html/T_Grpc_Core_HeaderInterceptor.htm" />
+ <HelpTOCNode Id="18206bb0-344f-430d-83b0-c82a855bfc4b" Title="IAsyncStreamReader(T) Interface" Url="html/T_Grpc_Core_IAsyncStreamReader_1.htm">
+ <HelpTOCNode Title="IAsyncStreamReader(T) Properties" Url="html/Properties_T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ <HelpTOCNode Title="IAsyncStreamReader(T) Methods" Url="html/Methods_T_Grpc_Core_IAsyncStreamReader_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="63fc9314-b1a0-406c-8474-5f3b7e692d38" Title="IAsyncStreamWriter(T) Interface" Url="html/T_Grpc_Core_IAsyncStreamWriter_1.htm">
+ <HelpTOCNode Id="e6af8f5c-023a-456a-8686-3f9bdf051dec" Title="IAsyncStreamWriter(T) Properties" Url="html/Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm">
+ <HelpTOCNode Title="WriteOptions Property " Url="html/P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="f26cd3eb-e88d-45cd-8a92-2b25fd90fde9" Title="IAsyncStreamWriter(T) Methods" Url="html/Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm">
+ <HelpTOCNode Title="WriteAsync Method " Url="html/M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="e5d1afb7-12fa-4ff2-9b22-cb459e04879c" Title="IClientStreamWriter(T) Interface" Url="html/T_Grpc_Core_IClientStreamWriter_1.htm">
+ <HelpTOCNode Title="IClientStreamWriter(T) Properties" Url="html/Properties_T_Grpc_Core_IClientStreamWriter_1.htm" />
+ <HelpTOCNode Id="08735fdd-2533-4dd3-ac72-1868c2b17b66" Title="IClientStreamWriter(T) Methods" Url="html/Methods_T_Grpc_Core_IClientStreamWriter_1.htm">
+ <HelpTOCNode Title="CompleteAsync Method " Url="html/M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="42c38dfb-6ad6-4c8e-a8d0-301c86a4cad3" Title="IHasWriteOptions Interface" Url="html/T_Grpc_Core_IHasWriteOptions.htm">
+ <HelpTOCNode Id="1f8fb9be-416e-4276-89d4-960d38df861e" Title="IHasWriteOptions Properties" Url="html/Properties_T_Grpc_Core_IHasWriteOptions.htm">
+ <HelpTOCNode Title="WriteOptions Property " Url="html/P_Grpc_Core_IHasWriteOptions_WriteOptions.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="68a8090b-42dd-4c11-9dc9-d4cf0a0be858" Title="IMethod Interface" Url="html/T_Grpc_Core_IMethod.htm">
+ <HelpTOCNode Id="5d6514b6-f61c-48ba-a888-9c688660d323" Title="IMethod Properties" Url="html/Properties_T_Grpc_Core_IMethod.htm">
+ <HelpTOCNode Title="FullName Property " Url="html/P_Grpc_Core_IMethod_FullName.htm" />
+ <HelpTOCNode Title="Name Property " Url="html/P_Grpc_Core_IMethod_Name.htm" />
+ <HelpTOCNode Title="ServiceName Property " Url="html/P_Grpc_Core_IMethod_ServiceName.htm" />
+ <HelpTOCNode Title="Type Property " Url="html/P_Grpc_Core_IMethod_Type.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="e07e09e1-8b9c-4c33-a6d1-fb0e7988fba7" Title="IServerStreamWriter(T) Interface" Url="html/T_Grpc_Core_IServerStreamWriter_1.htm">
+ <HelpTOCNode Title="IServerStreamWriter(T) Properties" Url="html/Properties_T_Grpc_Core_IServerStreamWriter_1.htm" />
+ <HelpTOCNode Title="IServerStreamWriter(T) Methods" Url="html/Methods_T_Grpc_Core_IServerStreamWriter_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="37cb53e6-d613-48d3-86ff-f948208ffaa9" Title="KeyCertificatePair Class" Url="html/T_Grpc_Core_KeyCertificatePair.htm">
+ <HelpTOCNode Title="KeyCertificatePair Constructor " Url="html/M_Grpc_Core_KeyCertificatePair__ctor.htm" />
+ <HelpTOCNode Id="51709b36-11b6-46ef-a59e-807eadf88071" Title="KeyCertificatePair Properties" Url="html/Properties_T_Grpc_Core_KeyCertificatePair.htm">
+ <HelpTOCNode Title="CertificateChain Property " Url="html/P_Grpc_Core_KeyCertificatePair_CertificateChain.htm" />
+ <HelpTOCNode Title="PrivateKey Property " Url="html/P_Grpc_Core_KeyCertificatePair_PrivateKey.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="KeyCertificatePair Methods" Url="html/Methods_T_Grpc_Core_KeyCertificatePair.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="f4008ea4-7966-4c4e-9ffd-05192b1b664d" Title="Marshaller(T) Structure" Url="html/T_Grpc_Core_Marshaller_1.htm">
+ <HelpTOCNode Title="Marshaller(T) Constructor " Url="html/M_Grpc_Core_Marshaller_1__ctor.htm" />
+ <HelpTOCNode Id="2eeb7e1f-3bb9-465a-aff6-6f1941dbad6d" Title="Marshaller(T) Properties" Url="html/Properties_T_Grpc_Core_Marshaller_1.htm">
+ <HelpTOCNode Title="Deserializer Property " Url="html/P_Grpc_Core_Marshaller_1_Deserializer.htm" />
+ <HelpTOCNode Title="Serializer Property " Url="html/P_Grpc_Core_Marshaller_1_Serializer.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="Marshaller(T) Methods" Url="html/Methods_T_Grpc_Core_Marshaller_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="c89b726d-3eed-4293-95f6-eae2890c18d2" Title="Marshallers Class" Url="html/T_Grpc_Core_Marshallers.htm">
+ <HelpTOCNode Id="9f6c3cdf-93f2-40e9-bedf-e8fac4307920" Title="Marshallers Properties" Url="html/Properties_T_Grpc_Core_Marshallers.htm">
+ <HelpTOCNode Title="StringMarshaller Property " Url="html/P_Grpc_Core_Marshallers_StringMarshaller.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="24d998e8-0231-430a-ad63-2f71d1f2d83a" Title="Marshallers Methods" Url="html/Methods_T_Grpc_Core_Marshallers.htm">
+ <HelpTOCNode Title="Create(T) Method " Url="html/M_Grpc_Core_Marshallers_Create__1.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="21a41266-1f68-47c3-baf5-4a2f7c282328" Title="Metadata Class" Url="html/T_Grpc_Core_Metadata.htm">
+ <HelpTOCNode Title="Metadata Constructor " Url="html/M_Grpc_Core_Metadata__ctor.htm" />
+ <HelpTOCNode Id="2415b35c-f7b2-41e1-b3ed-1f5f5c134864" Title="Metadata Properties" Url="html/Properties_T_Grpc_Core_Metadata.htm">
+ <HelpTOCNode Title="Count Property " Url="html/P_Grpc_Core_Metadata_Count.htm" />
+ <HelpTOCNode Title="IsReadOnly Property " Url="html/P_Grpc_Core_Metadata_IsReadOnly.htm" />
+ <HelpTOCNode Title="Item Property " Url="html/P_Grpc_Core_Metadata_Item.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="3357228b-5529-42b9-87a4-22ad19c9002c" Title="Metadata Methods" Url="html/Methods_T_Grpc_Core_Metadata.htm">
+ <HelpTOCNode Id="00a82ec2-19f4-476d-9222-17260e2233fe" Title="Add Method " Url="html/Overload_Grpc_Core_Metadata_Add.htm">
+ <HelpTOCNode Title="Add Method (Metadata.Entry)" Url="html/M_Grpc_Core_Metadata_Add.htm" />
+ <HelpTOCNode Title="Add Method (String, Byte[])" Url="html/M_Grpc_Core_Metadata_Add_1.htm" />
+ <HelpTOCNode Title="Add Method (String, String)" Url="html/M_Grpc_Core_Metadata_Add_2.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="Clear Method " Url="html/M_Grpc_Core_Metadata_Clear.htm" />
+ <HelpTOCNode Title="Contains Method " Url="html/M_Grpc_Core_Metadata_Contains.htm" />
+ <HelpTOCNode Title="CopyTo Method " Url="html/M_Grpc_Core_Metadata_CopyTo.htm" />
+ <HelpTOCNode Title="GetEnumerator Method " Url="html/M_Grpc_Core_Metadata_GetEnumerator.htm" />
+ <HelpTOCNode Title="IndexOf Method " Url="html/M_Grpc_Core_Metadata_IndexOf.htm" />
+ <HelpTOCNode Title="Insert Method " Url="html/M_Grpc_Core_Metadata_Insert.htm" />
+ <HelpTOCNode Title="Remove Method " Url="html/M_Grpc_Core_Metadata_Remove.htm" />
+ <HelpTOCNode Title="RemoveAt Method " Url="html/M_Grpc_Core_Metadata_RemoveAt.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="a07312cd-d18c-47f7-9ee3-860b003e328d" Title="Metadata Fields" Url="html/Fields_T_Grpc_Core_Metadata.htm">
+ <HelpTOCNode Title="BinaryHeaderSuffix Field" Url="html/F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm" />
+ <HelpTOCNode Title="Empty Field" Url="html/F_Grpc_Core_Metadata_Empty.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="3083edee-34c1-40dc-a1b9-f14274557eb2" Title="Metadata.Entry Structure" Url="html/T_Grpc_Core_Metadata_Entry.htm">
+ <HelpTOCNode Id="b610d7f5-a63e-4aad-a2f5-7eaf43d66800" Title="Entry Constructor " Url="html/Overload_Grpc_Core_Metadata_Entry__ctor.htm">
+ <HelpTOCNode Title="Metadata.Entry Constructor (String, Byte[])" Url="html/M_Grpc_Core_Metadata_Entry__ctor.htm" />
+ <HelpTOCNode Title="Metadata.Entry Constructor (String, String)" Url="html/M_Grpc_Core_Metadata_Entry__ctor_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="8e497e7c-3c8c-48ab-b6d4-c2d72597e88b" Title="Entry Properties" Url="html/Properties_T_Grpc_Core_Metadata_Entry.htm">
+ <HelpTOCNode Title="IsBinary Property " Url="html/P_Grpc_Core_Metadata_Entry_IsBinary.htm" />
+ <HelpTOCNode Title="Key Property " Url="html/P_Grpc_Core_Metadata_Entry_Key.htm" />
+ <HelpTOCNode Title="Value Property " Url="html/P_Grpc_Core_Metadata_Entry_Value.htm" />
+ <HelpTOCNode Title="ValueBytes Property " Url="html/P_Grpc_Core_Metadata_Entry_ValueBytes.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="d0af8c70-509b-4855-81dc-d83bf51b18bf" Title="Entry Methods" Url="html/Methods_T_Grpc_Core_Metadata_Entry.htm">
+ <HelpTOCNode Title="ToString Method " Url="html/M_Grpc_Core_Metadata_Entry_ToString.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="bb42405f-111a-4fb4-a7c0-202e4be0e870" Title="Method(TRequest, TResponse) Class" Url="html/T_Grpc_Core_Method_2.htm">
+ <HelpTOCNode Title="Method(TRequest, TResponse) Constructor " Url="html/M_Grpc_Core_Method_2__ctor.htm" />
+ <HelpTOCNode Id="07799a75-fe79-4c7e-82b2-4d386580bd52" Title="Method(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_Method_2.htm">
+ <HelpTOCNode Title="FullName Property " Url="html/P_Grpc_Core_Method_2_FullName.htm" />
+ <HelpTOCNode Title="Name Property " Url="html/P_Grpc_Core_Method_2_Name.htm" />
+ <HelpTOCNode Title="RequestMarshaller Property " Url="html/P_Grpc_Core_Method_2_RequestMarshaller.htm" />
+ <HelpTOCNode Title="ResponseMarshaller Property " Url="html/P_Grpc_Core_Method_2_ResponseMarshaller.htm" />
+ <HelpTOCNode Title="ServiceName Property " Url="html/P_Grpc_Core_Method_2_ServiceName.htm" />
+ <HelpTOCNode Title="Type Property " Url="html/P_Grpc_Core_Method_2_Type.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="Method(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_Method_2.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="MethodType Enumeration" Url="html/T_Grpc_Core_MethodType.htm" />
+ <HelpTOCNode Id="996a6829-32fa-4328-8425-a7e36dc06547" Title="RpcException Class" Url="html/T_Grpc_Core_RpcException.htm">
+ <HelpTOCNode Id="ecd3031d-500b-455b-b9e6-e7460c1196d3" Title="RpcException Constructor " Url="html/Overload_Grpc_Core_RpcException__ctor.htm">
+ <HelpTOCNode Title="RpcException Constructor (Status)" Url="html/M_Grpc_Core_RpcException__ctor.htm" />
+ <HelpTOCNode Title="RpcException Constructor (Status, String)" Url="html/M_Grpc_Core_RpcException__ctor_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="49925b06-a5ef-4208-aa58-97d01d83ca5a" Title="RpcException Properties" Url="html/Properties_T_Grpc_Core_RpcException.htm">
+ <HelpTOCNode Title="Status Property " Url="html/P_Grpc_Core_RpcException_Status.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="RpcException Methods" Url="html/Methods_T_Grpc_Core_RpcException.htm" />
+ <HelpTOCNode Title="RpcException Events" Url="html/Events_T_Grpc_Core_RpcException.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="202eecd5-04b7-4a5b-bca1-0fc2c886e7e8" Title="Server Class" Url="html/T_Grpc_Core_Server.htm">
+ <HelpTOCNode Title="Server Constructor " Url="html/M_Grpc_Core_Server__ctor.htm" />
+ <HelpTOCNode Id="9597ee15-8833-44e3-9709-3011e02061a3" Title="Server Properties" Url="html/Properties_T_Grpc_Core_Server.htm">
+ <HelpTOCNode Title="Ports Property " Url="html/P_Grpc_Core_Server_Ports.htm" />
+ <HelpTOCNode Title="Services Property " Url="html/P_Grpc_Core_Server_Services.htm" />
+ <HelpTOCNode Title="ShutdownTask Property " Url="html/P_Grpc_Core_Server_ShutdownTask.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="055d4e37-55d1-4272-8ea7-c5c98c597a0b" Title="Server Methods" Url="html/Methods_T_Grpc_Core_Server.htm">
+ <HelpTOCNode Title="KillAsync Method " Url="html/M_Grpc_Core_Server_KillAsync.htm" />
+ <HelpTOCNode Title="ShutdownAsync Method " Url="html/M_Grpc_Core_Server_ShutdownAsync.htm" />
+ <HelpTOCNode Title="Start Method " Url="html/M_Grpc_Core_Server_Start.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="179c4759-49e6-4cde-ad6c-ecbd24f28825" Title="Server.ServerPortCollection Class" Url="html/T_Grpc_Core_Server_ServerPortCollection.htm">
+ <HelpTOCNode Id="5ceab319-6c73-4c06-9f5f-91f96caa185c" Title="ServerPortCollection Methods" Url="html/Methods_T_Grpc_Core_Server_ServerPortCollection.htm">
+ <HelpTOCNode Id="fb5a924b-0557-480a-ac52-69eb05641c43" Title="Add Method " Url="html/Overload_Grpc_Core_Server_ServerPortCollection_Add.htm">
+ <HelpTOCNode Title="Add Method (ServerPort)" Url="html/M_Grpc_Core_Server_ServerPortCollection_Add.htm" />
+ <HelpTOCNode Title="Add Method (String, Int32, ServerCredentials)" Url="html/M_Grpc_Core_Server_ServerPortCollection_Add_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="GetEnumerator Method " Url="html/M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="6a73d058-4abc-434e-955a-5dbb5319982f" Title="Server.ServiceDefinitionCollection Class" Url="html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm">
+ <HelpTOCNode Id="86683dc1-34bc-4c25-b9c5-d66e88ca16d4" Title="ServiceDefinitionCollection Methods" Url="html/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm">
+ <HelpTOCNode Title="Add Method " Url="html/M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm" />
+ <HelpTOCNode Title="GetEnumerator Method " Url="html/M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="1eeadbd8-d9fb-4b0d-a569-2e94a2daa1a6" Title="ServerCallContext Class" Url="html/T_Grpc_Core_ServerCallContext.htm">
+ <HelpTOCNode Id="ff06e313-73f4-4c5b-bcdf-f47c0d4226fd" Title="ServerCallContext Properties" Url="html/Properties_T_Grpc_Core_ServerCallContext.htm">
+ <HelpTOCNode Title="CancellationToken Property " Url="html/P_Grpc_Core_ServerCallContext_CancellationToken.htm" />
+ <HelpTOCNode Title="Deadline Property " Url="html/P_Grpc_Core_ServerCallContext_Deadline.htm" />
+ <HelpTOCNode Title="Host Property " Url="html/P_Grpc_Core_ServerCallContext_Host.htm" />
+ <HelpTOCNode Title="Method Property " Url="html/P_Grpc_Core_ServerCallContext_Method.htm" />
+ <HelpTOCNode Title="Peer Property " Url="html/P_Grpc_Core_ServerCallContext_Peer.htm" />
+ <HelpTOCNode Title="RequestHeaders Property " Url="html/P_Grpc_Core_ServerCallContext_RequestHeaders.htm" />
+ <HelpTOCNode Title="ResponseTrailers Property " Url="html/P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" />
+ <HelpTOCNode Title="Status Property " Url="html/P_Grpc_Core_ServerCallContext_Status.htm" />
+ <HelpTOCNode Title="WriteOptions Property " Url="html/P_Grpc_Core_ServerCallContext_WriteOptions.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="69bad7dd-c1d2-4641-86bc-3207683a8f9e" Title="ServerCallContext Methods" Url="html/Methods_T_Grpc_Core_ServerCallContext.htm">
+ <HelpTOCNode Title="CreatePropagationToken Method " Url="html/M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm" />
+ <HelpTOCNode Title="WriteResponseHeadersAsync Method " Url="html/M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="3fcaac14-82dd-4676-8372-ce9b3a432adf" Title="ServerCredentials Class" Url="html/T_Grpc_Core_ServerCredentials.htm">
+ <HelpTOCNode Title="ServerCredentials Constructor " Url="html/M_Grpc_Core_ServerCredentials__ctor.htm" />
+ <HelpTOCNode Id="260ab535-2687-4ca4-92e1-04f880f5b866" Title="ServerCredentials Properties" Url="html/Properties_T_Grpc_Core_ServerCredentials.htm">
+ <HelpTOCNode Title="Insecure Property " Url="html/P_Grpc_Core_ServerCredentials_Insecure.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="ServerCredentials Methods" Url="html/Methods_T_Grpc_Core_ServerCredentials.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="431525c2-7485-4749-96b4-4b780307e33a" Title="ServerPort Class" Url="html/T_Grpc_Core_ServerPort.htm">
+ <HelpTOCNode Title="ServerPort Constructor " Url="html/M_Grpc_Core_ServerPort__ctor.htm" />
+ <HelpTOCNode Id="63488e69-090c-4dfb-a0ee-b78525f0d6b9" Title="ServerPort Properties" Url="html/Properties_T_Grpc_Core_ServerPort.htm">
+ <HelpTOCNode Title="BoundPort Property " Url="html/P_Grpc_Core_ServerPort_BoundPort.htm" />
+ <HelpTOCNode Title="Credentials Property " Url="html/P_Grpc_Core_ServerPort_Credentials.htm" />
+ <HelpTOCNode Title="Host Property " Url="html/P_Grpc_Core_ServerPort_Host.htm" />
+ <HelpTOCNode Title="Port Property " Url="html/P_Grpc_Core_ServerPort_Port.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="ServerPort Methods" Url="html/Methods_T_Grpc_Core_ServerPort.htm" />
+ <HelpTOCNode Id="57a93a50-77d0-4e95-b56a-f7dd5b7c36d7" Title="ServerPort Fields" Url="html/Fields_T_Grpc_Core_ServerPort.htm">
+ <HelpTOCNode Title="PickUnused Field" Url="html/F_Grpc_Core_ServerPort_PickUnused.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="f016d58e-e22a-4270-9804-17e820acbeee" Title="ServerServiceDefinition Class" Url="html/T_Grpc_Core_ServerServiceDefinition.htm">
+ <HelpTOCNode Id="770302a4-5ce7-4c0f-ba09-2917367fb33f" Title="ServerServiceDefinition Methods" Url="html/Methods_T_Grpc_Core_ServerServiceDefinition.htm">
+ <HelpTOCNode Title="CreateBuilder Method " Url="html/M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="746c68c2-783d-41b6-a100-d16b10e6101e" Title="ServerServiceDefinition.Builder Class" Url="html/T_Grpc_Core_ServerServiceDefinition_Builder.htm">
+ <HelpTOCNode Title="ServerServiceDefinition.Builder Constructor " Url="html/M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm" />
+ <HelpTOCNode Id="31b26957-e71e-450c-b081-ddfb89858ae6" Title="Builder Methods" Url="html/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm">
+ <HelpTOCNode Id="cdf7da25-dd67-4470-87b6-e6338d8af19c" Title="AddMethod Method " Url="html/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm">
+ <HelpTOCNode Title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm" />
+ <HelpTOCNode Title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm" />
+ <HelpTOCNode Title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm" />
+ <HelpTOCNode Title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="Build Method " Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" Url="html/T_Grpc_Core_ServerStreamingServerMethod_2.htm" />
+ <HelpTOCNode Id="9360e278-6622-41e9-973b-2dda4a3f4191" Title="SslCredentials Class" Url="html/T_Grpc_Core_SslCredentials.htm">
+ <HelpTOCNode Id="db94bec2-b656-41a5-9a1e-f6e8e30aba61" Title="SslCredentials Constructor " Url="html/Overload_Grpc_Core_SslCredentials__ctor.htm">
+ <HelpTOCNode Title="SslCredentials Constructor " Url="html/M_Grpc_Core_SslCredentials__ctor.htm" />
+ <HelpTOCNode Title="SslCredentials Constructor (String)" Url="html/M_Grpc_Core_SslCredentials__ctor_1.htm" />
+ <HelpTOCNode Title="SslCredentials Constructor (String, KeyCertificatePair)" Url="html/M_Grpc_Core_SslCredentials__ctor_2.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="8676f362-61a4-45ae-98a1-72dc543e45ff" Title="SslCredentials Properties" Url="html/Properties_T_Grpc_Core_SslCredentials.htm">
+ <HelpTOCNode Title="KeyCertificatePair Property " Url="html/P_Grpc_Core_SslCredentials_KeyCertificatePair.htm" />
+ <HelpTOCNode Title="RootCertificates Property " Url="html/P_Grpc_Core_SslCredentials_RootCertificates.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="SslCredentials Methods" Url="html/Methods_T_Grpc_Core_SslCredentials.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="c42c9874-4efa-4021-ab51-38fca112ee60" Title="SslServerCredentials Class" Url="html/T_Grpc_Core_SslServerCredentials.htm">
+ <HelpTOCNode Id="a21a5287-ba71-4eff-8fb9-ae8df70b4e61" Title="SslServerCredentials Constructor " Url="html/Overload_Grpc_Core_SslServerCredentials__ctor.htm">
+ <HelpTOCNode Title="SslServerCredentials Constructor (IEnumerable(KeyCertificatePair))" Url="html/M_Grpc_Core_SslServerCredentials__ctor.htm" />
+ <HelpTOCNode Title="SslServerCredentials Constructor (IEnumerable(KeyCertificatePair), String, Boolean)" Url="html/M_Grpc_Core_SslServerCredentials__ctor_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="612006fc-3a12-48c3-aaf9-1e8f9427fda8" Title="SslServerCredentials Properties" Url="html/Properties_T_Grpc_Core_SslServerCredentials.htm">
+ <HelpTOCNode Title="ForceClientAuthentication Property " Url="html/P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm" />
+ <HelpTOCNode Title="KeyCertificatePairs Property " Url="html/P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm" />
+ <HelpTOCNode Title="RootCertificates Property " Url="html/P_Grpc_Core_SslServerCredentials_RootCertificates.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="SslServerCredentials Methods" Url="html/Methods_T_Grpc_Core_SslServerCredentials.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="9c94fbdf-19a0-4fc6-9a3c-78ce85d6d998" Title="Status Structure" Url="html/T_Grpc_Core_Status.htm">
+ <HelpTOCNode Title="Status Constructor " Url="html/M_Grpc_Core_Status__ctor.htm" />
+ <HelpTOCNode Id="b3e3e1c9-aa35-462d-aedb-0223a78f3c38" Title="Status Properties" Url="html/Properties_T_Grpc_Core_Status.htm">
+ <HelpTOCNode Title="Detail Property " Url="html/P_Grpc_Core_Status_Detail.htm" />
+ <HelpTOCNode Title="StatusCode Property " Url="html/P_Grpc_Core_Status_StatusCode.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="8c29ff31-266b-41f7-9ac1-06d2c14f87b6" Title="Status Methods" Url="html/Methods_T_Grpc_Core_Status.htm">
+ <HelpTOCNode Title="ToString Method " Url="html/M_Grpc_Core_Status_ToString.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="31c222e3-a41d-442c-b990-9792abbaec79" Title="Status Fields" Url="html/Fields_T_Grpc_Core_Status.htm">
+ <HelpTOCNode Title="DefaultCancelled Field" Url="html/F_Grpc_Core_Status_DefaultCancelled.htm" />
+ <HelpTOCNode Title="DefaultSuccess Field" Url="html/F_Grpc_Core_Status_DefaultSuccess.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Title="StatusCode Enumeration" Url="html/T_Grpc_Core_StatusCode.htm" />
+ <HelpTOCNode Title="UnaryServerMethod(TRequest, TResponse) Delegate" Url="html/T_Grpc_Core_UnaryServerMethod_2.htm" />
+ <HelpTOCNode Id="cbb63ce8-468c-4123-aae2-5114a6fedb48" Title="VersionInfo Class" Url="html/T_Grpc_Core_VersionInfo.htm">
+ <HelpTOCNode Id="1a7b3c5b-faed-4100-9519-f8009ce9047c" Title="VersionInfo Fields" Url="html/Fields_T_Grpc_Core_VersionInfo.htm">
+ <HelpTOCNode Title="CurrentVersion Field" Url="html/F_Grpc_Core_VersionInfo_CurrentVersion.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Title="WriteFlags Enumeration" Url="html/T_Grpc_Core_WriteFlags.htm" />
+ <HelpTOCNode Id="ed6a008f-6472-49d1-9d53-9dc4bafb3cbf" Title="WriteOptions Class" Url="html/T_Grpc_Core_WriteOptions.htm">
+ <HelpTOCNode Title="WriteOptions Constructor " Url="html/M_Grpc_Core_WriteOptions__ctor.htm" />
+ <HelpTOCNode Id="4e281091-67c5-43a9-be15-83ab0d2c0640" Title="WriteOptions Properties" Url="html/Properties_T_Grpc_Core_WriteOptions.htm">
+ <HelpTOCNode Title="Flags Property " Url="html/P_Grpc_Core_WriteOptions_Flags.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="WriteOptions Methods" Url="html/Methods_T_Grpc_Core_WriteOptions.htm" />
+ <HelpTOCNode Id="804b2351-b339-4fd2-9887-05f7471372db" Title="WriteOptions Fields" Url="html/Fields_T_Grpc_Core_WriteOptions.htm">
+ <HelpTOCNode Title="Default Field" Url="html/F_Grpc_Core_WriteOptions_Default.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="e20dd797-c523-4164-bada-14a079905483" Title="Grpc.Core.Logging" Url="html/N_Grpc_Core_Logging.htm">
+ <HelpTOCNode Id="d2413897-cd8c-4913-bf51-fd7f08781540" Title="ConsoleLogger Class" Url="html/T_Grpc_Core_Logging_ConsoleLogger.htm">
+ <HelpTOCNode Title="ConsoleLogger Constructor " Url="html/M_Grpc_Core_Logging_ConsoleLogger__ctor.htm" />
+ <HelpTOCNode Id="3d43197c-0f15-46df-b00a-741576b080d1" Title="ConsoleLogger Methods" Url="html/Methods_T_Grpc_Core_Logging_ConsoleLogger.htm">
+ <HelpTOCNode Title="Debug Method " Url="html/M_Grpc_Core_Logging_ConsoleLogger_Debug.htm" />
+ <HelpTOCNode Id="78f9a0e7-0817-40ae-8fa6-73b1c2fb0d43" Title="Error Method " Url="html/Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm">
+ <HelpTOCNode Title="Error Method (String, Object[])" Url="html/M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm" />
+ <HelpTOCNode Title="Error Method (Exception, String, Object[])" Url="html/M_Grpc_Core_Logging_ConsoleLogger_Error.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="ForType(T) Method " Url="html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm" />
+ <HelpTOCNode Title="Info Method " Url="html/M_Grpc_Core_Logging_ConsoleLogger_Info.htm" />
+ <HelpTOCNode Id="a501df56-0e95-4469-95fb-dc2a7a411789" Title="Warning Method " Url="html/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm">
+ <HelpTOCNode Title="Warning Method (String, Object[])" Url="html/M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm" />
+ <HelpTOCNode Title="Warning Method (Exception, String, Object[])" Url="html/M_Grpc_Core_Logging_ConsoleLogger_Warning.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="1a278148-d563-4e6e-8078-7403300baf11" Title="ILogger Interface" Url="html/T_Grpc_Core_Logging_ILogger.htm">
+ <HelpTOCNode Id="dbabf9d7-57ca-49ea-b64b-6bcb2d5673e1" Title="ILogger Methods" Url="html/Methods_T_Grpc_Core_Logging_ILogger.htm">
+ <HelpTOCNode Title="Debug Method " Url="html/M_Grpc_Core_Logging_ILogger_Debug.htm" />
+ <HelpTOCNode Id="c7415d61-5774-4b68-8031-e8dc427a0b53" Title="Error Method " Url="html/Overload_Grpc_Core_Logging_ILogger_Error.htm">
+ <HelpTOCNode Title="Error Method (String, Object[])" Url="html/M_Grpc_Core_Logging_ILogger_Error_1.htm" />
+ <HelpTOCNode Title="Error Method (Exception, String, Object[])" Url="html/M_Grpc_Core_Logging_ILogger_Error.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Title="ForType(T) Method " Url="html/M_Grpc_Core_Logging_ILogger_ForType__1.htm" />
+ <HelpTOCNode Title="Info Method " Url="html/M_Grpc_Core_Logging_ILogger_Info.htm" />
+ <HelpTOCNode Id="a91057c3-122e-485f-a239-28bf44d29b64" Title="Warning Method " Url="html/Overload_Grpc_Core_Logging_ILogger_Warning.htm">
+ <HelpTOCNode Title="Warning Method (String, Object[])" Url="html/M_Grpc_Core_Logging_ILogger_Warning_1.htm" />
+ <HelpTOCNode Title="Warning Method (Exception, String, Object[])" Url="html/M_Grpc_Core_Logging_ILogger_Warning.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="f0dcb251-b955-480a-b500-65a4a8317630" Title="Grpc.Core.Utils" Url="html/N_Grpc_Core_Utils.htm">
+ <HelpTOCNode Id="befb20b1-8faf-4ffe-a273-986cdd5039d3" Title="AsyncStreamExtensions Class" Url="html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm">
+ <HelpTOCNode Id="e1514b3a-0bc6-4f66-8e7b-2e1b87770636" Title="AsyncStreamExtensions Methods" Url="html/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm">
+ <HelpTOCNode Title="ForEachAsync(T) Method " Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm" />
+ <HelpTOCNode Title="ToListAsync(T) Method " Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm" />
+ <HelpTOCNode Id="bd2e67b9-87fa-44e9-a9df-b8beda377897" Title="WriteAllAsync Method " Url="html/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm">
+ <HelpTOCNode Title="WriteAllAsync(T) Method (IServerStreamWriter(T), IEnumerable(T))" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm" />
+ <HelpTOCNode Title="WriteAllAsync(T) Method (IClientStreamWriter(T), IEnumerable(T), Boolean)" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="8a71d51b-3f4c-4d05-a5c2-372210e58c58" Title="BenchmarkUtil Class" Url="html/T_Grpc_Core_Utils_BenchmarkUtil.htm">
+ <HelpTOCNode Id="0c4af2e1-c86f-47a4-b01c-f69e701f998b" Title="BenchmarkUtil Methods" Url="html/Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm">
+ <HelpTOCNode Title="RunBenchmark Method " Url="html/M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ <HelpTOCNode Id="c19e0a3c-734c-43b4-8513-6e9883ffc724" Title="Preconditions Class" Url="html/T_Grpc_Core_Utils_Preconditions.htm">
+ <HelpTOCNode Id="28a6deae-d1b8-45da-8627-258fd43f02e5" Title="Preconditions Methods" Url="html/Methods_T_Grpc_Core_Utils_Preconditions.htm">
+ <HelpTOCNode Id="82b41eef-bc6a-4830-99d0-fb7bc0278bdf" Title="CheckArgument Method " Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm">
+ <HelpTOCNode Title="CheckArgument Method (Boolean)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckArgument.htm" />
+ <HelpTOCNode Title="CheckArgument Method (Boolean, String)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="519f0480-dfb2-477e-bc76-678bd0c977f8" Title="CheckNotNull Method " Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm">
+ <HelpTOCNode Title="CheckNotNull(T) Method (T)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm" />
+ <HelpTOCNode Title="CheckNotNull(T) Method (T, String)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm" />
+ </HelpTOCNode>
+ <HelpTOCNode Id="b124a5b0-114e-475a-b01d-ffd879af66e7" Title="CheckState Method " Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckState.htm">
+ <HelpTOCNode Title="CheckState Method (Boolean)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckState.htm" />
+ <HelpTOCNode Title="CheckState Method (Boolean, String)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckState_1.htm" />
+ </HelpTOCNode>
+ </HelpTOCNode>
+ </HelpTOCNode>
+ </HelpTOCNode>
+ </HelpTOCNode>
+</HelpTOC>
diff --git a/doc/ref/csharp/html/fti/FTI_100.json b/doc/ref/csharp/html/fti/FTI_100.json
new file mode 100644
index 0000000000..e9e948d71c
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_100.json
@@ -0,0 +1 @@
+{"default":[1,196609,262146,458754,589826,720897,1179654,1441793,1507329,1638406,1769473,1835009,1900545,1966081,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3276801,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4456449,5701633,6750209,12648449,14221314,14548993,14614529,14811137,17825794,18153473,19267586,21561345,21626881,21692417,21757953,22020098,22085633,22151169,22347779,22544387,22609921,22675457,22806529,23003137,23068673,23265281,23330817,23396353,23658497,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707074,25231363],"description":[131073,196609,262145,327681,393217,458753,524289,589825,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686978,2752513,2818050,2883586,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,12255233,12320774,12386306,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,21430273,21495809,21561346,21626882,21692418,21757954,21823491,21889027,21954561,22020099,22085635,22151169,22216705,22282241,22347779,22478849,22544388,22609921,22675459,22806530,22937603,23003138,23068675,23134209,23199745,23265283,23330819,23396354,23461889,23527426,23592963,23658500,23724035,23789569,23855108,23920644,23986179,24051714,24117251,24182788,24248321,24313858,24444929,24510465,24576003,24641539,24707076,24772609,24903681,24969217,25034753,25100289,25165825,25231364],"data":[131073,15269889,23920642,24772609],"defaultauthority":[196609,720901,22151169],"defaultcancelled":[458753,1441797,24707073],"details":[458754,1441793,1507329,6881281,12320769,21823489,24707074],"defaultsuccess":[458753,1507333,24707073],"dll":[655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361],"dispose":[1769473,1835009,1900545,1966081,2686977,4653063,4915207,5111815,5308423,21561345,21626881,21692417,21757953,22937601],"determines":[1769473,1835009,1900545,1966081,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3276801,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4456449,21561345,21626881,21692417,21757953,22020097,22085633,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23658497,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,25231361],"directly":[1769473,1966081,4718593,5373953,21561345,21757953],"deadline":[2097153,2228226,5898247,6029321,6553610,6684681,7012353,12320769,14024706,14286849,15400962,16973830,17956865,19857414,21889027,22020098,22544385,22609921,24051714,24772610],"duplex":[2162690,6160386,21954562],"different":[2228225,6684673,22020097],"defined":[2686979,2818049,2883585,15269889,22937603,23068673,23265281,23920641],"debug":[3014658,3080194,7405578,7929864,23396354,23461890],"deserializer":[3145729,8388615,8454149,15007746,18743302,23527425,23592962],"derived":[3473410,23920642],"definitions":[3866628,9961473,10027009,10092545,10158081,12320769,13172740,24313860,24510465],"duplexstreamingservermethod":[3866625,10027014,12320769,13172737,22740997,24313857],"definition":[3997697,6160385,10682369,12320770,15335426,20709377,20774913,21954561,23986178,24248321,24510465],"documentation":[5570561,6684674,7143425,7405570,7471107,7536642,7602177,7667714,7733251,7798786,7929858,7995395,8060930,8126465,8192002,8257539,8323074,8388611,8519682,8585219,8650755,8716289,8781826,8847363,9109505,9175042,9240579,9306114,9371650,9699329,10485761,10682369,11075585,11468803,11534338,11599876,11665411,11730947,11927553,11993089,18874369,19202049,19267585,20447233,20512769,20578305,20643841,23265281,23592961],"datetime":[5898245,6029317,6553605,6684679,16973830,19857414],"defaults":[6029313,6553601,6684673,6750209,6815745,7012353,9699329,10944513,11599873,12189697],"defaultarg":[6029317,6553601,6684673,6750209,6815745,7012354,9699329,10944513,11599873,12189697],"defintion":[6094849,6225921,6291457,6356993],"deserialize":[8454145],"disk":[11010050,13303810,24576002],"detail":[11403270,12320769,15728642,21233670,24707075],"defines":[12320769,22151169],"deserializing":[12320769,23592961],"delegates":[12320769],"delegate":[12320769,22413317,22740997,22872069,24379397,24838149],"destination":[12386305,21430273],"deserialized":[13959169,16842753,21823489],"dispatched":[14745601,15204353,18284545,19333121,23199745,23855105],"describes":[15269889,23920641],"duplexstreaming":[23789569],"differs":[24772609],"deadlineexceeded":[24772609],"delayed":[24772609],"directory":[24772612],"deleted":[24772609],"dataloss":[24772609],"disabled":[25165825]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_101.json b/doc/ref/csharp/html/fti/FTI_101.json
new file mode 100644
index 0000000000..f1e9b9f803
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_101.json
@@ -0,0 +1 @@
+{"events":[131074,23920641],"exposes":[131073,196609,262145,327681,393217,458753,524289,589825,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4456449,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22347777,22544385,22609921,22675457,22806529,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,24903681,24969217,25100289,25231361],"exception":[131076,3014660,3080196,3473415,7471123,7733267,7995408,8257552,9633793,12713986,12779522,12845058,12910594,15269903,23396356,23461892,23920671],"enable":[196609,655361,22151169],"end":[196609,1048577,12320769,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151170,22347777,22544385,22609921,22675457,22806529,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658498,23724033,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,24772609,24903681,24969217,25034753,25100289,25231361],"empty":[327681,458754,1310725,1441793,1507329,3604481,9764865,23658497,24051713,24707074,24772609],"entries":[327681,1310721,12320769,23658498],"eventually":[1769473,1835009,1900545,1966081,4653057,4915201,5111809,5308417,21561345,21626881,21692417,21757953],"equals":[1769473,1835009,1900545,1966081,2031617,2097153,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4456449,21561345,21626881,21692417,21757953,21823489,21889025,22020097,22085633,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23592961,23658497,23724033,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,25231361],"equal":[1769473,1835009,1900545,1966081,2031617,2097153,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4456449,21561345,21626881,21692417,21757953,21823489,21889025,22020097,22085633,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23592961,23658497,23724033,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,25231361],"explicitly":[2228226,6553602,12320769,14221313,17825793,22020098,22347777,22609921],"enters":[2228225,6553601,22020097],"error":[2228225,3014660,3080196,6684673,7471116,7536651,7995402,8060937,11862017,12124161,12713989,12845061,15269889,15728641,21299201,22020097,23396356,23461892,23920641,24707073,24772615],"extension":[2686977,2818049,2883585,11468802,11534338,11599874,11665410,12451841,22937601,23068673,23265281,24903681],"entire":[2686978,4259842,11468801,11534337,22937602,24772609,24903682],"executes":[2686977,4259841,11468801,22937601,24903681],"element":[2686977,4259841,11468801,22937601,24903681],"elements":[2686977,2818049,2883585,4259843,11534337,11599879,11665415,13434882,22937601,23068673,23265281,24903683],"enumerable":[2818049,2883585,4259842,11599873,11665409,13434882,23068673,23265281,24903682],"entry":[3276801,3342340,8519689,8781832,8847369,8912899,8978440,9043976,9109510,9175048,9240585,9306120,12320770,12976129,13041670,15138824,18939908,19005443,19070979,19136515,19267592,23658509,23724049],"exceptions":[3473409,23920641],"enumerator":[3932161,3997697,10616833,10747905,24444929,24510465],"encoded":[7340034,11075585,11141121,11272193,13303809,14876674,15663105,18546689,18612225,21168129,23330818,24576001,24641537],"environment":[11010049,13303809,24576001],"extensionattribute":[11468803,11534339,11599875,11665411,24903683],"errormessage":[11862021,12124165],"expensive":[12320769,22020097],"encapsulates":[12320770,22806529,23592961],"encoding":[12320769,15597569,20971521,23330817,24576001],"exchanged":[12320769,23658497],"exposed":[12320769,15400961,20316161,24051713,24182785],"enumerations":[12320769],"enumeration":[12320769,22216706,22282242,22478850,23789570,24772610,25165826],"endpoint":[14090241,15400961,17498113,20054017,22020097,24051713],"encryption":[14352385,15466497,18022401,20381697,22675457,24117249],"exported":[15335425,20774913,23986177],"enforced":[15663105,21037057,24641537],"enum":[22216706,22282242,22478850,23789570,24772610,25165826],"expects":[22282241],"example":[24772611],"errors":[24772613],"expired":[24772609],"expire":[24772609],"entity":[24772610],"exists":[24772609],"execute":[24772609],"exhausting":[24772609],"exhausted":[24772609],"execution":[24772609],"enabled":[24772609],"expected":[24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_102.json b/doc/ref/csharp/html/fti/FTI_102.json
new file mode 100644
index 0000000000..a1d03f68e2
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_102.json
@@ -0,0 +1 @@
+{"follow":[1,2818049,7274497,23068673],"following":[131073,196609,262145,327681,393217,458753,524289,589825,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4456449,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400962,15466497,15532033,15597569,15663105,15728641,15794177,20316161,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22347777,22544385,22609921,22675457,22806529,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23855105,23920641,23986177,24051714,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,24903681,24969217,25100289,25231361],"fields":[196610,262146,327682,393218,458754,524290,589826,2031617,2097155,5570561,5832705,5898241,5963777,21823489,21889027,22151169,22544385,23658497,24182785,24707073,25100289,25231361],"field":[655362,720898,786434,851970,917506,983042,1048578,1114114,1179650,1245186,1310722,1376258,1441794,1507330,1572866,1638402],"fromaccesstoken":[1703937,4521989,21495809],"fromcredential":[1703937,4587525,21495809],"finished":[1769475,1835011,1900547,1966083,4653057,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5439489,5505025,9764865,21561347,21626883,21692419,21757955],"function":[1769473,1835009,1900545,1966081,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3276801,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4456449,4521985,4587521,4718593,4784129,4849665,4980737,5046273,5177345,5242881,5373953,5439489,5505025,5570561,5832705,5898241,5963777,6094849,6160385,6225921,6291457,6356993,6553601,6619137,6684673,6881281,7208961,7274497,7602177,8126465,8388609,8454146,8781825,8912897,9109505,9175041,9306113,9699329,9764865,9961473,10027009,10092545,10158081,10223617,10354689,10420225,10485761,10551297,10616833,10747905,10813441,11337729,11468801,11534337,11599873,11665409,11927553,11993089,15007746,18743297,18808833,21561345,21626881,21692417,21757953,22020097,22085633,22347777,22413313,22544385,22609921,22675457,22740993,22806529,23330817,23396353,23592962,23658497,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24838145,25231361],"fully":[1835009,1900545,2031617,2097153,3211265,4915201,5111809,14745601,15204353,18284545,19333121,21626881,21692417,21823489,21889025,23199745,23592961,23855105],"fashion":[2162689,6356993,21954561],"fatalfailure":[2228225,6553601,22020097,22282241],"finalize":[2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,22020097,22347777,22544385,22609921,22675457,22806529,23396353,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25231361],"free":[2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,22020097,22347777,22544385,22609921,22675457,22806529,23396353,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25165825,25231361],"freeing":[2686977,22937601],"foreachasync":[2686977,4259841,11468808,22937601,24903681],"false":[2818049,4259841,4390916,11599873,11796481,11862017,12058625,12124161,13434881,13500418,13631490,23068673,24903681,25034756],"fortype":[3014657,3080193,7602184,8126470,23396353,23461889],"finishes":[3538946,10420225,10813441,15400962,20185089,20250625,23986178,24051714],"first":[3604481,9764865,11468801,11534337,11599873,11665409,24051713],"finish":[6029313],"formatargs":[7405575,7471111,7536647,7667719,7733255,7798791,7929862,7995398,8060934,8192006,8257542,8323078],"func":[8388624,8454154,11468808,18743302,18808838],"file":[11010049,13303809,15269889,23920641,24576001,24772613],"fails":[11010049,12320769,13303809,23920641,24576001],"forceclientauth":[11272197],"flags":[12189704,12320769,15794178,21364742,25165825,25231362],"factory":[12255233,12320769,21495809,24248321],"functionality":[12320769,12386305,21430274],"files":[12320769,21954561],"format":[14090241,15400961,17498113,20054017,22020097,24051713],"fullname":[14745601,15204353,18284549,19333127,23199745,23855105],"frames":[15269889,23920641],"forceclientauthentication":[15663105,21037061,24641537],"failure":[22282242],"failed_precondition":[24772609],"failedprecondition":[24772609],"failures":[24772609],"flagsattribute":[25165828],"force":[25165825]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_103.json b/doc/ref/csharp/html/fti/FTI_103.json
new file mode 100644
index 0000000000..398e827a53
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_103.json
@@ -0,0 +1 @@
+{"grpc":[65537,131074,196610,262146,327682,393218,458754,524291,589826,655365,720901,786437,851973,917509,983045,1048581,1114117,1179653,1245189,1310725,1376261,1441797,1507333,1572870,1638405,1703938,1769474,1835010,1900546,1966082,2031618,2097154,2162690,2228226,2293762,2359298,2424834,2490370,2555906,2621443,2686978,2752514,2818050,2883586,2949122,3014658,3080194,3145730,3211266,3276802,3342338,3407874,3473410,3538946,3604482,3670018,3735554,3801090,3866626,3932162,3997698,4063234,4128770,4194306,4259842,4325378,4390914,4456450,4521989,4587525,4653061,4718597,4784133,4849669,4915205,4980741,5046277,5111813,5177349,5242885,5308421,5373957,5439493,5505029,5570568,5636104,5701640,5767177,5832709,5898245,5963782,6029320,6094854,6160390,6225926,6291462,6356998,6422533,6488069,6553605,6619141,6684682,6750214,6815750,6881287,6946822,7012357,7077893,7143433,7208965,7274501,7340037,7405575,7471112,7536647,7602182,7667719,7733256,7798791,7864325,7929863,7995400,8060935,8126470,8192007,8257544,8323079,8388616,8454149,8519690,8585224,8650760,8716294,8781834,8847372,8912901,8978437,9043973,9109510,9175050,9240588,9306122,9371655,9437189,9502728,9568262,9633798,9699336,9764870,9830405,9895942,9961479,10027015,10092551,10158087,10223621,10289157,10354693,10420229,10485768,10551302,10616837,10682376,10747909,10813445,10878981,10944517,11010053,11075590,11141126,11206661,11272197,11337733,11403270,11468812,11534346,11599886,11665420,11730952,11796485,11862021,11927558,11993094,12058629,12124165,12189702,12255237,12320787,12386307,12451844,12517378,12582914,12648450,12713986,12779522,12845058,12910594,12976130,13041666,13107202,13172738,13238274,13303810,13369346,13434882,13500418,13565954,13631490,13697026,13762562,13828098,13893634,13959170,14024706,14090242,14155778,14221315,14286850,14352386,14417923,14483458,14548994,14614530,14680066,14745602,14811138,14876674,14942210,15007746,15073282,15138818,15204354,15269890,15335426,15400962,15466498,15532034,15597570,15663106,15728643,15794178,15859717,15925253,15990789,16056325,16121861,16187397,16252933,16318469,16384005,16449541,16515077,16580613,16646149,16711685,16777221,16842757,16908293,16973829,17039365,17104901,17170437,17235973,17301509,17367045,17432581,17498117,17563653,17629189,17694725,17760261,17825798,17891333,17956869,18022405,18087942,18153477,18219013,18284549,18350085,18415621,18481157,18546693,18612229,18677765,18743301,18808837,18874374,18939909,19005445,19070981,19136517,19202054,19267590,19333125,19398661,19464197,19529733,19595269,19660805,19726341,19791877,19857413,19922949,19988485,20054021,20119557,20185093,20250629,20316165,20381701,20447238,20512774,20578310,20643846,20709381,20774917,20840453,20905989,20971525,21037061,21102597,21168133,21233669,21299206,21364741,21430283,21495815,21561350,21626886,21692422,21757958,21823493,21889029,21954566,22020103,22085640,22151174,22216709,22282247,22347783,22413319,22478854,22544390,22609927,22675463,22741000,22806537,22872071,22937605,23003141,23068677,23134213,23199749,23265286,23330822,23396358,23461893,23527430,23592966,23658503,23724037,23789574,23855110,23920646,23986183,24051718,24117255,24182790,24248326,24313862,24379399,24444934,24510470,24576007,24641543,24707078,24772614,24838150,24903687,24969222,25034758,25100296,25165830,25231366],"goes":[196610,983041,1048577,22151170],"given":[1703937,2228225,2359297,2818049,2883585,4259842,4390914,4521985,6684673,6881281,9568257,9633793,11599873,11665409,11862017,12124161,13107202,13434882,13500417,13631489,21495809,22020097,22347777,23068673,23265281,23920642,24903682,25034754],"googlecredential":[1703937,4587521,21495809],"generic":[1769473,1835009,1900545,1966081,2031617,2686977,2752513,2818049,2883585,3211265,3407873,6094849,6160385,6225921,6291457,6356993,6750209,6815745,6881281,7602177,8126465,8388609,9961473,10027009,10092545,10158081,10944513,11206657,11272193,11468801,11534337,11599878,11665413,11927553,11993089,12320769,13697025,13762561,13828097,13893633,13959169,14483457,14548993,14614529,14811137,15007745,15204353,21561345,21626881,21692417,21757953,21823489,22413313,22740993,22937601,23003137,23068673,23199745,23265281,23592961,23855105,24379393,24838145],"getawaiter":[1769473,1966081,4718597,5373957,21561345,21757953],"gethashcode":[1769473,1835009,1900545,1966081,2031617,2097153,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4456449,21561345,21626881,21692417,21757953,21823489,21889025,22020097,22085633,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23592961,23658497,23724033,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,25231361],"getstatus":[1769473,1835009,1900545,1966081,4784133,4980741,5177349,5439493,21561345,21626881,21692417,21757953],"gets":[1769475,1835011,1900547,1966083,2031617,2097153,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932162,3997698,4063233,4128769,4194305,4456449,4784129,4849665,4980737,5046273,5177345,5242881,5439489,5505025,10616833,10747905,11010049,13303809,13959172,14090241,14155780,14417921,14680065,14745604,15007746,15138819,15204358,15269896,15728642,15794177,16646145,16711681,16777217,16842753,17235969,17301505,17367041,17432577,17563649,18087937,18219009,18284545,18350081,18415617,18481153,18743297,18808833,19005441,19070977,19136513,19333121,19398657,19464193,19529729,19595265,19660801,21233665,21299201,21364737,21561347,21626883,21692419,21757955,21823493,21889025,22020098,22085637,22347777,22544385,22609921,22675457,22806530,23134209,23199748,23330817,23396353,23592963,23658497,23724036,23855111,23920649,23986177,24051713,24117249,24182785,24248321,24313857,24444930,24510466,24576002,24641537,24707075,25231362],"gettrailers":[1769473,1835009,1900545,1966081,4849669,5046277,5242885,5505029,21561345,21626881,21692417,21757953],"gettype":[1769473,1835009,1900545,1966081,2031617,2097153,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4456449,21561345,21626881,21692417,21757953,21823489,21889025,22020097,22085633,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23592961,23658497,23724033,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,25231361],"garbage":[2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,22020097,22347777,22544385,22609921,22675457,22806529,23396353,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25231361],"grpcenvironment":[2621443,7143427,12320769,14417923,18087938,22806535],"getenumerator":[3276801,3932161,3997697,9109512,10616839,10747911,23658497,24444929,24510465],"getbaseexception":[3473409,23920641],"getobjectdata":[3473409,23920641],"grpc_default_ssl_roots_file_path":[11010049,13303809,24576001],"guide":[11468801,11534337,11599873,11665409],"google":[12255233,21430273],"generated":[12320770,21954562],"general":[12320769,22020097],"grpc_channel_args":[12320769,22085633],"grpc_connectivity_state":[12320769,22282241],"grpc_compression_level":[12320769,22478849],"grpc_status_code":[12320769,24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_104.json b/doc/ref/csharp/html/fti/FTI_104.json
new file mode 100644
index 0000000000..4c30282ae7
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_104.json
@@ -0,0 +1 @@
+{"http2initialsequencenumber":[196609,786437,22151169],"http2":[196610,786433,851969,22151170],"headers":[327681,1245185,2097153,3604482,5963783,6029320,9764868,12320771,13697025,13762561,13828097,13893633,14024706,15990785,16121857,16252929,16449537,17039366,21561345,21626881,21692417,21757953,21889027,22872065,23658499,24051714],"hash":[1769473,1835009,1900545,1966081,2031617,2097153,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4456449,21561345,21626881,21692417,21757953,21823489,21889025,22020097,22085633,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23592961,23658497,23724033,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,25231361],"handlers":[3997697,10682369,12320771,22609921,23265281,24248321,24510465],"headerinterceptor":[4521989,4587525,12320769,14221313,17760268,22347777,22872069],"header":[4521985,4587521,14221313,17760257,22347777],"host":[5701639,5767174,6750209,6815751,9895942,10551302,12648450,13959170,14221315,15400962,15532033,16580614,17825799,19922950,20578311,21823490,22020098,22347779,24051714,24182785],"holding":[9043969,13041665,23724033],"handler":[9961478,10027014,10092550,10158086,12320773,22413313,22740993,23658497,24379393,24838145],"helper":[12320769,21954561],"hosts":[14221313,17825793,22347777],"helplink":[15269889,23920641],"help":[15269889,23920641],"hresult":[15269890,23920642],"hierarchy":[21495809,21561345,21626881,21692417,21757953,21954561,22020097,22085633,22151169,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23527425,23658497,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24903681,24969217,25034753,25100289,25231361],"high":[22478850],"hint":[25165825]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_105.json b/doc/ref/csharp/html/fti/FTI_105.json
new file mode 100644
index 0000000000..d521afa4a0
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_105.json
@@ -0,0 +1 @@
+{"inherited":[131073,1769476,1835012,1900548,1966084,2031620,2097156,2228230,2293764,2359302,2424838,2490374,2555910,2621446,2686978,2818049,2883585,2949124,3014662,3211268,3276804,3342339,3407878,3473416,3538950,3604486,3670022,3735558,3801094,3866630,3932166,3997702,4063236,4128774,4194307,4456454,14483457,14614529,14811137,15269896,21561348,21626884,21692420,21757956,21823492,21889028,22020102,22085636,22347782,22544390,22609926,22675462,22806534,22937603,23068674,23265282,23330820,23396358,23592964,23658500,23724035,23855110,23920657,23986182,24051718,24117254,24182790,24248326,24313862,24444934,24510470,24576004,24641542,24707075,25231366],"initial":[196609,786433,15400961,20119553,22151169,24051713],"incoming":[196609,851969,22151169],"instance":[327681,1310721,1769473,1835009,1900545,1966081,2031621,2097159,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3211268,3276801,3342339,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194307,4456449,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6946817,7077889,8978433,9043969,9437185,9502721,9830401,9961473,10027009,10092545,10158081,10289153,11403265,11468802,11534338,11599874,11665410,12189697,12517379,13041666,14352385,15269889,15466497,18022401,20381697,21561345,21626881,21692417,21757953,21823496,21889032,22020097,22085633,22347778,22544385,22609921,22675459,22806529,23330817,23396353,23592964,23658499,23724037,23855106,23920642,23986177,24051713,24117251,24182785,24248321,24313858,24444929,24510465,24576001,24641537,24707076,25231362],"initonly":[1179649,1310721,1441793,1507329,1638401],"int":[1376259,6422531,6815747,8847364,9175044,9240580,9371652,9895939,10485763,10551302,11730950,17235972,18874373,19267588,20447236,20643844],"integer":[1376257,6422531,6815745,8847361,9175041,9240577,9371649,9895937,10485761,10551298,11730946,12582913,14155777,17235970,18874369,19267585,20447233,20643841,22085634,22216706],"int32":[1376257,3932161,6422530,6815746,8847365,9175041,9240581,9371652,9895937,10485762,10551300,11730952,12582913,12648449,13238273,17235969,18874369,19267587,20447233,20643841,22020097,22085633,24444929],"interceptor":[1703938,4521986,4587522,12320769,14221314,17760258,21495810,22347778,22872065],"implements":[1703937,4587521,4653057,4915201,5111809,5308417,7405569,7471105,7536641,7602177,7667713,7733249,7798785,8519681,8716289,8781825,8847361,9109505,9175041,9240577,9306113,9371649,10616833,10747905,18874369,19202049,19267585,19333121,19398657,19595265,19660801,21495809,21561345,21626881,21692417,21757953,23396353,23658497,23855105,24444929,24510465],"itokenaccess":[1703937,4587526,21495809],"invalidoperationexception":[1769474,1835010,1900546,1966082,4390914,4784129,4849665,4980737,5046273,5177345,5242881,5439489,5505025,12058625,12124161,13631490,21561346,21626882,21692418,21757954,25034754],"indicates":[2031617,2097153,3211265,3342337,4194305,6553601,15728641,21299201,21823489,21889025,23592961,23724033,24707074,24772609],"invokes":[2162693,6094849,6160385,6225921,6291457,6356993,21954565],"independent":[2162689,6160385,21954561],"implicitly":[2228225,3604481,6553601,9764865,22020097,24051713],"iasyncstreamreader":[2686979,11468809,11534344,12320769,14483459,16187398,16318470,22413317,22740997,22937606],"idisposable":[2686977,4653057,4915201,5111809,5308417,21561348,21626884,21692420,21757956,22937605],"iasyncenumerator":[2686977,14483457,22937606],"interface":[2686977,2752513,2818049,2883585,3080193,7208961,7274497,7929857,7995393,8060929,8126465,8192001,8257537,8323073,12320769,12386305,12845057,12910593,14483457,14548993,14614529,14680065,14745601,14811137,18153473,18219009,18284545,18350081,18415617,18481153,21561345,21626881,21692417,21757953,22937607,23003141,23068678,23134213,23199749,23265286,23396353,23461893,23658500,23855105,24444930,24510466],"iasyncstreamwriter":[2752515,2818049,2883585,7208962,12320769,14548995,14614529,14811137,18153474,23003142,23068678,23265286],"iclientstreamwriter":[2818051,4259841,7274498,11599883,12320769,13434881,14614531,15859718,16056326,23068678,24903681],"iserverstreamwriter":[2883587,4259841,11665418,12320769,13434881,14811139,15400961,20316161,22740997,23265287,24051713,24379397,24903681],"info":[3014658,3080194,7667722,8192008,12320769,23396354,23461890,25100289],"ilogger":[3080195,7143430,7405569,7471105,7536641,7602183,7667713,7733249,7798785,7929860,7995397,8060932,8126472,8192004,8257541,8323076,12386305,12845058,12910594,18087942,23396356,23461894],"indexof":[3276801,9175049,23658497],"insert":[3276801,9240586,23658497],"information":[3473409,11468801,11534337,11599873,11665409,15269889,23920642,24772609],"invoked":[3604482,9764866,12320769,14221313,17760257,21823489,22347777,24051714],"immutable":[3866625,10223617,24313857],"ienumerable":[4259842,6750214,6815750,9109505,10616833,10747905,10944517,11206662,11272198,11599882,11665417,12648450,13369346,13434882,22020098,23658504,24444936,24510472,24641538,24903682],"initializes":[5636097,5701633,5767169,6946817,7077889,8454145,8978433,9043969,9437185,9502721,9830401,12189697,12517379,13041666,21823491,22347777,22675457,23592961,23658497,23724034,23855105,24117249,25231361],"intvalue":[6422533,14155777,17235973,22085633],"invoke":[6881281],"invocation":[6881281,6946817],"item":[8519687,8781831,9175047,9240583,9306119,15073281,19267590,23658497],"icollection":[8519681,8716289,8781825,8847361,9306113,18874369,19202049,23658500],"indicating":[8978433,9043969],"ienumerator":[9109510,10616838,10747910],"ilist":[9175041,9240577,9371649,19267585,21102598,23658500],"index":[9240583,9371655,19267590],"interceptors":[12255234,21495810],"inherit":[12255233,21495809,23920641,24576001,24641537],"indirectly":[12320769,21954561],"invoking":[12320769,22020097],"initialization":[12320769,22806529],"interfaces":[12320769,12386305],"ihaswriteoptions":[12320769,14680067,18219010,23134214],"imethod":[12320769,14745603,18284546,18350082,18415618,18481154,19333121,19398657,19595265,19660801,22872069,23199750,23855108],"ispropagatecancellation":[14286849,17891333,22544385],"ispropagatedeadline":[14286849,17956869,22544385],"insecure":[14352385,15466497,18022405,20381701,22675457,24117249],"isreadonly":[15073281,19202056,23658497],"isbinary":[15138817,18939909,23724033],"innerexception":[15269889,23920641],"immediate":[15269889,23920641],"indicate":[15728641,21299201,24707073],"inheritance":[21495809,21561345,21626881,21692417,21757953,21954561,22020097,22085633,22151169,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23527425,23658497,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24903681,24969217,25034753,25100289,25231361],"idle":[22282242],"inherits":[22937601,23068673,23265281,23920641,24576001,24641537],"invalidargument":[24772609],"invalid":[24772609],"invalid_argument":[24772609],"instead":[24772610],"identified":[24772609],"issue":[24772609],"implemented":[24772609],"internal":[24772610],"invariants":[24772609],"immediately":[25165825]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_107.json b/doc/ref/csharp/html/fti/FTI_107.json
new file mode 100644
index 0000000000..6ce520d796
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_107.json
@@ -0,0 +1 @@
+{"keycertificatepair":[2949123,7340037,11141131,11206662,11272198,12320769,13303809,13369346,14876675,15597569,18546690,18612226,20905995,21102598,23330824,24576002,24641538],"killasync":[3538945,10420229,23986177],"key":[7340034,8585222,8650758,8978438,9043974,11141121,11206657,11272193,12320769,14876673,15138818,15269889,15597570,15663105,18612225,19005446,20905986,21102593,23330819,23724034,23920641,24576002,24641537],"known":[11010049,13303809,24576001,24772609],"keycertificatepairs":[11206661,11272197,15663105,21102597,24641537]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_108.json b/doc/ref/csharp/html/fti/FTI_108.json
new file mode 100644
index 0000000000..0e8d26a239
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_108.json
@@ -0,0 +1 @@
+{"link":[1,15269889,23920641],"length":[196609,917505,22151169],"listening":[393217,1376257,3932162,9895937,10485761,10551297,13238274,24182785,24444930],"literal":[655361,720897,786433,851969,917505,983041,1048577,1114113,1245185,1376257,1572865],"lastobservedstate":[2228225,6684679,22020097],"logger":[2621441,3014657,3080193,7143425,7602177,7864321,8126465,12386305,14417922,18087943,22806531,23396355,23461889],"list":[2686977,4259841,11534342,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,22937601,24903681],"logs":[3014662,3080198,7405569,7471105,7536641,7667713,7733249,7798785,7929857,7995393,8060929,8192001,8257537,8323073,12386306,12713986,12779522,12845058,12910594,21430273,23396359,23461894],"logging":[3014657,3080193,7143426,7405572,7471109,7536644,7602179,7667716,7733253,7798788,7864322,7929860,7995397,8060932,8126467,8192004,8257541,8323076,12386306,12713985,12779521,12845057,12910593,21430273,23396355,23461891],"listen":[3932162,9895937,10485761,10551297,12320769,13238274,15335425,20709377,23986178,24182785,24444930],"let":[6029317,6553601,6684673,6750209,6815745,7012354,9699329,10944513,11599873,12189697,20447233],"loaded":[11010049,13303809,24576001],"lightweight":[12255233,21430273],"library":[12255233,12320769,21430273,22806529],"logic":[12320770,21430273,23592961],"long":[12320769,22020097,24772609],"lived":[12320769,22020097],"like":[12320770,22609922,24772609],"layer":[12320770,22609922],"level":[12320769,22478849],"low":[22478850],"likely":[24772609],"loss":[24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_109.json b/doc/ref/csharp/html/fti/FTI_109.json
new file mode 100644
index 0000000000..6c114c9ab6
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_109.json
@@ -0,0 +1 @@
+{"members":[131073,196609,262145,327681,393217,458753,524289,589825,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4456449,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22478849,22544385,22609921,22675457,22806529,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,24772609,24903681,24969217,25100289,25165825,25231361],"maxconcurrentstreams":[196609,851973,22151169],"maximum":[196610,851969,917505,22151170],"maxmessagelength":[196609,917509,22151169],"message":[196609,458754,917505,1441793,1507329,3014662,3080198,3604481,4390914,6094849,6225922,6291459,6356995,6881282,7208966,7405576,7471112,7536648,7667720,7733256,7798792,7929863,7995399,8060935,8192007,8257543,8323079,9633799,9764865,9961474,10027010,10092546,10158082,11862018,12124162,12713986,12779522,12845058,12910594,13107201,13500417,13631489,15269890,21561346,21626882,21692417,21757953,21823490,22151169,22413314,22740994,22937601,23003137,23068673,23396358,23461894,23855106,23920643,24051713,24379394,24707074,24838146,25034754,25165825],"metadata":[196610,327684,983041,1048577,1245186,1310728,1769473,1835009,1900545,1966081,3276804,3342339,4849670,5046278,5242886,5505030,5963781,6029317,8519693,8585221,8650757,8716291,8781836,8847374,8912899,8978438,9043974,9109513,9175052,9240590,9306124,9371652,9437190,9764869,12320773,12976131,13041669,14221313,15073283,15138821,15400961,15990790,16121862,16252934,16449542,17039366,17760257,18874371,18939906,19005443,19070979,19136515,19202051,19267595,20119559,20185094,21561345,21626881,21692417,21757953,22151170,22347777,22872074,23658521,23724043,24051713],"mutable":[655361,720897,786433,851969,917505,983041,1048577,1114113,1245185,1376257,1572865],"methods":[1703938,1769474,1835010,1900546,1966082,2031618,2097154,2162690,2228226,2293762,2359298,2424834,2490370,2555906,2621442,2686979,2752514,2818051,2883587,2949122,3014658,3080194,3145730,3211266,3276802,3342338,3407874,3473410,3538946,3604482,3670018,3735554,3801090,3866626,3932162,3997698,4063234,4128770,4194306,4259842,4325378,4390914,4456450,11468802,11534338,11599874,11665410,12255233,12320769,12451843,14745601,15204353,18284545,19333121,21495810,21561345,21626881,21692417,21757953,21823489,21889025,21954562,22020097,22085633,22347777,22544385,22609921,22675457,22806529,22937602,23003137,23068674,23199745,23265282,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23855106,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,24903682,24969218,25034754,25231361],"means":[1769473,1835009,1900545,1966081,4653057,4915201,5111809,5308417,6029313,21561345,21626881,21692417,21757953,24772609],"messages":[2162689,3604481,6094849,6160387,6225921,8454146,9502722,9764865,12320775,12386305,15204354,19464193,19529729,21954561,22937601,23003137,23068673,23265281,23461889,23592961,23658498,23855106,24051713],"memberwiseclone":[2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,22020097,22347777,22544385,22609921,22675457,22806529,23396353,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25231361],"method":[2359297,3407875,3604481,3866632,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636108,5701645,5767175,5832705,5898241,5963777,6094849,6160385,6225921,6291457,6356993,6553601,6619137,6684673,6881293,7143425,7208961,7274497,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8519681,8585217,8650753,8716289,8781825,8847361,8912897,9109505,9175041,9240577,9306113,9371649,9502729,9699329,9764866,9961487,10027023,10092559,10158095,10223617,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,11337729,11468805,11534341,11599877,11665413,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12320774,12517378,12713985,12779521,12845057,12910593,12976129,13172745,13238273,13434881,13500417,13565953,13631489,13959170,14745604,15204359,15269889,15400962,16646150,18284545,18350081,18415617,18481153,19333123,19398659,19464194,19529730,19595267,19660803,19988486,21823492,22347777,22413314,22740994,22872069,23199749,23789569,23855120,23920641,24051715,24248322,24313864,24379394,24838146],"movenext":[2686977,22937601],"marshallers":[3145731,8388613,12320770,14942211,18677762,23527432],"marshaller":[3145729,3211267,5767182,8388614,8454150,9502732,12320769,12517378,13959170,14942209,15007747,15204354,16777223,16842759,18677767,18743298,18808834,19464199,19529735,21823492,23527426,23592969,23855106],"member":[4521985,4587521,4718593,4784129,4849665,4980737,5046273,5177345,5242881,5373953,5439489,5505025,5570561,5832705,5898241,5963777,6094849,6160385,6225921,6291457,6356993,6553601,6619137,6684673,6881281,7143425,8388609,8585217,8650753,9699329,9764865,9961473,10027009,10092545,10158081,10223617,10354689,10420225,10485761,10551297,10682369,10813441,10878977,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18546689,18612225,18677761,18743297,18808833,18939905,19005441,19070977,19136513,19464193,19529729,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,22216705,22282241,22478849,23789569,24772609,25165825],"missing":[5570561,6684674,7143425,7405570,7471107,7536642,7602177,7667714,7733251,7798786,7929858,7995395,8060930,8126465,8192002,8257539,8323074,8388611,8519682,8585219,8650755,8716289,8781826,8847363,9109505,9175042,9240579,9306114,9371650,9699329,10485761,10682369,11075585,11468803,11534338,11599876,11665411,11730947,11927553,11993089,18874369,19202049,19267585,20447233,20512769,20578305,20643841,23265281,23592961],"methodtype":[9502725,12320769,18481158,19660807,23789573],"main":[12320769,21430273],"make":[12320769,21954561],"making":[12320770,21954561,22609921],"makes":[12320769,22609921],"mapping":[12320769,24248321],"microbenchmarks":[12451841,24969217],"multiple":[14221313,17825793,22347777],"meaning":[14221313,17825793,22347777],"maintains":[14548993,14614529,14811137,18153473,23003137,23068673,23265281],"mustinherit":[22347777,22675457,24117249],"medium":[22478850],"malformed":[24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_110.json b/doc/ref/csharp/html/fti/FTI_110.json
new file mode 100644
index 0000000000..4df2bf7fde
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_110.json
@@ -0,0 +1 @@
+{"namespace":[131073,196609,262145,327681,393217,458753,524289,589825,655362,720898,786434,851970,917506,983042,1048578,1114114,1179650,1245186,1310722,1376258,1441794,1507330,1572866,1638402,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4521986,4587522,4653058,4718594,4784130,4849666,4915202,4980738,5046274,5111810,5177346,5242882,5308418,5373954,5439490,5505026,5570562,5636098,5701634,5767170,5832706,5898242,5963778,6029314,6094850,6160386,6225922,6291458,6356994,6422530,6488066,6553602,6619138,6684674,6750210,6815746,6881282,6946818,7012354,7077890,7143426,7208962,7274498,7340034,7405570,7471106,7536642,7602178,7667714,7733250,7798786,7864322,7929858,7995394,8060930,8126466,8192002,8257538,8323074,8388610,8454146,8519682,8585218,8650754,8716290,8781826,8847362,8912898,8978434,9043970,9109506,9175042,9240578,9306114,9371650,9437186,9502722,9568258,9633794,9699330,9764866,9830402,9895938,9961474,10027010,10092546,10158082,10223618,10289154,10354690,10420226,10485762,10551298,10616834,10682370,10747906,10813442,10878978,10944514,11010050,11075586,11141122,11206658,11272194,11337730,11403266,11468802,11534338,11599874,11665410,11730946,11796482,11862018,11927554,11993090,12058626,12124162,12189698,12255233,12320770,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859714,15925250,15990786,16056322,16121858,16187394,16252930,16318466,16384002,16449538,16515074,16580610,16646146,16711682,16777218,16842754,16908290,16973826,17039362,17104898,17170434,17235970,17301506,17367042,17432578,17498114,17563650,17629186,17694722,17760258,17825794,17891330,17956866,18022402,18087938,18153474,18219010,18284546,18350082,18415618,18481154,18546690,18612226,18677762,18743298,18808834,18874370,18939906,19005442,19070978,19136514,19202050,19267586,19333122,19398658,19464194,19529730,19595266,19660802,19726338,19791874,19857410,19922946,19988482,20054018,20119554,20185090,20250626,20316162,20381698,20447234,20512770,20578306,20643842,20709378,20774914,20840450,20905986,20971522,21037058,21102594,21168130,21233666,21299202,21364738,21430274,21495810,21561346,21626882,21692418,21757954,21823490,21889026,21954562,22020098,22085634,22151170,22216706,22282242,22347778,22413314,22478850,22544386,22609922,22675458,22740994,22806530,22872066,22937602,23003138,23068674,23134210,23199746,23265282,23330818,23396354,23461890,23527426,23592962,23658498,23724034,23789570,23855106,23920642,23986178,24051714,24117250,24182786,24248322,24313858,24379394,24444930,24510466,24576002,24641538,24707074,24772610,24838146,24903682,24969218,25034754,25100290,25165826,25231362],"number":[196610,786433,851969,12320769,22151170,23789569,23986177],"normally":[1769473,1835009,1900545,1966081,4653057,4915201,5111809,5308417,12320769,21561345,21626881,21692417,21757953,24248321],"new":[2031617,2097155,2228225,2359297,3801089,3932162,5570561,5636099,5701635,5767171,5832705,5898241,5963777,6029315,6422530,6488066,6553601,6750210,6815746,6881281,6946819,7012355,7077891,7340035,7864322,8454147,8978435,9043971,9437187,9502723,9568259,9633795,9830403,9895939,10289155,10354689,10485761,10551297,10944515,11010050,11075586,11141122,11206658,11272194,11403267,12189699,12517379,13041666,13107202,13238274,14221313,17760257,21823492,21889028,22020097,22347779,22544385,22675457,23330817,23592961,23658497,23724034,23855105,23920642,23986177,24117249,24182785,24248321,24313857,24444930,24707073,25231361],"need":[2228225,6553601,22020097,25165826],"needs":[3604481,8978433,9764865,24051713],"null":[4390914,5701633,6029323,6553603,6684674,6750210,6815746,7208961,9699330,10944514,11927553,11993089,13565954,14221313,14548993,14614529,14811137,15597569,17825793,18153473,20905985,22347777,23003137,23068673,23265281,24576001,25034754],"nullable":[6029317,6553605,6684679,16973830],"nullptr":[6029317,6553601,6684673,6750209,6815745,9699329,10944513],"names":[12320770,22151169,24248321],"native":[12320769,22609921],"numerical":[15269889,23920641],"namespaces":[21430274],"notinheritable":[21495809,21561345,21626881,21692417,21757953,21954561,22085633,22151169,23330817,23527425,23658497,24576001,24903681,24969217,25034753,25100289],"notfound":[24772609],"nocompress":[25165825]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_111.json b/doc/ref/csharp/html/fti/FTI_111.json
new file mode 100644
index 0000000000..d6598433cd
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_111.json
@@ -0,0 +1 @@
+{"occurs":[131073,2228225,6684673,22020097,23920641],"object":[131073,1769480,1835015,1900551,1966088,2031618,2097154,2228235,2293767,2359307,2424843,2490379,2555915,2621451,2949127,3014671,3080196,3211266,3276807,3342338,3407883,3473416,3538955,3604491,3670027,3735563,3801100,3866635,3932171,3997707,4063239,4128779,4194306,4456459,4718593,5373953,6094849,6160385,6225921,6291457,7405577,7471115,7536650,7667721,7733259,7798794,7929863,7995401,8060936,8192007,8257545,8323080,10223617,10354690,11468801,11534337,11599873,11665409,12320769,12713986,12779522,12845058,12910594,15269889,21495809,21561353,21626888,21692424,21757961,21823490,21889026,21954562,22020108,22085640,22151169,22347788,22544396,22609932,22675468,22806540,23330824,23396368,23461892,23527425,23592962,23658504,23724034,23855116,23920651,23986188,24051724,24117260,24182796,24248333,24313868,24444940,24510476,24576008,24641548,24707074,24903681,24969217,25034753,25100289,25231372],"override":[196609,1114113,4653057,4915201,5111809,5308417,7405569,7471105,7536641,7602177,7667713,7733249,7798785,8519681,8716289,8781825,8847361,8912899,9109505,9175041,9240577,9306113,9371649,10616833,10747905,11337731,18874369,19202049,19267585,19333121,19398657,19595265,19660801,22151169],"options":[262145,589825,1179649,1638401,2031617,5570567,5636102,5701638,5767174,6029313,6750216,6815752,6881286,7012353,9699336,10944520,12320773,13959170,14024705,14548994,14614530,14680065,14811138,15400961,16711686,17170433,18153474,18219009,20316161,21823491,21889026,22151169,22544387,23003138,23068674,23134210,23265282,24051713,25231362],"oauth2":[1703937,4521986,12255233,21430273,21495809],"obtain":[1703937,4587522,21495809],"operations":[1769473,1835009,1900545,1966081,2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,4653057,4915201,5111809,5308417,12320770,21561345,21626881,21692417,21757953,22020097,22347777,22544385,22609921,22675457,22806529,23396353,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,24772609,25165825,25231362],"one":[2752513,2818049,2883585,3473409,7208961,12320769,23003137,23068673,23265281,23920641,23986177,24772609],"overrides":[3342337,4194305,8912897,11337729,23724033,24707073],"overridden":[3473410,23920642],"overload":[5636097,5701633,5767169,6422529,6488065,6750209,6815745,7471105,7536641,7733249,7798785,7995393,8060929,8257537,8323073,8519681,8585217,8650753,8978433,9043969,9568257,9633793,9961473,10027009,10092545,10158081,10485761,10551297,11010049,11075585,11141121,11206657,11272193,11599873,11665409,11796481,11862017,11927553,11993089,12058625,12124161,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489],"optional":[6029322,6553602,6684674,6750210,6815746,7012356,9699330,10944514,11599874,12189698,12320769,24707073],"obtained":[6029313],"option":[6422529,6488065,12320769,12582914,22085635,22216706],"omit":[11468801,11534337,11599873,11665409],"objects":[12320771,22020097,23134209,24248321],"operation":[12320769,22020097,24772618],"optiontype":[12320769,17432582,22216709],"original":[14090241,17629185,22020097],"operatio":[24772609],"outofrange":[24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_112.json b/doc/ref/csharp/html/fti/FTI_112.json
new file mode 100644
index 0000000000..f8b685b9ef
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_112.json
@@ -0,0 +1 @@
+{"primaryuseragentstring":[196609,983045,22151169],"primary":[196609,983041,22151169],"propagation":[262145,1179649,3604481,6029313,7012353,9699329,22544386,24051713],"pickunused":[393217,1376261,20447233,24182785],"pass":[393217,1376257,24182785],"port":[393219,1376259,3932164,6750209,6815751,9895946,10485762,10551306,12320769,12648450,13238276,15335425,15466497,15532033,20381697,20447234,20643847,20709377,22020098,23986177,24117249,24182790,24444932],"ports":[393217,1376257,12320770,15335426,20709382,23986179,24182785,24444929],"property":[393217,1376257,14221313,14548993,14614529,14811137,15400961,15859716,15925252,15990788,16056324,16121860,16187396,16252932,16318468,16384004,16449540,16515076,16580612,16646148,16711684,16777220,16842756,16908292,16973828,17039364,17104900,17170436,17235972,17301508,17367044,17432580,17498116,17563652,17629188,17694724,17760260,17825797,17891332,17956868,18022404,18087940,18153477,18219012,18284548,18350084,18415620,18481156,18546692,18612228,18677764,18743300,18808836,18874372,18939908,19005444,19070980,19136516,19202052,19267588,19333124,19398660,19464196,19529732,19595268,19660804,19726340,19791876,19857412,19922948,19988484,20054020,20119556,20185092,20250628,20316165,20381700,20447236,20512772,20578308,20643844,20709380,20774916,20840452,20905988,20971524,21037060,21102596,21168132,21233668,21299204,21364740,22347777,23003137,23068673,23265281,24051713,24182785],"public":[655363,720899,786435,851971,917507,983043,1048579,1114115,1179651,1245187,1310723,1376259,1441795,1507331,1572867,1638403,4521987,4587523,4653059,4718595,4784131,4849667,4915203,4980739,5046275,5111811,5177347,5242883,5308419,5373955,5439491,5505027,5570563,5636099,5701635,5767171,5832707,5898243,5963779,6029315,6094851,6160387,6225923,6291459,6356995,6422531,6488067,6553603,6619139,6684675,6750211,6815747,6946819,7012355,7143427,7340035,7405571,7471107,7536643,7602179,7667715,7733251,7798787,7864323,8388611,8454147,8519683,8585219,8650755,8716291,8781827,8847363,8912899,8978435,9043971,9109507,9175043,9240579,9306115,9371651,9437187,9502723,9568259,9633795,9699331,9764867,9895939,9961475,10027011,10092547,10158083,10223619,10289155,10354691,10420227,10485763,10551299,10616835,10682371,10747907,10813443,10878979,10944515,11010051,11075587,11141123,11206659,11272195,11337731,11403267,11468803,11534339,11599875,11665411,11730947,11796483,11862019,11927555,11993091,12058627,12124163,12189699,15859715,15925251,15990787,16056323,16121859,16187395,16252931,16318467,16384003,16449539,16515075,16580611,16646147,16711683,16777219,16842755,16908291,16973827,17039363,17104899,17170435,17235971,17301507,17367043,17432579,17498115,17563651,17629187,17694723,17760259,17825795,17891331,17956867,18022403,18087939,18546691,18612227,18677763,18743299,18808835,18874371,18939907,19005443,19070979,19136515,19202051,19267587,19333123,19398659,19464195,19529731,19595267,19660803,19726339,19791875,19857411,19922947,19988483,20054019,20119555,20185091,20250627,20316163,20381699,20447235,20512771,20578307,20643843,20709379,20774915,20840451,20905987,20971523,21037059,21102595,21168131,21233667,21299203,21364739,21495811,21561347,21626883,21692419,21757955,21823491,21889027,21954563,22020099,22085635,22151171,22216707,22282243,22347779,22413315,22478851,22544387,22609923,22675459,22740995,22806531,22872067,22937603,23003139,23068675,23134211,23199747,23265283,23330819,23396355,23461891,23527427,23592963,23658499,23724035,23789571,23855107,23920644,23986179,24051715,24117251,24182787,24248323,24313859,24379395,24444931,24510467,24576004,24641540,24707075,24772611,24838147,24903683,24969219,25034755,25100291,25165827,25231363],"provides":[1769473,1835009,1900545,1966081,4653057,4915201,5111809,5308417,12255233,12320770,12386305,14352385,15466497,18022401,20381697,21430274,21561345,21626881,21692417,21757953,22609921,22675457,24117249,25100289],"pending":[1769473,1835009,1900545,1966081,2752513,2818050,2883585,4653057,4915201,5111809,5308417,7208961,7274497,21561345,21626881,21692417,21757953,23003137,23068674,23265281],"provided":[2031617,2097155,5570561,5832705,5898241,5963777,21823489,21889027],"preserved":[2031617,2097155,5570561,5832705,5898241,5963777,21823489,21889027],"perform":[2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,22020097,22347777,22544385,22609921,22675457,22806529,23396353,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25231361],"performs":[2686977,22937601],"progress":[3538945,10420225,23986177],"procedure":[3538946,10420225,10813441,12320770,23920641,23986178,24772609],"propagate":[3604481,9699329,12320769,22609921,24051713],"preceded":[4325377,11730945,24969217],"phase":[4325377,11730945,24969217],"preconditions":[4390914,11796482,11862018,11927555,11993091,12058626,12124162,12451842,13500418,13565954,13631490,25034759],"parameters":[4521985,4587521,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094850,6160386,6225922,6291458,6356994,6422529,6488065,6553601,6684673,6750209,6815745,6881282,6946817,7012353,7143425,7208961,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388610,8454145,8519681,8585217,8650753,8781825,8847361,8978433,9043969,9175041,9240577,9306113,9371649,9502721,9568257,9633793,9699329,9764865,9895937,9961474,10027010,10092546,10158082,10289153,10354689,10485761,10551297,10682369,10944513,11075585,11141121,11206657,11272193,11403265,11468802,11534338,11599874,11665410,11730945,11796481,11862017,11927554,11993090,12058625,12124161,12189697,19267585,21561345,21626881,21692417,21757953,21823489,22413314,22740994,22872065,22937601,23003137,23068673,23265281,23592961,23855105,24379394,24838146],"param":[5570561,6684674,7143425,7405570,7471107,7536642,7667714,7733251,7798786,7929858,7995395,8060930,8192002,8257539,8323074,8388610,8519681,8585218,8650754,8781825,8847362,9175041,9240578,9306113,9371649,9699329,10485761,10682369,11075585,11468802,11534337,11599875,11665410,11730947],"propagationtoken":[6029319,14024705,17104901,21889025],"providing":[6094849,6160385,6225921,6291457],"protected":[6881283,7077891,9830403],"propagatedeadline":[7012359],"propagatecancellation":[7012359],"parent":[7012354,14024705,14286850,17104897,17891329,17956865,21889025,22544386],"propagated":[7012354,14286850,17891329,17956865,22544386],"private":[7340034,14876673,18612225,23330818],"pair":[7340033,11141121,12320769,15597570,20905986,23330818,24576002],"privatekey":[7340037,14876673,18612229,23330817],"pem":[7340034,11075585,11141121,11272193,12320769,13303809,14876674,15597569,15663105,18546689,18612225,20971521,21168129,23330819,24576002,24641537],"params":[7405569,7471105,7536641,7667713,7733249,7798785,7929857,7995393,8060929,8192001,8257537,8323073],"paramarray":[7405569,7471105,7536641,7667713,7733249,7798785,7929857,7995393,8060929,8192001,8257537,8323073],"pointed":[11010049,13303809,24576001],"place":[11010049,13303809,24576001],"proves":[11272193],"parameter":[11468801,11534337,11599873,11665409,11993089],"programming":[11468801,11534337,11599873,11665409],"paramname":[11993093],"protocol":[12320770,21954561,24248321],"possible":[12320769,22020097],"propagating":[12320770,14024705,17104897,21889025,22609922],"properties":[12320769,13697026,13762562,13828098,13893634,13959170,14024706,14090242,14155778,14221314,14286850,14352386,14417922,14483458,14548994,14614530,14680066,14745602,14811138,14876674,14942210,15007746,15073282,15138818,15204354,15269890,15335426,15400963,15466498,15532034,15597570,15663106,15728642,15794178,20316161,21561345,21626881,21692417,21757953,21823489,21889025,22020097,22085633,22347777,22544385,22609921,22675457,22806529,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23527425,23592961,23658497,23724033,23855105,23920641,23986177,24051714,24117249,24182785,24576001,24641537,24707073,25231361],"part":[12320769,24248321],"pairs":[15269889,15663105,21102593,23920641,24641537],"provide":[15269889,23920641],"peer":[15400961,20054021,24051713],"pick":[20447233],"problematic":[24772609],"permissiondenied":[24772609],"permission":[24772609],"permission_denied":[24772610],"past":[24772610],"particular":[25165825]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_113.json b/doc/ref/csharp/html/fti/FTI_113.json
new file mode 100644
index 0000000000..50cc318bdf
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_113.json
@@ -0,0 +1 @@
+{"qualified":[2031617,2097153,3211265,5767169,14745601,15204353,18284545,19333121,21823489,21889025,23199745,23592961,23855105],"quota":[24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_114.json b/doc/ref/csharp/html/fti/FTI_114.json
new file mode 100644
index 0000000000..eb0e8484e8
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_114.json
@@ -0,0 +1 @@
+{"redirected":[1],"rpcexception":[131075,3473411,9568263,9633799,12320770,13107206,15269891,19726338,23920652],"reference":[131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390915,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927560,11993096,12058625,12124161,12189697,12320769,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565955,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034755,25100289,25165825,25231361],"receive":[196609,917505,22151169],"read":[327681,1310721,1835009,1900545,2686977,4259841,4915201,5111809,11534337,12320769,13762561,13828097,16187393,16318465,21626882,21692418,22937602,23658497,24903681],"result":[458754,1441793,1507329,1769474,1835009,1900545,1966082,4653058,4915201,5111809,5308418,12320770,13697025,13893633,14352385,15466497,15925249,16384001,18022401,20381697,21561347,21626881,21692417,21757955,22675457,24117249,24707075,24772609],"rpc":[458754,1441793,1507329,2228226,6553602,12320770,15400965,19857409,19922945,19988481,20185089,20250625,21954561,22020098,24051717,24707075],"readonly":[1179650,1310722,1441794,1507330,1638402,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17891329,17956865,18022401,18087937,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737],"request":[1769473,1835009,1966081,2162689,2228225,3866625,4653057,4915201,5308417,5767169,6029313,6094849,6160386,6225923,6291458,6356994,6553601,6881281,9502721,9961473,10027009,10092545,10158082,12320771,13172737,14221313,15204353,17760257,19464193,21561346,21626882,21757954,21823489,21954561,22020097,22347777,22413313,22740993,23658498,23789571,23855106,24313857,24379398,24772609,24838150],"received":[1769473,1966081,4653057,5308417,21561345,21757953,23789571,24772609],"requests":[1769473,1835009,1900545,1966081,2162690,3538946,4653057,4915201,5111809,5308417,6094849,6160385,10420225,10813441,13697025,13762561,13959169,15859713,16056321,16777217,21561346,21626882,21692417,21757953,21823489,21954562,23789569,23986178],"resources":[1769473,1835009,1900545,1966081,2228226,2359297,2424833,2490369,2555905,2621441,2686977,3014657,3407873,3473409,3538946,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,4653057,4915201,5111809,5308417,6619137,10813441,21561345,21626881,21692417,21757953,22020098,22347777,22544385,22609921,22675457,22806529,22937601,23396353,23855105,23920641,23986178,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25231361],"released":[1769473,1835009,1900545,1966081,4653057,4915201,5111809,5308417,21561345,21626881,21692417,21757953],"returns":[1769473,1835009,1900545,1966081,2031619,2097157,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014658,3080193,3211266,3276801,3342338,3407873,3473410,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194306,4456449,5570561,5832705,5898241,5963777,7602177,8126465,8912897,11337729,14352385,14942209,15138817,15466497,18022401,18677761,18939905,20381697,21561345,21626881,21692417,21757953,21823491,21889029,22020097,22085633,22347777,22544385,22609921,22675458,22806529,23330817,23396354,23461889,23527425,23592962,23658497,23724035,23855105,23920642,23986177,24051713,24117250,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707074,25231361],"represents":[1769473,1835009,1900545,1966081,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3276801,3342337,3407873,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4456449,8912897,11337729,12320770,21561345,21626881,21692417,21757953,22020098,22085633,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23658497,23724033,23855105,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707074,25231361],"response":[1835009,1900545,2162690,3604484,3866625,4915201,5111809,5767169,6094851,6160386,6225922,6291458,6356994,6881281,9502721,9764870,9961473,10027009,10092545,10158082,12320772,13172737,13697025,13762561,13828097,13893633,15204353,15400961,15990785,16121857,16252929,16449537,19529729,20316161,21561346,21626883,21692419,21757955,21823489,21954562,22413313,22740993,23658499,23789570,23855106,24051717,24313857,24379393,24772609,24838145],"responds":[2162691,6094849,6160385,6225921,21954563],"responses":[2162690,6160385,6225921,13762561,13828097,13959169,16187393,16318465,16842753,21626881,21692417,21823489,21954562,23789570],"remote":[2162690,6291457,6356993,6946817,12320777,14090241,15400961,17498113,20054017,21954562,22020099,23199745,23658499,23855105,23920641,24051713,24772609],"requesting":[2228225,6553601,22020097],"returned":[2228227,3538946,6553601,6684674,10420225,10813441,22020099,23986178,24772611],"ready":[2228225,6553601,22020097,22282242],"reached":[2228226,6553601,6684673,22020098],"requires":[2228225,6553601,22020097],"reclaimed":[2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,22020097,22347777,22544385,22609921,22675457,22806529,23396353,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25231361],"releasing":[2686977,22937601],"resetting":[2686977,22937601],"reads":[2686978,4259842,11468801,11534337,22937602,24903682],"remove":[3276801,9306121,23658497],"removeat":[3276801,9371657,23658497],"root":[3473409,11075585,11141121,11206657,11272193,13303809,13369345,15597569,15663105,20971521,21168129,23920641,24576002,24641538],"runtime":[3473409,23920641],"representation":[3473409,12320769,15269889,23199745,23920642],"return":[3932162,4521985,4587521,4718593,4784129,4849665,4980737,5046273,5177345,5242881,5373953,5439489,5505025,5570561,5832705,5898241,5963777,6094849,6160385,6225921,6291457,6356993,6553601,6619137,6684673,6881281,7208961,7274497,7602177,8126465,8388609,8781825,8912897,9109505,9175041,9306113,9699329,9764865,9895937,9961473,10027009,10092545,10158081,10223617,10354689,10420225,10485762,10551298,10616833,10747905,10813441,11337729,11468801,11534337,11599873,11665409,11927553,11993089,12320772,13238274,21561345,21626881,21692417,21757953,22413313,22740993,24379393,24444930,24772609,24838145],"register":[3997697,10682369,14221313,15335426,17760257,20709377,20774913,22347777,23986178,24510465],"runbenchmark":[4325377,11730952,24969217],"runs":[4325377,11730945,24969217],"requestmarshaller":[5767173,9502725,13959169,15204353,16777221,19464197,21823489,23855105],"responsemarshaller":[5767173,9502725,13959169,15204353,16842757,19529733,21823489,23855105],"ref":[6094850,6160386,6225922,6291458,6356994,6881282,9961474,10027010,10092546,10158082,11468801,11534337,11599873,11665409,21495809,21561345,21626881,21692417,21757953,21954561,22020097,22085633,22151169,22347777,22413314,22544385,22609921,22675457,22740994,22806529,23330817,23396353,23527425,23658497,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379394,24444929,24510465,24576001,24641537,24838146,24903681,24969217,25034753,25100289,25231361],"reponse":[6160385],"req":[6225925,6291461,6356997],"resulting":[9568257,9633793,12320770,15269889,19726337,23658497,23920642],"responseheaders":[9764869],"roots":[11010049,13303809,24576001],"rootcertificates":[11075590,11141125,11272198,15597569,15663105,20971525,21168133,24576001,24641537],"rejected":[11272193,24772609],"registered":[12255233,21495809],"representing":[12320769,21430273],"reuse":[12320770,22020098],"redirect":[12386305,21430273],"requeststream":[13697025,13762561,15859717,16056325,21561345,21626881,22413317,22740997],"responseasync":[13697025,13893633,15925253,16384005,21561345,21757953],"responseheadersasync":[13697025,13762561,13828097,13893633,15990789,16121861,16252933,16449541,21561345,21626881,21692417,21757953],"responsestream":[13762561,13828097,16187397,16318469,21626881,21692417,22740997,24379397],"resolvedtarget":[14090241,17498117,22020097],"resolved":[14090241,17498113,22020097],"requestheaders":[15400961,20119557,24051713],"responsetrailers":[15400961,20185093,24051713],"recover":[22282242],"raised":[24772609],"regardless":[24772609],"requested":[24772609],"rejections":[24772609],"resource":[24772610],"resource_exhausted":[24772609],"resourceexhausted":[24772609],"required":[24772609],"rmdir":[24772609],"range":[24772609],"reading":[24772609],"retrying":[24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_115.json b/doc/ref/csharp/html/fti/FTI_115.json
new file mode 100644
index 0000000000..37245fd262
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_115.json
@@ -0,0 +1 @@
+{"search":[65537],"sort":[65537],"serializeobjectstate":[131073,23920641],"serialized":[131074,23920642],"state":[131073,2228227,6553602,6684673,12320769,14090242,17563654,22020101,22282241,23920641,24772611],"stats":[196609,655361,22151169],"sequence":[196609,786433,22151169],"streams":[196609,851969,6160385,22151169],"start":[196609,983041,3538945,3932161,3997697,10485761,10682369,10878981,13238273,22151169,23986177,24444929,24510465],"secondaryuseragentstring":[196609,1048581,22151169],"secondary":[196609,1048577,22151169],"ssltargetnameoverride":[196609,1114117,22151169],"ssl":[196609,1114113,11010049,11075585,11141121,11206657,11272193,12320770,13303811,13369346,22151169,24576004,24641539],"suffix":[327681,1245185,8978433,9043969,23658497],"serverport":[393219,1376258,3735555,3932161,9895941,10485773,10616838,12320769,13238273,15532035,20447235,20512771,20578307,20643843,24182792,24444933],"server":[393218,1376258,2162693,3538950,3866625,3932166,3997700,6094849,6160385,6225923,9895938,10092545,10420227,10485765,10551300,10616834,10682373,10747906,10813443,10878979,10944518,11141121,11206657,11272193,12320793,13172737,13238277,13369346,14221313,14745601,15204353,15335432,15466497,15597569,17825793,18284545,19333121,20381697,20447234,20512769,20709386,20774922,20840451,20971521,21430273,21692417,21954565,22347777,22413313,22609922,22740993,23199745,23265281,23658498,23789572,23855105,23986196,24051713,24117250,24182788,24248321,24313857,24379394,24444936,24510469,24576001,24641539,24772609,24838145],"status":[458755,1441799,1507335,1769473,1835009,1900545,1966081,4194308,4784134,4980742,5177350,5439494,9568269,9633805,11337731,11403271,12320772,13107204,15269890,15400962,15728644,19726348,20250637,21233666,21299203,21561345,21626881,21692417,21757953,23658497,23920647,24051714,24707082,24772610],"statuscode":[458754,1441793,1507329,11403274,12320770,15728641,21299211,24707076,24772613],"successful":[458753,1507329,24707073,24772609],"structure":[458753,1441793,1507329,2031617,2097153,3211265,3342337,4194305,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,8454145,8912897,8978433,9043969,11337729,11403265,12320769,12517377,13041665,13959169,14024705,15007745,15138817,15728641,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,18743297,18808833,18939905,19005441,19070977,19136513,21233665,21299201,21823490,21889026,23592962,23724034,24707074],"syntax":[655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468802,11534338,11599874,11665410,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361],"string":[655365,720901,786437,851973,917509,983045,1048581,1114117,1245189,1572869,1769473,1835009,1900545,1966081,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014661,3080196,3276804,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932162,3997697,4063233,4128769,4194305,4390915,4456449,4521989,5701638,5767180,6422534,6488078,6750214,6815750,7340042,7405577,7471115,7536650,7667721,7733259,7798794,7929863,7995401,8060936,8192007,8257545,8323080,8585225,8650770,8912903,8978438,9043981,9502730,9633798,9895941,10289157,10354693,10551302,11075592,11141127,11272198,11337735,11403269,11862022,11993095,12124166,12320769,12517379,12582916,12648450,12713986,12779522,12845058,12910594,12976131,13041667,13107201,13238273,13303811,13369345,13500417,13565953,13631489,14155777,14942209,15138817,15269889,16580614,16646150,17301510,17367047,17498118,17629190,17825799,18284550,18350086,18415622,18546694,18612230,18677767,19005446,19070983,19333127,19398663,19595271,19922950,19988486,20054022,20578310,20971526,21168134,21233670,21561345,21626881,21692417,21757953,21823491,22020099,22085638,22216706,22347777,22544385,22609921,22675457,22806529,22872069,23330817,23396357,23461892,23527425,23658500,23724037,23855105,23920643,23986177,24051713,24117249,24182785,24248321,24313857,24444930,24510465,24576004,24641538,24707074,25034755,25231361],"static":[655361,720897,786433,851969,917505,983041,1048577,1114113,1179651,1245185,1310723,1376257,1441795,1507331,1572865,1638403,4521987,4587523,6094851,6160387,6225923,6291459,6356995,7143427,8388611,10354691,11468803,11534339,11599875,11665411,11730947,11796483,11862019,11927555,11993091,12058627,12124163,18022403,18087939,18677763,20381699,21495809,21954561,22151169,23527425,24903681,24969217,25034753,25100289],"shared":[1179649,1310721,1441793,1507329,1638401,4521985,4587521,6094849,6160385,6225921,6291457,6356993,7143425,8388609,10354689,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,18022401,18087937,18677761,20381697],"stream":[1769473,1835010,1900545,1966081,2162693,2686978,2818051,2883585,4259845,4653057,4915202,5111809,5308417,6094849,6160387,6225922,7274497,11468801,11534337,11599874,11665409,12320772,13434883,13697025,13762562,13828097,15859713,16056321,16187393,16318465,21561346,21626884,21692418,21757953,21954565,22937603,23003137,23068676,23265282,23789571,24903685,25165825],"specified":[1769473,1835009,1900545,1966081,2031617,2097153,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014658,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4456449,7602177,8126465,8388609,12320769,12386305,21430273,21561345,21626881,21692417,21757953,21823489,21889025,22020097,22085634,22347777,22544385,22609921,22675457,22806529,23330817,23396354,23461889,23527425,23592961,23658497,23724033,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707073,24772610,25231361],"serves":[1769473,1835009,1900545,1966081,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3276801,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4456449,21561345,21626881,21692417,21757953,22020097,22085633,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23658497,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,25231361],"set":[2031617,2097155,5570561,5832705,5898241,5963777,7012354,12255233,14221314,14548993,14614529,14811137,17760260,17825798,18153477,18219012,19267589,20250628,20316164,21430273,21823489,21889027,22347778,23003137,23068673,23265281],"streaming":[2162694,3866627,6094850,6160386,6225922,9961473,10027009,10092545,12320774,12451841,13172739,13697025,13762562,13828097,15400961,15859713,16056321,16187393,16318465,20316161,21561346,21626883,21692418,21954566,22413313,22740993,24051713,24313859,24379393,24903681],"scenario":[2162691,6094849,6160385,6225921,21954563],"sends":[2162691,3604482,6094849,6160385,6225921,9764866,21954563,24051714],"single":[2162689,2752513,2818049,2883585,3866626,6094849,7208961,10158082,12320772,13172738,14221313,17825793,21757954,21954561,22020097,22347777,23003137,23068673,23265281,23789572,23986177,24313858],"sending":[2162689,6160385,21954561],"simple":[2162690,4325377,6291457,6356993,11730945,21954562,24969217],"starting":[2228226,6553602,22020098],"shallow":[2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,22020097,22347777,22544385,22609921,22675457,22806529,23396353,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25231361],"shutdownasync":[2228225,3538945,6619141,10813445,22020097,23986177],"setlogger":[2621441,7143430,22806529],"sets":[2621441,3473409,7143425,14680065,15269891,18219009,22806529,23134209,23920644],"severity":[3014662,3080198,7405569,7471105,7536641,7667713,7733249,7798785,7929857,7995393,8060929,8192001,8257537,8323073,12713986,12779522,12845058,12910594,23396358,23461894],"serializer":[3145729,8388615,8454149,15007746,18808838,23527425,23592962],"subsequent":[3473409,14548993,14614529,14811137,18153473,23003137,23068673,23265281,23920641],"serializationinfo":[3473409,23920641],"shutdown":[3538948,10420226,10813442,12320769,22806529,23986180],"serviced":[3538945,10813441,23986177],"starts":[3538945,10878977,23986177],"servercallcontext":[3604483,6029313,9699331,9764866,12320770,15400963,19791874,19857410,19922946,19988482,20054018,20119554,20185090,20250626,20316162,22413317,22740997,23134209,24051719,24379397,24838149],"servercredentials":[3670019,3932161,9830406,9895941,10551302,12320769,13238273,15466499,20381704,20512774,24117257,24444929,24641541],"serverservicedefinition":[3801092,3866627,9961479,10027015,10092551,10158087,10223625,10289154,10354696,10682374,10747910,12320772,13172737,24248329,24313862,24510468],"serverstreamingservermethod":[3866625,10092550,12320769,13172737,24313857,24379397],"serverportcollection":[3932163,10485763,10551298,10616834,12320769,13238274,20709382,24444935],"servicedefinitioncollection":[3997699,10682371,10747906,12320769,20774918,24510471],"service":[3997698,9502721,10289153,10354689,10682370,12320770,14745601,15204353,15335425,18415617,19595265,20774913,23199745,23855105,23986177,24248321,24510467,24772610],"sslcredentials":[4063235,11010054,11075591,11141126,12320769,13303813,15597571,20905986,20971522,22675457,24576010],"sslservercredentials":[4128771,11206662,11272198,12320769,13369348,15663107,21037058,21102594,21168130,24117249,24641545],"system":[4521985,5701633,5767170,5832705,5898241,6029314,6422530,6488066,6553601,6684677,6750210,6815747,7012354,7340034,7405574,7471116,7536646,7667718,7733260,7798790,7929862,7995404,8060934,8192006,8257548,8323078,8388622,8454146,8585224,8650760,8847364,8978434,9043970,9240580,9371651,9502722,9633793,9895938,10289153,10354689,10551298,10944513,11075586,11141121,11206657,11272195,11403265,11468807,11599882,11665412,11730956,11796481,11862018,11993090,12058625,12124162,12386305,19267586,21495809,21561345,21626881,21692417,21757953,21954561,22020097,22085633,22151169,22347777,22544385,22609921,22675457,22806529,22872065,23330817,23396354,23527425,23658497,23855105,23920642,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24772613,24903681,24969217,25034753,25100289,25231361],"sub":[4653057,4915201,5111809,5308417,5636097,5701633,5767169,6029313,6422529,6488065,6750209,6815745,6946817,7012353,7077889,7143425,7340033,7405569,7471105,7536641,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8192001,8257537,8323073,8454145,8519681,8585217,8650753,8716289,8847361,8978433,9043969,9240577,9371649,9437185,9502721,9568257,9633793,9830401,9895937,10289153,10682369,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11403265,11730945,11796481,11862017,12058625,12124161,12189697,22872065],"sealed":[4653057,4915201,5111809,5308417,7405569,7471105,7536641,7602177,7667713,7733249,7798785,8519681,8716289,8781825,8847361,9109505,9175041,9240577,9306113,9371649,10616833,10747905,18874369,19202049,19267586,19333121,19398657,19595265,19660801,21495809,21561346,21626882,21692418,21757954,21954561,22085634,22151169,23330818,23527425,23658498,24576002,24903681,24969217,25034753,25100289],"struct":[5636097,5701633,5767169,6029313,6094850,6160386,6225922,6291458,6356994,6881282,8978433,9043969,9961474,10027010,10092546,10158082,11468801,11534337,11599873,11665409,12517379,13041666,21823493,21889027,23592962,23724036,24707074],"sent":[6029313,12320773,15400961,20119553,23658501,23789571,24051713],"stringvalue":[6488069,14155777,17367045,22085633],"specific":[6750209,6815745,7864321,12648450,15269889,22020098,23396353,23920641],"secure":[6750210,6815745,9895937,10551297,12320769,12648449,22020097,22675457],"serialize":[8454145,13959169,16777217,21823489],"summary":[8519681,8585217,8650753,8716289,8781825,8847361,9109505,9175041,9240577,9306113,9371649,18874369,19202049,19267585,20447233,20512769,20578305,20643841],"servicename":[9502725,10289157,10354693,14745601,15204353,18415621,19595271,23199745,23855105],"send":[9764865,13697025,13762561,14024705,15400962,15859713,16056321,17039361,20185089,20250625,21561345,21626881,21889025,24051714],"servicedefinition":[10682374],"streamreader":[11468806,11534342],"streamwriter":[11599878,11665414],"stubs":[12255233,12320769,21495809,22347777],"servers":[12320769,22020097],"supported":[12320770,22151169,23789569,24772609],"situations":[12320769,22609921],"sense":[12320769,22609921],"supports":[12320769,14221313,17825793,22347777,23658497],"services":[12320769,15335426,20774918,23986179],"structures":[12320769],"serializing":[12320769,23592961],"sharing":[12320769,23134209],"simplify":[12451842,24903681,25034753],"started":[14221313,15335426,17760257,20709377,20774913,22347777,23986178],"served":[14221313,17825793,22347777],"security":[14352385,15466497,18022401,20381697,22675457,24117249],"stringmarshaller":[14942209,18677765,23527425],"source":[15269889,23920641],"stacktrace":[15269889,23920641],"stack":[15269889,23920641],"shutdowntask":[15335425,20840453,23986177],"signals":[15400961,19791873,24051713],"setting":[15400961,20316161,24051713],"success":[15728641,21299201,24707073,24772609],"sealedattribute":[21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22085633,22151169,23330817,23527425,23592961,23658497,23724033,24576001,24707073,24903681,24969217,25034753,25100289],"serverstreaming":[23789569],"simultaneously":[23789569],"space":[24772612],"successfully":[24772609],"sequencer":[24772609],"seeking":[24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_116.json b/doc/ref/csharp/html/fti/FTI_116.json
new file mode 100644
index 0000000000..5e6f03ef40
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_116.json
@@ -0,0 +1 @@
+{"topic":[1],"title":[65537],"type":[131073,196609,262145,327681,393217,458753,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,1703938,1769474,1835010,1900546,1966082,2031619,2097155,2162689,2228226,2293762,2359298,2424834,2490370,2555906,2621442,2686977,2752513,2818049,2883585,2949122,3014659,3080194,3145729,3211267,3276802,3342338,3407874,3473410,3538946,3604482,3670018,3735554,3801090,3866626,3932164,3997698,4063234,4128770,4194306,4259841,4325377,4456450,4521986,4587523,4718593,4784129,4849665,4980737,5046273,5177345,5242881,5373953,5439489,5505025,5570562,5636099,5701636,5767174,5832706,5898242,5963778,6029317,6094852,6160389,6225925,6291461,6356997,6422530,6488066,6553602,6619137,6684675,6750211,6815748,6881286,6946817,7012354,7143425,7208962,7274497,7340034,7405570,7471107,7536642,7602179,7667714,7733251,7798786,7864321,7929858,7995395,8060930,8126467,8192002,8257539,8323074,8388612,8454146,8519681,8585218,8650754,8781826,8847362,8912897,8978434,9043970,9109505,9175042,9240578,9306114,9371649,9502731,9568257,9633794,9699330,9764866,9895940,9961476,10027012,10092548,10158084,10223617,10289153,10354690,10420225,10485763,10551301,10616833,10682369,10747905,10813441,10944513,11075585,11141122,11206657,11272195,11337729,11403266,11468805,11534340,11599878,11665413,11730947,11796481,11862018,11927555,11993092,12058625,12124162,12189697,12320773,13238274,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155779,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745603,14811137,14876673,14942210,15007745,15073281,15138817,15204355,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432583,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481159,18546689,18612225,18677762,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267586,19333121,19398657,19464193,19529729,19595265,19660809,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21495811,21561351,21626887,21692422,21757958,21823495,21889028,21954562,22020099,22085637,22151170,22216706,22282241,22347779,22413319,22478849,22544387,22609923,22675459,22741000,22806531,22872068,22937604,23003140,23068676,23134210,23199748,23265283,23330819,23396357,23461891,23527427,23592965,23658499,23724035,23789569,23855112,23920643,23986179,24051715,24117251,24182787,24248323,24313859,24379400,24444933,24510467,24576003,24641539,24707075,24772609,24838151,24903682,24969218,25034753,25100290,25165825,25231363],"top":[131073,196609,262145,327681,393217,458753,524289,589825,1703937,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686978,2752513,2818050,2883586,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,21495809,21561346,21626882,21692418,21757954,21823491,21889027,21954561,22020099,22085635,22151169,22347779,22544388,22609921,22675459,22806530,22937603,23003138,23068675,23134209,23199745,23265283,23330819,23396354,23461889,23527426,23592963,23658500,23724035,23855107,23920644,23986179,24051714,24117251,24182788,24248321,24313858,24444929,24510465,24576003,24641539,24707076,24903681,24969217,25034753,25100289,25231364],"tracing":[196609,655361,12320769,22151169,22609921],"transports":[196609,786433,22151169],"target":[196609,1114113,6750214,14090242,14221313,17629190,17825793,22020098,22151169,22347777],"testing":[196609,1114113,14942209,18677761,22151169,23527425],"token":[1703938,3604481,4521986,4587521,5832705,6029313,7012353,9699329,12320771,14024706,14286849,15400961,16908289,17104897,17891329,19791873,21495810,21889026,22544385,22609923,24051714],"trequest":[1769475,1835011,2031620,2162693,2359297,3407875,3866636,4653058,4718594,4784130,4849666,4915202,4980738,5046274,5570568,5636106,5701642,5767178,6094866,6160402,6225938,6291474,6357010,6881298,9502727,9961492,10027028,10092564,10158100,12320776,12517387,13172748,13697027,13762563,13959171,15204355,15859720,15925250,15990786,16056328,16121858,16187394,16515074,16580610,16646146,16711682,16777224,16842754,19333122,19398658,19464200,19529730,19595266,19660802,21561352,21626888,21823505,21954565,22347777,22413324,22741004,23855113,24313868,24379404,24838156],"tresponse":[1769475,1835011,1900547,1966083,2031620,2162693,2359297,3407875,3866636,4653058,4718599,4784130,4849666,4915202,4980738,5046274,5111810,5177346,5242882,5308418,5373959,5439490,5505026,5570568,5636106,5701642,5767178,6094866,6160402,6225938,6291474,6357010,6881298,9502727,9961492,10027028,10092564,10158100,12320778,12517387,13172748,13697027,13762563,13828099,13893635,13959171,15204355,15859714,15925256,15990786,16056322,16121858,16187400,16252930,16318472,16384008,16449538,16515074,16580610,16646146,16711682,16777218,16842760,19333122,19398658,19464194,19529736,19595266,19660802,21561352,21626888,21692424,21757960,21823505,21954565,22347777,22413324,22741004,23855113,24313868,24379404,24838156],"terminate":[1769473,1835009,1900545,1966081,4653057,4915201,5111809,5308417,21561345,21626881,21692417,21757953],"throws":[1769474,1835010,1900546,1966082,4390918,4784129,4849665,4980737,5046273,5177345,5242881,5439489,5505025,11796481,11862017,11927553,11993089,12058625,12124161,13500418,13565954,13631490,15269889,21561346,21626882,21692418,21757954,23920641,25034758],"trailing":[1769473,1835009,1900545,1966081,4849665,5046273,5242881,5505025,21561345,21626881,21692417,21757953],"tostring":[1769473,1835009,1900545,1966081,2031617,2097153,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3211265,3276801,3342338,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194306,4456449,8912902,11337734,21561345,21626881,21692417,21757953,21823489,21889025,22020097,22085633,22347777,22544385,22609921,22675457,22806529,23330817,23396353,23592961,23658497,23724034,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24576001,24641537,24707074,25231361],"time":[2162689,2752513,2818049,2883585,6160385,7208961,14221313,17760257,21954561,22347777,23003137,23068673,23265281],"task":[2228227,3538946,6553607,6619141,6684678,7208965,7274501,9764870,10420230,10813446,11468813,11534341,11599877,11665413,15925254,15990790,16121862,16252934,16384006,16449542,20840454,22020099,22413317,22740997,23986178,24379397,24838149],"try":[2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,22020097,22347777,22544385,22609921,22675457,22806529,23396353,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25231361],"tasks":[2228225,2686977,6684673,11468803,22020097,22937601],"tolistasync":[2686977,4259841,11534343,22937601,24903681],"tokens":[4587521],"taskawaiter":[4718597,5373957],"threading":[5832705,6029313,11468803],"typename":[6094850,6160386,6225922,6291458,6356994,6881282,7602177,8126465,8388609,9961474,10027010,10092546,10158082,11468801,11534337,11599873,11665409,11927553,11993089,21561346,21626882,21692417,21757953,21823490,22413314,22740994,22937601,23003137,23068673,23265281,23592961,23855106,24379394,24838146],"true":[7012362,11272193,11599876,14286850,15138817,15663105,17891329,17956865,18939905,21037057,22544386,23724033,24641537],"typeparam":[7602177,8126465,8388609,11468801,11534337,11599873,11665409,11927553,11993089,23265281,23592961],"types":[12320770,23658497,23789569],"trailers":[12320769,15400961,20185089,23658497,24051713],"thrown":[12320769,23920641],"targetsite":[15269889,23920641],"termination":[15335425,20840449,23986177],"transientfailure":[22282241],"typically":[24772610],"transaction":[24772609],"transient":[24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_117.json b/doc/ref/csharp/html/fti/FTI_117.json
new file mode 100644
index 0000000000..d53c17bcd0
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_117.json
@@ -0,0 +1 @@
+{"user":[196612,983042,1048578,15269889,22151172,23920641,24772609],"used":[196609,262145,1114113,1179649,1769473,1835009,1900545,1966081,2228225,2621441,3538945,3604481,4653057,4915201,5111809,5308417,5701633,6029314,6619137,7143425,8454146,9502722,9699329,10813441,11272193,12320770,13959170,14024706,14090241,14221314,14417921,14548994,14614530,14811138,15204354,16777217,16842753,16908289,17170433,17629185,17760257,17825793,18087937,18153474,19464193,19529729,21561345,21626881,21692417,21757953,21823490,21889026,22020098,22151169,22347778,22544385,22675457,22806530,23003138,23068674,23265283,23855106,23986177,24051713,24772610],"unused":[393217,1376257,9895937,10551297,24182785],"unless":[2228225,2818049,4259841,6553601,11272193,11599873,13434881,22020097,23068673,24903681],"unmanaged":[2686977,22937601],"unaryservermethod":[3866625,10158086,12320769,13172737,24313857,24838149],"utils":[4259841,4325377,4390913,11468805,11534340,11599878,11665413,11730949,11796482,11862018,11927555,11993091,12058626,12124162,12451841,13434881,13500417,13565953,13631489,21430273,24903683,24969219,25034755],"unit":[4653060,4718593,4784129,4849665,4915204,4980737,5046273,5111812,5177345,5242881,5308420,5373953,5439489,5505025,6619137,7077889,7143425,7274497,7405570,7471106,7536642,7602178,7667714,7733250,7798786,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8519682,8585217,8650753,8716292,8847362,8912898,9109506,9240578,9371650,9437185,9830401,10223617,10420225,10616834,10682369,10747906,10813441,10878978,11010049,11337730,11730945,11796481,11862017,12058625,12124161,22872065],"unsecure":[6750209,12648449,14352385,15466497,18022401,20381697,22020097,22675457,24117249],"unsigned":[8388610,8454146,8585217,8978433,18743298,18808834,19136514],"unqualified":[9502721,14745601,15204353,18350081,19398657,23199745,23855105],"using":[11206657,11272193,12320769,13369345,21954561,24641537],"unthenticity":[11272193],"usage":[11468801,11534337,11599873,11665409],"uses":[12255233,21430273],"users":[12320769,21954561],"utilities":[12320769,12451841,21430273,23527425],"unary":[12320769,23789569,24838145],"utility":[12451842,24969217,25034753],"uri":[14090241,15400961,17498113,20054017,22020097,24051713],"useful":[14942209,18677761,20447233,23527425],"underlying":[15400961,20316161,24051713,24772609],"unknown":[24772610],"unauthenticated":[24772610],"unimplemented":[24772609],"unavailable":[24772610],"unrecoverable":[24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_118.json b/doc/ref/csharp/html/fti/FTI_118.json
new file mode 100644
index 0000000000..934344f41f
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_118.json
@@ -0,0 +1 @@
+{"value":[393217,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376258,1441793,1507329,1572865,1638401,2031617,2097155,3932162,4521985,4587521,4718593,4784129,4849665,4980737,5046273,5177345,5242881,5373953,5439489,5505025,5570562,5832706,5898242,5963778,6094849,6160385,6225921,6291457,6356993,6422530,6488066,6553601,6619137,6684673,6881281,7208961,7274497,7602177,8126465,8388609,8650758,8781825,8912897,8978434,9043975,9109505,9175041,9306113,9699329,9764865,9895937,9961473,10027009,10092545,10158081,10223617,10354689,10420225,10485762,10551298,10616833,10747905,10813441,11337729,11468801,11534337,11599873,11665409,11927553,11993089,12582914,13041666,13238274,14155778,14548993,14614529,14811137,15138820,15269890,15400961,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235970,17301505,17367042,17432577,17498113,17563649,17629185,17694721,17760258,17825794,17891329,17956865,18022401,18087937,18153475,18219010,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939906,19005441,19070983,19136514,19202049,19267586,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250626,20316163,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21823490,21889028,22085636,22216707,22282241,22413313,22478849,22740993,23003137,23068673,23265281,23592961,23724039,23789569,23920642,24051713,24182785,24379393,24444930,24707073,24772610,24838145,25165825],"versioninfo":[524291,1572866,12320769,25100295],"version":[524289,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572866,1638401,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,12320769,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100291,25165825,25231361],"val":[655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401],"valuetype":[2031619,2097155,3211267,3342339,4194307,21823491,21889027,23592963,23724035,24707075],"values":[2031617,2097155,5570561,5832705,5898241,5963777,15728641,21299201,21823489,21889027,24707073],"void":[4653058,4915202,5111810,5308418,7143426,7405570,7471106,7536642,7667714,7733250,7798786,7929858,7995394,8060930,8192002,8257538,8323074,8519682,8585218,8650754,8716290,8847362,9240578,9371650,10682370,10878978,11730946,11796482,11862018,12058626,12124162,17760257,17825793,18153473,18219009,19267585,20250625,20316161,22872066],"virtual":[4653057,4915201,5111809,5308417,7405569,7471105,7536641,7602177,7667713,7733249,7798785,8519681,8716289,8781825,8847361,8912897,9109505,9175041,9240577,9306113,9371649,10616833,10747905,11337729,18874369,19202049,19267585,19333121,19398657,19595265,19660801],"valuebytes":[8585222,8978437,15138817,19136517,23724033],"valued":[8978433,9043969],"variable":[11010049,13303809,24576001],"visual":[11468802,11534338,11599874,11665410],"various":[12451841,21430273],"valid":[24772610]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_119.json b/doc/ref/csharp/html/fti/FTI_119.json
new file mode 100644
index 0000000000..ee9112dc18
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_119.json
@@ -0,0 +1 @@
+{"writeoptions":[589827,1638407,4456451,6029324,12189702,12320769,14024705,14548993,14614529,14680065,14811137,15400961,15794179,17170443,18153484,18219020,20316172,21364738,21889025,23003137,23068673,23134209,23265281,24051713,25231369],"write":[589825,1638401,2752513,2818050,2883585,6029313,7208961,7274497,12189697,12320771,14024705,14548994,14614530,14680065,14811138,15400962,15794177,17170433,18153474,18219009,20316162,21364737,21889025,23003139,23068676,23134210,23265283,24051714,25165829,25231363],"withoptions":[2031617,5570566,21823489],"withcancellationtoken":[2097153,5832709,21889025],"withdeadline":[2097153,5898245,21889025],"withheaders":[2097153,5963781,21889025],"waits":[2228225,6619137,22020097],"waitforstatechangedasync":[2228225,6684679,22020097],"wide":[2621441,7143425,14417921,18087937,22806530],"writeasync":[2752513,2818049,2883585,7208965,23003137,23068673,23265281],"writes":[2752513,2818051,2883586,4259842,7208961,7274497,11599873,11665409,13434882,14548993,14614529,14811137,18153473,23003138,23068676,23265283,24903682],"writeallasync":[2818049,2883585,4259842,11599882,11665417,13434883,23068673,23265281,24903682],"warning":[3014660,3080196,7733260,7798795,8257546,8323081,12779525,12910597,23396356,23461892],"writeresponseheadersasync":[3604482,9764870,24051714],"written":[3604481,7208961,9764866,24051713],"writing":[3604481,9764865,24051713],"warmup":[4325377,11730945,24969217],"wish":[11206657,13369345,24641537],"warmupiterations":[11730950],"writeflags":[12189701,12320769,21364742,25165829],"wrappers":[12255233,21430273],"writable":[12320771,23003137,23068673,23265281],"work":[12451841,22282241,24903681],"whatsoever":[14352385,15466497,18022401,20381697,22675457,24117249],"wire":[25165825]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_122.json b/doc/ref/csharp/html/fti/FTI_122.json
new file mode 100644
index 0000000000..6a0eef704a
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_122.json
@@ -0,0 +1 @@
+{"zero":[9895937,10551297]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_97.json b/doc/ref/csharp/html/fti/FTI_97.json
new file mode 100644
index 0000000000..2a75124bdf
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_97.json
@@ -0,0 +1 @@
+{"automatically":[1,9895937,10551297,20447233],"authority":[196609,720897,22151169],"allow":[196609,851969,15335425,20840449,22151169,23986177],"agent":[196612,983042,1048578,22151172],"added":[393217,1376257,24182785],"assembly":[655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020097,22085633,22151169,22216705,22282241,22347777,22413313,22478849,22544385,22609921,22675457,22740993,22806529,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396353,23461889,23527425,23592961,23658497,23724033,23789569,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24379393,24444929,24510465,24576001,24641537,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231361],"authinterceptors":[1703939,4521986,4587522,12255233,21495815],"access":[1703938,4521986,4587522,6094849,6160385,6225921,6291457,13697025,13762561,13828097,13893633,15990785,16121857,16252929,16449537,21495810,21561345,21626881,21692417,21757953],"authorization":[1703937,4521985,12255233,21495810],"auth":[1703937,4521988,4587524,12255235,21430275,21495813],"asyncclientstreamingcall":[1769475,2162689,4653058,4718594,4784130,4849666,6094858,12320769,13697027,15859714,15925250,15990786,21561351,21954561],"async":[1769473,1835009,1900545,1966081,2686977,4259841,4653057,4915201,5111809,5308417,11468801,13697025,13762562,13828097,15859713,16056321,16187393,16318465,21561346,21626883,21692418,21757953,22937601,24903681],"associated":[1769473,1835009,1900545,1966081,2686977,3014659,3080195,4653057,4915201,5111809,5308417,7471105,7602177,7733249,7864321,7995393,8126465,8257537,9568257,9633793,12320769,12713985,12779521,12845057,12910593,13107202,13959169,14221313,15269889,16515073,17694721,21561345,21626881,21692417,21757953,21823489,22347777,22937601,23396356,23461891,23920644],"allows":[1769473,1966081,2228226,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,4718593,5373953,6553601,12320770,15400961,20316161,21561345,21757953,22020098,22347777,22544385,22609922,22675457,22806529,23134209,23396353,23855105,23920641,23986177,24051714,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25231361],"awaiting":[1769473,1966081,4718593,5373953,15335425,20840449,21561345,21757953,23986177],"asyncduplexstreamingcall":[1835011,2162689,4915202,4980738,5046274,6160394,12320769,13762563,16056322,16121858,16187394,21626887,21954561],"asyncserverstreamingcall":[1900547,2162689,5111810,5177346,5242882,6225930,12320769,13828099,16252930,16318466,21692423,21954561],"asyncunarycall":[1966083,2162689,5308418,5373954,5439490,5505026,6291466,12320769,13893635,16384002,16449538,21757959,21954561],"asynchronously":[2162692,2752513,2818049,2883585,3604481,6094849,6160385,6225921,6291457,7208961,9764865,21954564,23003137,23068673,23265281,24051713],"active":[2228225,6619137,22020097],"application":[2621441,2686977,7143425,12386305,14417921,15269889,18087937,21430273,22806530,22937601,23920641],"action":[2686977,4259841,11468801,11730958,22937601,24903681],"asyncstreamextensions":[2686978,2818049,2883585,4259843,11468805,11534340,11599878,11665413,12451841,13434882,22937602,23068673,23265281,24903687],"add":[3276803,3932162,3997697,8519690,8585225,8650761,10485767,10551302,10682374,12976132,13238275,23658499,24444930,24510465],"addmethod":[3866628,9961478,10027014,10092550,10158086,13172741,24313860],"adds":[3866628,3932162,3997697,9961473,10027009,10092545,10158081,10485761,10551297,10682369,13172740,13238274,24313860,24444930,24510465],"argumentexception":[4390914,11796481,11862017,13500418,25034754],"argumentnullexception":[4390914,11927553,11993089,13565954,25034754],"accesstoken":[4521989],"abstract":[4653057,4915201,5111809,5308417,7208961,7274497,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8519681,8716289,8781825,8847361,8912897,9109505,9175041,9240577,9306113,9371649,10616833,10747905,11337729,18153473,18219009,18284545,18350081,18415617,18481153,18874369,19202049,19267585,19333121,19398657,19595265,19660801,21495809,21954561,22151169,22347778,22675458,23527425,24117250,24903681,24969217,25034753,25100289],"awaitable":[6094849,6291457],"asynchronous":[6160385,6225921,13697026,13762561,13828097,13893634,15925249,15990785,16121857,16252929,16384001,16449537,21561346,21626881,21692417,21757954],"address":[6815745,14090241,15400961,17498113,20054017,22020097,24051713,24772610],"array":[7405569,7471105,7536641,7667713,7733249,7798785,7929857,7995393,8060929,8192001,8257537,8323073,8388610,8454146,8585217,8847368,8978433,18743298,18808834,19136514],"arrayindex":[8847367],"ascii":[9043970,13041665,23724033],"allowed":[9043969],"autheticate":[11206657,13369345,24641537],"authenticate":[11272193],"asyncaction":[11468806],"authentication":[12255233,21430273,24772609],"apis":[12255233,21430273,24772609],"autogenerated":[12255233,12320769,21495809,24248321],"abstraction":[12320769,22020097],"accessible":[12320769,22609921],"arbitrary":[12320769,23789569,23986177],"additional":[15269889,23920641],"assigned":[15269889,23920641],"adding":[15335426,20709377,20774913,23986178],"authenticity":[15663105,21037057,24641537],"actually":[20447233],"abstractclassattribute":[21495809,21954561,22151169,22347777,22675457,23527425,24117249,24903681,24969217,25034753,25100289],"authuri":[22872069],"argument":[24772609],"arguments":[24772609],"alreadyexists":[24772609],"attempted":[24772610],"applied":[24772609],"aborted":[24772610],"aborts":[24772609]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_98.json b/doc/ref/csharp/html/fti/FTI_98.json
new file mode 100644
index 0000000000..aa09b59f12
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_98.json
@@ -0,0 +1 @@
+{"binaryheadersuffix":[327681,1245189,23658497],"binary":[327681,1245185,8978434,9043969,13041665,15138818,18939905,19136513,23658497,23724035],"bound":[393217,1376257,20447233,24182785],"boundport":[393217,1376257,15532033,20447238,24182786],"blockingunarycall":[2162689,6356997,21954561],"blocking":[2162689,6356993,21954561],"byte":[3276801,8388622,8454152,8585224,8978437,12976129,13041665,18743300,18808836,19136516,23658497,23724033],"builder":[3801089,3866628,9961480,10027016,10092552,10158088,10223619,10289158,10354695,12320770,13172738,24248321,24313867],"bidirectional":[3866625,10027009,12320769,13172737,21626881,24313857],"build":[3866625,10223621,24313857],"boolean":[4259841,4390916,7012356,8781826,9306114,11272195,11599879,11796483,11862019,12058627,12124163,13369345,13434881,13500418,13631490,17891330,17956866,18939906,19202050,21037058,24641537,24903681,25034756],"benchmarkutil":[4325379,11730949,12451841,24969223],"benchmark":[4325377,11730945,24969217],"bool":[7012358,8781828,9306116,11272195,11599875,11796483,11862019,12058627,12124163,17891332,17956868,18939908,19202053,21037060],"bytes":[8978433],"belongs":[9502721,14745601,15204353,18415617,19595265,23199745,23855105,24772609],"basic":[11468802,11534338,11599874,11665410],"benchmarkiterations":[11730950],"based":[12255233,12320771,14745601,15204353,18284545,19333121,21430273,22282241,22478849,23199745,23855105,24772609],"buffer":[12320769,21954561,25165826],"base":[12320769,22347777],"backend":[12320770,22609922],"beginning":[12320770,14024705,17039361,21889025,23658498],"bindservice":[12320769,24248321],"buffers":[12320769,24248321],"bidi":[12320769,22740993],"backed":[15400961,20316161,24051713],"broken":[24772610],"backoff":[24772609],"bufferhint":[25165825],"buffered":[25165826]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_99.json b/doc/ref/csharp/html/fti/FTI_99.json
new file mode 100644
index 0000000000..a53458d4f3
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_99.json
@@ -0,0 +1 @@
+{"create":[131073,3145729,8388616,10944513,12255233,14090241,17629185,21495809,22020097,23527425,23920641,23986177,24772609],"contains":[131073,3276801,5701633,5767169,8781833,12320769,21430273,23658497,23920641],"class":[131073,196609,262145,327681,393217,524289,589825,655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1572865,1638401,1703937,1769473,1835009,1900545,1966081,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2949121,3014657,3145729,3276801,3407873,3473411,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4259841,4325377,4390913,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,6094855,6160391,6225927,6291463,6356999,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881287,6946818,7012353,7077890,7143425,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,8388609,8519681,8585217,8650753,8716289,8781825,8847361,9109505,9175041,9240577,9306113,9371649,9437185,9502722,9568257,9633793,9699329,9764865,9830402,9895937,9961481,10027017,10092553,10158089,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11468804,11534340,11599876,11665412,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189698,12255233,12320772,12386305,12451841,12582913,12648449,12713985,12779521,12976129,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,14090241,14155777,14221313,14286849,14352385,14417921,14876673,14942209,15073281,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15794177,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18546689,18612225,18677761,18874369,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21364737,21495813,21561349,21626885,21692421,21757957,21823489,21889025,21954566,22020101,22085637,22151173,22216705,22282241,22347783,22413318,22478849,22544389,22609925,22675462,22740998,22806533,22937601,23003137,23068673,23134209,23199745,23265281,23330821,23396357,23461889,23527429,23592961,23658501,23724033,23789569,23855110,23920647,23986181,24051717,24117254,24182789,24248325,24313862,24379398,24444933,24510469,24576005,24641541,24707073,24772609,24838150,24903685,24969221,25034757,25100293,25165825,25231366],"core":[131073,196609,262145,327681,393217,458753,524289,589825,655364,720900,786436,851972,917508,983044,1048580,1114116,1179652,1245188,1310724,1376260,1441796,1507332,1572868,1638404,1769473,1835009,1900545,1966081,2031617,2097153,2162689,2228225,2293761,2359297,2424833,2490369,2555905,2621441,2686977,2752513,2818049,2883585,2949121,3014657,3080193,3145729,3211265,3276801,3342337,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4063233,4128769,4194305,4259841,4325377,4390913,4456449,4653060,4718596,4784132,4849668,4915204,4980740,5046276,5111812,5177348,5242884,5308420,5373956,5439492,5505028,5570567,5636103,5701639,5767176,5832708,5898244,5963781,6029319,6094853,6160389,6225925,6291461,6356997,6422532,6488068,6553604,6619140,6684681,6750213,6815749,6881286,6946821,7012356,7077892,7143431,7208964,7274500,7340036,7405574,7471111,7536646,7602181,7667718,7733255,7798790,7864324,7929862,7995399,8060934,8126469,8192006,8257543,8323078,8388615,8454148,8519689,8585223,8650759,8716293,8781833,8847371,8912900,8978436,9043972,9109509,9175049,9240587,9306121,9371654,9437188,9502727,9568261,9633797,9699335,9764869,9830404,9895941,9961478,10027014,10092550,10158086,10223620,10289156,10354692,10420228,10485767,10551301,10616836,10682375,10747908,10813444,10878980,10944516,11010052,11075589,11141125,11206660,11272196,11337732,11403269,11468811,11534345,11599885,11665419,11730951,11796484,11862020,11927557,11993093,12058628,12124164,12189701,12320771,12386305,12451841,12517377,12582913,12648449,12713985,12779521,12845057,12910593,12976129,13041665,13107201,13172737,13238273,13303809,13369345,13434881,13500417,13565953,13631489,13697025,13762561,13828097,13893633,13959169,14024705,14090241,14155777,14221313,14286849,14352385,14417921,14483457,14548993,14614529,14680065,14745601,14811137,14876673,14942209,15007745,15073281,15138817,15204353,15269889,15335425,15400961,15466497,15532033,15597569,15663105,15728641,15794177,15859716,15925252,15990788,16056324,16121860,16187396,16252932,16318468,16384004,16449540,16515076,16580612,16646148,16711684,16777220,16842756,16908292,16973828,17039364,17104900,17170436,17235972,17301508,17367044,17432580,17498116,17563652,17629188,17694724,17760260,17825796,17891332,17956868,18022404,18087940,18153476,18219012,18284548,18350084,18415620,18481156,18546692,18612228,18677764,18743300,18808836,18874373,18939908,19005444,19070980,19136516,19202053,19267589,19333124,19398660,19464196,19529732,19595268,19660804,19726340,19791876,19857412,19922948,19988484,20054020,20119556,20185092,20250628,20316164,20381700,20447237,20512773,20578309,20643845,20709380,20774916,20840452,20905988,20971524,21037060,21102596,21168132,21233668,21299204,21364740,21430275,21561349,21626885,21692421,21757957,21823492,21889028,21954565,22020101,22085637,22151173,22216708,22282244,22347781,22413318,22478852,22544389,22609925,22675462,22740999,22806533,22872070,22937604,23003140,23068676,23134212,23199748,23265285,23330821,23396357,23461892,23527429,23592965,23658501,23724036,23789572,23855109,23920645,23986181,24051717,24117254,24182789,24248325,24313861,24379398,24444933,24510469,24576006,24641542,24707076,24772612,24838149,24903685,24969221,25034757,25100293,25165828,25231365],"channeloptions":[196611,655362,720898,786434,851970,917506,983042,1048578,1114114,12320769,22151175],"census":[196610,655366,22151170],"collection":[196609,655361,2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932162,3997698,4128769,4456449,10616833,10747905,12320771,15269889,15335426,20709377,20774913,22020097,22151169,22347777,22544385,22609921,22675457,22806529,23396353,23658497,23855105,23920642,23986179,24051713,24117249,24182785,24248321,24313857,24444931,24510467,24641537,25231361],"calls":[196609,720897,2162691,2228225,3538946,6094850,6160386,6225922,6291458,6356994,6619137,10420225,10813441,12320778,12451841,15400961,20316161,21561345,21626881,21692417,21889025,21954569,22020098,22151169,22609922,23986178,24051713,24903681],"concurrent":[196609,851969,22151169],"connection":[196609,851969,2228225,6553601,22020097,22151169],"channel":[196609,917505,2228233,5636108,5701644,5767180,6422529,6488065,6553605,6619140,6684677,6750220,6815753,6946827,10944513,12320779,12517379,12582914,12648456,13959170,14090245,14221314,14352385,16515084,17498114,17563651,17629187,17694732,18022401,21823493,22020121,22085636,22151170,22216706,22282246,22347778,22675458],"check":[196609,1114113,15663105,21037057,22151169,24641537,24772609],"contextpropagationoptions":[262147,1179655,2424835,7012357,9699334,12320769,14286851,17891330,17956866,22544392],"context":[262145,1179649,3604481,6029313,7012353,9699329,12320771,14024705,17104897,21889025,22413317,22544386,22609922,22740997,24051714,24379397,24838149],"containing":[327681,1310721,2686977,4259841,11075585,11141121,11534337,13303809,22937601,23658497,24576001,24903681],"choose":[393217,1376257,24182785],"contain":[393217,1376257,24182785],"cancelled":[458754,1441794,2228226,6553601,6684673,15400961,19791873,22020098,24051713,24707074,24772610],"currentversion":[524289,1572869,25100289],"current":[524289,1572865,1769475,1835011,1900547,1966083,2031617,2097153,2228228,2293763,2359300,2424836,2490372,2555908,2621444,2949123,3014660,3211265,3276803,3342338,3407876,3473412,3538948,3604485,3670020,3735556,3801092,3866628,3932164,3997700,4063235,4128772,4194306,4456452,8912897,9764865,11337729,12320769,14090241,14483457,15269891,17563649,21561347,21626883,21692419,21757955,21823489,21889025,22020101,22085635,22347780,22544388,22609924,22675460,22806532,22937601,23330819,23396356,23592961,23658499,23724034,23855108,23920647,23986180,24051717,24117252,24182788,24248324,24313860,24444932,24510468,24576003,24641540,24707074,25100290,25231364],"copy":[655361,720897,786433,851969,917505,983041,1048577,1114113,1179649,1245185,1310721,1376257,1441793,1507329,1572865,1638401,2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,4521985,4587521,4653057,4718593,4784129,4849665,4915201,4980737,5046273,5111809,5177345,5242881,5308417,5373953,5439489,5505025,5570561,5636097,5701633,5767169,5832705,5898241,5963777,6029313,6094849,6160385,6225921,6291457,6356993,6422529,6488065,6553601,6619137,6684673,6750209,6815745,6881281,6946817,7012353,7077889,7143425,7208961,7274497,7340033,7405569,7471105,7536641,7602177,7667713,7733249,7798785,7864321,7929857,7995393,8060929,8126465,8192001,8257537,8323073,8388609,8454145,8519681,8585217,8650753,8716289,8781825,8847361,8912897,8978433,9043969,9109505,9175041,9240577,9306113,9371649,9437185,9502721,9568257,9633793,9699329,9764865,9830401,9895937,9961473,10027009,10092545,10158081,10223617,10289153,10354689,10420225,10485761,10551297,10616833,10682369,10747905,10813441,10878977,10944513,11010049,11075585,11141121,11206657,11272193,11337729,11403265,11468801,11534337,11599873,11665409,11730945,11796481,11862017,11927553,11993089,12058625,12124161,12189697,15859713,15925249,15990785,16056321,16121857,16187393,16252929,16318465,16384001,16449537,16515073,16580609,16646145,16711681,16777217,16842753,16908289,16973825,17039361,17104897,17170433,17235969,17301505,17367041,17432577,17498113,17563649,17629185,17694721,17760257,17825793,17891329,17956865,18022401,18087937,18153473,18219009,18284545,18350081,18415617,18481153,18546689,18612225,18677761,18743297,18808833,18874369,18939905,19005441,19070977,19136513,19202049,19267585,19333121,19398657,19464193,19529729,19595265,19660801,19726337,19791873,19857409,19922945,19988481,20054017,20119553,20185089,20250625,20316161,20381697,20447233,20512769,20578305,20643841,20709377,20774913,20840449,20905985,20971521,21037057,21102593,21168129,21233665,21299201,21364737,21495809,21561345,21626881,21692417,21757953,21823489,21889025,21954561,22020098,22085633,22151169,22216705,22282241,22347778,22413313,22478849,22544386,22609922,22675458,22740993,22806530,22872065,22937601,23003137,23068673,23134209,23199745,23265281,23330817,23396354,23461889,23527425,23592961,23658497,23724033,23789569,23855106,23920642,23986178,24051714,24117250,24182786,24248322,24313858,24379393,24444930,24510466,24576001,24641538,24707073,24772609,24838145,24903681,24969217,25034753,25100289,25165825,25231362],"const":[655362,720898,786434,851970,917506,983042,1048578,1114114,1245186,1376258,1572866],"creates":[1703938,2228225,2359298,2424833,2490369,2555905,2621441,2686977,3014657,3145729,3407873,3473410,3538945,3604482,3670017,3735553,3801090,3866626,3932161,3997697,4128769,4259841,4456449,4521985,4587521,6029313,6422529,6488065,6750209,6815745,6881281,7012353,7340033,7864321,8388609,9568257,9633793,9699329,9895937,10223617,10289153,10354689,11010049,11075585,11141121,11206657,11272193,11403265,11534337,12582914,12648450,13107202,13303811,13369346,21495810,21889025,22020099,22085634,22347778,22544386,22609921,22675457,22806529,22937601,23330817,23396354,23527425,23855105,23920644,23986177,24051714,24117249,24182786,24248322,24313859,24444929,24510465,24576003,24641539,24707073,24903681,25231361],"credential":[1703937,4587527,14352385,15466497,18022401,20381697,21495809,22675457,24117249],"cleanup":[1769473,1835009,1900545,1966081,2228225,2359297,2424833,2490369,2555905,2621441,3014657,3407873,3473409,3538945,3604481,3670017,3735553,3801089,3866625,3932161,3997697,4128769,4456449,4653057,4915201,5111809,5308417,21561345,21626881,21692417,21757953,22020097,22347777,22544385,22609921,22675457,22806529,23396353,23855105,23920641,23986177,24051713,24117249,24182785,24248321,24313857,24444929,24510465,24641537,25231361],"call":[1769482,1835017,1900553,1966090,2162693,2228225,2359297,3604484,3932161,3997697,4653062,4784130,4849666,4915205,4980738,5046274,5111813,5177346,5242882,5308422,5439490,5505026,5636099,5701635,5767170,6029316,6094856,6160392,6225928,6291464,6356999,6553601,6881283,6946817,7012354,9568257,9633793,9699330,9764866,10485761,10682369,11468802,11534338,11599874,11665410,12320788,13238273,13697025,13893633,13959170,14024709,14221313,14286850,15269890,15400961,15925249,16384001,16515073,16711681,16908289,16973825,17039361,17104897,17170433,17760257,17891329,17956865,19726337,19791873,21561357,21626891,21692426,21757965,21823493,21889029,21954565,22020098,22347778,22413313,22544386,22609922,22740993,22872065,23658501,23920644,24051718,24248321,24379393,24444929,24510465,24772609,24838145],"completed":[1769473,1835009,1966081,4653057,4915201,5308417,21561345,21626881,21757953,24772609],"cancellation":[1769473,1835009,1900545,1966081,4653057,4915201,5111809,5308417,5832705,6029313,7012353,12320769,14286849,15400961,17891329,19791873,21561345,21626881,21692417,21757953,22544385,22609921,24051713],"callinvocationdetails":[2031620,5570569,5636103,5701639,5767175,6094853,6160389,6225925,6291461,6356997,6881285,12320769,12517384,13959171,16515074,16580610,16646146,16711682,16777218,16842754,21823501],"code":[2031617,2097153,3211265,3342337,4194305,11403265,12320769,12451841,15728641,21299201,21823489,21889025,23592961,23724033,24248321,24707074,25034753],"calloptions":[2097158,5570566,5636102,5701638,5767174,5832712,5898248,5963784,6029318,6881285,12320769,12517379,14024707,16711686,16908290,16973826,17039362,17104898,17170434,21823491,21889035],"cancellationtoken":[2097153,5832715,6029324,14024705,15400961,16908299,19791883,21889026,24051713],"client":[2162693,3604481,3866625,6094851,6160385,6225921,9764865,9961473,11010049,11075585,11141121,11206658,11272195,12255234,12320780,13172737,13303811,13369346,14221314,15400963,15597570,15663106,17694721,17760257,20119553,20185089,20250625,20905986,21037057,21168129,21430273,21495810,21561345,21823489,21889025,21954566,22020097,22347779,22413313,22675457,23068673,23658497,23789572,24051716,24313857,24576006,24641540,24772609],"completely":[2162689,6160385,21954561,25165825],"connectasync":[2228225,6553605,22020097],"connect":[2228225,6553601,22020097],"completes":[2228226,2818050,4259841,6553601,6684673,7274497,11599873,13434881,22020098,23068674,24903681],"case":[2228225,6553601,22020097],"cleans":[2228225,3538945,6619137,10813441,22020097,23986177],"channeloption":[2293763,6422534,6488070,6750214,6815750,10944517,12320771,12582916,12648450,14155783,17235971,17301507,17367043,17432585,22020098,22085645,22216706],"clientbase":[2359299,6881282,6946822,12255233,12320769,14221315,17694722,17760258,17825794,21495809,22347785],"createcall":[2359297,6881285,22347777],"contextpropagationtoken":[2490371,6029317,9699333,12320770,17104902,22544385,22609927],"credentials":[2555907,6750220,6815756,7077894,9895942,10551302,11010049,11075585,11141121,11206657,11272193,12320773,12648450,13303811,13369346,14352387,15532033,18022408,20512775,22020098,22675466,24117249,24182785,24576009,24641539,24772609],"completeasync":[2818049,7274501,23068673],"closes":[2818049,7274497,23068673],"called":[2818049,3604481,7274497,9764865,13959169,15400962,16646145,19922945,19988481,21823489,23068673,24051715],"calling":[2818049,7274497,23068673],"close":[2818049,4259841,11599873,12320769,13434881,23068674,24903681],"consolelogger":[3014659,7405572,7471109,7536644,7602179,7667716,7733253,7798788,7864325,12386305,12713986,12779522,23396360],"clear":[3276801,8716296,23658497],"copyto":[3276801,8847370,23658497],"cause":[3473409,23920641],"cancelling":[3538945,10420225,14024705,16908289,21889025,23986177],"complete":[3538946,10420225,10813441,11599880,23986178,24772609],"createpropagationtoken":[3604481,9699334,24051713],"child":[3604481,7012354,9699329,12320770,14286850,17891329,17956865,22544386,22609922,24051713],"createbuilder":[3801089,10354693,24248321],"clientstreamingservermethod":[3866625,9961478,12320769,13172737,22413317,24313857],"checkargument":[4390914,11796486,11862022,13500419,25034754],"condition":[4390916,11796487,11862023,12058631,12124167,13500418,13631490,24772609,25034756],"checknotnull":[4390914,11927559,11993095,13565955,25034754],"checkstate":[4390914,12058630,12124166,13631491,25034754],"constructor":[5636097,5701633,5767169,6029313,6422529,6488065,6750209,6815745,6946817,7012353,7077889,7340033,7864321,8454145,8978433,9043969,9437185,9502721,9568257,9633793,9830401,9895937,10289153,10944513,11010049,11075585,11141121,11206658,11272193,11403265,12189697,12517377,12582913,12648449,13041665,13107201,13303809,13369346,24641537],"channelstate":[6684679,12320769,17563654,22282245],"connects":[6750209,6815745,12648450,22020098],"collections":[6750209,6815745,10944513,11206657,11272193,11599877,11665412],"cal":[7012354,14286850,17891329,17956865,22544386],"customlogger":[7143430],"certificate":[7340034,11141121,12320769,14876673,15597570,15663105,18546689,20905986,21102593,23330819,24576002,24641537],"chain":[7340034,14876673,18546689,23330818],"certificatechain":[7340037,14876673,18546693,23330817],"console":[7864321,12386305,23396354],"char":[8388610,8454146,8585217,8978433,18743298,18808834,19136514],"characters":[9043969],"chosen":[9895937,10551297],"certificates":[11010049,11075585,11141121,11206658,11272194,13303810,13369345,15597569,15663105,20971521,21168129,24576003,24641538],"ctor":[11075585],"currently":[12255233,21430273,24772609],"consists":[12255233,12320769,21430273,24707073],"classes":[12255234,12320769,12386305,12451841,21495809],"created":[12255233,12320769,21495809,24248321],"concepts":[12320769,21430273],"clients":[12320769,21954561],"channels":[12320769,22020097],"connections":[12320769,22020097],"creating":[12320771,14352385,15466497,18022401,20381697,22020097,22085633,22675457,23527425,24117249],"compared":[12320769,22020097],"corresponds":[12320769,22085633],"contexts":[12320769,22609921],"creation":[12320769,22675457],"capability":[12320769,23068673],"connectivity":[12320769,14090241,17563649,22020097,22282241],"compressionlevel":[12320769,22478853],"compression":[12320770,22478854,25165825],"checking":[12451841,25034753],"custom":[14221313,17760257,22347777],"count":[15073281,18874376,23658497],"coded":[15269889,23920641],"caused":[15269889,23920641,24772609],"causes":[15269889,23920641],"convenience":[15400961,20316161,24051713],"constructors":[21823489,21889025,22020097,22085633,22347777,22544385,22675457,23330817,23396353,23592961,23658497,23724033,23855105,23920641,23986177,24117249,24182785,24313857,24576001,24641537,24707073,25231361],"connecting":[22282242],"clientstreaming":[23789569],"caller":[24772611],"converted":[24772609],"change":[24772609],"concurrency":[24772609],"corrected":[24772609],"corruption":[24772609],"completion":[25165825]} \ No newline at end of file
diff --git a/doc/ref/csharp/html/fti/FTI_Files.json b/doc/ref/csharp/html/fti/FTI_Files.json
new file mode 100644
index 0000000000..7439f6f829
--- /dev/null
+++ b/doc/ref/csharp/html/fti/FTI_Files.json
@@ -0,0 +1 @@
+["gRPC C# - Redirect\u0000index.html\u000018","gRPC C# - Search\u0000search.html\u000012","RpcException Events\u0000html/Events_T_Grpc_Core_RpcException.htm\u000055","ChannelOptions Fields\u0000html/Fields_T_Grpc_Core_ChannelOptions.htm\u0000111","ContextPropagationOptions Fields\u0000html/Fields_T_Grpc_Core_ContextPropagationOptions.htm\u000039","Metadata Fields\u0000html/Fields_T_Grpc_Core_Metadata.htm\u000047","ServerPort Fields\u0000html/Fields_T_Grpc_Core_ServerPort.htm\u000060","Status Fields\u0000html/Fields_T_Grpc_Core_Status.htm\u000057","VersionInfo Fields\u0000html/Fields_T_Grpc_Core_VersionInfo.htm\u000032","WriteOptions Fields\u0000html/Fields_T_Grpc_Core_WriteOptions.htm\u000032","ChannelOptions.Census Field\u0000html/F_Grpc_Core_ChannelOptions_Census.htm\u000082","ChannelOptions.DefaultAuthority Field\u0000html/F_Grpc_Core_ChannelOptions_DefaultAuthority.htm\u000080","ChannelOptions.Http2InitialSequenceNumber Field\u0000html/F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm\u000081","ChannelOptions.MaxConcurrentStreams Field\u0000html/F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm\u000087","ChannelOptions.MaxMessageLength Field\u0000html/F_Grpc_Core_ChannelOptions_MaxMessageLength.htm\u000083","ChannelOptions.PrimaryUserAgentString Field\u0000html/F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm\u000088","ChannelOptions.SecondaryUserAgentString Field\u0000html/F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm\u000088","ChannelOptions.SslTargetNameOverride Field\u0000html/F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm\u000087","ContextPropagationOptions.Default Field\u0000html/F_Grpc_Core_ContextPropagationOptions_Default.htm\u000088","Metadata.BinaryHeaderSuffix Field\u0000html/F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm\u000083","Metadata.Empty Field\u0000html/F_Grpc_Core_Metadata_Empty.htm\u000087","ServerPort.PickUnused Field\u0000html/F_Grpc_Core_ServerPort_PickUnused.htm\u0000105","Status.DefaultCancelled Field\u0000html/F_Grpc_Core_Status_DefaultCancelled.htm\u000089","Status.DefaultSuccess Field\u0000html/F_Grpc_Core_Status_DefaultSuccess.htm\u000089","VersionInfo.CurrentVersion Field\u0000html/F_Grpc_Core_VersionInfo_CurrentVersion.htm\u000079","WriteOptions.Default Field\u0000html/F_Grpc_Core_WriteOptions_Default.htm\u000081","AuthInterceptors Methods\u0000html/Methods_T_Grpc_Auth_AuthInterceptors.htm\u000065","AsyncClientStreamingCall(TRequest, TResponse) Methods\u0000html/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm\u0000215","AsyncDuplexStreamingCall(TRequest, TResponse) Methods\u0000html/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm\u0000209","AsyncServerStreamingCall(TResponse) Methods\u0000html/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm\u0000196","AsyncUnaryCall(TResponse) Methods\u0000html/Methods_T_Grpc_Core_AsyncUnaryCall_1.htm\u0000208","CallInvocationDetails(TRequest, TResponse) Methods\u0000html/Methods_T_Grpc_Core_CallInvocationDetails_2.htm\u0000132","CallOptions Methods\u0000html/Methods_T_Grpc_Core_CallOptions.htm\u0000162","Calls Methods\u0000html/Methods_T_Grpc_Core_Calls.htm\u0000160","Channel Methods\u0000html/Methods_T_Grpc_Core_Channel.htm\u0000258","ChannelOption Methods\u0000html/Methods_T_Grpc_Core_ChannelOption.htm\u000095","ClientBase Methods\u0000html/Methods_T_Grpc_Core_ClientBase.htm\u0000154","ContextPropagationOptions Methods\u0000html/Methods_T_Grpc_Core_ContextPropagationOptions.htm\u0000142","ContextPropagationToken Methods\u0000html/Methods_T_Grpc_Core_ContextPropagationToken.htm\u0000142","Credentials Methods\u0000html/Methods_T_Grpc_Core_Credentials.htm\u0000142","GrpcEnvironment Methods\u0000html/Methods_T_Grpc_Core_GrpcEnvironment.htm\u0000155","IAsyncStreamReader(T) Methods\u0000html/Methods_T_Grpc_Core_IAsyncStreamReader_1.htm\u0000113","IAsyncStreamWriter(T) Methods\u0000html/Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm\u000047","IClientStreamWriter(T) Methods\u0000html/Methods_T_Grpc_Core_IClientStreamWriter_1.htm\u0000113","IServerStreamWriter(T) Methods\u0000html/Methods_T_Grpc_Core_IServerStreamWriter_1.htm\u000079","KeyCertificatePair Methods\u0000html/Methods_T_Grpc_Core_KeyCertificatePair.htm\u000095","ConsoleLogger Methods\u0000html/Methods_T_Grpc_Core_Logging_ConsoleLogger.htm\u0000234","ILogger Methods\u0000html/Methods_T_Grpc_Core_Logging_ILogger.htm\u0000119","Marshallers Methods\u0000html/Methods_T_Grpc_Core_Marshallers.htm\u000038","Marshaller(T) Methods\u0000html/Methods_T_Grpc_Core_Marshaller_1.htm\u0000100","Metadata Methods\u0000html/Methods_T_Grpc_Core_Metadata.htm\u0000118","Entry Methods\u0000html/Methods_T_Grpc_Core_Metadata_Entry.htm\u000099","Method(TRequest, TResponse) Methods\u0000html/Methods_T_Grpc_Core_Method_2.htm\u0000153","RpcException Methods\u0000html/Methods_T_Grpc_Core_RpcException.htm\u0000199","Server Methods\u0000html/Methods_T_Grpc_Core_Server.htm\u0000198","ServerCallContext Methods\u0000html/Methods_T_Grpc_Core_ServerCallContext.htm\u0000211","ServerCredentials Methods\u0000html/Methods_T_Grpc_Core_ServerCredentials.htm\u0000142","ServerPort Methods\u0000html/Methods_T_Grpc_Core_ServerPort.htm\u0000142","ServerServiceDefinition Methods\u0000html/Methods_T_Grpc_Core_ServerServiceDefinition.htm\u0000152","Builder Methods\u0000html/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm\u0000261","ServerPortCollection Methods\u0000html/Methods_T_Grpc_Core_Server_ServerPortCollection.htm\u0000215","ServiceDefinitionCollection Methods\u0000html/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm\u0000181","SslCredentials Methods\u0000html/Methods_T_Grpc_Core_SslCredentials.htm\u000095","SslServerCredentials Methods\u0000html/Methods_T_Grpc_Core_SslServerCredentials.htm\u0000142","Status Methods\u0000html/Methods_T_Grpc_Core_Status.htm\u000096","AsyncStreamExtensions Methods\u0000html/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm\u0000113","BenchmarkUtil Methods\u0000html/Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm\u000038","Preconditions Methods\u0000html/Methods_T_Grpc_Core_Utils_Preconditions.htm\u000096","WriteOptions Methods\u0000html/Methods_T_Grpc_Core_WriteOptions.htm\u0000142","AuthInterceptors.FromAccessToken Method\u0000html/M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm\u0000129","AuthInterceptors.FromCredential Method\u0000html/M_Grpc_Auth_AuthInterceptors_FromCredential.htm\u0000145","AsyncClientStreamingCall(TRequest, TResponse).Dispose Method\u0000html/M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm\u0000161","AsyncClientStreamingCall(TRequest, TResponse).GetAwaiter Method\u0000html/M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm\u0000108","AsyncClientStreamingCall(TRequest, TResponse).GetStatus Method\u0000html/M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm\u0000101","AsyncClientStreamingCall(TRequest, TResponse).GetTrailers Method\u0000html/M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm\u0000104","AsyncDuplexStreamingCall(TRequest, TResponse).Dispose Method\u0000html/M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm\u0000162","AsyncDuplexStreamingCall(TRequest, TResponse).GetStatus Method\u0000html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm\u0000101","AsyncDuplexStreamingCall(TRequest, TResponse).GetTrailers Method\u0000html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm\u0000104","AsyncServerStreamingCall(TResponse).Dispose Method\u0000html/M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm\u0000151","AsyncServerStreamingCall(TResponse).GetStatus Method\u0000html/M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm\u000096","AsyncServerStreamingCall(TResponse).GetTrailers Method\u0000html/M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm\u000099","AsyncUnaryCall(TResponse).Dispose Method\u0000html/M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm\u0000156","AsyncUnaryCall(TResponse).GetAwaiter Method\u0000html/M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm\u0000103","AsyncUnaryCall(TResponse).GetStatus Method\u0000html/M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm\u000096","AsyncUnaryCall(TResponse).GetTrailers Method\u0000html/M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm\u000099","CallInvocationDetails(TRequest, TResponse).WithOptions Method\u0000html/M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm\u0000186","CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)\u0000html/M_Grpc_Core_CallInvocationDetails_2__ctor.htm\u0000221","CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)\u0000html/M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm\u0000265","CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)\u0000html/M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm\u0000317","CallOptions.WithCancellationToken Method\u0000html/M_Grpc_Core_CallOptions_WithCancellationToken.htm\u0000127","CallOptions.WithDeadline Method\u0000html/M_Grpc_Core_CallOptions_WithDeadline.htm\u0000125","CallOptions.WithHeaders Method\u0000html/M_Grpc_Core_CallOptions_WithHeaders.htm\u0000128","CallOptions Constructor\u0000html/M_Grpc_Core_CallOptions__ctor.htm\u0000397","Calls.AsyncClientStreamingCall(TRequest, TResponse) Method\u0000html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm\u0000283","Calls.AsyncDuplexStreamingCall(TRequest, TResponse) Method\u0000html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm\u0000305","Calls.AsyncServerStreamingCall(TRequest, TResponse) Method\u0000html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm\u0000297","Calls.AsyncUnaryCall(TRequest, TResponse) Method\u0000html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm\u0000278","Calls.BlockingUnaryCall(TRequest, TResponse) Method\u0000html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm\u0000258","ChannelOption Constructor (String, Int32)\u0000html/M_Grpc_Core_ChannelOption__ctor.htm\u0000137","ChannelOption Constructor (String, String)\u0000html/M_Grpc_Core_ChannelOption__ctor_1.htm\u0000139","Channel.ConnectAsync Method\u0000html/M_Grpc_Core_Channel_ConnectAsync.htm\u0000229","Channel.ShutdownAsync Method\u0000html/M_Grpc_Core_Channel_ShutdownAsync.htm\u0000102","Channel.WaitForStateChangedAsync Method\u0000html/M_Grpc_Core_Channel_WaitForStateChangedAsync.htm\u0000266","Channel Constructor (String, Credentials, IEnumerable(ChannelOption))\u0000html/M_Grpc_Core_Channel__ctor.htm\u0000252","Channel Constructor (String, Int32, Credentials, IEnumerable(ChannelOption))\u0000html/M_Grpc_Core_Channel__ctor_1.htm\u0000270","ClientBase.CreateCall(TRequest, TResponse) Method\u0000html/M_Grpc_Core_ClientBase_CreateCall__2.htm\u0000283","ClientBase Constructor\u0000html/M_Grpc_Core_ClientBase__ctor.htm\u0000110","ContextPropagationOptions Constructor\u0000html/M_Grpc_Core_ContextPropagationOptions__ctor.htm\u0000205","Credentials Constructor\u0000html/M_Grpc_Core_Credentials__ctor.htm\u000076","GrpcEnvironment.SetLogger Method\u0000html/M_Grpc_Core_GrpcEnvironment_SetLogger.htm\u0000139","IAsyncStreamWriter(T).WriteAsync Method\u0000html/M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm\u0000125","IClientStreamWriter(T).CompleteAsync Method\u0000html/M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm\u0000101","KeyCertificatePair Constructor\u0000html/M_Grpc_Core_KeyCertificatePair__ctor.htm\u0000139","ConsoleLogger.Debug Method\u0000html/M_Grpc_Core_Logging_ConsoleLogger_Debug.htm\u0000238","ConsoleLogger.Error Method (Exception, String, Object[])\u0000html/M_Grpc_Core_Logging_ConsoleLogger_Error.htm\u0000320","ConsoleLogger.Error Method (String, Object[])\u0000html/M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm\u0000246","ConsoleLogger.ForType(T) Method\u0000html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm\u0000147","ConsoleLogger.Info Method\u0000html/M_Grpc_Core_Logging_ConsoleLogger_Info.htm\u0000238","ConsoleLogger.Warning Method (Exception, String, Object[])\u0000html/M_Grpc_Core_Logging_ConsoleLogger_Warning.htm\u0000320","ConsoleLogger.Warning Method (String, Object[])\u0000html/M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm\u0000246","ConsoleLogger Constructor\u0000html/M_Grpc_Core_Logging_ConsoleLogger__ctor.htm\u000081","ILogger.Debug Method\u0000html/M_Grpc_Core_Logging_ILogger_Debug.htm\u0000202","ILogger.Error Method (Exception, String, Object[])\u0000html/M_Grpc_Core_Logging_ILogger_Error.htm\u0000276","ILogger.Error Method (String, Object[])\u0000html/M_Grpc_Core_Logging_ILogger_Error_1.htm\u0000210","ILogger.ForType(T) Method\u0000html/M_Grpc_Core_Logging_ILogger_ForType__1.htm\u0000127","ILogger.Info Method\u0000html/M_Grpc_Core_Logging_ILogger_Info.htm\u0000202","ILogger.Warning Method (Exception, String, Object[])\u0000html/M_Grpc_Core_Logging_ILogger_Warning.htm\u0000276","ILogger.Warning Method (String, Object[])\u0000html/M_Grpc_Core_Logging_ILogger_Warning_1.htm\u0000210","Marshallers.Create(T) Method\u0000html/M_Grpc_Core_Marshallers_Create__1.htm\u0000390","Marshaller(T) Constructor\u0000html/M_Grpc_Core_Marshaller_1__ctor.htm\u0000229","Metadata.Add Method (Metadata.Entry)\u0000html/M_Grpc_Core_Metadata_Add.htm\u0000172","Metadata.Add Method (String, Byte[])\u0000html/M_Grpc_Core_Metadata_Add_1.htm\u0000220","Metadata.Add Method (String, String)\u0000html/M_Grpc_Core_Metadata_Add_2.htm\u0000199","Metadata.Clear Method\u0000html/M_Grpc_Core_Metadata_Clear.htm\u0000102","Metadata.Contains Method\u0000html/M_Grpc_Core_Metadata_Contains.htm\u0000173","Metadata.CopyTo Method\u0000html/M_Grpc_Core_Metadata_CopyTo.htm\u0000254","Metadata.Entry.ToString Method\u0000html/M_Grpc_Core_Metadata_Entry_ToString.htm\u0000107","Metadata.Entry Constructor (String, Byte[])\u0000html/M_Grpc_Core_Metadata_Entry__ctor.htm\u0000174","Metadata.Entry Constructor (String, String)\u0000html/M_Grpc_Core_Metadata_Entry__ctor_1.htm\u0000165","Metadata.GetEnumerator Method\u0000html/M_Grpc_Core_Metadata_GetEnumerator.htm\u0000143","Metadata.IndexOf Method\u0000html/M_Grpc_Core_Metadata_IndexOf.htm\u0000173","Metadata.Insert Method\u0000html/M_Grpc_Core_Metadata_Insert.htm\u0000229","Metadata.Remove Method\u0000html/M_Grpc_Core_Metadata_Remove.htm\u0000173","Metadata.RemoveAt Method\u0000html/M_Grpc_Core_Metadata_RemoveAt.htm\u0000155","Metadata Constructor\u0000html/M_Grpc_Core_Metadata__ctor.htm\u000076","Method(TRequest, TResponse) Constructor\u0000html/M_Grpc_Core_Method_2__ctor.htm\u0000270","RpcException Constructor (Status)\u0000html/M_Grpc_Core_RpcException__ctor.htm\u0000111","RpcException Constructor (Status, String)\u0000html/M_Grpc_Core_RpcException__ctor_1.htm\u0000145","ServerCallContext.CreatePropagationToken Method\u0000html/M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm\u0000177","ServerCallContext.WriteResponseHeadersAsync Method\u0000html/M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm\u0000174","ServerCredentials Constructor\u0000html/M_Grpc_Core_ServerCredentials__ctor.htm\u000076","ServerPort Constructor\u0000html/M_Grpc_Core_ServerPort__ctor.htm\u0000189","ServerServiceDefinition.Builder.AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))\u0000html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm\u0000310","ServerServiceDefinition.Builder.AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))\u0000html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm\u0000310","ServerServiceDefinition.Builder.AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))\u0000html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm\u0000310","ServerServiceDefinition.Builder.AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))\u0000html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm\u0000314","ServerServiceDefinition.Builder.Build Method\u0000html/M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm\u000095","ServerServiceDefinition.Builder Constructor\u0000html/M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm\u0000105","ServerServiceDefinition.CreateBuilder Method\u0000html/M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm\u0000131","Server.KillAsync Method\u0000html/M_Grpc_Core_Server_KillAsync.htm\u0000102","Server.ServerPortCollection.Add Method (ServerPort)\u0000html/M_Grpc_Core_Server_ServerPortCollection_Add.htm\u0000168","Server.ServerPortCollection.Add Method (String, Int32, ServerCredentials)\u0000html/M_Grpc_Core_Server_ServerPortCollection_Add_1.htm\u0000212","Server.ServerPortCollection.GetEnumerator Method\u0000html/M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm\u0000131","Server.ServiceDefinitionCollection.Add Method\u0000html/M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm\u0000153","Server.ServiceDefinitionCollection.GetEnumerator Method\u0000html/M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm\u0000131","Server.ShutdownAsync Method\u0000html/M_Grpc_Core_Server_ShutdownAsync.htm\u0000109","Server.Start Method\u0000html/M_Grpc_Core_Server_Start.htm\u000076","Server Constructor\u0000html/M_Grpc_Core_Server__ctor.htm\u0000155","SslCredentials Constructor\u0000html/M_Grpc_Core_SslCredentials__ctor.htm\u0000103","SslCredentials Constructor (String)\u0000html/M_Grpc_Core_SslCredentials__ctor_1.htm\u0000135","SslCredentials Constructor (String, KeyCertificatePair)\u0000html/M_Grpc_Core_SslCredentials__ctor_2.htm\u0000145","SslServerCredentials Constructor (IEnumerable(KeyCertificatePair))\u0000html/M_Grpc_Core_SslServerCredentials__ctor.htm\u0000152","SslServerCredentials Constructor (IEnumerable(KeyCertificatePair), String, Boolean)\u0000html/M_Grpc_Core_SslServerCredentials__ctor_1.htm\u0000213","Status.ToString Method\u0000html/M_Grpc_Core_Status_ToString.htm\u0000104","Status Constructor\u0000html/M_Grpc_Core_Status__ctor.htm\u0000130","AsyncStreamExtensions.ForEachAsync(T) Method\u0000html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm\u0000440","AsyncStreamExtensions.ToListAsync(T) Method\u0000html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm\u0000358","AsyncStreamExtensions.WriteAllAsync(T) Method (IClientStreamWriter(T), IEnumerable(T), Boolean)\u0000html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm\u0000541","AsyncStreamExtensions.WriteAllAsync(T) Method (IServerStreamWriter(T), IEnumerable(T))\u0000html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm\u0000428","BenchmarkUtil.RunBenchmark Method\u0000html/M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm\u0000243","Preconditions.CheckArgument Method (Boolean)\u0000html/M_Grpc_Core_Utils_Preconditions_CheckArgument.htm\u0000115","Preconditions.CheckArgument Method (Boolean, String)\u0000html/M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm\u0000150","Preconditions.CheckNotNull(T) Method (T)\u0000html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm\u0000169","Preconditions.CheckNotNull(T) Method (T, String)\u0000html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm\u0000202","Preconditions.CheckState Method (Boolean)\u0000html/M_Grpc_Core_Utils_Preconditions_CheckState.htm\u0000115","Preconditions.CheckState Method (Boolean, String)\u0000html/M_Grpc_Core_Utils_Preconditions_CheckState_1.htm\u0000150","WriteOptions Constructor\u0000html/M_Grpc_Core_WriteOptions__ctor.htm\u0000130","Grpc.Auth Namespace\u0000html/N_Grpc_Auth.htm\u000066","Grpc.Core Namespace\u0000html/N_Grpc_Core.htm\u0000823","Grpc.Core.Logging Namespace\u0000html/N_Grpc_Core_Logging.htm\u000039","Grpc.Core.Utils Namespace\u0000html/N_Grpc_Core_Utils.htm\u000048","CallInvocationDetails(TRequest, TResponse) Constructor\u0000html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm\u0000116","ChannelOption Constructor\u0000html/Overload_Grpc_Core_ChannelOption__ctor.htm\u000048","Channel Constructor\u0000html/Overload_Grpc_Core_Channel__ctor.htm\u000079","ConsoleLogger.Error Method\u0000html/Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm\u000054","ConsoleLogger.Warning Method\u0000html/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm\u000054","ILogger.Error Method\u0000html/Overload_Grpc_Core_Logging_ILogger_Error.htm\u000054","ILogger.Warning Method\u0000html/Overload_Grpc_Core_Logging_ILogger_Warning.htm\u000054","Metadata.Add Method\u0000html/Overload_Grpc_Core_Metadata_Add.htm\u000036","Entry Constructor\u0000html/Overload_Grpc_Core_Metadata_Entry__ctor.htm\u000062","RpcException Constructor\u0000html/Overload_Grpc_Core_RpcException__ctor.htm\u000048","Builder.AddMethod Method\u0000html/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm\u0000130","ServerPortCollection.Add Method\u0000html/Overload_Grpc_Core_Server_ServerPortCollection_Add.htm\u000086","SslCredentials Constructor\u0000html/Overload_Grpc_Core_SslCredentials__ctor.htm\u000082","SslServerCredentials Constructor\u0000html/Overload_Grpc_Core_SslServerCredentials__ctor.htm\u000064","AsyncStreamExtensions.WriteAllAsync Method\u0000html/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm\u000076","Preconditions.CheckArgument Method\u0000html/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm\u000047","Preconditions.CheckNotNull Method\u0000html/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm\u000048","Preconditions.CheckState Method\u0000html/Overload_Grpc_Core_Utils_Preconditions_CheckState.htm\u000047","AsyncClientStreamingCall(TRequest, TResponse) Properties\u0000html/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm\u000058","AsyncDuplexStreamingCall(TRequest, TResponse) Properties\u0000html/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm\u000061","AsyncServerStreamingCall(TResponse) Properties\u0000html/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm\u000046","AsyncUnaryCall(TResponse) Properties\u0000html/Properties_T_Grpc_Core_AsyncUnaryCall_1.htm\u000043","CallInvocationDetails(TRequest, TResponse) Properties\u0000html/Properties_T_Grpc_Core_CallInvocationDetails_2.htm\u000083","CallOptions Properties\u0000html/Properties_T_Grpc_Core_CallOptions.htm\u000072","Channel Properties\u0000html/Properties_T_Grpc_Core_Channel.htm\u000057","ChannelOption Properties\u0000html/Properties_T_Grpc_Core_ChannelOption.htm\u000063","ClientBase Properties\u0000html/Properties_T_Grpc_Core_ClientBase.htm\u0000108","ContextPropagationOptions Properties\u0000html/Properties_T_Grpc_Core_ContextPropagationOptions.htm\u000056","Credentials Properties\u0000html/Properties_T_Grpc_Core_Credentials.htm\u000049","GrpcEnvironment Properties\u0000html/Properties_T_Grpc_Core_GrpcEnvironment.htm\u000036","IAsyncStreamReader(T) Properties\u0000html/Properties_T_Grpc_Core_IAsyncStreamReader_1.htm\u000040","IAsyncStreamWriter(T) Properties\u0000html/Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm\u000064","IClientStreamWriter(T) Properties\u0000html/Properties_T_Grpc_Core_IClientStreamWriter_1.htm\u000072","IHasWriteOptions Properties\u0000html/Properties_T_Grpc_Core_IHasWriteOptions.htm\u000035","IMethod Properties\u0000html/Properties_T_Grpc_Core_IMethod.htm\u000080","IServerStreamWriter(T) Properties\u0000html/Properties_T_Grpc_Core_IServerStreamWriter_1.htm\u000072","KeyCertificatePair Properties\u0000html/Properties_T_Grpc_Core_KeyCertificatePair.htm\u000039","Marshallers Properties\u0000html/Properties_T_Grpc_Core_Marshallers.htm\u000041","Marshaller(T) Properties\u0000html/Properties_T_Grpc_Core_Marshaller_1.htm\u000043","Metadata Properties\u0000html/Properties_T_Grpc_Core_Metadata.htm\u000030","Entry Properties\u0000html/Properties_T_Grpc_Core_Metadata_Entry.htm\u000068","Method(TRequest, TResponse) Properties\u0000html/Properties_T_Grpc_Core_Method_2.htm\u0000109","RpcException Properties\u0000html/Properties_T_Grpc_Core_RpcException.htm\u0000203","Server Properties\u0000html/Properties_T_Grpc_Core_Server.htm\u000087","ServerCallContext Properties\u0000html/Properties_T_Grpc_Core_ServerCallContext.htm\u0000135","ServerCredentials Properties\u0000html/Properties_T_Grpc_Core_ServerCredentials.htm\u000050","ServerPort Properties\u0000html/Properties_T_Grpc_Core_ServerPort.htm\u000031","SslCredentials Properties\u0000html/Properties_T_Grpc_Core_SslCredentials.htm\u000056","SslServerCredentials Properties\u0000html/Properties_T_Grpc_Core_SslServerCredentials.htm\u000052","Status Properties\u0000html/Properties_T_Grpc_Core_Status.htm\u000050","WriteOptions Properties\u0000html/Properties_T_Grpc_Core_WriteOptions.htm\u000033","AsyncClientStreamingCall(TRequest, TResponse).RequestStream Property\u0000html/P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm\u0000126","AsyncClientStreamingCall(TRequest, TResponse).ResponseAsync Property\u0000html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm\u0000123","AsyncClientStreamingCall(TRequest, TResponse).ResponseHeadersAsync Property\u0000html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm\u0000135","AsyncDuplexStreamingCall(TRequest, TResponse).RequestStream Property\u0000html/P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm\u0000126","AsyncDuplexStreamingCall(TRequest, TResponse).ResponseHeadersAsync Property\u0000html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm\u0000135","AsyncDuplexStreamingCall(TRequest, TResponse).ResponseStream Property\u0000html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm\u0000126","AsyncServerStreamingCall(TResponse).ResponseHeadersAsync Property\u0000html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm\u0000130","AsyncServerStreamingCall(TResponse).ResponseStream Property\u0000html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm\u0000121","AsyncUnaryCall(TResponse).ResponseAsync Property\u0000html/P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm\u0000118","AsyncUnaryCall(TResponse).ResponseHeadersAsync Property\u0000html/P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm\u0000130","CallInvocationDetails(TRequest, TResponse).Channel Property\u0000html/P_Grpc_Core_CallInvocationDetails_2_Channel.htm\u0000109","CallInvocationDetails(TRequest, TResponse).Host Property\u0000html/P_Grpc_Core_CallInvocationDetails_2_Host.htm\u0000107","CallInvocationDetails(TRequest, TResponse).Method Property\u0000html/P_Grpc_Core_CallInvocationDetails_2_Method.htm\u0000110","CallInvocationDetails(TRequest, TResponse).Options Property\u0000html/P_Grpc_Core_CallInvocationDetails_2_Options.htm\u0000103","CallInvocationDetails(TRequest, TResponse).RequestMarshaller Property\u0000html/P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm\u0000124","CallInvocationDetails(TRequest, TResponse).ResponseMarshaller Property\u0000html/P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm\u0000124","CallOptions.CancellationToken Property\u0000html/P_Grpc_Core_CallOptions_CancellationToken.htm\u0000101","CallOptions.Deadline Property\u0000html/P_Grpc_Core_CallOptions_Deadline.htm\u0000121","CallOptions.Headers Property\u0000html/P_Grpc_Core_CallOptions_Headers.htm\u0000105","CallOptions.PropagationToken Property\u0000html/P_Grpc_Core_CallOptions_PropagationToken.htm\u0000102","CallOptions.WriteOptions Property\u0000html/P_Grpc_Core_CallOptions_WriteOptions.htm\u0000105","ChannelOption.IntValue Property\u0000html/P_Grpc_Core_ChannelOption_IntValue.htm\u000099","ChannelOption.Name Property\u0000html/P_Grpc_Core_ChannelOption_Name.htm\u0000103","ChannelOption.StringValue Property\u0000html/P_Grpc_Core_ChannelOption_StringValue.htm\u0000103","ChannelOption.Type Property\u0000html/P_Grpc_Core_ChannelOption_Type.htm\u0000105","Channel.ResolvedTarget Property\u0000html/P_Grpc_Core_Channel_ResolvedTarget.htm\u0000105","Channel.State Property\u0000html/P_Grpc_Core_Channel_State.htm\u000099","Channel.Target Property\u0000html/P_Grpc_Core_Channel_Target.htm\u0000104","ClientBase.Channel Property\u0000html/P_Grpc_Core_ClientBase_Channel.htm\u0000101","ClientBase.HeaderInterceptor Property\u0000html/P_Grpc_Core_ClientBase_HeaderInterceptor.htm\u0000141","ClientBase.Host Property\u0000html/P_Grpc_Core_ClientBase_Host.htm\u0000155","ContextPropagationOptions.IsPropagateCancellation Property\u0000html/P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm\u0000105","ContextPropagationOptions.IsPropagateDeadline Property\u0000html/P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm\u0000104","Credentials.Insecure Property\u0000html/P_Grpc_Core_Credentials_Insecure.htm\u0000120","GrpcEnvironment.Logger Property\u0000html/P_Grpc_Core_GrpcEnvironment_Logger.htm\u0000110","IAsyncStreamWriter(T).WriteOptions Property\u0000html/P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm\u0000141","IHasWriteOptions.WriteOptions Property\u0000html/P_Grpc_Core_IHasWriteOptions_WriteOptions.htm\u0000114","IMethod.FullName Property\u0000html/P_Grpc_Core_IMethod_FullName.htm\u0000112","IMethod.Name Property\u0000html/P_Grpc_Core_IMethod_Name.htm\u000098","IMethod.ServiceName Property\u0000html/P_Grpc_Core_IMethod_ServiceName.htm\u0000102","IMethod.Type Property\u0000html/P_Grpc_Core_IMethod_Type.htm\u000093","KeyCertificatePair.CertificateChain Property\u0000html/P_Grpc_Core_KeyCertificatePair_CertificateChain.htm\u0000100","KeyCertificatePair.PrivateKey Property\u0000html/P_Grpc_Core_KeyCertificatePair_PrivateKey.htm\u0000100","Marshallers.StringMarshaller Property\u0000html/P_Grpc_Core_Marshallers_StringMarshaller.htm\u0000137","Marshaller(T).Deserializer Property\u0000html/P_Grpc_Core_Marshaller_1_Deserializer.htm\u0000159","Marshaller(T).Serializer Property\u0000html/P_Grpc_Core_Marshaller_1_Serializer.htm\u0000155","Metadata.Count Property\u0000html/P_Grpc_Core_Metadata_Count.htm\u0000120","Metadata.Entry.IsBinary Property\u0000html/P_Grpc_Core_Metadata_Entry_IsBinary.htm\u0000104","Metadata.Entry.Key Property\u0000html/P_Grpc_Core_Metadata_Entry_Key.htm\u0000103","Metadata.Entry.Value Property\u0000html/P_Grpc_Core_Metadata_Entry_Value.htm\u0000106","Metadata.Entry.ValueBytes Property\u0000html/P_Grpc_Core_Metadata_Entry_ValueBytes.htm\u0000125","Metadata.IsReadOnly Property\u0000html/P_Grpc_Core_Metadata_IsReadOnly.htm\u0000120","Metadata.Item Property\u0000html/P_Grpc_Core_Metadata_Item.htm\u0000185","Method(TRequest, TResponse).FullName Property\u0000html/P_Grpc_Core_Method_2_FullName.htm\u0000137","Method(TRequest, TResponse).Name Property\u0000html/P_Grpc_Core_Method_2_Name.htm\u0000123","Method(TRequest, TResponse).RequestMarshaller Property\u0000html/P_Grpc_Core_Method_2_RequestMarshaller.htm\u0000125","Method(TRequest, TResponse).ResponseMarshaller Property\u0000html/P_Grpc_Core_Method_2_ResponseMarshaller.htm\u0000125","Method(TRequest, TResponse).ServiceName Property\u0000html/P_Grpc_Core_Method_2_ServiceName.htm\u0000127","Method(TRequest, TResponse).Type Property\u0000html/P_Grpc_Core_Method_2_Type.htm\u0000118","RpcException.Status Property\u0000html/P_Grpc_Core_RpcException_Status.htm\u000097","ServerCallContext.CancellationToken Property\u0000html/P_Grpc_Core_ServerCallContext_CancellationToken.htm\u000099","ServerCallContext.Deadline Property\u0000html/P_Grpc_Core_ServerCallContext_Deadline.htm\u000096","ServerCallContext.Host Property\u0000html/P_Grpc_Core_ServerCallContext_Host.htm\u0000103","ServerCallContext.Method Property\u0000html/P_Grpc_Core_ServerCallContext_Method.htm\u0000103","ServerCallContext.Peer Property\u0000html/P_Grpc_Core_ServerCallContext_Peer.htm\u0000104","ServerCallContext.RequestHeaders Property\u0000html/P_Grpc_Core_ServerCallContext_RequestHeaders.htm\u0000101","ServerCallContext.ResponseTrailers Property\u0000html/P_Grpc_Core_ServerCallContext_ResponseTrailers.htm\u0000105","ServerCallContext.Status Property\u0000html/P_Grpc_Core_ServerCallContext_Status.htm\u0000116","ServerCallContext.WriteOptions Property\u0000html/P_Grpc_Core_ServerCallContext_WriteOptions.htm\u0000147","ServerCredentials.Insecure Property\u0000html/P_Grpc_Core_ServerCredentials_Insecure.htm\u0000121","ServerPort.BoundPort Property\u0000html/P_Grpc_Core_ServerPort_BoundPort.htm\u0000126","ServerPort.Credentials Property\u0000html/P_Grpc_Core_ServerPort_Credentials.htm\u0000114","ServerPort.Host Property\u0000html/P_Grpc_Core_ServerPort_Host.htm\u0000113","ServerPort.Port Property\u0000html/P_Grpc_Core_ServerPort_Port.htm\u0000109","Server.Ports Property\u0000html/P_Grpc_Core_Server_Ports.htm\u0000125","Server.Services Property\u0000html/P_Grpc_Core_Server_Services.htm\u0000126","Server.ShutdownTask Property\u0000html/P_Grpc_Core_Server_ShutdownTask.htm\u0000103","SslCredentials.KeyCertificatePair Property\u0000html/P_Grpc_Core_SslCredentials_KeyCertificatePair.htm\u0000114","SslCredentials.RootCertificates Property\u0000html/P_Grpc_Core_SslCredentials_RootCertificates.htm\u0000103","SslServerCredentials.ForceClientAuthentication Property\u0000html/P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm\u0000103","SslServerCredentials.KeyCertificatePairs Property\u0000html/P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm\u0000126","SslServerCredentials.RootCertificates Property\u0000html/P_Grpc_Core_SslServerCredentials_RootCertificates.htm\u0000101","Status.Detail Property\u0000html/P_Grpc_Core_Status_Detail.htm\u000099","Status.StatusCode Property\u0000html/P_Grpc_Core_Status_StatusCode.htm\u0000108","WriteOptions.Flags Property\u0000html/P_Grpc_Core_WriteOptions_Flags.htm\u000096","Namespaces\u0000html/R_Project_Documentation.htm\u000084","AuthInterceptors Class\u0000html/T_Grpc_Auth_AuthInterceptors.htm\u0000161","AsyncClientStreamingCall(TRequest, TResponse) Class\u0000html/T_Grpc_Core_AsyncClientStreamingCall_2.htm\u0000362","AsyncDuplexStreamingCall(TRequest, TResponse) Class\u0000html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm\u0000359","AsyncServerStreamingCall(TResponse) Class\u0000html/T_Grpc_Core_AsyncServerStreamingCall_1.htm\u0000320","AsyncUnaryCall(TResponse) Class\u0000html/T_Grpc_Core_AsyncUnaryCall_1.htm\u0000333","CallInvocationDetails(TRequest, TResponse) Structure\u0000html/T_Grpc_Core_CallInvocationDetails_2.htm\u0000377","CallOptions Structure\u0000html/T_Grpc_Core_CallOptions.htm\u0000282","Calls Class\u0000html/T_Grpc_Core_Calls.htm\u0000262","Channel Class\u0000html/T_Grpc_Core_Channel.htm\u0000461","ChannelOption Class\u0000html/T_Grpc_Core_ChannelOption.htm\u0000244","ChannelOptions Class\u0000html/T_Grpc_Core_ChannelOptions.htm\u0000187","ChannelOption.OptionType Enumeration\u0000html/T_Grpc_Core_ChannelOption_OptionType.htm\u000082","ChannelState Enumeration\u0000html/T_Grpc_Core_ChannelState.htm\u0000113","ClientBase Class\u0000html/T_Grpc_Core_ClientBase.htm\u0000320","ClientStreamingServerMethod(TRequest, TResponse) Delegate\u0000html/T_Grpc_Core_ClientStreamingServerMethod_2.htm\u0000240","CompressionLevel Enumeration\u0000html/T_Grpc_Core_CompressionLevel.htm\u000089","ContextPropagationOptions Class\u0000html/T_Grpc_Core_ContextPropagationOptions.htm\u0000258","ContextPropagationToken Class\u0000html/T_Grpc_Core_ContextPropagationToken.htm\u0000268","Credentials Class\u0000html/T_Grpc_Core_Credentials.htm\u0000257","DuplexStreamingServerMethod(TRequest, TResponse) Delegate\u0000html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm\u0000266","GrpcEnvironment Class\u0000html/T_Grpc_Core_GrpcEnvironment.htm\u0000227","HeaderInterceptor Delegate\u0000html/T_Grpc_Core_HeaderInterceptor.htm\u0000155","IAsyncStreamReader(T) Interface\u0000html/T_Grpc_Core_IAsyncStreamReader_1.htm\u0000234","IAsyncStreamWriter(T) Interface\u0000html/T_Grpc_Core_IAsyncStreamWriter_1.htm\u0000157","IClientStreamWriter(T) Interface\u0000html/T_Grpc_Core_IClientStreamWriter_1.htm\u0000260","IHasWriteOptions Interface\u0000html/T_Grpc_Core_IHasWriteOptions.htm\u000089","IMethod Interface\u0000html/T_Grpc_Core_IMethod.htm\u0000133","IServerStreamWriter(T) Interface\u0000html/T_Grpc_Core_IServerStreamWriter_1.htm\u0000245","KeyCertificatePair Class\u0000html/T_Grpc_Core_KeyCertificatePair.htm\u0000197","ConsoleLogger Class\u0000html/T_Grpc_Core_Logging_ConsoleLogger.htm\u0000320","ILogger Interface\u0000html/T_Grpc_Core_Logging_ILogger.htm\u0000168","Marshallers Class\u0000html/T_Grpc_Core_Marshallers.htm\u0000130","Marshaller(T) Structure\u0000html/T_Grpc_Core_Marshaller_1.htm\u0000226","Metadata Class\u0000html/T_Grpc_Core_Metadata.htm\u0000421","Metadata.Entry Structure\u0000html/T_Grpc_Core_Metadata_Entry.htm\u0000240","MethodType Enumeration\u0000html/T_Grpc_Core_MethodType.htm\u0000126","Method(TRequest, TResponse) Class\u0000html/T_Grpc_Core_Method_2.htm\u0000358","RpcException Class\u0000html/T_Grpc_Core_RpcException.htm\u0000526","Server Class\u0000html/T_Grpc_Core_Server.htm\u0000344","ServerCallContext Class\u0000html/T_Grpc_Core_ServerCallContext.htm\u0000381","ServerCredentials Class\u0000html/T_Grpc_Core_ServerCredentials.htm\u0000250","ServerPort Class\u0000html/T_Grpc_Core_ServerPort.htm\u0000260","ServerServiceDefinition Class\u0000html/T_Grpc_Core_ServerServiceDefinition.htm\u0000239","ServerServiceDefinition.Builder Class\u0000html/T_Grpc_Core_ServerServiceDefinition_Builder.htm\u0000332","ServerStreamingServerMethod(TRequest, TResponse) Delegate\u0000html/T_Grpc_Core_ServerStreamingServerMethod_2.htm\u0000248","Server.ServerPortCollection Class\u0000html/T_Grpc_Core_Server_ServerPortCollection.htm\u0000312","Server.ServiceDefinitionCollection Class\u0000html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm\u0000278","SslCredentials Class\u0000html/T_Grpc_Core_SslCredentials.htm\u0000274","SslServerCredentials Class\u0000html/T_Grpc_Core_SslServerCredentials.htm\u0000289","Status Structure\u0000html/T_Grpc_Core_Status.htm\u0000235","StatusCode Enumeration\u0000html/T_Grpc_Core_StatusCode.htm\u0000545","UnaryServerMethod(TRequest, TResponse) Delegate\u0000html/T_Grpc_Core_UnaryServerMethod_2.htm\u0000221","AsyncStreamExtensions Class\u0000html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm\u0000211","BenchmarkUtil Class\u0000html/T_Grpc_Core_Utils_BenchmarkUtil.htm\u0000115","Preconditions Class\u0000html/T_Grpc_Core_Utils_Preconditions.htm\u0000177","VersionInfo Class\u0000html/T_Grpc_Core_VersionInfo.htm\u0000109","WriteFlags Enumeration\u0000html/T_Grpc_Core_WriteFlags.htm\u0000148","WriteOptions Class\u0000html/T_Grpc_Core_WriteOptions.htm\u0000230"] \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Events_T_Grpc_Core_RpcException.htm b/doc/ref/csharp/html/html/Events_T_Grpc_Core_RpcException.htm
new file mode 100644
index 0000000000..e24bbc2c7e
--- /dev/null
+++ b/doc/ref/csharp/html/html/Events_T_Grpc_Core_RpcException.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>RpcException Events</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RpcException class, events" /><meta name="Microsoft.Help.Id" content="Events.T:Grpc.Core.RpcException" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Events_T_Grpc_Core_RpcException" /><meta name="guid" content="Events_T_Grpc_Core_RpcException" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_RpcException__ctor.htm" title="RpcException Constructor " tocid="Overload_Grpc_Core_RpcException__ctor">RpcException Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_RpcException.htm" title="RpcException Properties" tocid="Properties_T_Grpc_Core_RpcException">RpcException Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_RpcException.htm" title="RpcException Methods" tocid="Methods_T_Grpc_Core_RpcException">RpcException Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Events_T_Grpc_Core_RpcException.htm" title="RpcException Events" tocid="Events_T_Grpc_Core_RpcException">RpcException Events</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">RpcException Events</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_RpcException.htm">RpcException</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Events</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protevent.gif" alt="Protected event" title="Protected event" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/ee332915" target="_blank">SerializeObjectState</a></td><td><div class="summary">Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_RpcException.htm">RpcException Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_Census.htm b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_Census.htm
new file mode 100644
index 0000000000..ed73663360
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_Census.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOptions.Census Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Census field" /><meta name="System.Keywords" content="ChannelOptions.Census field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOptions.Census" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.ChannelOptions.Census" /><meta name="Description" content="Enable census for tracing and stats collection" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_ChannelOptions_Census" /><meta name="guid" content="F_Grpc_Core_ChannelOptions_Census" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Fields" tocid="Fields_T_Grpc_Core_ChannelOptions">ChannelOptions Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Census.htm" title="Census Field" tocid="F_Grpc_Core_ChannelOptions_Census">Census Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" title="DefaultAuthority Field" tocid="F_Grpc_Core_ChannelOptions_DefaultAuthority">DefaultAuthority Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" title="Http2InitialSequenceNumber Field" tocid="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber">Http2InitialSequenceNumber Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" title="MaxConcurrentStreams Field" tocid="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams">MaxConcurrentStreams Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" title="MaxMessageLength Field" tocid="F_Grpc_Core_ChannelOptions_MaxMessageLength">MaxMessageLength Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" title="PrimaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString">PrimaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" title="SecondaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString">SecondaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" title="SslTargetNameOverride Field" tocid="F_Grpc_Core_ChannelOptions_SslTargetNameOverride">SslTargetNameOverride Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOptions<span id="LST19A8F96D_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST19A8F96D_0?cpp=::|nu=.");</script>Census Field</td></tr></table><span class="introStyle"></span><div class="summary">Enable census for tracing and stats collection</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">string</span> <span class="identifier">Census</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">Census</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">String</span>^ <span class="identifier">Census</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">Census</span>: <span class="identifier">string</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_DefaultAuthority.htm b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_DefaultAuthority.htm
new file mode 100644
index 0000000000..25b96ead2a
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_DefaultAuthority.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOptions.DefaultAuthority Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="DefaultAuthority field" /><meta name="System.Keywords" content="ChannelOptions.DefaultAuthority field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOptions.DefaultAuthority" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.ChannelOptions.DefaultAuthority" /><meta name="Description" content="Default authority for calls." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_ChannelOptions_DefaultAuthority" /><meta name="guid" content="F_Grpc_Core_ChannelOptions_DefaultAuthority" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Fields" tocid="Fields_T_Grpc_Core_ChannelOptions">ChannelOptions Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Census.htm" title="Census Field" tocid="F_Grpc_Core_ChannelOptions_Census">Census Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" title="DefaultAuthority Field" tocid="F_Grpc_Core_ChannelOptions_DefaultAuthority">DefaultAuthority Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" title="Http2InitialSequenceNumber Field" tocid="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber">Http2InitialSequenceNumber Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" title="MaxConcurrentStreams Field" tocid="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams">MaxConcurrentStreams Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" title="MaxMessageLength Field" tocid="F_Grpc_Core_ChannelOptions_MaxMessageLength">MaxMessageLength Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" title="PrimaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString">PrimaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" title="SecondaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString">SecondaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" title="SslTargetNameOverride Field" tocid="F_Grpc_Core_ChannelOptions_SslTargetNameOverride">SslTargetNameOverride Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOptions<span id="LSTC41464EC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC41464EC_0?cpp=::|nu=.");</script>DefaultAuthority Field</td></tr></table><span class="introStyle"></span><div class="summary">Default authority for calls.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">string</span> <span class="identifier">DefaultAuthority</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">DefaultAuthority</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">String</span>^ <span class="identifier">DefaultAuthority</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">DefaultAuthority</span>: <span class="identifier">string</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm
new file mode 100644
index 0000000000..02a7dbba25
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOptions.Http2InitialSequenceNumber Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Http2InitialSequenceNumber field" /><meta name="System.Keywords" content="ChannelOptions.Http2InitialSequenceNumber field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOptions.Http2InitialSequenceNumber" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.ChannelOptions.Http2InitialSequenceNumber" /><meta name="Description" content="Initial sequence number for http2 transports" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber" /><meta name="guid" content="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Fields" tocid="Fields_T_Grpc_Core_ChannelOptions">ChannelOptions Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Census.htm" title="Census Field" tocid="F_Grpc_Core_ChannelOptions_Census">Census Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" title="DefaultAuthority Field" tocid="F_Grpc_Core_ChannelOptions_DefaultAuthority">DefaultAuthority Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" title="Http2InitialSequenceNumber Field" tocid="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber">Http2InitialSequenceNumber Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" title="MaxConcurrentStreams Field" tocid="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams">MaxConcurrentStreams Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" title="MaxMessageLength Field" tocid="F_Grpc_Core_ChannelOptions_MaxMessageLength">MaxMessageLength Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" title="PrimaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString">PrimaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" title="SecondaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString">SecondaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" title="SslTargetNameOverride Field" tocid="F_Grpc_Core_ChannelOptions_SslTargetNameOverride">SslTargetNameOverride Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOptions<span id="LST3698CF40_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3698CF40_0?cpp=::|nu=.");</script>Http2InitialSequenceNumber Field</td></tr></table><span class="introStyle"></span><div class="summary">Initial sequence number for http2 transports</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">string</span> <span class="identifier">Http2InitialSequenceNumber</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">Http2InitialSequenceNumber</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">String</span>^ <span class="identifier">Http2InitialSequenceNumber</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">Http2InitialSequenceNumber</span>: <span class="identifier">string</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm
new file mode 100644
index 0000000000..b68c6b35bd
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOptions.MaxConcurrentStreams Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="MaxConcurrentStreams field" /><meta name="System.Keywords" content="ChannelOptions.MaxConcurrentStreams field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOptions.MaxConcurrentStreams" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.ChannelOptions.MaxConcurrentStreams" /><meta name="Description" content="Maximum number of concurrent incoming streams to allow on a http2 connection" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams" /><meta name="guid" content="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Fields" tocid="Fields_T_Grpc_Core_ChannelOptions">ChannelOptions Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Census.htm" title="Census Field" tocid="F_Grpc_Core_ChannelOptions_Census">Census Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" title="DefaultAuthority Field" tocid="F_Grpc_Core_ChannelOptions_DefaultAuthority">DefaultAuthority Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" title="Http2InitialSequenceNumber Field" tocid="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber">Http2InitialSequenceNumber Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" title="MaxConcurrentStreams Field" tocid="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams">MaxConcurrentStreams Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" title="MaxMessageLength Field" tocid="F_Grpc_Core_ChannelOptions_MaxMessageLength">MaxMessageLength Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" title="PrimaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString">PrimaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" title="SecondaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString">SecondaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" title="SslTargetNameOverride Field" tocid="F_Grpc_Core_ChannelOptions_SslTargetNameOverride">SslTargetNameOverride Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOptions<span id="LSTF66C263E_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF66C263E_0?cpp=::|nu=.");</script>MaxConcurrentStreams Field</td></tr></table><span class="introStyle"></span><div class="summary">Maximum number of concurrent incoming streams to allow on a http2 connection</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">string</span> <span class="identifier">MaxConcurrentStreams</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">MaxConcurrentStreams</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">String</span>^ <span class="identifier">MaxConcurrentStreams</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">MaxConcurrentStreams</span>: <span class="identifier">string</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_MaxMessageLength.htm b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_MaxMessageLength.htm
new file mode 100644
index 0000000000..fd8731373c
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_MaxMessageLength.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOptions.MaxMessageLength Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="MaxMessageLength field" /><meta name="System.Keywords" content="ChannelOptions.MaxMessageLength field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOptions.MaxMessageLength" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.ChannelOptions.MaxMessageLength" /><meta name="Description" content="Maximum message length that the channel can receive" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_ChannelOptions_MaxMessageLength" /><meta name="guid" content="F_Grpc_Core_ChannelOptions_MaxMessageLength" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Fields" tocid="Fields_T_Grpc_Core_ChannelOptions">ChannelOptions Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Census.htm" title="Census Field" tocid="F_Grpc_Core_ChannelOptions_Census">Census Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" title="DefaultAuthority Field" tocid="F_Grpc_Core_ChannelOptions_DefaultAuthority">DefaultAuthority Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" title="Http2InitialSequenceNumber Field" tocid="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber">Http2InitialSequenceNumber Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" title="MaxConcurrentStreams Field" tocid="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams">MaxConcurrentStreams Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" title="MaxMessageLength Field" tocid="F_Grpc_Core_ChannelOptions_MaxMessageLength">MaxMessageLength Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" title="PrimaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString">PrimaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" title="SecondaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString">SecondaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" title="SslTargetNameOverride Field" tocid="F_Grpc_Core_ChannelOptions_SslTargetNameOverride">SslTargetNameOverride Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOptions<span id="LST88F6C5B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST88F6C5B_0?cpp=::|nu=.");</script>MaxMessageLength Field</td></tr></table><span class="introStyle"></span><div class="summary">Maximum message length that the channel can receive</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">string</span> <span class="identifier">MaxMessageLength</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">MaxMessageLength</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">String</span>^ <span class="identifier">MaxMessageLength</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">MaxMessageLength</span>: <span class="identifier">string</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm
new file mode 100644
index 0000000000..1e0f197ef2
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOptions.PrimaryUserAgentString Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="PrimaryUserAgentString field" /><meta name="System.Keywords" content="ChannelOptions.PrimaryUserAgentString field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOptions.PrimaryUserAgentString" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.ChannelOptions.PrimaryUserAgentString" /><meta name="Description" content="Primary user agent: goes at the start of the user-agent metadata" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString" /><meta name="guid" content="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Fields" tocid="Fields_T_Grpc_Core_ChannelOptions">ChannelOptions Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Census.htm" title="Census Field" tocid="F_Grpc_Core_ChannelOptions_Census">Census Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" title="DefaultAuthority Field" tocid="F_Grpc_Core_ChannelOptions_DefaultAuthority">DefaultAuthority Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" title="Http2InitialSequenceNumber Field" tocid="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber">Http2InitialSequenceNumber Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" title="MaxConcurrentStreams Field" tocid="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams">MaxConcurrentStreams Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" title="MaxMessageLength Field" tocid="F_Grpc_Core_ChannelOptions_MaxMessageLength">MaxMessageLength Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" title="PrimaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString">PrimaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" title="SecondaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString">SecondaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" title="SslTargetNameOverride Field" tocid="F_Grpc_Core_ChannelOptions_SslTargetNameOverride">SslTargetNameOverride Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOptions<span id="LST6F321D1D_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6F321D1D_0?cpp=::|nu=.");</script>PrimaryUserAgentString Field</td></tr></table><span class="introStyle"></span><div class="summary">Primary user agent: goes at the start of the user-agent metadata</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">string</span> <span class="identifier">PrimaryUserAgentString</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">PrimaryUserAgentString</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">String</span>^ <span class="identifier">PrimaryUserAgentString</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">PrimaryUserAgentString</span>: <span class="identifier">string</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm
new file mode 100644
index 0000000000..1ab07bbcc9
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOptions.SecondaryUserAgentString Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SecondaryUserAgentString field" /><meta name="System.Keywords" content="ChannelOptions.SecondaryUserAgentString field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOptions.SecondaryUserAgentString" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.ChannelOptions.SecondaryUserAgentString" /><meta name="Description" content="Secondary user agent: goes at the end of the user-agent metadata" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString" /><meta name="guid" content="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Fields" tocid="Fields_T_Grpc_Core_ChannelOptions">ChannelOptions Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Census.htm" title="Census Field" tocid="F_Grpc_Core_ChannelOptions_Census">Census Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" title="DefaultAuthority Field" tocid="F_Grpc_Core_ChannelOptions_DefaultAuthority">DefaultAuthority Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" title="Http2InitialSequenceNumber Field" tocid="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber">Http2InitialSequenceNumber Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" title="MaxConcurrentStreams Field" tocid="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams">MaxConcurrentStreams Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" title="MaxMessageLength Field" tocid="F_Grpc_Core_ChannelOptions_MaxMessageLength">MaxMessageLength Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" title="PrimaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString">PrimaryUserAgentString Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" title="SecondaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString">SecondaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" title="SslTargetNameOverride Field" tocid="F_Grpc_Core_ChannelOptions_SslTargetNameOverride">SslTargetNameOverride Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOptions<span id="LST1C8754B3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1C8754B3_0?cpp=::|nu=.");</script>SecondaryUserAgentString Field</td></tr></table><span class="introStyle"></span><div class="summary">Secondary user agent: goes at the end of the user-agent metadata</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">string</span> <span class="identifier">SecondaryUserAgentString</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">SecondaryUserAgentString</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">String</span>^ <span class="identifier">SecondaryUserAgentString</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">SecondaryUserAgentString</span>: <span class="identifier">string</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm
new file mode 100644
index 0000000000..45c372a061
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOptions.SslTargetNameOverride Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SslTargetNameOverride field" /><meta name="System.Keywords" content="ChannelOptions.SslTargetNameOverride field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOptions.SslTargetNameOverride" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.ChannelOptions.SslTargetNameOverride" /><meta name="Description" content="Override SSL target check. Only to be used for testing." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_ChannelOptions_SslTargetNameOverride" /><meta name="guid" content="F_Grpc_Core_ChannelOptions_SslTargetNameOverride" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Fields" tocid="Fields_T_Grpc_Core_ChannelOptions">ChannelOptions Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Census.htm" title="Census Field" tocid="F_Grpc_Core_ChannelOptions_Census">Census Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" title="DefaultAuthority Field" tocid="F_Grpc_Core_ChannelOptions_DefaultAuthority">DefaultAuthority Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" title="Http2InitialSequenceNumber Field" tocid="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber">Http2InitialSequenceNumber Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" title="MaxConcurrentStreams Field" tocid="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams">MaxConcurrentStreams Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" title="MaxMessageLength Field" tocid="F_Grpc_Core_ChannelOptions_MaxMessageLength">MaxMessageLength Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" title="PrimaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString">PrimaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" title="SecondaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString">SecondaryUserAgentString Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" title="SslTargetNameOverride Field" tocid="F_Grpc_Core_ChannelOptions_SslTargetNameOverride">SslTargetNameOverride Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOptions<span id="LSTA9D274CA_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9D274CA_0?cpp=::|nu=.");</script>SslTargetNameOverride Field</td></tr></table><span class="introStyle"></span><div class="summary">Override SSL target check. Only to be used for testing.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">string</span> <span class="identifier">SslTargetNameOverride</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">SslTargetNameOverride</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">String</span>^ <span class="identifier">SslTargetNameOverride</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">SslTargetNameOverride</span>: <span class="identifier">string</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_ContextPropagationOptions_Default.htm b/doc/ref/csharp/html/html/F_Grpc_Core_ContextPropagationOptions_Default.htm
new file mode 100644
index 0000000000..da24244691
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_ContextPropagationOptions_Default.htm
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ContextPropagationOptions.Default Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Default field" /><meta name="System.Keywords" content="ContextPropagationOptions.Default field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ContextPropagationOptions.Default" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.ContextPropagationOptions.Default" /><meta name="Description" content="The context propagation options that will be used by default." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_ContextPropagationOptions_Default" /><meta name="guid" content="F_Grpc_Core_ContextPropagationOptions_Default" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Fields" tocid="Fields_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ContextPropagationOptions_Default.htm" title="Default Field" tocid="F_Grpc_Core_ContextPropagationOptions_Default">Default Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ContextPropagationOptions<span id="LST98CFD07D_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST98CFD07D_0?cpp=::|nu=.");</script>Default Field</td></tr></table><span class="introStyle"></span><div class="summary">
+ The context propagation options that will be used by default.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">ContextPropagationOptions</span> <span class="identifier">Default</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Default</span> <span class="keyword">As</span> <span class="identifier">ContextPropagationOptions</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">ContextPropagationOptions</span>^ <span class="identifier">Default</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Default</span>: <span class="identifier">ContextPropagationOptions</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm b/doc/ref/csharp/html/html/F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm
new file mode 100644
index 0000000000..a38b7a906d
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.BinaryHeaderSuffix Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="BinaryHeaderSuffix field" /><meta name="System.Keywords" content="Metadata.BinaryHeaderSuffix field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.BinaryHeaderSuffix" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.Metadata.BinaryHeaderSuffix" /><meta name="Description" content="All binary headers should have this suffix." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_Metadata_BinaryHeaderSuffix" /><meta name="guid" content="F_Grpc_Core_Metadata_BinaryHeaderSuffix" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_Metadata.htm" title="Metadata Fields" tocid="Fields_T_Grpc_Core_Metadata">Metadata Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm" title="BinaryHeaderSuffix Field" tocid="F_Grpc_Core_Metadata_BinaryHeaderSuffix">BinaryHeaderSuffix Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Metadata_Empty.htm" title="Empty Field" tocid="F_Grpc_Core_Metadata_Empty">Empty Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST36E3D9E5_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36E3D9E5_0?cpp=::|nu=.");</script>BinaryHeaderSuffix Field</td></tr></table><span class="introStyle"></span><div class="summary">
+ All binary headers should have this suffix.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">string</span> <span class="identifier">BinaryHeaderSuffix</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">BinaryHeaderSuffix</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">String</span>^ <span class="identifier">BinaryHeaderSuffix</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">BinaryHeaderSuffix</span>: <span class="identifier">string</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_Metadata_Empty.htm b/doc/ref/csharp/html/html/F_Grpc_Core_Metadata_Empty.htm
new file mode 100644
index 0000000000..eec5d71768
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_Metadata_Empty.htm
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Empty Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Empty field" /><meta name="System.Keywords" content="Metadata.Empty field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Empty" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.Metadata.Empty" /><meta name="Description" content="An read-only instance of metadata containing no entries." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_Metadata_Empty" /><meta name="guid" content="F_Grpc_Core_Metadata_Empty" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_Metadata.htm" title="Metadata Fields" tocid="Fields_T_Grpc_Core_Metadata">Metadata Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm" title="BinaryHeaderSuffix Field" tocid="F_Grpc_Core_Metadata_BinaryHeaderSuffix">BinaryHeaderSuffix Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Metadata_Empty.htm" title="Empty Field" tocid="F_Grpc_Core_Metadata_Empty">Empty Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST6D2EC74B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6D2EC74B_0?cpp=::|nu=.");</script>Empty Field</td></tr></table><span class="introStyle"></span><div class="summary">
+ An read-only instance of metadata containing no entries.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">Metadata</span> <span class="identifier">Empty</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Empty</span> <span class="keyword">As</span> <span class="identifier">Metadata</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">Metadata</span>^ <span class="identifier">Empty</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Empty</span>: <span class="identifier">Metadata</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="T_Grpc_Core_Metadata.htm">Metadata</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_ServerPort_PickUnused.htm b/doc/ref/csharp/html/html/F_Grpc_Core_ServerPort_PickUnused.htm
new file mode 100644
index 0000000000..200823cc86
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_ServerPort_PickUnused.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPort.PickUnused Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="PickUnused field" /><meta name="System.Keywords" content="ServerPort.PickUnused field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.PickUnused" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.ServerPort.PickUnused" /><meta name="Description" content="Pass this value as port to have the server choose an unused listening port for you. Ports added to a server will contain the bound port in their property." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_ServerPort_PickUnused" /><meta name="guid" content="F_Grpc_Core_ServerPort_PickUnused" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ServerPort.htm" title="ServerPort Fields" tocid="Fields_T_Grpc_Core_ServerPort">ServerPort Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ServerPort_PickUnused.htm" title="PickUnused Field" tocid="F_Grpc_Core_ServerPort_PickUnused">PickUnused Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPort<span id="LSTB36E3D14_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB36E3D14_0?cpp=::|nu=.");</script>PickUnused Field</td></tr></table><span class="introStyle"></span><div class="summary">
+ Pass this value as port to have the server choose an unused listening port for you.
+ Ports added to a server will contain the bound port in their <a href="P_Grpc_Core_ServerPort_BoundPort.htm">BoundPort</a> property.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">int</span> <span class="identifier">PickUnused</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">PickUnused</span> <span class="keyword">As</span> <span class="identifier">Integer</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">int</span> <span class="identifier">PickUnused</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">PickUnused</span>: <span class="identifier">int</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerPort.htm">ServerPort Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_Status_DefaultCancelled.htm b/doc/ref/csharp/html/html/F_Grpc_Core_Status_DefaultCancelled.htm
new file mode 100644
index 0000000000..ebb3349100
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_Status_DefaultCancelled.htm
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Status.DefaultCancelled Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="DefaultCancelled field" /><meta name="System.Keywords" content="Status.DefaultCancelled field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Status.DefaultCancelled" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.Status.DefaultCancelled" /><meta name="Description" content="Default result of a cancelled RPC. StatusCode=Cancelled, empty details message." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_Status_DefaultCancelled" /><meta name="guid" content="F_Grpc_Core_Status_DefaultCancelled" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_Status.htm" title="Status Fields" tocid="Fields_T_Grpc_Core_Status">Status Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Status_DefaultCancelled.htm" title="DefaultCancelled Field" tocid="F_Grpc_Core_Status_DefaultCancelled">DefaultCancelled Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Status_DefaultSuccess.htm" title="DefaultSuccess Field" tocid="F_Grpc_Core_Status_DefaultSuccess">DefaultSuccess Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Status<span id="LSTF9F514E3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF9F514E3_0?cpp=::|nu=.");</script>DefaultCancelled Field</td></tr></table><span class="introStyle"></span><div class="summary">
+ Default result of a cancelled RPC. StatusCode=Cancelled, empty details message.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">Status</span> <span class="identifier">DefaultCancelled</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">DefaultCancelled</span> <span class="keyword">As</span> <span class="identifier">Status</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">Status</span> <span class="identifier">DefaultCancelled</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">DefaultCancelled</span>: <span class="identifier">Status</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="T_Grpc_Core_Status.htm">Status</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Status.htm">Status Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_Status_DefaultSuccess.htm b/doc/ref/csharp/html/html/F_Grpc_Core_Status_DefaultSuccess.htm
new file mode 100644
index 0000000000..683f4e09fd
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_Status_DefaultSuccess.htm
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Status.DefaultSuccess Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="DefaultSuccess field" /><meta name="System.Keywords" content="Status.DefaultSuccess field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Status.DefaultSuccess" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.Status.DefaultSuccess" /><meta name="Description" content="Default result of a successful RPC. StatusCode=OK, empty details message." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_Status_DefaultSuccess" /><meta name="guid" content="F_Grpc_Core_Status_DefaultSuccess" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_Status.htm" title="Status Fields" tocid="Fields_T_Grpc_Core_Status">Status Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Status_DefaultCancelled.htm" title="DefaultCancelled Field" tocid="F_Grpc_Core_Status_DefaultCancelled">DefaultCancelled Field</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Status_DefaultSuccess.htm" title="DefaultSuccess Field" tocid="F_Grpc_Core_Status_DefaultSuccess">DefaultSuccess Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Status<span id="LST30C4FE4B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST30C4FE4B_0?cpp=::|nu=.");</script>DefaultSuccess Field</td></tr></table><span class="introStyle"></span><div class="summary">
+ Default result of a successful RPC. StatusCode=OK, empty details message.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">Status</span> <span class="identifier">DefaultSuccess</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">DefaultSuccess</span> <span class="keyword">As</span> <span class="identifier">Status</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">Status</span> <span class="identifier">DefaultSuccess</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">DefaultSuccess</span>: <span class="identifier">Status</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="T_Grpc_Core_Status.htm">Status</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Status.htm">Status Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_VersionInfo_CurrentVersion.htm b/doc/ref/csharp/html/html/F_Grpc_Core_VersionInfo_CurrentVersion.htm
new file mode 100644
index 0000000000..fd0b2c5e8d
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_VersionInfo_CurrentVersion.htm
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>VersionInfo.CurrentVersion Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CurrentVersion field" /><meta name="System.Keywords" content="VersionInfo.CurrentVersion field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.VersionInfo.CurrentVersion" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.VersionInfo.CurrentVersion" /><meta name="Description" content="Current version of gRPC" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_VersionInfo_CurrentVersion" /><meta name="guid" content="F_Grpc_Core_VersionInfo_CurrentVersion" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_VersionInfo.htm" title="VersionInfo Fields" tocid="Fields_T_Grpc_Core_VersionInfo">VersionInfo Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_VersionInfo_CurrentVersion.htm" title="CurrentVersion Field" tocid="F_Grpc_Core_VersionInfo_CurrentVersion">CurrentVersion Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">VersionInfo<span id="LST79E8CE1A_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79E8CE1A_0?cpp=::|nu=.");</script>CurrentVersion Field</td></tr></table><span class="introStyle"></span><div class="summary">
+ Current version of gRPC
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">const</span> <span class="identifier">string</span> <span class="identifier">CurrentVersion</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Const</span> <span class="identifier">CurrentVersion</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">literal</span> <span class="identifier">String</span>^ <span class="identifier">CurrentVersion</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="keyword">mutable</span> <span class="identifier">CurrentVersion</span>: <span class="identifier">string</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_VersionInfo.htm">VersionInfo Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/F_Grpc_Core_WriteOptions_Default.htm b/doc/ref/csharp/html/html/F_Grpc_Core_WriteOptions_Default.htm
new file mode 100644
index 0000000000..89ab161c53
--- /dev/null
+++ b/doc/ref/csharp/html/html/F_Grpc_Core_WriteOptions_Default.htm
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>WriteOptions.Default Field</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Default field" /><meta name="System.Keywords" content="WriteOptions.Default field" /><meta name="Microsoft.Help.F1" content="Grpc.Core.WriteOptions.Default" /><meta name="Microsoft.Help.Id" content="F:Grpc.Core.WriteOptions.Default" /><meta name="Description" content="Default write options." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="F_Grpc_Core_WriteOptions_Default" /><meta name="guid" content="F_Grpc_Core_WriteOptions_Default" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Fields" tocid="Fields_T_Grpc_Core_WriteOptions">WriteOptions Fields</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_WriteOptions_Default.htm" title="Default Field" tocid="F_Grpc_Core_WriteOptions_Default">Default Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">WriteOptions<span id="LSTCBEB6BB9_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCBEB6BB9_0?cpp=::|nu=.");</script>Default Field</td></tr></table><span class="introStyle"></span><div class="summary">
+ Default write options.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">readonly</span> <span class="identifier">WriteOptions</span> <span class="identifier">Default</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="identifier">Default</span> <span class="keyword">As</span> <span class="identifier">WriteOptions</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">initonly</span> <span class="identifier">WriteOptions</span>^ <span class="identifier">Default</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">val</span> <span class="identifier">Default</span>: <span class="identifier">WriteOptions</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Field Value</h4>Type: <a href="T_Grpc_Core_WriteOptions.htm">WriteOptions</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_WriteOptions.htm">WriteOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Fields_T_Grpc_Core_ChannelOptions.htm b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_ChannelOptions.htm
new file mode 100644
index 0000000000..8c995989ff
--- /dev/null
+++ b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_ChannelOptions.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOptions Fields</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ChannelOptions class, fields" /><meta name="Microsoft.Help.Id" content="Fields.T:Grpc.Core.ChannelOptions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Fields_T_Grpc_Core_ChannelOptions" /><meta name="guid" content="Fields_T_Grpc_Core_ChannelOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Fields" tocid="Fields_T_Grpc_Core_ChannelOptions">ChannelOptions Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Census.htm" title="Census Field" tocid="F_Grpc_Core_ChannelOptions_Census">Census Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" title="DefaultAuthority Field" tocid="F_Grpc_Core_ChannelOptions_DefaultAuthority">DefaultAuthority Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" title="Http2InitialSequenceNumber Field" tocid="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber">Http2InitialSequenceNumber Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" title="MaxConcurrentStreams Field" tocid="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams">MaxConcurrentStreams Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" title="MaxMessageLength Field" tocid="F_Grpc_Core_ChannelOptions_MaxMessageLength">MaxMessageLength Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" title="PrimaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString">PrimaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" title="SecondaryUserAgentString Field" tocid="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString">SecondaryUserAgentString Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" title="SslTargetNameOverride Field" tocid="F_Grpc_Core_ChannelOptions_SslTargetNameOverride">SslTargetNameOverride Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOptions Fields</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_Census.htm">Census</a></td><td><div class="summary">Enable census for tracing and stats collection</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm">DefaultAuthority</a></td><td><div class="summary">Default authority for calls.</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm">Http2InitialSequenceNumber</a></td><td><div class="summary">Initial sequence number for http2 transports</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm">MaxConcurrentStreams</a></td><td><div class="summary">Maximum number of concurrent incoming streams to allow on a http2 connection</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm">MaxMessageLength</a></td><td><div class="summary">Maximum message length that the channel can receive</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm">PrimaryUserAgentString</a></td><td><div class="summary">Primary user agent: goes at the start of the user-agent metadata</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm">SecondaryUserAgentString</a></td><td><div class="summary">Secondary user agent: goes at the end of the user-agent metadata</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm">SslTargetNameOverride</a></td><td><div class="summary">Override SSL target check. Only to be used for testing.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Fields_T_Grpc_Core_ContextPropagationOptions.htm b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_ContextPropagationOptions.htm
new file mode 100644
index 0000000000..06d95f3831
--- /dev/null
+++ b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_ContextPropagationOptions.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ContextPropagationOptions Fields</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ContextPropagationOptions class, fields" /><meta name="Microsoft.Help.Id" content="Fields.T:Grpc.Core.ContextPropagationOptions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Fields_T_Grpc_Core_ContextPropagationOptions" /><meta name="guid" content="Fields_T_Grpc_Core_ContextPropagationOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Fields" tocid="Fields_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ContextPropagationOptions_Default.htm" title="Default Field" tocid="F_Grpc_Core_ContextPropagationOptions_Default">Default Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ContextPropagationOptions Fields</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ContextPropagationOptions_Default.htm">Default</a></td><td><div class="summary">
+ The context propagation options that will be used by default.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Fields_T_Grpc_Core_Metadata.htm b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_Metadata.htm
new file mode 100644
index 0000000000..4949c9f7b0
--- /dev/null
+++ b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_Metadata.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata Fields</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Metadata class, fields" /><meta name="Microsoft.Help.Id" content="Fields.T:Grpc.Core.Metadata" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Fields_T_Grpc_Core_Metadata" /><meta name="guid" content="Fields_T_Grpc_Core_Metadata" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_Metadata.htm" title="Metadata Fields" tocid="Fields_T_Grpc_Core_Metadata">Metadata Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm" title="BinaryHeaderSuffix Field" tocid="F_Grpc_Core_Metadata_BinaryHeaderSuffix">BinaryHeaderSuffix Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Metadata_Empty.htm" title="Empty Field" tocid="F_Grpc_Core_Metadata_Empty">Empty Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata Fields</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Metadata.htm">Metadata</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm">BinaryHeaderSuffix</a></td><td><div class="summary">
+ All binary headers should have this suffix.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_Metadata_Empty.htm">Empty</a></td><td><div class="summary">
+ An read-only instance of metadata containing no entries.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Fields_T_Grpc_Core_ServerPort.htm b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_ServerPort.htm
new file mode 100644
index 0000000000..6c8b60e209
--- /dev/null
+++ b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_ServerPort.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPort Fields</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerPort class, fields" /><meta name="Microsoft.Help.Id" content="Fields.T:Grpc.Core.ServerPort" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Fields_T_Grpc_Core_ServerPort" /><meta name="guid" content="Fields_T_Grpc_Core_ServerPort" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ServerPort.htm" title="ServerPort Fields" tocid="Fields_T_Grpc_Core_ServerPort">ServerPort Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_ServerPort_PickUnused.htm" title="PickUnused Field" tocid="F_Grpc_Core_ServerPort_PickUnused">PickUnused Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPort Fields</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ServerPort.htm">ServerPort</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ServerPort_PickUnused.htm">PickUnused</a></td><td><div class="summary">
+ Pass this value as port to have the server choose an unused listening port for you.
+ Ports added to a server will contain the bound port in their <a href="P_Grpc_Core_ServerPort_BoundPort.htm">BoundPort</a> property.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerPort.htm">ServerPort Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Fields_T_Grpc_Core_Status.htm b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_Status.htm
new file mode 100644
index 0000000000..824fb06367
--- /dev/null
+++ b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_Status.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Status Fields</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Status structure, fields" /><meta name="Microsoft.Help.Id" content="Fields.T:Grpc.Core.Status" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Fields_T_Grpc_Core_Status" /><meta name="guid" content="Fields_T_Grpc_Core_Status" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_Status.htm" title="Status Fields" tocid="Fields_T_Grpc_Core_Status">Status Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Status_DefaultCancelled.htm" title="DefaultCancelled Field" tocid="F_Grpc_Core_Status_DefaultCancelled">DefaultCancelled Field</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_Status_DefaultSuccess.htm" title="DefaultSuccess Field" tocid="F_Grpc_Core_Status_DefaultSuccess">DefaultSuccess Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Status Fields</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Status.htm">Status</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_Status_DefaultCancelled.htm">DefaultCancelled</a></td><td><div class="summary">
+ Default result of a cancelled RPC. StatusCode=Cancelled, empty details message.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_Status_DefaultSuccess.htm">DefaultSuccess</a></td><td><div class="summary">
+ Default result of a successful RPC. StatusCode=OK, empty details message.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Status.htm">Status Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Fields_T_Grpc_Core_VersionInfo.htm b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_VersionInfo.htm
new file mode 100644
index 0000000000..5373a4af50
--- /dev/null
+++ b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_VersionInfo.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>VersionInfo Fields</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="VersionInfo class, fields" /><meta name="Microsoft.Help.Id" content="Fields.T:Grpc.Core.VersionInfo" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Fields_T_Grpc_Core_VersionInfo" /><meta name="guid" content="Fields_T_Grpc_Core_VersionInfo" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_VersionInfo.htm" title="VersionInfo Fields" tocid="Fields_T_Grpc_Core_VersionInfo">VersionInfo Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_VersionInfo_CurrentVersion.htm" title="CurrentVersion Field" tocid="F_Grpc_Core_VersionInfo_CurrentVersion">CurrentVersion Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">VersionInfo Fields</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_VersionInfo.htm">VersionInfo</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_VersionInfo_CurrentVersion.htm">CurrentVersion</a></td><td><div class="summary">
+ Current version of gRPC
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_VersionInfo.htm">VersionInfo Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Fields_T_Grpc_Core_WriteOptions.htm b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_WriteOptions.htm
new file mode 100644
index 0000000000..cf412e42ab
--- /dev/null
+++ b/doc/ref/csharp/html/html/Fields_T_Grpc_Core_WriteOptions.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>WriteOptions Fields</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteOptions class, fields" /><meta name="Microsoft.Help.Id" content="Fields.T:Grpc.Core.WriteOptions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Fields_T_Grpc_Core_WriteOptions" /><meta name="guid" content="Fields_T_Grpc_Core_WriteOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Fields" tocid="Fields_T_Grpc_Core_WriteOptions">WriteOptions Fields</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="F_Grpc_Core_WriteOptions_Default.htm" title="Default Field" tocid="F_Grpc_Core_WriteOptions_Default">Default Field</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">WriteOptions Fields</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_WriteOptions.htm">WriteOptions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_WriteOptions_Default.htm">Default</a></td><td><div class="summary">
+ Default write options.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_WriteOptions.htm">WriteOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm b/doc/ref/csharp/html/html/M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm
new file mode 100644
index 0000000000..7d1f9d636b
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AuthInterceptors.FromAccessToken Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="FromAccessToken method" /><meta name="System.Keywords" content="AuthInterceptors.FromAccessToken method" /><meta name="Microsoft.Help.F1" content="Grpc.Auth.AuthInterceptors.FromAccessToken" /><meta name="Microsoft.Help.Id" content="M:Grpc.Auth.AuthInterceptors.FromAccessToken(System.String)" /><meta name="Description" content="Creates OAuth2 interceptor that will use given access token as authorization." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Auth" /><meta name="file" content="M_Grpc_Auth_AuthInterceptors_FromAccessToken" /><meta name="guid" content="M_Grpc_Auth_AuthInterceptors_FromAccessToken" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Auth.htm" title="Grpc.Auth" tocid="N_Grpc_Auth">Grpc.Auth</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Auth_AuthInterceptors.htm" title="AuthInterceptors Class" tocid="T_Grpc_Auth_AuthInterceptors">AuthInterceptors Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Auth_AuthInterceptors.htm" title="AuthInterceptors Methods" tocid="Methods_T_Grpc_Auth_AuthInterceptors">AuthInterceptors Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm" title="FromAccessToken Method " tocid="M_Grpc_Auth_AuthInterceptors_FromAccessToken">FromAccessToken Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Auth_AuthInterceptors_FromCredential.htm" title="FromCredential Method " tocid="M_Grpc_Auth_AuthInterceptors_FromCredential">FromCredential Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AuthInterceptors<span id="LST9EFB2ED9_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9EFB2ED9_0?cpp=::|nu=.");</script>FromAccessToken Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates OAuth2 interceptor that will use given access token as authorization.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Auth.htm">Grpc.Auth</a><br /><strong>Assembly:</strong> Grpc.Auth (in Grpc.Auth.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">HeaderInterceptor</span> <span class="identifier">FromAccessToken</span>(
+ <span class="identifier">string</span> <span class="parameter">accessToken</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">FromAccessToken</span> (
+ <span class="parameter">accessToken</span> <span class="keyword">As</span> <span class="identifier">String</span>
+) <span class="keyword">As</span> <span class="identifier">HeaderInterceptor</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="identifier">HeaderInterceptor</span>^ <span class="identifier">FromAccessToken</span>(
+ <span class="identifier">String</span>^ <span class="parameter">accessToken</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">FromAccessToken</span> :
+ <span class="parameter">accessToken</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="identifier">HeaderInterceptor</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">accessToken</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST9EFB2ED9_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9EFB2ED9_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />OAuth2 access token.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_HeaderInterceptor.htm">HeaderInterceptor</a><br />The header interceptor.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Auth_AuthInterceptors.htm">AuthInterceptors Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Auth.htm">Grpc.Auth Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Auth_AuthInterceptors_FromCredential.htm b/doc/ref/csharp/html/html/M_Grpc_Auth_AuthInterceptors_FromCredential.htm
new file mode 100644
index 0000000000..6c42a93dfa
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Auth_AuthInterceptors_FromCredential.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AuthInterceptors.FromCredential Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="FromCredential method" /><meta name="System.Keywords" content="AuthInterceptors.FromCredential method" /><meta name="Microsoft.Help.F1" content="Grpc.Auth.AuthInterceptors.FromCredential" /><meta name="Microsoft.Help.Id" content="M:Grpc.Auth.AuthInterceptors.FromCredential(Google.Apis.Auth.OAuth2.ITokenAccess)" /><meta name="Description" content="Creates interceptor that will obtain access token from any credential type that implements ITokenAccess. (e.g. GoogleCredential)." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Auth" /><meta name="file" content="M_Grpc_Auth_AuthInterceptors_FromCredential" /><meta name="guid" content="M_Grpc_Auth_AuthInterceptors_FromCredential" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Auth.htm" title="Grpc.Auth" tocid="N_Grpc_Auth">Grpc.Auth</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Auth_AuthInterceptors.htm" title="AuthInterceptors Class" tocid="T_Grpc_Auth_AuthInterceptors">AuthInterceptors Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Auth_AuthInterceptors.htm" title="AuthInterceptors Methods" tocid="Methods_T_Grpc_Auth_AuthInterceptors">AuthInterceptors Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm" title="FromAccessToken Method " tocid="M_Grpc_Auth_AuthInterceptors_FromAccessToken">FromAccessToken Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Auth_AuthInterceptors_FromCredential.htm" title="FromCredential Method " tocid="M_Grpc_Auth_AuthInterceptors_FromCredential">FromCredential Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AuthInterceptors<span id="LST65A86DE0_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST65A86DE0_0?cpp=::|nu=.");</script>FromCredential Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates interceptor that will obtain access token from any credential type that implements
+ <span class="code">ITokenAccess</span>. (e.g. <span class="code">GoogleCredential</span>).
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Auth.htm">Grpc.Auth</a><br /><strong>Assembly:</strong> Grpc.Auth (in Grpc.Auth.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">HeaderInterceptor</span> <span class="identifier">FromCredential</span>(
+ <span class="identifier">ITokenAccess</span> <span class="parameter">credential</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">FromCredential</span> (
+ <span class="parameter">credential</span> <span class="keyword">As</span> <span class="identifier">ITokenAccess</span>
+) <span class="keyword">As</span> <span class="identifier">HeaderInterceptor</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="identifier">HeaderInterceptor</span>^ <span class="identifier">FromCredential</span>(
+ <span class="identifier">ITokenAccess</span>^ <span class="parameter">credential</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">FromCredential</span> :
+ <span class="parameter">credential</span> : <span class="identifier">ITokenAccess</span> <span class="keyword">-&gt;</span> <span class="identifier">HeaderInterceptor</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">credential</span></dt><dd>Type: <span class="nolink">ITokenAccess</span><br />The credential to use to obtain access tokens.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_HeaderInterceptor.htm">HeaderInterceptor</a><br />The header interceptor.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Auth_AuthInterceptors.htm">AuthInterceptors Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Auth.htm">Grpc.Auth Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm
new file mode 100644
index 0000000000..206999e0f4
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncClientStreamingCall(TRequest, TResponse).Dispose Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Dispose method" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E.Dispose method" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse).Dispose method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2.Dispose" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncClientStreamingCall`2.Dispose" /><meta name="Description" content="Provides means to cleanup after the call. If the call has already finished normally (request stream has been completed and call result has been received), doesn't do anything." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose" /><meta name="guid" content="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm" title="GetAwaiter Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter">GetAwaiter Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncClientStreamingCall<span id="LSTD14F2818_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD14F2818_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTD14F2818_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD14F2818_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTD14F2818_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD14F2818_2?cpp=::|nu=.");</script>Dispose Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (request stream has been completed and call result has been received), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Dispose</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Dispose</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Dispose</span>() <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Dispose</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Dispose</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/es4s3w1d" target="_blank">IDisposable<span id="LSTD14F2818_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD14F2818_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Dispose<span id="LSTD14F2818_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD14F2818_4?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LSTD14F2818_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD14F2818_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTD14F2818_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD14F2818_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm
new file mode 100644
index 0000000000..581f356f70
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncClientStreamingCall(TRequest, TResponse).GetAwaiter Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetAwaiter method" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E.GetAwaiter method" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse).GetAwaiter method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2.GetAwaiter" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncClientStreamingCall`2.GetAwaiter" /><meta name="Description" content="Allows awaiting this object directly." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter" /><meta name="guid" content="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose">Dispose Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm" title="GetAwaiter Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter">GetAwaiter Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncClientStreamingCall<span id="LST5658EDC2_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5658EDC2_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST5658EDC2_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5658EDC2_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST5658EDC2_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5658EDC2_2?cpp=::|nu=.");</script>GetAwaiter Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Allows awaiting this object directly.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">TaskAwaiter</span>&lt;TResponse&gt; <span class="identifier">GetAwaiter</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetAwaiter</span> <span class="keyword">As</span> <span class="identifier">TaskAwaiter</span>(<span class="keyword">Of</span> TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">TaskAwaiter</span>&lt;TResponse&gt; <span class="identifier">GetAwaiter</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">GetAwaiter</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">TaskAwaiter</span>&lt;'TResponse&gt;
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/hh138386" target="_blank">TaskAwaiter</a><span id="LST5658EDC2_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5658EDC2_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm"><span class="typeparameter">TResponse</span></a><span id="LST5658EDC2_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5658EDC2_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LST5658EDC2_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5658EDC2_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST5658EDC2_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5658EDC2_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm
new file mode 100644
index 0000000000..f3b2899b0c
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncClientStreamingCall(TRequest, TResponse).GetStatus Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetStatus method" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E.GetStatus method" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse).GetStatus method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2.GetStatus" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncClientStreamingCall`2.GetStatus" /><meta name="Description" content="Gets the call status if the call has already finished. Throws InvalidOperationException otherwise." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus" /><meta name="guid" content="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm" title="GetAwaiter Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter">GetAwaiter Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncClientStreamingCall<span id="LST98F66E49_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST98F66E49_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST98F66E49_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST98F66E49_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST98F66E49_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST98F66E49_2?cpp=::|nu=.");</script>GetStatus Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Status</span> <span class="identifier">GetStatus</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetStatus</span> <span class="keyword">As</span> <span class="identifier">Status</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Status</span> <span class="identifier">GetStatus</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">GetStatus</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Status</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Status.htm">Status</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LST98F66E49_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST98F66E49_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST98F66E49_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST98F66E49_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm
new file mode 100644
index 0000000000..981d605565
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncClientStreamingCall(TRequest, TResponse).GetTrailers Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetTrailers method" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E.GetTrailers method" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse).GetTrailers method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2.GetTrailers" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncClientStreamingCall`2.GetTrailers" /><meta name="Description" content="Gets the call trailing metadata if the call has already finished. Throws InvalidOperationException otherwise." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers" /><meta name="guid" content="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm" title="GetAwaiter Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter">GetAwaiter Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus">GetStatus Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncClientStreamingCall<span id="LST542B02C3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST542B02C3_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST542B02C3_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST542B02C3_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST542B02C3_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST542B02C3_2?cpp=::|nu=.");</script>GetTrailers Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Metadata</span> <span class="identifier">GetTrailers</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetTrailers</span> <span class="keyword">As</span> <span class="identifier">Metadata</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Metadata</span>^ <span class="identifier">GetTrailers</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">GetTrailers</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Metadata</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Metadata.htm">Metadata</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LST542B02C3_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST542B02C3_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST542B02C3_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST542B02C3_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm
new file mode 100644
index 0000000000..652274451b
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncDuplexStreamingCall(TRequest, TResponse).Dispose Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Dispose method" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E.Dispose method" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse).Dispose method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncDuplexStreamingCall`2.Dispose" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncDuplexStreamingCall`2.Dispose" /><meta name="Description" content="Provides means to cleanup after the call. If the call has already finished normally (request stream has been completed and response stream has been fully read), doesn't do anything." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose" /><meta name="guid" content="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncDuplexStreamingCall<span id="LST915D6D4D_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST915D6D4D_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST915D6D4D_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST915D6D4D_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST915D6D4D_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST915D6D4D_2?cpp=::|nu=.");</script>Dispose Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (request stream has been completed and response stream has been fully read), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Dispose</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Dispose</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Dispose</span>() <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Dispose</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Dispose</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/es4s3w1d" target="_blank">IDisposable<span id="LST915D6D4D_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST915D6D4D_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Dispose<span id="LST915D6D4D_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST915D6D4D_4?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LST915D6D4D_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST915D6D4D_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST915D6D4D_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST915D6D4D_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm
new file mode 100644
index 0000000000..ba96ac35f5
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncDuplexStreamingCall(TRequest, TResponse).GetStatus Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetStatus method" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E.GetStatus method" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse).GetStatus method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncDuplexStreamingCall`2.GetStatus" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncDuplexStreamingCall`2.GetStatus" /><meta name="Description" content="Gets the call status if the call has already finished. Throws InvalidOperationException otherwise." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus" /><meta name="guid" content="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose">Dispose Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncDuplexStreamingCall<span id="LST6A81DDCC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6A81DDCC_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST6A81DDCC_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6A81DDCC_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST6A81DDCC_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6A81DDCC_2?cpp=::|nu=.");</script>GetStatus Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Status</span> <span class="identifier">GetStatus</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetStatus</span> <span class="keyword">As</span> <span class="identifier">Status</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Status</span> <span class="identifier">GetStatus</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">GetStatus</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Status</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Status.htm">Status</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LST6A81DDCC_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6A81DDCC_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST6A81DDCC_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6A81DDCC_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm
new file mode 100644
index 0000000000..3b9acfe363
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncDuplexStreamingCall(TRequest, TResponse).GetTrailers Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetTrailers method" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E.GetTrailers method" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse).GetTrailers method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncDuplexStreamingCall`2.GetTrailers" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncDuplexStreamingCall`2.GetTrailers" /><meta name="Description" content="Gets the call trailing metadata if the call has already finished. Throws InvalidOperationException otherwise." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers" /><meta name="guid" content="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus">GetStatus Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncDuplexStreamingCall<span id="LSTC5BE90B6_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC5BE90B6_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTC5BE90B6_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC5BE90B6_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTC5BE90B6_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC5BE90B6_2?cpp=::|nu=.");</script>GetTrailers Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Metadata</span> <span class="identifier">GetTrailers</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetTrailers</span> <span class="keyword">As</span> <span class="identifier">Metadata</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Metadata</span>^ <span class="identifier">GetTrailers</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">GetTrailers</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Metadata</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Metadata.htm">Metadata</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LSTC5BE90B6_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC5BE90B6_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC5BE90B6_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC5BE90B6_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm
new file mode 100644
index 0000000000..452b70ad2e
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncServerStreamingCall(TResponse).Dispose Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Dispose method" /><meta name="System.Keywords" content="AsyncServerStreamingCall%3CTResponse%3E.Dispose method" /><meta name="System.Keywords" content="AsyncServerStreamingCall(Of TResponse).Dispose method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncServerStreamingCall`1.Dispose" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncServerStreamingCall`1.Dispose" /><meta name="Description" content="Provides means to cleanup after the call. If the call has already finished normally (response stream has been fully read), doesn't do anything." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose" /><meta name="guid" content="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncServerStreamingCall<span id="LSTBC1CEF5B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1CEF5B_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LSTBC1CEF5B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1CEF5B_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTBC1CEF5B_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1CEF5B_2?cpp=::|nu=.");</script>Dispose Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (response stream has been fully read), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Dispose</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Dispose</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Dispose</span>() <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Dispose</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Dispose</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/es4s3w1d" target="_blank">IDisposable<span id="LSTBC1CEF5B_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1CEF5B_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Dispose<span id="LSTBC1CEF5B_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1CEF5B_4?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall<span id="LSTBC1CEF5B_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1CEF5B_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTBC1CEF5B_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1CEF5B_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm
new file mode 100644
index 0000000000..a61665e401
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncServerStreamingCall(TResponse).GetStatus Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetStatus method" /><meta name="System.Keywords" content="AsyncServerStreamingCall%3CTResponse%3E.GetStatus method" /><meta name="System.Keywords" content="AsyncServerStreamingCall(Of TResponse).GetStatus method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncServerStreamingCall`1.GetStatus" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncServerStreamingCall`1.GetStatus" /><meta name="Description" content="Gets the call status if the call has already finished. Throws InvalidOperationException otherwise." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus" /><meta name="guid" content="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose">Dispose Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncServerStreamingCall<span id="LSTE2827012_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE2827012_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LSTE2827012_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE2827012_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTE2827012_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE2827012_2?cpp=::|nu=.");</script>GetStatus Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Status</span> <span class="identifier">GetStatus</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetStatus</span> <span class="keyword">As</span> <span class="identifier">Status</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Status</span> <span class="identifier">GetStatus</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">GetStatus</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Status</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Status.htm">Status</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall<span id="LSTE2827012_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE2827012_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTE2827012_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE2827012_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm
new file mode 100644
index 0000000000..e1cb9b8231
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncServerStreamingCall(TResponse).GetTrailers Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetTrailers method" /><meta name="System.Keywords" content="AsyncServerStreamingCall%3CTResponse%3E.GetTrailers method" /><meta name="System.Keywords" content="AsyncServerStreamingCall(Of TResponse).GetTrailers method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncServerStreamingCall`1.GetTrailers" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncServerStreamingCall`1.GetTrailers" /><meta name="Description" content="Gets the call trailing metadata if the call has already finished. Throws InvalidOperationException otherwise." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers" /><meta name="guid" content="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus">GetStatus Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncServerStreamingCall<span id="LST13CA9BB0_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13CA9BB0_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LST13CA9BB0_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13CA9BB0_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST13CA9BB0_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13CA9BB0_2?cpp=::|nu=.");</script>GetTrailers Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Metadata</span> <span class="identifier">GetTrailers</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetTrailers</span> <span class="keyword">As</span> <span class="identifier">Metadata</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Metadata</span>^ <span class="identifier">GetTrailers</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">GetTrailers</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Metadata</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Metadata.htm">Metadata</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall<span id="LST13CA9BB0_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13CA9BB0_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST13CA9BB0_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13CA9BB0_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm
new file mode 100644
index 0000000000..190d28d010
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncUnaryCall(TResponse).Dispose Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Dispose method" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTResponse%3E.Dispose method" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TResponse).Dispose method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncUnaryCall`1.Dispose" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncUnaryCall`1.Dispose" /><meta name="Description" content="Provides means to cleanup after the call. If the call has already finished normally (request stream has been completed and call result has been received), doesn't do anything." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncUnaryCall_1_Dispose" /><meta name="guid" content="M_Grpc_Core_AsyncUnaryCall_1_Dispose" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm" title="GetAwaiter Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter">GetAwaiter Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncUnaryCall<span id="LST7E559D57_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7E559D57_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LST7E559D57_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7E559D57_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST7E559D57_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7E559D57_2?cpp=::|nu=.");</script>Dispose Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (request stream has been completed and call result has been received), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Dispose</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Dispose</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Dispose</span>() <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Dispose</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Dispose</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/es4s3w1d" target="_blank">IDisposable<span id="LST7E559D57_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7E559D57_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Dispose<span id="LST7E559D57_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7E559D57_4?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LST7E559D57_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7E559D57_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST7E559D57_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7E559D57_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm
new file mode 100644
index 0000000000..4d12b2a9f9
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncUnaryCall(TResponse).GetAwaiter Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetAwaiter method" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTResponse%3E.GetAwaiter method" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TResponse).GetAwaiter method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncUnaryCall`1.GetAwaiter" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncUnaryCall`1.GetAwaiter" /><meta name="Description" content="Allows awaiting this object directly." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter" /><meta name="guid" content="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_Dispose">Dispose Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm" title="GetAwaiter Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter">GetAwaiter Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncUnaryCall<span id="LSTA96933A7_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA96933A7_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LSTA96933A7_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA96933A7_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTA96933A7_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA96933A7_2?cpp=::|nu=.");</script>GetAwaiter Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Allows awaiting this object directly.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">TaskAwaiter</span>&lt;TResponse&gt; <span class="identifier">GetAwaiter</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetAwaiter</span> <span class="keyword">As</span> <span class="identifier">TaskAwaiter</span>(<span class="keyword">Of</span> TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">TaskAwaiter</span>&lt;TResponse&gt; <span class="identifier">GetAwaiter</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">GetAwaiter</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">TaskAwaiter</span>&lt;'TResponse&gt;
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/hh138386" target="_blank">TaskAwaiter</a><span id="LSTA96933A7_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA96933A7_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_AsyncUnaryCall_1.htm"><span class="typeparameter">TResponse</span></a><span id="LSTA96933A7_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA96933A7_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LSTA96933A7_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA96933A7_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTA96933A7_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA96933A7_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm
new file mode 100644
index 0000000000..9c6bc1bce3
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncUnaryCall(TResponse).GetStatus Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetStatus method" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTResponse%3E.GetStatus method" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TResponse).GetStatus method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncUnaryCall`1.GetStatus" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncUnaryCall`1.GetStatus" /><meta name="Description" content="Gets the call status if the call has already finished. Throws InvalidOperationException otherwise." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncUnaryCall_1_GetStatus" /><meta name="guid" content="M_Grpc_Core_AsyncUnaryCall_1_GetStatus" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm" title="GetAwaiter Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter">GetAwaiter Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncUnaryCall<span id="LST691ACF10_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST691ACF10_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LST691ACF10_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST691ACF10_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST691ACF10_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST691ACF10_2?cpp=::|nu=.");</script>GetStatus Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Status</span> <span class="identifier">GetStatus</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetStatus</span> <span class="keyword">As</span> <span class="identifier">Status</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Status</span> <span class="identifier">GetStatus</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">GetStatus</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Status</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Status.htm">Status</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LST691ACF10_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST691ACF10_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST691ACF10_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST691ACF10_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm
new file mode 100644
index 0000000000..b78100c95e
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncUnaryCall(TResponse).GetTrailers Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetTrailers method" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTResponse%3E.GetTrailers method" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TResponse).GetTrailers method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncUnaryCall`1.GetTrailers" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.AsyncUnaryCall`1.GetTrailers" /><meta name="Description" content="Gets the call trailing metadata if the call has already finished. Throws InvalidOperationException otherwise." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers" /><meta name="guid" content="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm" title="GetAwaiter Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter">GetAwaiter Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetStatus">GetStatus Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncUnaryCall<span id="LST8E834442_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E834442_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LST8E834442_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E834442_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST8E834442_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E834442_2?cpp=::|nu=.");</script>GetTrailers Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Metadata</span> <span class="identifier">GetTrailers</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetTrailers</span> <span class="keyword">As</span> <span class="identifier">Metadata</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Metadata</span>^ <span class="identifier">GetTrailers</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">GetTrailers</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Metadata</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Metadata.htm">Metadata</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LST8E834442_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E834442_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST8E834442_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E834442_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm b/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm
new file mode 100644
index 0000000000..e7f9826e8f
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse).WithOptions Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WithOptions method" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E.WithOptions method" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse).WithOptions method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.WithOptions" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.CallInvocationDetails`2.WithOptions(Grpc.Core.CallOptions)" /><meta name="Description" content="Returns new instance of with Options set to the value provided. Values of all other fields are preserved." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_CallInvocationDetails_2_WithOptions" /><meta name="guid" content="M_Grpc_Core_CallInvocationDetails_2_WithOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm" title="WithOptions Method " tocid="M_Grpc_Core_CallInvocationDetails_2_WithOptions">WithOptions Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LST9BD2CC8A_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9BD2CC8A_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST9BD2CC8A_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9BD2CC8A_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST9BD2CC8A_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9BD2CC8A_2?cpp=::|nu=.");</script>WithOptions Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns new instance of <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST9BD2CC8A_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9BD2CC8A_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9BD2CC8A_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9BD2CC8A_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> with
+ <span class="code">Options</span> set to the value provided. Values of all other fields are preserved.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="identifier">WithOptions</span>(
+ <span class="identifier">CallOptions</span> <span class="parameter">options</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">WithOptions</span> (
+ <span class="parameter">options</span> <span class="keyword">As</span> <span class="identifier">CallOptions</span>
+) <span class="keyword">As</span> <span class="identifier">CallInvocationDetails</span>(<span class="keyword">Of</span> TRequest, TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="identifier">WithOptions</span>(
+ <span class="identifier">CallOptions</span> <span class="parameter">options</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">WithOptions</span> :
+ <span class="parameter">options</span> : <span class="identifier">CallOptions</span> <span class="keyword">-&gt;</span> <span class="identifier">CallInvocationDetails</span>&lt;'TRequest, 'TResponse&gt;
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">options</span></dt><dd>Type: <a href="T_Grpc_Core_CallOptions.htm">Grpc.Core<span id="LST9BD2CC8A_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9BD2CC8A_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CallOptions</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="options"/&gt; documentation for "M:Grpc.Core.CallInvocationDetails`2.WithOptions(Grpc.Core.CallOptions)"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails</a><span id="LST9BD2CC8A_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9BD2CC8A_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_CallInvocationDetails_2.htm"><span class="typeparameter">TRequest</span></a>, <a href="T_Grpc_Core_CallInvocationDetails_2.htm"><span class="typeparameter">TResponse</span></a><span id="LST9BD2CC8A_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9BD2CC8A_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST9BD2CC8A_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9BD2CC8A_8?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9BD2CC8A_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9BD2CC8A_9?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor.htm
new file mode 100644
index 0000000000..1b3b2d3218
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor.htm
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.CallInvocationDetails`2.#ctor(Grpc.Core.Channel,Grpc.Core.Method{`0,`1},Grpc.Core.CallOptions)" /><meta name="Description" content="Initializes a new instance of the struct." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_CallInvocationDetails_2__ctor" /><meta name="guid" content="M_Grpc_Core_CallInvocationDetails_2__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor " tocid="Overload_Grpc_Core_CallInvocationDetails_2__ctor">CallInvocationDetails(TRequest, TResponse) Constructor </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor_1">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor_2">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LST2F856D14_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST2F856D14_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Constructor (Channel, Method<span id="LST2F856D14_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST2F856D14_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, CallOptions)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Initializes a new instance of the <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST2F856D14_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST2F856D14_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> struct.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CallInvocationDetails</span>(
+ <span class="identifier">Channel</span> <span class="parameter">channel</span>,
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt; <span class="parameter">method</span>,
+ <span class="identifier">CallOptions</span> <span class="parameter">options</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">channel</span> <span class="keyword">As</span> <span class="identifier">Channel</span>,
+ <span class="parameter">method</span> <span class="keyword">As</span> <span class="identifier">Method</span>(<span class="keyword">Of</span> TRequest, TResponse),
+ <span class="parameter">options</span> <span class="keyword">As</span> <span class="identifier">CallOptions</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">CallInvocationDetails</span>(
+ <span class="identifier">Channel</span>^ <span class="parameter">channel</span>,
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">method</span>,
+ <span class="identifier">CallOptions</span> <span class="parameter">options</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">channel</span> : <span class="identifier">Channel</span> *
+ <span class="parameter">method</span> : <span class="identifier">Method</span>&lt;'TRequest, 'TResponse&gt; *
+ <span class="parameter">options</span> : <span class="identifier">CallOptions</span> <span class="keyword">-&gt;</span> <span class="identifier">CallInvocationDetails</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">channel</span></dt><dd>Type: <a href="T_Grpc_Core_Channel.htm">Grpc.Core<span id="LST2F856D14_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Channel</a><br />Channel to use for this call.</dd><dt><span class="parameter">method</span></dt><dd>Type: <a href="T_Grpc_Core_Method_2.htm">Grpc.Core<span id="LST2F856D14_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Method</a><span id="LST2F856D14_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_CallInvocationDetails_2.htm"><span class="typeparameter">TRequest</span></a>, <a href="T_Grpc_Core_CallInvocationDetails_2.htm"><span class="typeparameter">TResponse</span></a><span id="LST2F856D14_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Method to call.</dd><dt><span class="parameter">options</span></dt><dd>Type: <a href="T_Grpc_Core_CallOptions.htm">Grpc.Core<span id="LST2F856D14_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CallOptions</a><br />Call options.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST2F856D14_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_11?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST2F856D14_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_12?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm">CallInvocationDetails<span id="LST2F856D14_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_13?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST2F856D14_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2F856D14_14?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm
new file mode 100644
index 0000000000..f8caf7e06a
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm
@@ -0,0 +1,23 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.CallInvocationDetails`2.#ctor(Grpc.Core.Channel,Grpc.Core.Method{`0,`1},System.String,Grpc.Core.CallOptions)" /><meta name="Description" content="Initializes a new instance of the struct." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_CallInvocationDetails_2__ctor_1" /><meta name="guid" content="M_Grpc_Core_CallInvocationDetails_2__ctor_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor " tocid="Overload_Grpc_Core_CallInvocationDetails_2__ctor">CallInvocationDetails(TRequest, TResponse) Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor_1">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor_2">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LSTA9732474_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTA9732474_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Constructor (Channel, Method<span id="LSTA9732474_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTA9732474_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, String, CallOptions)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Initializes a new instance of the <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LSTA9732474_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA9732474_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> struct.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CallInvocationDetails</span>(
+ <span class="identifier">Channel</span> <span class="parameter">channel</span>,
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt; <span class="parameter">method</span>,
+ <span class="identifier">string</span> <span class="parameter">host</span>,
+ <span class="identifier">CallOptions</span> <span class="parameter">options</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">channel</span> <span class="keyword">As</span> <span class="identifier">Channel</span>,
+ <span class="parameter">method</span> <span class="keyword">As</span> <span class="identifier">Method</span>(<span class="keyword">Of</span> TRequest, TResponse),
+ <span class="parameter">host</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">options</span> <span class="keyword">As</span> <span class="identifier">CallOptions</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">CallInvocationDetails</span>(
+ <span class="identifier">Channel</span>^ <span class="parameter">channel</span>,
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">method</span>,
+ <span class="identifier">String</span>^ <span class="parameter">host</span>,
+ <span class="identifier">CallOptions</span> <span class="parameter">options</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">channel</span> : <span class="identifier">Channel</span> *
+ <span class="parameter">method</span> : <span class="identifier">Method</span>&lt;'TRequest, 'TResponse&gt; *
+ <span class="parameter">host</span> : <span class="identifier">string</span> *
+ <span class="parameter">options</span> : <span class="identifier">CallOptions</span> <span class="keyword">-&gt;</span> <span class="identifier">CallInvocationDetails</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">channel</span></dt><dd>Type: <a href="T_Grpc_Core_Channel.htm">Grpc.Core<span id="LSTA9732474_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Channel</a><br />Channel to use for this call.</dd><dt><span class="parameter">method</span></dt><dd>Type: <a href="T_Grpc_Core_Method_2.htm">Grpc.Core<span id="LSTA9732474_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Method</a><span id="LSTA9732474_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_CallInvocationDetails_2.htm"><span class="typeparameter">TRequest</span></a>, <a href="T_Grpc_Core_CallInvocationDetails_2.htm"><span class="typeparameter">TResponse</span></a><span id="LSTA9732474_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Method to call.</dd><dt><span class="parameter">host</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTA9732474_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Host that contains the method. if <span class="code">null</span>, default host will be used.</dd><dt><span class="parameter">options</span></dt><dd>Type: <a href="T_Grpc_Core_CallOptions.htm">Grpc.Core<span id="LSTA9732474_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CallOptions</a><br />Call options.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LSTA9732474_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_12?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA9732474_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_13?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm">CallInvocationDetails<span id="LSTA9732474_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_14?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA9732474_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9732474_15?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm
new file mode 100644
index 0000000000..52738bfc45
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm
@@ -0,0 +1,31 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.CallInvocationDetails`2.#ctor(Grpc.Core.Channel,System.String,System.String,Grpc.Core.Marshaller{`0},Grpc.Core.Marshaller{`1},Grpc.Core.CallOptions)" /><meta name="Description" content="Initializes a new instance of the struct." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_CallInvocationDetails_2__ctor_2" /><meta name="guid" content="M_Grpc_Core_CallInvocationDetails_2__ctor_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor " tocid="Overload_Grpc_Core_CallInvocationDetails_2__ctor">CallInvocationDetails(TRequest, TResponse) Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor_1">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor_2">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LST8DF8F0A2_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST8DF8F0A2_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Constructor (Channel, String, String, Marshaller<span id="LST8DF8F0A2_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span><span id="LST8DF8F0A2_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, Marshaller<span id="LST8DF8F0A2_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LST8DF8F0A2_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, CallOptions)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Initializes a new instance of the <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST8DF8F0A2_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST8DF8F0A2_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> struct.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CallInvocationDetails</span>(
+ <span class="identifier">Channel</span> <span class="parameter">channel</span>,
+ <span class="identifier">string</span> <span class="parameter">method</span>,
+ <span class="identifier">string</span> <span class="parameter">host</span>,
+ <span class="identifier">Marshaller</span>&lt;TRequest&gt; <span class="parameter">requestMarshaller</span>,
+ <span class="identifier">Marshaller</span>&lt;TResponse&gt; <span class="parameter">responseMarshaller</span>,
+ <span class="identifier">CallOptions</span> <span class="parameter">options</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">channel</span> <span class="keyword">As</span> <span class="identifier">Channel</span>,
+ <span class="parameter">method</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">host</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">requestMarshaller</span> <span class="keyword">As</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> TRequest),
+ <span class="parameter">responseMarshaller</span> <span class="keyword">As</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> TResponse),
+ <span class="parameter">options</span> <span class="keyword">As</span> <span class="identifier">CallOptions</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">CallInvocationDetails</span>(
+ <span class="identifier">Channel</span>^ <span class="parameter">channel</span>,
+ <span class="identifier">String</span>^ <span class="parameter">method</span>,
+ <span class="identifier">String</span>^ <span class="parameter">host</span>,
+ <span class="identifier">Marshaller</span>&lt;TRequest&gt; <span class="parameter">requestMarshaller</span>,
+ <span class="identifier">Marshaller</span>&lt;TResponse&gt; <span class="parameter">responseMarshaller</span>,
+ <span class="identifier">CallOptions</span> <span class="parameter">options</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">channel</span> : <span class="identifier">Channel</span> *
+ <span class="parameter">method</span> : <span class="identifier">string</span> *
+ <span class="parameter">host</span> : <span class="identifier">string</span> *
+ <span class="parameter">requestMarshaller</span> : <span class="identifier">Marshaller</span>&lt;'TRequest&gt; *
+ <span class="parameter">responseMarshaller</span> : <span class="identifier">Marshaller</span>&lt;'TResponse&gt; *
+ <span class="parameter">options</span> : <span class="identifier">CallOptions</span> <span class="keyword">-&gt;</span> <span class="identifier">CallInvocationDetails</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">channel</span></dt><dd>Type: <a href="T_Grpc_Core_Channel.htm">Grpc.Core<span id="LST8DF8F0A2_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Channel</a><br />Channel to use for this call.</dd><dt><span class="parameter">method</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST8DF8F0A2_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Qualified method name.</dd><dt><span class="parameter">host</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST8DF8F0A2_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Host that contains the method.</dd><dt><span class="parameter">requestMarshaller</span></dt><dd>Type: <a href="T_Grpc_Core_Marshaller_1.htm">Grpc.Core<span id="LST8DF8F0A2_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Marshaller</a><span id="LST8DF8F0A2_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_12?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_CallInvocationDetails_2.htm"><span class="typeparameter">TRequest</span></a><span id="LST8DF8F0A2_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_13?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Request marshaller.</dd><dt><span class="parameter">responseMarshaller</span></dt><dd>Type: <a href="T_Grpc_Core_Marshaller_1.htm">Grpc.Core<span id="LST8DF8F0A2_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_14?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Marshaller</a><span id="LST8DF8F0A2_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_15?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_CallInvocationDetails_2.htm"><span class="typeparameter">TResponse</span></a><span id="LST8DF8F0A2_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_16?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Response marshaller.</dd><dt><span class="parameter">options</span></dt><dd>Type: <a href="T_Grpc_Core_CallOptions.htm">Grpc.Core<span id="LST8DF8F0A2_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_17?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CallOptions</a><br />Call options.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST8DF8F0A2_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_18?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST8DF8F0A2_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_19?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm">CallInvocationDetails<span id="LST8DF8F0A2_20"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_20?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST8DF8F0A2_21"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8DF8F0A2_21?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithCancellationToken.htm b/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithCancellationToken.htm
new file mode 100644
index 0000000000..e5bbc4eaae
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithCancellationToken.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions.WithCancellationToken Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WithCancellationToken method" /><meta name="System.Keywords" content="CallOptions.WithCancellationToken method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.WithCancellationToken" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.CallOptions.WithCancellationToken(System.Threading.CancellationToken)" /><meta name="Description" content="Returns new instance of with CancellationToken set to the value provided. Values of all other fields are preserved." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_CallOptions_WithCancellationToken" /><meta name="guid" content="M_Grpc_Core_CallOptions_WithCancellationToken" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_CallOptions.htm" title="CallOptions Methods" tocid="Methods_T_Grpc_Core_CallOptions">CallOptions Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithCancellationToken.htm" title="WithCancellationToken Method " tocid="M_Grpc_Core_CallOptions_WithCancellationToken">WithCancellationToken Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithDeadline.htm" title="WithDeadline Method " tocid="M_Grpc_Core_CallOptions_WithDeadline">WithDeadline Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithHeaders.htm" title="WithHeaders Method " tocid="M_Grpc_Core_CallOptions_WithHeaders">WithHeaders Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions<span id="LST77C31AE4_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77C31AE4_0?cpp=::|nu=.");</script>WithCancellationToken Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns new instance of <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a> with
+ <span class="code">CancellationToken</span> set to the value provided. Values of all other fields are preserved.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CallOptions</span> <span class="identifier">WithCancellationToken</span>(
+ <span class="identifier">CancellationToken</span> <span class="parameter">cancellationToken</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">WithCancellationToken</span> (
+ <span class="parameter">cancellationToken</span> <span class="keyword">As</span> <span class="identifier">CancellationToken</span>
+) <span class="keyword">As</span> <span class="identifier">CallOptions</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">CallOptions</span> <span class="identifier">WithCancellationToken</span>(
+ <span class="identifier">CancellationToken</span> <span class="parameter">cancellationToken</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">WithCancellationToken</span> :
+ <span class="parameter">cancellationToken</span> : <span class="identifier">CancellationToken</span> <span class="keyword">-&gt;</span> <span class="identifier">CallOptions</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">cancellationToken</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd384802" target="_blank">System.Threading<span id="LST77C31AE4_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77C31AE4_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CancellationToken</a><br />The cancellation token.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithDeadline.htm b/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithDeadline.htm
new file mode 100644
index 0000000000..9d7e0d2dcb
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithDeadline.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions.WithDeadline Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WithDeadline method" /><meta name="System.Keywords" content="CallOptions.WithDeadline method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.WithDeadline" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.CallOptions.WithDeadline(System.DateTime)" /><meta name="Description" content="Returns new instance of with Deadline set to the value provided. Values of all other fields are preserved." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_CallOptions_WithDeadline" /><meta name="guid" content="M_Grpc_Core_CallOptions_WithDeadline" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_CallOptions.htm" title="CallOptions Methods" tocid="Methods_T_Grpc_Core_CallOptions">CallOptions Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithCancellationToken.htm" title="WithCancellationToken Method " tocid="M_Grpc_Core_CallOptions_WithCancellationToken">WithCancellationToken Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithDeadline.htm" title="WithDeadline Method " tocid="M_Grpc_Core_CallOptions_WithDeadline">WithDeadline Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithHeaders.htm" title="WithHeaders Method " tocid="M_Grpc_Core_CallOptions_WithHeaders">WithHeaders Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions<span id="LST18357B11_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18357B11_0?cpp=::|nu=.");</script>WithDeadline Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns new instance of <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a> with
+ <span class="code">Deadline</span> set to the value provided. Values of all other fields are preserved.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CallOptions</span> <span class="identifier">WithDeadline</span>(
+ <span class="identifier">DateTime</span> <span class="parameter">deadline</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">WithDeadline</span> (
+ <span class="parameter">deadline</span> <span class="keyword">As</span> <span class="identifier">DateTime</span>
+) <span class="keyword">As</span> <span class="identifier">CallOptions</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">CallOptions</span> <span class="identifier">WithDeadline</span>(
+ <span class="identifier">DateTime</span> <span class="parameter">deadline</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">WithDeadline</span> :
+ <span class="parameter">deadline</span> : <span class="identifier">DateTime</span> <span class="keyword">-&gt;</span> <span class="identifier">CallOptions</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">deadline</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/03ybds8y" target="_blank">System<span id="LST18357B11_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18357B11_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>DateTime</a><br />The deadline.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithHeaders.htm b/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithHeaders.htm
new file mode 100644
index 0000000000..6d65f8330e
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions_WithHeaders.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions.WithHeaders Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WithHeaders method" /><meta name="System.Keywords" content="CallOptions.WithHeaders method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.WithHeaders" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.CallOptions.WithHeaders(Grpc.Core.Metadata)" /><meta name="Description" content="Returns new instance of with Headers set to the value provided. Values of all other fields are preserved." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_CallOptions_WithHeaders" /><meta name="guid" content="M_Grpc_Core_CallOptions_WithHeaders" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_CallOptions.htm" title="CallOptions Methods" tocid="Methods_T_Grpc_Core_CallOptions">CallOptions Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithCancellationToken.htm" title="WithCancellationToken Method " tocid="M_Grpc_Core_CallOptions_WithCancellationToken">WithCancellationToken Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithDeadline.htm" title="WithDeadline Method " tocid="M_Grpc_Core_CallOptions_WithDeadline">WithDeadline Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithHeaders.htm" title="WithHeaders Method " tocid="M_Grpc_Core_CallOptions_WithHeaders">WithHeaders Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions<span id="LST9B3F2FE5_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B3F2FE5_0?cpp=::|nu=.");</script>WithHeaders Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns new instance of <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a> with
+ <span class="code">Headers</span> set to the value provided. Values of all other fields are preserved.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CallOptions</span> <span class="identifier">WithHeaders</span>(
+ <span class="identifier">Metadata</span> <span class="parameter">headers</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">WithHeaders</span> (
+ <span class="parameter">headers</span> <span class="keyword">As</span> <span class="identifier">Metadata</span>
+) <span class="keyword">As</span> <span class="identifier">CallOptions</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">CallOptions</span> <span class="identifier">WithHeaders</span>(
+ <span class="identifier">Metadata</span>^ <span class="parameter">headers</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">WithHeaders</span> :
+ <span class="parameter">headers</span> : <span class="identifier">Metadata</span> <span class="keyword">-&gt;</span> <span class="identifier">CallOptions</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">headers</span></dt><dd>Type: <a href="T_Grpc_Core_Metadata.htm">Grpc.Core<span id="LST9B3F2FE5_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B3F2FE5_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata</a><br />The headers.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions__ctor.htm
new file mode 100644
index 0000000000..ee9c631edb
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_CallOptions__ctor.htm
@@ -0,0 +1,35 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CallOptions structure, constructor" /><meta name="System.Keywords" content="CallOptions.CallOptions constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.CallOptions" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.CallOptions.#ctor(Grpc.Core.Metadata,System.Nullable{System.DateTime},System.Threading.CancellationToken,Grpc.Core.WriteOptions,Grpc.Core.ContextPropagationToken)" /><meta name="Description" content="Creates a new instance of CallOptions struct." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_CallOptions__ctor" /><meta name="guid" content="M_Grpc_Core_CallOptions__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions__ctor.htm" title="CallOptions Constructor " tocid="M_Grpc_Core_CallOptions__ctor">CallOptions Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallOptions.htm" title="CallOptions Properties" tocid="Properties_T_Grpc_Core_CallOptions">CallOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_CallOptions.htm" title="CallOptions Methods" tocid="Methods_T_Grpc_Core_CallOptions">CallOptions Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a new instance of <span class="code">CallOptions</span> struct.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CallOptions</span>(
+ <span class="identifier">Metadata</span> <span class="parameter">headers</span> = <span class="keyword">null</span>,
+ <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; <span class="parameter">deadline</span> = <span class="keyword">null</span>,
+ <span class="identifier">CancellationToken</span> <span class="parameter">cancellationToken</span> = <span class="keyword">null</span>,
+ <span class="identifier">WriteOptions</span> <span class="parameter">writeOptions</span> = <span class="keyword">null</span>,
+ <span class="identifier">ContextPropagationToken</span> <span class="parameter">propagationToken</span> = <span class="keyword">null</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ Optional <span class="parameter">headers</span> <span class="keyword">As</span> <span class="identifier">Metadata</span> = <span class="keyword">Nothing</span>,
+ Optional <span class="parameter">deadline</span> <span class="keyword">As</span> <span class="identifier">Nullable</span>(<span class="keyword">Of</span> <span class="identifier">DateTime</span>) = <span class="keyword">Nothing</span>,
+ Optional <span class="parameter">cancellationToken</span> <span class="keyword">As</span> <span class="identifier">CancellationToken</span> = <span class="keyword">Nothing</span>,
+ Optional <span class="parameter">writeOptions</span> <span class="keyword">As</span> <span class="identifier">WriteOptions</span> = <span class="keyword">Nothing</span>,
+ Optional <span class="parameter">propagationToken</span> <span class="keyword">As</span> <span class="identifier">ContextPropagationToken</span> = <span class="keyword">Nothing</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">CallOptions</span>(
+ <span class="identifier">Metadata</span>^ <span class="parameter">headers</span> = <span class="keyword">nullptr</span>,
+ <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; <span class="parameter">deadline</span> = <span class="keyword">nullptr</span>,
+ <span class="identifier">CancellationToken</span> <span class="parameter">cancellationToken</span> = <span class="keyword">nullptr</span>,
+ <span class="identifier">WriteOptions</span>^ <span class="parameter">writeOptions</span> = <span class="keyword">nullptr</span>,
+ <span class="identifier">ContextPropagationToken</span>^ <span class="parameter">propagationToken</span> = <span class="keyword">nullptr</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ ?<span class="parameter">headers</span> : <span class="identifier">Metadata</span> *
+ ?<span class="parameter">deadline</span> : <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; *
+ ?<span class="parameter">cancellationToken</span> : <span class="identifier">CancellationToken</span> *
+ ?<span class="parameter">writeOptions</span> : <span class="identifier">WriteOptions</span> *
+ ?<span class="parameter">propagationToken</span> : <span class="identifier">ContextPropagationToken</span>
+(* Defaults:
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">headers</span> = defaultArg <span class="identifier">headers</span> <span class="keyword">null</span>
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">deadline</span> = defaultArg <span class="identifier">deadline</span> <span class="keyword">null</span>
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">cancellationToken</span> = defaultArg <span class="identifier">cancellationToken</span> <span class="keyword">null</span>
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">writeOptions</span> = defaultArg <span class="identifier">writeOptions</span> <span class="keyword">null</span>
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">propagationToken</span> = defaultArg <span class="identifier">propagationToken</span> <span class="keyword">null</span>
+*)
+<span class="keyword">-&gt;</span> <span class="identifier">CallOptions</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">headers</span> (Optional)</dt><dd>Type: <a href="T_Grpc_Core_Metadata.htm">Grpc.Core<span id="LST883CC382_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST883CC382_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata</a><br />Headers to be sent with the call.</dd><dt><span class="parameter">deadline</span> (Optional)</dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/b3h38hb0" target="_blank">System<span id="LST883CC382_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST883CC382_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Nullable</a><span id="LST883CC382_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST883CC382_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="http://msdn2.microsoft.com/en-us/library/03ybds8y" target="_blank">DateTime</a><span id="LST883CC382_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST883CC382_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Deadline for the call to finish. null means no deadline.</dd><dt><span class="parameter">cancellationToken</span> (Optional)</dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd384802" target="_blank">System.Threading<span id="LST883CC382_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST883CC382_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CancellationToken</a><br />Can be used to request cancellation of the call.</dd><dt><span class="parameter">writeOptions</span> (Optional)</dt><dd>Type: <a href="T_Grpc_Core_WriteOptions.htm">Grpc.Core<span id="LST883CC382_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST883CC382_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>WriteOptions</a><br />Write options that will be used for this call.</dd><dt><span class="parameter">propagationToken</span> (Optional)</dt><dd>Type: <a href="T_Grpc_Core_ContextPropagationToken.htm">Grpc.Core<span id="LST883CC382_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST883CC382_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ContextPropagationToken</a><br />Context propagation token obtained from <a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext</a>.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm
new file mode 100644
index 0000000000..f1a9131a2a
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Calls.AsyncClientStreamingCall(TRequest, TResponse) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse) method" /><meta name="System.Keywords" content="Calls.AsyncClientStreamingCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="Calls.AsyncClientStreamingCall(Of TRequest%2C TResponse) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Calls.AsyncClientStreamingCall``2" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Calls.AsyncClientStreamingCall``2(Grpc.Core.CallInvocationDetails{``0,``1})" /><meta name="Description" content="Invokes a client streaming call asynchronously. In client streaming scenario, client sends a stream of requests and server responds with a single response." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Calls_AsyncClientStreamingCall__2" /><meta name="guid" content="M_Grpc_Core_Calls_AsyncClientStreamingCall__2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Calls.htm" title="Calls Methods" tocid="Methods_T_Grpc_Core_Calls">Calls Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncClientStreamingCall__2">AsyncClientStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2">AsyncDuplexStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" title="AsyncServerStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncServerStreamingCall__2">AsyncServerStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" title="AsyncUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncUnaryCall__2">AsyncUnaryCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" title="BlockingUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_BlockingUnaryCall__2">BlockingUnaryCall(TRequest, TResponse) Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Calls<span id="LST79B5F655_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79B5F655_0?cpp=::|nu=.");</script>AsyncClientStreamingCall<span id="LST79B5F655_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79B5F655_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST79B5F655_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79B5F655_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Invokes a client streaming call asynchronously.
+ In client streaming scenario, client sends a stream of requests and server responds with a single response.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">AsyncClientStreamingCall</span>&lt;TRequest, TResponse&gt; <span class="identifier">AsyncClientStreamingCall</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="parameter">call</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">AsyncClientStreamingCall</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">call</span> <span class="keyword">As</span> <span class="identifier">CallInvocationDetails</span>(<span class="keyword">Of</span> TRequest, TResponse)
+) <span class="keyword">As</span> <span class="identifier">AsyncClientStreamingCall</span>(<span class="keyword">Of</span> TRequest, TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="keyword">static</span> <span class="identifier">AsyncClientStreamingCall</span>&lt;TRequest, TResponse&gt;^ <span class="identifier">AsyncClientStreamingCall</span>(
+ <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="parameter">call</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">AsyncClientStreamingCall</span> :
+ <span class="parameter">call</span> : <span class="identifier">CallInvocationDetails</span>&lt;'TRequest, 'TResponse&gt; <span class="keyword">-&gt;</span> <span class="identifier">AsyncClientStreamingCall</span>&lt;'TRequest, 'TResponse&gt; <span class="keyword">when</span> 'TRequest : <span class="keyword">not struct</span> <span class="keyword">when</span> 'TResponse : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">call</span></dt><dd>Type: <a href="T_Grpc_Core_CallInvocationDetails_2.htm">Grpc.Core<span id="LST79B5F655_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79B5F655_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CallInvocationDetails</a><span id="LST79B5F655_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79B5F655_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST79B5F655_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79B5F655_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The call defintion.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Type of request messages.</dd><dt><span class="parameter">TResponse</span></dt><dd>The of response message.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall</a><span id="LST79B5F655_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79B5F655_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST79B5F655_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79B5F655_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />An awaitable call object providing access to the response.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Calls.htm">Calls Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm
new file mode 100644
index 0000000000..6dba139ab8
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm
@@ -0,0 +1,20 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Calls.AsyncDuplexStreamingCall(TRequest, TResponse) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse) method" /><meta name="System.Keywords" content="Calls.AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="Calls.AsyncDuplexStreamingCall(Of TRequest%2C TResponse) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Calls.AsyncDuplexStreamingCall``2" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Calls.AsyncDuplexStreamingCall``2(Grpc.Core.CallInvocationDetails{``0,``1})" /><meta name="Description" content="Invokes a duplex streaming call asynchronously. In duplex streaming scenario, client sends a stream of requests and server responds with a stream of responses." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2" /><meta name="guid" content="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Calls.htm" title="Calls Methods" tocid="Methods_T_Grpc_Core_Calls">Calls Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncClientStreamingCall__2">AsyncClientStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2">AsyncDuplexStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" title="AsyncServerStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncServerStreamingCall__2">AsyncServerStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" title="AsyncUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncUnaryCall__2">AsyncUnaryCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" title="BlockingUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_BlockingUnaryCall__2">BlockingUnaryCall(TRequest, TResponse) Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Calls<span id="LST2586B34A_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2586B34A_0?cpp=::|nu=.");</script>AsyncDuplexStreamingCall<span id="LST2586B34A_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2586B34A_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST2586B34A_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2586B34A_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Invokes a duplex streaming call asynchronously.
+ In duplex streaming scenario, client sends a stream of requests and server responds with a stream of responses.
+ The response stream is completely independent and both side can be sending messages at the same time.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">AsyncDuplexStreamingCall</span>&lt;TRequest, TResponse&gt; <span class="identifier">AsyncDuplexStreamingCall</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="parameter">call</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">AsyncDuplexStreamingCall</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">call</span> <span class="keyword">As</span> <span class="identifier">CallInvocationDetails</span>(<span class="keyword">Of</span> TRequest, TResponse)
+) <span class="keyword">As</span> <span class="identifier">AsyncDuplexStreamingCall</span>(<span class="keyword">Of</span> TRequest, TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="keyword">static</span> <span class="identifier">AsyncDuplexStreamingCall</span>&lt;TRequest, TResponse&gt;^ <span class="identifier">AsyncDuplexStreamingCall</span>(
+ <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="parameter">call</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">AsyncDuplexStreamingCall</span> :
+ <span class="parameter">call</span> : <span class="identifier">CallInvocationDetails</span>&lt;'TRequest, 'TResponse&gt; <span class="keyword">-&gt;</span> <span class="identifier">AsyncDuplexStreamingCall</span>&lt;'TRequest, 'TResponse&gt; <span class="keyword">when</span> 'TRequest : <span class="keyword">not struct</span> <span class="keyword">when</span> 'TResponse : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">call</span></dt><dd>Type: <a href="T_Grpc_Core_CallInvocationDetails_2.htm">Grpc.Core<span id="LST2586B34A_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2586B34A_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CallInvocationDetails</a><span id="LST2586B34A_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2586B34A_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST2586B34A_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2586B34A_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The call definition.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Type of request messages.</dd><dt><span class="parameter">TResponse</span></dt><dd>Type of reponse messages.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall</a><span id="LST2586B34A_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2586B34A_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST2586B34A_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2586B34A_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />A call object providing access to the asynchronous request and response streams.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Calls.htm">Calls Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm
new file mode 100644
index 0000000000..b5ac0db6c5
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm
@@ -0,0 +1,23 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Calls.AsyncServerStreamingCall(TRequest, TResponse) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncServerStreamingCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="AsyncServerStreamingCall(Of TRequest%2C TResponse) method" /><meta name="System.Keywords" content="Calls.AsyncServerStreamingCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="Calls.AsyncServerStreamingCall(Of TRequest%2C TResponse) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Calls.AsyncServerStreamingCall``2" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Calls.AsyncServerStreamingCall``2(Grpc.Core.CallInvocationDetails{``0,``1},``0)" /><meta name="Description" content="Invokes a server streaming call asynchronously. In server streaming scenario, client sends on request and server responds with a stream of responses." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Calls_AsyncServerStreamingCall__2" /><meta name="guid" content="M_Grpc_Core_Calls_AsyncServerStreamingCall__2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Calls.htm" title="Calls Methods" tocid="Methods_T_Grpc_Core_Calls">Calls Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncClientStreamingCall__2">AsyncClientStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2">AsyncDuplexStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" title="AsyncServerStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncServerStreamingCall__2">AsyncServerStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" title="AsyncUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncUnaryCall__2">AsyncUnaryCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" title="BlockingUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_BlockingUnaryCall__2">BlockingUnaryCall(TRequest, TResponse) Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Calls<span id="LST97B8A915_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97B8A915_0?cpp=::|nu=.");</script>AsyncServerStreamingCall<span id="LST97B8A915_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97B8A915_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST97B8A915_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97B8A915_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Invokes a server streaming call asynchronously.
+ In server streaming scenario, client sends on request and server responds with a stream of responses.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">AsyncServerStreamingCall</span>&lt;TResponse&gt; <span class="identifier">AsyncServerStreamingCall</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="parameter">call</span>,
+ TRequest <span class="parameter">req</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">AsyncServerStreamingCall</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">call</span> <span class="keyword">As</span> <span class="identifier">CallInvocationDetails</span>(<span class="keyword">Of</span> TRequest, TResponse),
+ <span class="parameter">req</span> <span class="keyword">As</span> TRequest
+) <span class="keyword">As</span> <span class="identifier">AsyncServerStreamingCall</span>(<span class="keyword">Of</span> TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="keyword">static</span> <span class="identifier">AsyncServerStreamingCall</span>&lt;TResponse&gt;^ <span class="identifier">AsyncServerStreamingCall</span>(
+ <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="parameter">call</span>,
+ TRequest <span class="parameter">req</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">AsyncServerStreamingCall</span> :
+ <span class="parameter">call</span> : <span class="identifier">CallInvocationDetails</span>&lt;'TRequest, 'TResponse&gt; *
+ <span class="parameter">req</span> : 'TRequest <span class="keyword">-&gt;</span> <span class="identifier">AsyncServerStreamingCall</span>&lt;'TResponse&gt; <span class="keyword">when</span> 'TRequest : <span class="keyword">not struct</span> <span class="keyword">when</span> 'TResponse : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">call</span></dt><dd>Type: <a href="T_Grpc_Core_CallInvocationDetails_2.htm">Grpc.Core<span id="LST97B8A915_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97B8A915_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CallInvocationDetails</a><span id="LST97B8A915_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97B8A915_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST97B8A915_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97B8A915_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The call defintion.</dd><dt><span class="parameter">req</span></dt><dd>Type: <span class="selflink"><span class="typeparameter">TRequest</span></span><br />Request message.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Type of request message.</dd><dt><span class="parameter">TResponse</span></dt><dd>The of response messages.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall</a><span id="LST97B8A915_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97B8A915_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST97B8A915_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97B8A915_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />A call object providing access to the asynchronous response stream.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Calls.htm">Calls Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm
new file mode 100644
index 0000000000..233475428a
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm
@@ -0,0 +1,22 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Calls.AsyncUnaryCall(TRequest, TResponse) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TRequest%2C TResponse) method" /><meta name="System.Keywords" content="Calls.AsyncUnaryCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="Calls.AsyncUnaryCall(Of TRequest%2C TResponse) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Calls.AsyncUnaryCall``2" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Calls.AsyncUnaryCall``2(Grpc.Core.CallInvocationDetails{``0,``1},``0)" /><meta name="Description" content="Invokes a simple remote call asynchronously." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Calls_AsyncUnaryCall__2" /><meta name="guid" content="M_Grpc_Core_Calls_AsyncUnaryCall__2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Calls.htm" title="Calls Methods" tocid="Methods_T_Grpc_Core_Calls">Calls Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncClientStreamingCall__2">AsyncClientStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2">AsyncDuplexStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" title="AsyncServerStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncServerStreamingCall__2">AsyncServerStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" title="AsyncUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncUnaryCall__2">AsyncUnaryCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" title="BlockingUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_BlockingUnaryCall__2">BlockingUnaryCall(TRequest, TResponse) Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Calls<span id="LSTD45096DD_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD45096DD_0?cpp=::|nu=.");</script>AsyncUnaryCall<span id="LSTD45096DD_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD45096DD_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTD45096DD_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD45096DD_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Invokes a simple remote call asynchronously.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">AsyncUnaryCall</span>&lt;TResponse&gt; <span class="identifier">AsyncUnaryCall</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="parameter">call</span>,
+ TRequest <span class="parameter">req</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">AsyncUnaryCall</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">call</span> <span class="keyword">As</span> <span class="identifier">CallInvocationDetails</span>(<span class="keyword">Of</span> TRequest, TResponse),
+ <span class="parameter">req</span> <span class="keyword">As</span> TRequest
+) <span class="keyword">As</span> <span class="identifier">AsyncUnaryCall</span>(<span class="keyword">Of</span> TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="keyword">static</span> <span class="identifier">AsyncUnaryCall</span>&lt;TResponse&gt;^ <span class="identifier">AsyncUnaryCall</span>(
+ <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="parameter">call</span>,
+ TRequest <span class="parameter">req</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">AsyncUnaryCall</span> :
+ <span class="parameter">call</span> : <span class="identifier">CallInvocationDetails</span>&lt;'TRequest, 'TResponse&gt; *
+ <span class="parameter">req</span> : 'TRequest <span class="keyword">-&gt;</span> <span class="identifier">AsyncUnaryCall</span>&lt;'TResponse&gt; <span class="keyword">when</span> 'TRequest : <span class="keyword">not struct</span> <span class="keyword">when</span> 'TResponse : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">call</span></dt><dd>Type: <a href="T_Grpc_Core_CallInvocationDetails_2.htm">Grpc.Core<span id="LSTD45096DD_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD45096DD_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CallInvocationDetails</a><span id="LSTD45096DD_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD45096DD_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LSTD45096DD_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD45096DD_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The call defintion.</dd><dt><span class="parameter">req</span></dt><dd>Type: <span class="selflink"><span class="typeparameter">TRequest</span></span><br />Request message.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Type of request message.</dd><dt><span class="parameter">TResponse</span></dt><dd>The of response message.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall</a><span id="LSTD45096DD_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD45096DD_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LSTD45096DD_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD45096DD_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />An awaitable call object providing access to the response.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Calls.htm">Calls Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm
new file mode 100644
index 0000000000..438ef1d39c
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm
@@ -0,0 +1,22 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Calls.BlockingUnaryCall(TRequest, TResponse) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="BlockingUnaryCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="BlockingUnaryCall(Of TRequest%2C TResponse) method" /><meta name="System.Keywords" content="Calls.BlockingUnaryCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="Calls.BlockingUnaryCall(Of TRequest%2C TResponse) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Calls.BlockingUnaryCall``2" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Calls.BlockingUnaryCall``2(Grpc.Core.CallInvocationDetails{``0,``1},``0)" /><meta name="Description" content="Invokes a simple remote call in a blocking fashion." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Calls_BlockingUnaryCall__2" /><meta name="guid" content="M_Grpc_Core_Calls_BlockingUnaryCall__2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Calls.htm" title="Calls Methods" tocid="Methods_T_Grpc_Core_Calls">Calls Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncClientStreamingCall__2">AsyncClientStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2">AsyncDuplexStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" title="AsyncServerStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncServerStreamingCall__2">AsyncServerStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" title="AsyncUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncUnaryCall__2">AsyncUnaryCall(TRequest, TResponse) Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" title="BlockingUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_BlockingUnaryCall__2">BlockingUnaryCall(TRequest, TResponse) Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Calls<span id="LST96EE894_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST96EE894_0?cpp=::|nu=.");</script>BlockingUnaryCall<span id="LST96EE894_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST96EE894_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST96EE894_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST96EE894_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Invokes a simple remote call in a blocking fashion.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> TResponse <span class="identifier">BlockingUnaryCall</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="parameter">call</span>,
+ TRequest <span class="parameter">req</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">BlockingUnaryCall</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">call</span> <span class="keyword">As</span> <span class="identifier">CallInvocationDetails</span>(<span class="keyword">Of</span> TRequest, TResponse),
+ <span class="parameter">req</span> <span class="keyword">As</span> TRequest
+) <span class="keyword">As</span> TResponse</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="keyword">static</span> TResponse <span class="identifier">BlockingUnaryCall</span>(
+ <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="parameter">call</span>,
+ TRequest <span class="parameter">req</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">BlockingUnaryCall</span> :
+ <span class="parameter">call</span> : <span class="identifier">CallInvocationDetails</span>&lt;'TRequest, 'TResponse&gt; *
+ <span class="parameter">req</span> : 'TRequest <span class="keyword">-&gt;</span> 'TResponse <span class="keyword">when</span> 'TRequest : <span class="keyword">not struct</span> <span class="keyword">when</span> 'TResponse : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">call</span></dt><dd>Type: <a href="T_Grpc_Core_CallInvocationDetails_2.htm">Grpc.Core<span id="LST96EE894_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST96EE894_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CallInvocationDetails</a><span id="LST96EE894_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST96EE894_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST96EE894_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST96EE894_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The call defintion.</dd><dt><span class="parameter">req</span></dt><dd>Type: <span class="selflink"><span class="typeparameter">TRequest</span></span><br />Request message.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Type of request message.</dd><dt><span class="parameter">TResponse</span></dt><dd>The of response message.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <span class="selflink"><span class="typeparameter">TResponse</span></span><br />The response.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Calls.htm">Calls Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ChannelOption__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ChannelOption__ctor.htm
new file mode 100644
index 0000000000..2cf5522f32
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ChannelOption__ctor.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption Constructor (String, Int32)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ChannelOption.#ctor(System.String,System.Int32)" /><meta name="Description" content="Creates a channel option with an integer value." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ChannelOption__ctor" /><meta name="guid" content="M_Grpc_Core_ChannelOption__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ChannelOption__ctor.htm" title="ChannelOption Constructor " tocid="Overload_Grpc_Core_ChannelOption__ctor">ChannelOption Constructor </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ChannelOption__ctor.htm" title="ChannelOption Constructor (String, Int32)" tocid="M_Grpc_Core_ChannelOption__ctor">ChannelOption Constructor (String, Int32)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ChannelOption__ctor_1.htm" title="ChannelOption Constructor (String, String)" tocid="M_Grpc_Core_ChannelOption__ctor_1">ChannelOption Constructor (String, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption Constructor (String, Int32)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a channel option with an integer value.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ChannelOption</span>(
+ <span class="identifier">string</span> <span class="parameter">name</span>,
+ <span class="identifier">int</span> <span class="parameter">intValue</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">name</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">intValue</span> <span class="keyword">As</span> <span class="identifier">Integer</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">ChannelOption</span>(
+ <span class="identifier">String</span>^ <span class="parameter">name</span>,
+ <span class="identifier">int</span> <span class="parameter">intValue</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">name</span> : <span class="identifier">string</span> *
+ <span class="parameter">intValue</span> : <span class="identifier">int</span> <span class="keyword">-&gt;</span> <span class="identifier">ChannelOption</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">name</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTB54A1247_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB54A1247_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Name.</dd><dt><span class="parameter">intValue</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">System<span id="LSTB54A1247_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB54A1247_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Int32</a><br />Integer value.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_ChannelOption__ctor.htm">ChannelOption Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ChannelOption__ctor_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ChannelOption__ctor_1.htm
new file mode 100644
index 0000000000..0cb44f83e9
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ChannelOption__ctor_1.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption Constructor (String, String)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ChannelOption.#ctor(System.String,System.String)" /><meta name="Description" content="Creates a channel option with a string value." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ChannelOption__ctor_1" /><meta name="guid" content="M_Grpc_Core_ChannelOption__ctor_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ChannelOption__ctor.htm" title="ChannelOption Constructor " tocid="Overload_Grpc_Core_ChannelOption__ctor">ChannelOption Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ChannelOption__ctor.htm" title="ChannelOption Constructor (String, Int32)" tocid="M_Grpc_Core_ChannelOption__ctor">ChannelOption Constructor (String, Int32)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ChannelOption__ctor_1.htm" title="ChannelOption Constructor (String, String)" tocid="M_Grpc_Core_ChannelOption__ctor_1">ChannelOption Constructor (String, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption Constructor (String, String)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a channel option with a string value.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ChannelOption</span>(
+ <span class="identifier">string</span> <span class="parameter">name</span>,
+ <span class="identifier">string</span> <span class="parameter">stringValue</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">name</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">stringValue</span> <span class="keyword">As</span> <span class="identifier">String</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">ChannelOption</span>(
+ <span class="identifier">String</span>^ <span class="parameter">name</span>,
+ <span class="identifier">String</span>^ <span class="parameter">stringValue</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">name</span> : <span class="identifier">string</span> *
+ <span class="parameter">stringValue</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="identifier">ChannelOption</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">name</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST345CD76_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST345CD76_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Name.</dd><dt><span class="parameter">stringValue</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST345CD76_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST345CD76_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />String value.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_ChannelOption__ctor.htm">ChannelOption Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Channel_ConnectAsync.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Channel_ConnectAsync.htm
new file mode 100644
index 0000000000..c3dc1a1577
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Channel_ConnectAsync.htm
@@ -0,0 +1,20 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel.ConnectAsync Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ConnectAsync method" /><meta name="System.Keywords" content="Channel.ConnectAsync method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.ConnectAsync" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Channel.ConnectAsync(System.Nullable{System.DateTime})" /><meta name="Description" content="Allows explicitly requesting channel to connect without starting an RPC. Returned task completes once state Ready was seen. If the deadline is reached, or channel enters the FatalFailure state, the task is cancelled." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Channel_ConnectAsync" /><meta name="guid" content="M_Grpc_Core_Channel_ConnectAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Channel.htm" title="Channel Methods" tocid="Methods_T_Grpc_Core_Channel">Channel Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_ConnectAsync.htm" title="ConnectAsync Method " tocid="M_Grpc_Core_Channel_ConnectAsync">ConnectAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_ShutdownAsync.htm" title="ShutdownAsync Method " tocid="M_Grpc_Core_Channel_ShutdownAsync">ShutdownAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_WaitForStateChangedAsync.htm" title="WaitForStateChangedAsync Method " tocid="M_Grpc_Core_Channel_WaitForStateChangedAsync">WaitForStateChangedAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel<span id="LST9E4D95F4_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9E4D95F4_0?cpp=::|nu=.");</script>ConnectAsync Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Allows explicitly requesting channel to connect without starting an RPC.
+ Returned task completes once state Ready was seen. If the deadline is reached,
+ or channel enters the FatalFailure state, the task is cancelled.
+ There is no need to call this explicitly unless your use case requires that.
+ Starting an RPC on a new channel will request connection implicitly.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span> <span class="identifier">ConnectAsync</span>(
+ <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; <span class="parameter">deadline</span> = <span class="keyword">null</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">ConnectAsync</span> (
+ Optional <span class="parameter">deadline</span> <span class="keyword">As</span> <span class="identifier">Nullable</span>(<span class="keyword">Of</span> <span class="identifier">DateTime</span>) = <span class="keyword">Nothing</span>
+) <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Task</span>^ <span class="identifier">ConnectAsync</span>(
+ <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; <span class="parameter">deadline</span> = <span class="keyword">nullptr</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ConnectAsync</span> :
+ ?<span class="parameter">deadline</span> : <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt;
+(* Defaults:
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">deadline</span> = defaultArg <span class="identifier">deadline</span> <span class="keyword">null</span>
+*)
+<span class="keyword">-&gt;</span> <span class="identifier">Task</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">deadline</span> (Optional)</dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/b3h38hb0" target="_blank">System<span id="LST9E4D95F4_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9E4D95F4_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Nullable</a><span id="LST9E4D95F4_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9E4D95F4_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="http://msdn2.microsoft.com/en-us/library/03ybds8y" target="_blank">DateTime</a><span id="LST9E4D95F4_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9E4D95F4_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The deadline. <span class="code">null</span> indicates no deadline.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Channel_ShutdownAsync.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Channel_ShutdownAsync.htm
new file mode 100644
index 0000000000..f8a04d4f8c
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Channel_ShutdownAsync.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel.ShutdownAsync Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ShutdownAsync method" /><meta name="System.Keywords" content="Channel.ShutdownAsync method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.ShutdownAsync" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Channel.ShutdownAsync" /><meta name="Description" content="Waits until there are no more active calls for this channel and then cleans up resources used by this channel." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Channel_ShutdownAsync" /><meta name="guid" content="M_Grpc_Core_Channel_ShutdownAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Channel.htm" title="Channel Methods" tocid="Methods_T_Grpc_Core_Channel">Channel Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_ConnectAsync.htm" title="ConnectAsync Method " tocid="M_Grpc_Core_Channel_ConnectAsync">ConnectAsync Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_ShutdownAsync.htm" title="ShutdownAsync Method " tocid="M_Grpc_Core_Channel_ShutdownAsync">ShutdownAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_WaitForStateChangedAsync.htm" title="WaitForStateChangedAsync Method " tocid="M_Grpc_Core_Channel_WaitForStateChangedAsync">WaitForStateChangedAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel<span id="LST85C37DE1_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST85C37DE1_0?cpp=::|nu=.");</script>ShutdownAsync Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Waits until there are no more active calls for this channel and then cleans up
+ resources used by this channel.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span> <span class="identifier">ShutdownAsync</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">ShutdownAsync</span> <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Task</span>^ <span class="identifier">ShutdownAsync</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ShutdownAsync</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Task</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Channel_WaitForStateChangedAsync.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Channel_WaitForStateChangedAsync.htm
new file mode 100644
index 0000000000..92b613f8b6
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Channel_WaitForStateChangedAsync.htm
@@ -0,0 +1,22 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel.WaitForStateChangedAsync Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WaitForStateChangedAsync method" /><meta name="System.Keywords" content="Channel.WaitForStateChangedAsync method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.WaitForStateChangedAsync" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Channel.WaitForStateChangedAsync(Grpc.Core.ChannelState,System.Nullable{System.DateTime})" /><meta name="Description" content="Returned tasks completes once channel state has become different from given lastObservedState. If deadline is reached or and error occurs, returned task is cancelled." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Channel_WaitForStateChangedAsync" /><meta name="guid" content="M_Grpc_Core_Channel_WaitForStateChangedAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Channel.htm" title="Channel Methods" tocid="Methods_T_Grpc_Core_Channel">Channel Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_ConnectAsync.htm" title="ConnectAsync Method " tocid="M_Grpc_Core_Channel_ConnectAsync">ConnectAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_ShutdownAsync.htm" title="ShutdownAsync Method " tocid="M_Grpc_Core_Channel_ShutdownAsync">ShutdownAsync Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_WaitForStateChangedAsync.htm" title="WaitForStateChangedAsync Method " tocid="M_Grpc_Core_Channel_WaitForStateChangedAsync">WaitForStateChangedAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel<span id="LST5691ABAE_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5691ABAE_0?cpp=::|nu=.");</script>WaitForStateChangedAsync Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returned tasks completes once channel state has become different from
+ given lastObservedState.
+ If deadline is reached or and error occurs, returned task is cancelled.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span> <span class="identifier">WaitForStateChangedAsync</span>(
+ <span class="identifier">ChannelState</span> <span class="parameter">lastObservedState</span>,
+ <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; <span class="parameter">deadline</span> = <span class="keyword">null</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">WaitForStateChangedAsync</span> (
+ <span class="parameter">lastObservedState</span> <span class="keyword">As</span> <span class="identifier">ChannelState</span>,
+ Optional <span class="parameter">deadline</span> <span class="keyword">As</span> <span class="identifier">Nullable</span>(<span class="keyword">Of</span> <span class="identifier">DateTime</span>) = <span class="keyword">Nothing</span>
+) <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Task</span>^ <span class="identifier">WaitForStateChangedAsync</span>(
+ <span class="identifier">ChannelState</span> <span class="parameter">lastObservedState</span>,
+ <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; <span class="parameter">deadline</span> = <span class="keyword">nullptr</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">WaitForStateChangedAsync</span> :
+ <span class="parameter">lastObservedState</span> : <span class="identifier">ChannelState</span> *
+ ?<span class="parameter">deadline</span> : <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt;
+(* Defaults:
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">deadline</span> = defaultArg <span class="identifier">deadline</span> <span class="keyword">null</span>
+*)
+<span class="keyword">-&gt;</span> <span class="identifier">Task</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">lastObservedState</span></dt><dd>Type: <a href="T_Grpc_Core_ChannelState.htm">Grpc.Core<span id="LST5691ABAE_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5691ABAE_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ChannelState</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="lastObservedState"/&gt; documentation for "M:Grpc.Core.Channel.WaitForStateChangedAsync(Grpc.Core.ChannelState,System.Nullable{System.DateTime})"]</p></dd><dt><span class="parameter">deadline</span> (Optional)</dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/b3h38hb0" target="_blank">System<span id="LST5691ABAE_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5691ABAE_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Nullable</a><span id="LST5691ABAE_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5691ABAE_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="http://msdn2.microsoft.com/en-us/library/03ybds8y" target="_blank">DateTime</a><span id="LST5691ABAE_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5691ABAE_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="deadline"/&gt; documentation for "M:Grpc.Core.Channel.WaitForStateChangedAsync(Grpc.Core.ChannelState,System.Nullable{System.DateTime})"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Channel__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Channel__ctor.htm
new file mode 100644
index 0000000000..fcc5831c79
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Channel__ctor.htm
@@ -0,0 +1,24 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel Constructor (String, Credentials, IEnumerable(ChannelOption))</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Channel.#ctor(System.String,Grpc.Core.Credentials,System.Collections.Generic.IEnumerable{Grpc.Core.ChannelOption})" /><meta name="Description" content="Creates a channel that connects to a specific host. Port will default to 80 for an unsecure channel and to 443 for a secure channel." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Channel__ctor" /><meta name="guid" content="M_Grpc_Core_Channel__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Channel__ctor.htm" title="Channel Constructor " tocid="Overload_Grpc_Core_Channel__ctor">Channel Constructor </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel__ctor.htm" title="Channel Constructor (String, Credentials, IEnumerable(ChannelOption))" tocid="M_Grpc_Core_Channel__ctor">Channel Constructor (String, Credentials, IEnumerable(ChannelOption))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel__ctor_1.htm" title="Channel Constructor (String, Int32, Credentials, IEnumerable(ChannelOption))" tocid="M_Grpc_Core_Channel__ctor_1">Channel Constructor (String, Int32, Credentials, IEnumerable(ChannelOption))</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel Constructor (String, Credentials, IEnumerable<span id="LST307ECB37_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST307ECB37_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>ChannelOption<span id="LST307ECB37_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST307ECB37_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a channel that connects to a specific host.
+ Port will default to 80 for an unsecure channel and to 443 for a secure channel.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Channel</span>(
+ <span class="identifier">string</span> <span class="parameter">target</span>,
+ <span class="identifier">Credentials</span> <span class="parameter">credentials</span>,
+ <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ChannelOption</span>&gt; <span class="parameter">options</span> = <span class="keyword">null</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">target</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">credentials</span> <span class="keyword">As</span> <span class="identifier">Credentials</span>,
+ Optional <span class="parameter">options</span> <span class="keyword">As</span> <span class="identifier">IEnumerable</span>(<span class="keyword">Of</span> <span class="identifier">ChannelOption</span>) = <span class="keyword">Nothing</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Channel</span>(
+ <span class="identifier">String</span>^ <span class="parameter">target</span>,
+ <span class="identifier">Credentials</span>^ <span class="parameter">credentials</span>,
+ <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ChannelOption</span>^&gt;^ <span class="parameter">options</span> = <span class="keyword">nullptr</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">target</span> : <span class="identifier">string</span> *
+ <span class="parameter">credentials</span> : <span class="identifier">Credentials</span> *
+ ?<span class="parameter">options</span> : <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ChannelOption</span>&gt;
+(* Defaults:
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">options</span> = defaultArg <span class="identifier">options</span> <span class="keyword">null</span>
+*)
+<span class="keyword">-&gt;</span> <span class="identifier">Channel</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">target</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST307ECB37_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST307ECB37_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Target of the channel.</dd><dt><span class="parameter">credentials</span></dt><dd>Type: <a href="T_Grpc_Core_Credentials.htm">Grpc.Core<span id="LST307ECB37_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST307ECB37_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Credentials</a><br />Credentials to secure the channel.</dd><dt><span class="parameter">options</span> (Optional)</dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/9eekhta0" target="_blank">System.Collections.Generic<span id="LST307ECB37_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST307ECB37_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IEnumerable</a><span id="LST307ECB37_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST307ECB37_5?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption</a><span id="LST307ECB37_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST307ECB37_6?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Channel options.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Channel__ctor.htm">Channel Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Channel__ctor_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Channel__ctor_1.htm
new file mode 100644
index 0000000000..f888c880ec
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Channel__ctor_1.htm
@@ -0,0 +1,27 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel Constructor (String, Int32, Credentials, IEnumerable(ChannelOption))</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Channel.#ctor(System.String,System.Int32,Grpc.Core.Credentials,System.Collections.Generic.IEnumerable{Grpc.Core.ChannelOption})" /><meta name="Description" content="Creates a channel that connects to a specific host and port." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Channel__ctor_1" /><meta name="guid" content="M_Grpc_Core_Channel__ctor_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Channel__ctor.htm" title="Channel Constructor " tocid="Overload_Grpc_Core_Channel__ctor">Channel Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel__ctor.htm" title="Channel Constructor (String, Credentials, IEnumerable(ChannelOption))" tocid="M_Grpc_Core_Channel__ctor">Channel Constructor (String, Credentials, IEnumerable(ChannelOption))</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel__ctor_1.htm" title="Channel Constructor (String, Int32, Credentials, IEnumerable(ChannelOption))" tocid="M_Grpc_Core_Channel__ctor_1">Channel Constructor (String, Int32, Credentials, IEnumerable(ChannelOption))</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel Constructor (String, Int32, Credentials, IEnumerable<span id="LSTA535342_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA535342_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>ChannelOption<span id="LSTA535342_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA535342_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a channel that connects to a specific host and port.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Channel</span>(
+ <span class="identifier">string</span> <span class="parameter">host</span>,
+ <span class="identifier">int</span> <span class="parameter">port</span>,
+ <span class="identifier">Credentials</span> <span class="parameter">credentials</span>,
+ <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ChannelOption</span>&gt; <span class="parameter">options</span> = <span class="keyword">null</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">host</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">port</span> <span class="keyword">As</span> <span class="identifier">Integer</span>,
+ <span class="parameter">credentials</span> <span class="keyword">As</span> <span class="identifier">Credentials</span>,
+ Optional <span class="parameter">options</span> <span class="keyword">As</span> <span class="identifier">IEnumerable</span>(<span class="keyword">Of</span> <span class="identifier">ChannelOption</span>) = <span class="keyword">Nothing</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Channel</span>(
+ <span class="identifier">String</span>^ <span class="parameter">host</span>,
+ <span class="identifier">int</span> <span class="parameter">port</span>,
+ <span class="identifier">Credentials</span>^ <span class="parameter">credentials</span>,
+ <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ChannelOption</span>^&gt;^ <span class="parameter">options</span> = <span class="keyword">nullptr</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">host</span> : <span class="identifier">string</span> *
+ <span class="parameter">port</span> : <span class="identifier">int</span> *
+ <span class="parameter">credentials</span> : <span class="identifier">Credentials</span> *
+ ?<span class="parameter">options</span> : <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ChannelOption</span>&gt;
+(* Defaults:
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">options</span> = defaultArg <span class="identifier">options</span> <span class="keyword">null</span>
+*)
+<span class="keyword">-&gt;</span> <span class="identifier">Channel</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">host</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTA535342_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA535342_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />The name or IP address of the host.</dd><dt><span class="parameter">port</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">System<span id="LSTA535342_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA535342_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Int32</a><br />The port.</dd><dt><span class="parameter">credentials</span></dt><dd>Type: <a href="T_Grpc_Core_Credentials.htm">Grpc.Core<span id="LSTA535342_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA535342_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Credentials</a><br />Credentials to secure the channel.</dd><dt><span class="parameter">options</span> (Optional)</dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/9eekhta0" target="_blank">System.Collections.Generic<span id="LSTA535342_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA535342_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IEnumerable</a><span id="LSTA535342_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA535342_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption</a><span id="LSTA535342_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA535342_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Channel options.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Channel__ctor.htm">Channel Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ClientBase_CreateCall__2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ClientBase_CreateCall__2.htm
new file mode 100644
index 0000000000..39494dca37
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ClientBase_CreateCall__2.htm
@@ -0,0 +1,22 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ClientBase.CreateCall(TRequest, TResponse) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CreateCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="CreateCall(Of TRequest%2C TResponse) method" /><meta name="System.Keywords" content="ClientBase.CreateCall%3CTRequest%2C TResponse%3E method" /><meta name="System.Keywords" content="ClientBase.CreateCall(Of TRequest%2C TResponse) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.CreateCall``2" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ClientBase.CreateCall``2(Grpc.Core.Method{``0,``1},Grpc.Core.CallOptions)" /><meta name="Description" content="Creates a new call to given method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ClientBase_CreateCall__2" /><meta name="guid" content="M_Grpc_Core_ClientBase_CreateCall__2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ClientBase.htm" title="ClientBase Methods" tocid="Methods_T_Grpc_Core_ClientBase">ClientBase Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ClientBase_CreateCall__2.htm" title="CreateCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_ClientBase_CreateCall__2">CreateCall(TRequest, TResponse) Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ClientBase<span id="LSTE141A6C3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE141A6C3_0?cpp=::|nu=.");</script>CreateCall<span id="LSTE141A6C3_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE141A6C3_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTE141A6C3_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE141A6C3_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a new call to given method.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">protected</span> <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="identifier">CreateCall</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt; <span class="parameter">method</span>,
+ <span class="identifier">CallOptions</span> <span class="parameter">options</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Protected</span> <span class="keyword">Function</span> <span class="identifier">CreateCall</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">method</span> <span class="keyword">As</span> <span class="identifier">Method</span>(<span class="keyword">Of</span> TRequest, TResponse),
+ <span class="parameter">options</span> <span class="keyword">As</span> <span class="identifier">CallOptions</span>
+) <span class="keyword">As</span> <span class="identifier">CallInvocationDetails</span>(<span class="keyword">Of</span> TRequest, TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">protected</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt; <span class="identifier">CreateCall</span>(
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">method</span>,
+ <span class="identifier">CallOptions</span> <span class="parameter">options</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">CreateCall</span> :
+ <span class="parameter">method</span> : <span class="identifier">Method</span>&lt;'TRequest, 'TResponse&gt; *
+ <span class="parameter">options</span> : <span class="identifier">CallOptions</span> <span class="keyword">-&gt;</span> <span class="identifier">CallInvocationDetails</span>&lt;'TRequest, 'TResponse&gt; <span class="keyword">when</span> 'TRequest : <span class="keyword">not struct</span> <span class="keyword">when</span> 'TResponse : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">method</span></dt><dd>Type: <a href="T_Grpc_Core_Method_2.htm">Grpc.Core<span id="LSTE141A6C3_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE141A6C3_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Method</a><span id="LSTE141A6C3_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE141A6C3_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LSTE141A6C3_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE141A6C3_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The method to invoke.</dd><dt><span class="parameter">options</span></dt><dd>Type: <a href="T_Grpc_Core_CallOptions.htm">Grpc.Core<span id="LSTE141A6C3_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE141A6C3_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CallOptions</a><br />The call options.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Request message type.</dd><dt><span class="parameter">TResponse</span></dt><dd>Response message type.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails</a><span id="LSTE141A6C3_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE141A6C3_7?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LSTE141A6C3_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE141A6C3_8?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The call invocation details.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ClientBase.htm">ClientBase Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ClientBase__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ClientBase__ctor.htm
new file mode 100644
index 0000000000..5bce0afd30
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ClientBase__ctor.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ClientBase Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ClientBase class, constructor" /><meta name="System.Keywords" content="ClientBase.ClientBase constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.ClientBase" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ClientBase.#ctor(Grpc.Core.Channel)" /><meta name="Description" content="Initializes a new instance of ClientBase class." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ClientBase__ctor" /><meta name="guid" content="M_Grpc_Core_ClientBase__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ClientBase__ctor.htm" title="ClientBase Constructor " tocid="M_Grpc_Core_ClientBase__ctor">ClientBase Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ClientBase.htm" title="ClientBase Properties" tocid="Properties_T_Grpc_Core_ClientBase">ClientBase Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ClientBase.htm" title="ClientBase Methods" tocid="Methods_T_Grpc_Core_ClientBase">ClientBase Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ClientBase Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Initializes a new instance of <span class="code">ClientBase</span> class.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ClientBase</span>(
+ <span class="identifier">Channel</span> <span class="parameter">channel</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">channel</span> <span class="keyword">As</span> <span class="identifier">Channel</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">ClientBase</span>(
+ <span class="identifier">Channel</span>^ <span class="parameter">channel</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">channel</span> : <span class="identifier">Channel</span> <span class="keyword">-&gt;</span> <span class="identifier">ClientBase</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">channel</span></dt><dd>Type: <a href="T_Grpc_Core_Channel.htm">Grpc.Core<span id="LST6E24B936_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6E24B936_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Channel</a><br />The channel to use for remote call invocation.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ClientBase.htm">ClientBase Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ContextPropagationOptions__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ContextPropagationOptions__ctor.htm
new file mode 100644
index 0000000000..8a0c3a6866
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ContextPropagationOptions__ctor.htm
@@ -0,0 +1,20 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ContextPropagationOptions Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ContextPropagationOptions class, constructor" /><meta name="System.Keywords" content="ContextPropagationOptions.ContextPropagationOptions constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ContextPropagationOptions.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ContextPropagationOptions.ContextPropagationOptions" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ContextPropagationOptions.#ctor(System.Boolean,System.Boolean)" /><meta name="Description" content="Creates new context propagation options." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ContextPropagationOptions__ctor" /><meta name="guid" content="M_Grpc_Core_ContextPropagationOptions__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ContextPropagationOptions__ctor.htm" title="ContextPropagationOptions Constructor " tocid="M_Grpc_Core_ContextPropagationOptions__ctor">ContextPropagationOptions Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Properties" tocid="Properties_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Methods" tocid="Methods_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Fields" tocid="Fields_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ContextPropagationOptions Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates new context propagation options.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ContextPropagationOptions</span>(
+ <span class="identifier">bool</span> <span class="parameter">propagateDeadline</span> = <span class="keyword">true</span>,
+ <span class="identifier">bool</span> <span class="parameter">propagateCancellation</span> = <span class="keyword">true</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ Optional <span class="parameter">propagateDeadline</span> <span class="keyword">As</span> <span class="identifier">Boolean</span> = <span class="keyword">true</span>,
+ Optional <span class="parameter">propagateCancellation</span> <span class="keyword">As</span> <span class="identifier">Boolean</span> = <span class="keyword">true</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">ContextPropagationOptions</span>(
+ <span class="identifier">bool</span> <span class="parameter">propagateDeadline</span> = <span class="keyword">true</span>,
+ <span class="identifier">bool</span> <span class="parameter">propagateCancellation</span> = <span class="keyword">true</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ ?<span class="parameter">propagateDeadline</span> : <span class="identifier">bool</span> *
+ ?<span class="parameter">propagateCancellation</span> : <span class="identifier">bool</span>
+(* Defaults:
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">propagateDeadline</span> = defaultArg <span class="identifier">propagateDeadline</span> <span class="keyword">true</span>
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">propagateCancellation</span> = defaultArg <span class="identifier">propagateCancellation</span> <span class="keyword">true</span>
+*)
+<span class="keyword">-&gt;</span> <span class="identifier">ContextPropagationOptions</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">propagateDeadline</span> (Optional)</dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">System<span id="LSTC85C234D_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC85C234D_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Boolean</a><br />If set to <span class="code">true</span> parent call's deadline will be propagated to the child call.</dd><dt><span class="parameter">propagateCancellation</span> (Optional)</dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">System<span id="LSTC85C234D_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC85C234D_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Boolean</a><br />If set to <span class="code">true</span> parent call's cancellation token will be propagated to the child call.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Credentials__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Credentials__ctor.htm
new file mode 100644
index 0000000000..126e39a55a
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Credentials__ctor.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Credentials Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Credentials class, constructor" /><meta name="System.Keywords" content="Credentials.Credentials constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Credentials.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Credentials.Credentials" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Credentials.#ctor" /><meta name="Description" content="Grpc.Core.Credentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Credentials__ctor" /><meta name="guid" content="M_Grpc_Core_Credentials__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Credentials__ctor.htm" title="Credentials Constructor " tocid="M_Grpc_Core_Credentials__ctor">Credentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Credentials.htm" title="Credentials Properties" tocid="Properties_T_Grpc_Core_Credentials">Credentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_Credentials.htm" title="Credentials Methods" tocid="Methods_T_Grpc_Core_Credentials">Credentials Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Credentials Constructor </td></tr></table><span class="introStyle"></span><div class="summary">Initializes a new instance of the <a href="T_Grpc_Core_Credentials.htm">Credentials</a> class</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">protected</span> <span class="identifier">Credentials</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Protected</span> <span class="keyword">Sub</span> <span class="identifier">New</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">protected</span>:
+<span class="identifier">Credentials</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Credentials</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Credentials.htm">Credentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_GrpcEnvironment_SetLogger.htm b/doc/ref/csharp/html/html/M_Grpc_Core_GrpcEnvironment_SetLogger.htm
new file mode 100644
index 0000000000..2ce38bb3eb
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_GrpcEnvironment_SetLogger.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>GrpcEnvironment.SetLogger Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SetLogger method" /><meta name="System.Keywords" content="GrpcEnvironment.SetLogger method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.GrpcEnvironment.SetLogger" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.GrpcEnvironment.SetLogger(Grpc.Core.Logging.ILogger)" /><meta name="Description" content="Sets the application-wide logger that should be used by gRPC." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_GrpcEnvironment_SetLogger" /><meta name="guid" content="M_Grpc_Core_GrpcEnvironment_SetLogger" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Methods" tocid="Methods_T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_GrpcEnvironment_SetLogger.htm" title="SetLogger Method " tocid="M_Grpc_Core_GrpcEnvironment_SetLogger">SetLogger Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">GrpcEnvironment<span id="LST7784D88D_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7784D88D_0?cpp=::|nu=.");</script>SetLogger Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Sets the application-wide logger that should be used by gRPC.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">SetLogger</span>(
+ <span class="identifier">ILogger</span> <span class="parameter">customLogger</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Sub</span> <span class="identifier">SetLogger</span> (
+ <span class="parameter">customLogger</span> <span class="keyword">As</span> <span class="identifier">ILogger</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">SetLogger</span>(
+ <span class="identifier">ILogger</span>^ <span class="parameter">customLogger</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">SetLogger</span> :
+ <span class="parameter">customLogger</span> : <span class="identifier">ILogger</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">customLogger</span></dt><dd>Type: <a href="T_Grpc_Core_Logging_ILogger.htm">Grpc.Core.Logging<span id="LST7784D88D_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7784D88D_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ILogger</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="customLogger"/&gt; documentation for "M:Grpc.Core.GrpcEnvironment.SetLogger(Grpc.Core.Logging.ILogger)"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_GrpcEnvironment.htm">GrpcEnvironment Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm b/doc/ref/csharp/html/html/M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm
new file mode 100644
index 0000000000..28d348c014
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IAsyncStreamWriter(T).WriteAsync Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteAsync method" /><meta name="System.Keywords" content="IAsyncStreamWriter%3CT%3E.WriteAsync method" /><meta name="System.Keywords" content="IAsyncStreamWriter(Of T).WriteAsync method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IAsyncStreamWriter`1.WriteAsync" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.IAsyncStreamWriter`1.WriteAsync(`0)" /><meta name="Description" content="Writes a single asynchronously. Only one write can be pending at a time." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync" /><meta name="guid" content="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Methods" tocid="Methods_T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm" title="WriteAsync Method " tocid="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync">WriteAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IAsyncStreamWriter<span id="LST79DAE08F_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79DAE08F_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST79DAE08F_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79DAE08F_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST79DAE08F_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79DAE08F_2?cpp=::|nu=.");</script>WriteAsync Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Writes a single asynchronously. Only one write can be pending at a time.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="identifier">Task</span> <span class="identifier">WriteAsync</span>(
+ T <span class="parameter">message</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Function</span> <span class="identifier">WriteAsync</span> (
+ <span class="parameter">message</span> <span class="keyword">As</span> T
+) <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="identifier">Task</span>^ <span class="identifier">WriteAsync</span>(
+ T <span class="parameter">message</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">WriteAsync</span> :
+ <span class="parameter">message</span> : 'T <span class="keyword">-&gt;</span> <span class="identifier">Task</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">message</span></dt><dd>Type: <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm"><span class="typeparameter">T</span></a><br />the message to be written. Cannot be null.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST79DAE08F_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79DAE08F_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST79DAE08F_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST79DAE08F_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm b/doc/ref/csharp/html/html/M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm
new file mode 100644
index 0000000000..9518f187f8
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IClientStreamWriter(T).CompleteAsync Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CompleteAsync method" /><meta name="System.Keywords" content="IClientStreamWriter%3CT%3E.CompleteAsync method" /><meta name="System.Keywords" content="IClientStreamWriter(Of T).CompleteAsync method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IClientStreamWriter`1.CompleteAsync" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.IClientStreamWriter`1.CompleteAsync" /><meta name="Description" content="Completes/closes the stream. Can only be called once there is no pending write. No writes should follow calling this." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_IClientStreamWriter_1_CompleteAsync" /><meta name="guid" content="M_Grpc_Core_IClientStreamWriter_1_CompleteAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Methods" tocid="Methods_T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm" title="CompleteAsync Method " tocid="M_Grpc_Core_IClientStreamWriter_1_CompleteAsync">CompleteAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IClientStreamWriter<span id="LSTBD430C85_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBD430C85_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTBD430C85_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBD430C85_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTBD430C85_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBD430C85_2?cpp=::|nu=.");</script>CompleteAsync Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Completes/closes the stream. Can only be called once there is no pending write. No writes should follow calling this.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="identifier">Task</span> <span class="identifier">CompleteAsync</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Function</span> <span class="identifier">CompleteAsync</span> <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="identifier">Task</span>^ <span class="identifier">CompleteAsync</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">CompleteAsync</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Task</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IClientStreamWriter_1.htm">IClientStreamWriter<span id="LSTBD430C85_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBD430C85_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTBD430C85_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBD430C85_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_KeyCertificatePair__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_KeyCertificatePair__ctor.htm
new file mode 100644
index 0000000000..d0d3deb61f
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_KeyCertificatePair__ctor.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>KeyCertificatePair Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="KeyCertificatePair class, constructor" /><meta name="System.Keywords" content="KeyCertificatePair.KeyCertificatePair constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.KeyCertificatePair.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.KeyCertificatePair.KeyCertificatePair" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.KeyCertificatePair.#ctor(System.String,System.String)" /><meta name="Description" content="Creates a new certificate chain - private key pair." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_KeyCertificatePair__ctor" /><meta name="guid" content="M_Grpc_Core_KeyCertificatePair__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_KeyCertificatePair__ctor.htm" title="KeyCertificatePair Constructor " tocid="M_Grpc_Core_KeyCertificatePair__ctor">KeyCertificatePair Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Properties" tocid="Properties_T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Methods" tocid="Methods_T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">KeyCertificatePair Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a new certificate chain - private key pair.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">KeyCertificatePair</span>(
+ <span class="identifier">string</span> <span class="parameter">certificateChain</span>,
+ <span class="identifier">string</span> <span class="parameter">privateKey</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">certificateChain</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">privateKey</span> <span class="keyword">As</span> <span class="identifier">String</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">KeyCertificatePair</span>(
+ <span class="identifier">String</span>^ <span class="parameter">certificateChain</span>,
+ <span class="identifier">String</span>^ <span class="parameter">privateKey</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">certificateChain</span> : <span class="identifier">string</span> *
+ <span class="parameter">privateKey</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="identifier">KeyCertificatePair</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">certificateChain</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST3F6F0F52_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F6F0F52_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />PEM encoded certificate chain.</dd><dt><span class="parameter">privateKey</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST3F6F0F52_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F6F0F52_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />PEM encoded private key.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Debug.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Debug.htm
new file mode 100644
index 0000000000..5e32929e41
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Debug.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger.Debug Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Debug method" /><meta name="System.Keywords" content="ConsoleLogger.Debug method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ConsoleLogger.Debug" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ConsoleLogger.Debug(System.String,System.Object[])" /><meta name="Description" content="Logs a message with severity Debug." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ConsoleLogger_Debug" /><meta name="guid" content="M_Grpc_Core_Logging_ConsoleLogger_Debug" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Debug.htm" title="Debug Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_Debug">Debug Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Error">Error Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm" title="ForType(T) Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_ForType__1">ForType(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Info.htm" title="Info Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_Info">Info Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Warning">Warning Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger<span id="LST26E1A714_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST26E1A714_0?cpp=::|nu=.");</script>Debug Method </td></tr></table><span class="introStyle"></span><div class="summary">Logs a message with severity Debug.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Debug</span>(
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Debug</span> (
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Debug</span>(
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Debug</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Debug</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST26E1A714_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST26E1A714_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Debug(System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LST26E1A714_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST26E1A714_2?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST26E1A714_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST26E1A714_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LST26E1A714_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST26E1A714_4?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Debug(System.String,System.Object[])"]</p></dd></dl><h4 class="subHeading">Implements</h4><a href="M_Grpc_Core_Logging_ILogger_Debug.htm">ILogger<span id="LST26E1A714_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST26E1A714_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Debug(String, <span id="LST26E1A714_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST26E1A714_6?cpp=array&lt;");</script>Object<span id="LST26E1A714_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST26E1A714_7?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Error.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Error.htm
new file mode 100644
index 0000000000..6d80286475
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Error.htm
@@ -0,0 +1,21 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger.Error Method (Exception, String, Object[])</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ConsoleLogger.Error(System.Exception,System.String,System.Object[])" /><meta name="Description" content="Logs a message and an associated exception with severity Error." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ConsoleLogger_Error" /><meta name="guid" content="M_Grpc_Core_Logging_ConsoleLogger_Error" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Error">Error Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm" title="Error Method (String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Error_1">Error Method (String, Object[])</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Error.htm" title="Error Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Error">Error Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger<span id="LST9D02E46D_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_0?cpp=::|nu=.");</script>Error Method (Exception, String, <span id="LST9D02E46D_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_1?cpp=array&lt;");</script>Object<span id="LST9D02E46D_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_2?cpp=&gt;|vb=()|nu=[]");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">Logs a message and an associated exception with severity Error.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Error</span>(
+ <span class="identifier">Exception</span> <span class="parameter">exception</span>,
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Error</span> (
+ <span class="parameter">exception</span> <span class="keyword">As</span> <span class="identifier">Exception</span>,
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Error</span>(
+ <span class="identifier">Exception</span>^ <span class="parameter">exception</span>,
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Error</span> :
+ <span class="parameter">exception</span> : <span class="identifier">Exception</span> *
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Error</span> :
+ <span class="parameter">exception</span> : <span class="identifier">Exception</span> *
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">exception</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">System<span id="LST9D02E46D_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Exception</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="exception"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Error(System.Exception,System.String,System.Object[])"]</p></dd><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST9D02E46D_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Error(System.Exception,System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LST9D02E46D_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_5?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST9D02E46D_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LST9D02E46D_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_7?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Error(System.Exception,System.String,System.Object[])"]</p></dd></dl><h4 class="subHeading">Implements</h4><a href="M_Grpc_Core_Logging_ILogger_Error.htm">ILogger<span id="LST9D02E46D_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Error(Exception, String, <span id="LST9D02E46D_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_9?cpp=array&lt;");</script>Object<span id="LST9D02E46D_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9D02E46D_10?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm">Error Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm
new file mode 100644
index 0000000000..8d154f118b
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger.Error Method (String, Object[])</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ConsoleLogger.Error(System.String,System.Object[])" /><meta name="Description" content="Logs a message with severity Error." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ConsoleLogger_Error_1" /><meta name="guid" content="M_Grpc_Core_Logging_ConsoleLogger_Error_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Error">Error Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm" title="Error Method (String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Error_1">Error Method (String, Object[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Error.htm" title="Error Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Error">Error Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger<span id="LSTE99B1AE9_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE99B1AE9_0?cpp=::|nu=.");</script>Error Method (String, <span id="LSTE99B1AE9_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE99B1AE9_1?cpp=array&lt;");</script>Object<span id="LSTE99B1AE9_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE99B1AE9_2?cpp=&gt;|vb=()|nu=[]");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">Logs a message with severity Error.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Error</span>(
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Error</span> (
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Error</span>(
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Error</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Error</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTE99B1AE9_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE99B1AE9_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Error(System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LSTE99B1AE9_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE99B1AE9_4?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTE99B1AE9_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE99B1AE9_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LSTE99B1AE9_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE99B1AE9_6?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Error(System.String,System.Object[])"]</p></dd></dl><h4 class="subHeading">Implements</h4><a href="M_Grpc_Core_Logging_ILogger_Error_1.htm">ILogger<span id="LSTE99B1AE9_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE99B1AE9_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Error(String, <span id="LSTE99B1AE9_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE99B1AE9_8?cpp=array&lt;");</script>Object<span id="LSTE99B1AE9_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE99B1AE9_9?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm">Error Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm
new file mode 100644
index 0000000000..66335da42b
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger.ForType(T) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ForType%3CT%3E method" /><meta name="System.Keywords" content="ForType(Of T) method" /><meta name="System.Keywords" content="ConsoleLogger.ForType%3CT%3E method" /><meta name="System.Keywords" content="ConsoleLogger.ForType(Of T) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ConsoleLogger.ForType``1" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ConsoleLogger.ForType``1" /><meta name="Description" content="Returns a logger associated with the specified type." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ConsoleLogger_ForType__1" /><meta name="guid" content="M_Grpc_Core_Logging_ConsoleLogger_ForType__1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Debug.htm" title="Debug Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_Debug">Debug Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Error">Error Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm" title="ForType(T) Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_ForType__1">ForType(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Info.htm" title="Info Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_Info">Info Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Warning">Warning Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger<span id="LST896B66EA_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST896B66EA_0?cpp=::|nu=.");</script>ForType<span id="LST896B66EA_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST896B66EA_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST896B66EA_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST896B66EA_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns a logger associated with the specified type.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ILogger</span> <span class="identifier">ForType</span>&lt;T&gt;()
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">ForType</span>(<span class="keyword">Of</span> T) <span class="keyword">As</span> <span class="identifier">ILogger</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">virtual</span> <span class="identifier">ILogger</span>^ <span class="identifier">ForType</span>() <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">ForType</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">ILogger</span>
+<span class="keyword">override</span> <span class="identifier">ForType</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">ILogger</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.ForType``1"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Logging_ILogger.htm">ILogger</a><h4 class="subHeading">Implements</h4><a href="M_Grpc_Core_Logging_ILogger_ForType__1.htm">ILogger<span id="LST896B66EA_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST896B66EA_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ForType<span id="LST896B66EA_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST896B66EA_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST896B66EA_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST896B66EA_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST896B66EA_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST896B66EA_6?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Info.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Info.htm
new file mode 100644
index 0000000000..fa46de948f
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Info.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger.Info Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Info method" /><meta name="System.Keywords" content="ConsoleLogger.Info method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ConsoleLogger.Info" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ConsoleLogger.Info(System.String,System.Object[])" /><meta name="Description" content="Logs a message with severity Info." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ConsoleLogger_Info" /><meta name="guid" content="M_Grpc_Core_Logging_ConsoleLogger_Info" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Debug.htm" title="Debug Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_Debug">Debug Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Error">Error Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm" title="ForType(T) Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_ForType__1">ForType(T) Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Info.htm" title="Info Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_Info">Info Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Warning">Warning Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger<span id="LSTEB5CFBFF_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEB5CFBFF_0?cpp=::|nu=.");</script>Info Method </td></tr></table><span class="introStyle"></span><div class="summary">Logs a message with severity Info.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Info</span>(
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Info</span> (
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Info</span>(
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Info</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Info</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTEB5CFBFF_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEB5CFBFF_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Info(System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LSTEB5CFBFF_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEB5CFBFF_2?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTEB5CFBFF_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEB5CFBFF_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LSTEB5CFBFF_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEB5CFBFF_4?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Info(System.String,System.Object[])"]</p></dd></dl><h4 class="subHeading">Implements</h4><a href="M_Grpc_Core_Logging_ILogger_Info.htm">ILogger<span id="LSTEB5CFBFF_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEB5CFBFF_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Info(String, <span id="LSTEB5CFBFF_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEB5CFBFF_6?cpp=array&lt;");</script>Object<span id="LSTEB5CFBFF_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEB5CFBFF_7?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Warning.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Warning.htm
new file mode 100644
index 0000000000..3f8c17d05e
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Warning.htm
@@ -0,0 +1,21 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger.Warning Method (Exception, String, Object[])</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ConsoleLogger.Warning(System.Exception,System.String,System.Object[])" /><meta name="Description" content="Logs a message and an associated exception with severity Warning." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ConsoleLogger_Warning" /><meta name="guid" content="M_Grpc_Core_Logging_ConsoleLogger_Warning" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Warning">Warning Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm" title="Warning Method (String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Warning_1">Warning Method (String, Object[])</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Warning.htm" title="Warning Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Warning">Warning Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger<span id="LSTA31A3D17_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_0?cpp=::|nu=.");</script>Warning Method (Exception, String, <span id="LSTA31A3D17_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_1?cpp=array&lt;");</script>Object<span id="LSTA31A3D17_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_2?cpp=&gt;|vb=()|nu=[]");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">Logs a message and an associated exception with severity Warning.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Warning</span>(
+ <span class="identifier">Exception</span> <span class="parameter">exception</span>,
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Warning</span> (
+ <span class="parameter">exception</span> <span class="keyword">As</span> <span class="identifier">Exception</span>,
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Warning</span>(
+ <span class="identifier">Exception</span>^ <span class="parameter">exception</span>,
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Warning</span> :
+ <span class="parameter">exception</span> : <span class="identifier">Exception</span> *
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Warning</span> :
+ <span class="parameter">exception</span> : <span class="identifier">Exception</span> *
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">exception</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">System<span id="LSTA31A3D17_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Exception</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="exception"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Warning(System.Exception,System.String,System.Object[])"]</p></dd><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTA31A3D17_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Warning(System.Exception,System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LSTA31A3D17_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_5?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTA31A3D17_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LSTA31A3D17_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_7?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Warning(System.Exception,System.String,System.Object[])"]</p></dd></dl><h4 class="subHeading">Implements</h4><a href="M_Grpc_Core_Logging_ILogger_Warning.htm">ILogger<span id="LSTA31A3D17_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Warning(Exception, String, <span id="LSTA31A3D17_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_9?cpp=array&lt;");</script>Object<span id="LSTA31A3D17_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA31A3D17_10?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm">Warning Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm
new file mode 100644
index 0000000000..e8ee332766
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger.Warning Method (String, Object[])</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ConsoleLogger.Warning(System.String,System.Object[])" /><meta name="Description" content="Logs a message with severity Warning." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ConsoleLogger_Warning_1" /><meta name="guid" content="M_Grpc_Core_Logging_ConsoleLogger_Warning_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Warning">Warning Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm" title="Warning Method (String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Warning_1">Warning Method (String, Object[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Warning.htm" title="Warning Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Warning">Warning Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger<span id="LST86B07CEF_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST86B07CEF_0?cpp=::|nu=.");</script>Warning Method (String, <span id="LST86B07CEF_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST86B07CEF_1?cpp=array&lt;");</script>Object<span id="LST86B07CEF_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST86B07CEF_2?cpp=&gt;|vb=()|nu=[]");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">Logs a message with severity Warning.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Warning</span>(
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Warning</span> (
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Warning</span>(
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Warning</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Warning</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST86B07CEF_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST86B07CEF_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Warning(System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LST86B07CEF_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST86B07CEF_4?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST86B07CEF_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST86B07CEF_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LST86B07CEF_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST86B07CEF_6?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ConsoleLogger.Warning(System.String,System.Object[])"]</p></dd></dl><h4 class="subHeading">Implements</h4><a href="M_Grpc_Core_Logging_ILogger_Warning_1.htm">ILogger<span id="LST86B07CEF_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST86B07CEF_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Warning(String, <span id="LST86B07CEF_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST86B07CEF_8?cpp=array&lt;");</script>Object<span id="LST86B07CEF_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST86B07CEF_9?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm">Warning Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger__ctor.htm
new file mode 100644
index 0000000000..e1b5025397
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ConsoleLogger__ctor.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ConsoleLogger class, constructor" /><meta name="System.Keywords" content="ConsoleLogger.ConsoleLogger constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ConsoleLogger.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ConsoleLogger.ConsoleLogger" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ConsoleLogger.#ctor" /><meta name="Description" content="Creates a console logger not associated to any specific type." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ConsoleLogger__ctor" /><meta name="guid" content="M_Grpc_Core_Logging_ConsoleLogger__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger__ctor.htm" title="ConsoleLogger Constructor " tocid="M_Grpc_Core_Logging_ConsoleLogger__ctor">ConsoleLogger Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger Constructor </td></tr></table><span class="introStyle"></span><div class="summary">Creates a console logger not associated to any specific type.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ConsoleLogger</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">ConsoleLogger</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">ConsoleLogger</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Debug.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Debug.htm
new file mode 100644
index 0000000000..c4a15c5b5a
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Debug.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger.Debug Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Debug method" /><meta name="System.Keywords" content="ILogger.Debug method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ILogger.Debug" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ILogger.Debug(System.String,System.Object[])" /><meta name="Description" content="Logs a message with severity Debug." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ILogger_Debug" /><meta name="guid" content="M_Grpc_Core_Logging_ILogger_Debug" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Debug.htm" title="Debug Method " tocid="M_Grpc_Core_Logging_ILogger_Debug">Debug Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ILogger_Error">Error Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_ForType__1.htm" title="ForType(T) Method " tocid="M_Grpc_Core_Logging_ILogger_ForType__1">ForType(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Info.htm" title="Info Method " tocid="M_Grpc_Core_Logging_ILogger_Info">Info Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ILogger_Warning">Warning Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger<span id="LSTA1973726_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA1973726_0?cpp=::|nu=.");</script>Debug Method </td></tr></table><span class="introStyle"></span><div class="summary">Logs a message with severity Debug.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Debug</span>(
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Sub</span> <span class="identifier">Debug</span> (
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Debug</span>(
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Debug</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTA1973726_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA1973726_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Debug(System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LSTA1973726_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA1973726_2?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTA1973726_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA1973726_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LSTA1973726_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA1973726_4?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Debug(System.String,System.Object[])"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Error.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Error.htm
new file mode 100644
index 0000000000..6f5cbfa143
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Error.htm
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger.Error Method (Exception, String, Object[])</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ILogger.Error(System.Exception,System.String,System.Object[])" /><meta name="Description" content="Logs a message and an associated exception with severity Error." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ILogger_Error" /><meta name="guid" content="M_Grpc_Core_Logging_ILogger_Error" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ILogger_Error">Error Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Error_1.htm" title="Error Method (String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Error_1">Error Method (String, Object[])</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Error.htm" title="Error Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Error">Error Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger<span id="LST2E5BBEEB_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2E5BBEEB_0?cpp=::|nu=.");</script>Error Method (Exception, String, <span id="LST2E5BBEEB_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2E5BBEEB_1?cpp=array&lt;");</script>Object<span id="LST2E5BBEEB_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2E5BBEEB_2?cpp=&gt;|vb=()|nu=[]");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">Logs a message and an associated exception with severity Error.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Error</span>(
+ <span class="identifier">Exception</span> <span class="parameter">exception</span>,
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Sub</span> <span class="identifier">Error</span> (
+ <span class="parameter">exception</span> <span class="keyword">As</span> <span class="identifier">Exception</span>,
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Error</span>(
+ <span class="identifier">Exception</span>^ <span class="parameter">exception</span>,
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Error</span> :
+ <span class="parameter">exception</span> : <span class="identifier">Exception</span> *
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">exception</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">System<span id="LST2E5BBEEB_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2E5BBEEB_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Exception</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="exception"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Error(System.Exception,System.String,System.Object[])"]</p></dd><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST2E5BBEEB_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2E5BBEEB_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Error(System.Exception,System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LST2E5BBEEB_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2E5BBEEB_5?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST2E5BBEEB_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2E5BBEEB_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LST2E5BBEEB_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2E5BBEEB_7?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Error(System.Exception,System.String,System.Object[])"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger Interface</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Logging_ILogger_Error.htm">Error Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Error_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Error_1.htm
new file mode 100644
index 0000000000..8c8e5e3425
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Error_1.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger.Error Method (String, Object[])</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ILogger.Error(System.String,System.Object[])" /><meta name="Description" content="Logs a message with severity Error." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ILogger_Error_1" /><meta name="guid" content="M_Grpc_Core_Logging_ILogger_Error_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ILogger_Error">Error Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Error_1.htm" title="Error Method (String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Error_1">Error Method (String, Object[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Error.htm" title="Error Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Error">Error Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger<span id="LSTC3566983_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC3566983_0?cpp=::|nu=.");</script>Error Method (String, <span id="LSTC3566983_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC3566983_1?cpp=array&lt;");</script>Object<span id="LSTC3566983_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC3566983_2?cpp=&gt;|vb=()|nu=[]");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">Logs a message with severity Error.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Error</span>(
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Sub</span> <span class="identifier">Error</span> (
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Error</span>(
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Error</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTC3566983_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC3566983_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Error(System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LSTC3566983_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC3566983_4?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTC3566983_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC3566983_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LSTC3566983_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC3566983_6?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Error(System.String,System.Object[])"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger Interface</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Logging_ILogger_Error.htm">Error Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_ForType__1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_ForType__1.htm
new file mode 100644
index 0000000000..b95f904aee
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_ForType__1.htm
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger.ForType(T) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ForType%3CT%3E method" /><meta name="System.Keywords" content="ForType(Of T) method" /><meta name="System.Keywords" content="ILogger.ForType%3CT%3E method" /><meta name="System.Keywords" content="ILogger.ForType(Of T) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ILogger.ForType``1" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ILogger.ForType``1" /><meta name="Description" content="Returns a logger associated with the specified type." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ILogger_ForType__1" /><meta name="guid" content="M_Grpc_Core_Logging_ILogger_ForType__1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Debug.htm" title="Debug Method " tocid="M_Grpc_Core_Logging_ILogger_Debug">Debug Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ILogger_Error">Error Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_ForType__1.htm" title="ForType(T) Method " tocid="M_Grpc_Core_Logging_ILogger_ForType__1">ForType(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Info.htm" title="Info Method " tocid="M_Grpc_Core_Logging_ILogger_Info">Info Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ILogger_Warning">Warning Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger<span id="LSTE7C1D7D4_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE7C1D7D4_0?cpp=::|nu=.");</script>ForType<span id="LSTE7C1D7D4_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE7C1D7D4_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTE7C1D7D4_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE7C1D7D4_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">Returns a logger associated with the specified type.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="identifier">ILogger</span> <span class="identifier">ForType</span>&lt;T&gt;()
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Function</span> <span class="identifier">ForType</span>(<span class="keyword">Of</span> T) <span class="keyword">As</span> <span class="identifier">ILogger</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="identifier">ILogger</span>^ <span class="identifier">ForType</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">ForType</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">ILogger</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.ForType``1"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Logging_ILogger.htm">ILogger</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Info.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Info.htm
new file mode 100644
index 0000000000..cba47673b9
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Info.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger.Info Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Info method" /><meta name="System.Keywords" content="ILogger.Info method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ILogger.Info" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ILogger.Info(System.String,System.Object[])" /><meta name="Description" content="Logs a message with severity Info." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ILogger_Info" /><meta name="guid" content="M_Grpc_Core_Logging_ILogger_Info" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Debug.htm" title="Debug Method " tocid="M_Grpc_Core_Logging_ILogger_Debug">Debug Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ILogger_Error">Error Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_ForType__1.htm" title="ForType(T) Method " tocid="M_Grpc_Core_Logging_ILogger_ForType__1">ForType(T) Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Info.htm" title="Info Method " tocid="M_Grpc_Core_Logging_ILogger_Info">Info Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ILogger_Warning">Warning Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger<span id="LST1B144BB9_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B144BB9_0?cpp=::|nu=.");</script>Info Method </td></tr></table><span class="introStyle"></span><div class="summary">Logs a message with severity Info.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Info</span>(
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Sub</span> <span class="identifier">Info</span> (
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Info</span>(
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Info</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST1B144BB9_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B144BB9_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Info(System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LST1B144BB9_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B144BB9_2?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST1B144BB9_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B144BB9_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LST1B144BB9_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B144BB9_4?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Info(System.String,System.Object[])"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Warning.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Warning.htm
new file mode 100644
index 0000000000..c103df8940
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Warning.htm
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger.Warning Method (Exception, String, Object[])</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ILogger.Warning(System.Exception,System.String,System.Object[])" /><meta name="Description" content="Logs a message and an associated exception with severity Warning." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ILogger_Warning" /><meta name="guid" content="M_Grpc_Core_Logging_ILogger_Warning" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ILogger_Warning">Warning Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Warning_1.htm" title="Warning Method (String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Warning_1">Warning Method (String, Object[])</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Warning.htm" title="Warning Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Warning">Warning Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger<span id="LST8B4E23D9_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B4E23D9_0?cpp=::|nu=.");</script>Warning Method (Exception, String, <span id="LST8B4E23D9_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B4E23D9_1?cpp=array&lt;");</script>Object<span id="LST8B4E23D9_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B4E23D9_2?cpp=&gt;|vb=()|nu=[]");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">Logs a message and an associated exception with severity Warning.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Warning</span>(
+ <span class="identifier">Exception</span> <span class="parameter">exception</span>,
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Sub</span> <span class="identifier">Warning</span> (
+ <span class="parameter">exception</span> <span class="keyword">As</span> <span class="identifier">Exception</span>,
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Warning</span>(
+ <span class="identifier">Exception</span>^ <span class="parameter">exception</span>,
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Warning</span> :
+ <span class="parameter">exception</span> : <span class="identifier">Exception</span> *
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">exception</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">System<span id="LST8B4E23D9_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B4E23D9_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Exception</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="exception"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Warning(System.Exception,System.String,System.Object[])"]</p></dd><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST8B4E23D9_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B4E23D9_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Warning(System.Exception,System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LST8B4E23D9_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B4E23D9_5?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST8B4E23D9_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B4E23D9_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LST8B4E23D9_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B4E23D9_7?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Warning(System.Exception,System.String,System.Object[])"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger Interface</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Logging_ILogger_Warning.htm">Warning Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Warning_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Warning_1.htm
new file mode 100644
index 0000000000..a2abe0f8ed
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Logging_ILogger_Warning_1.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger.Warning Method (String, Object[])</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Logging.ILogger.Warning(System.String,System.Object[])" /><meta name="Description" content="Logs a message with severity Warning." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="M_Grpc_Core_Logging_ILogger_Warning_1" /><meta name="guid" content="M_Grpc_Core_Logging_ILogger_Warning_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ILogger_Warning">Warning Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Warning_1.htm" title="Warning Method (String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Warning_1">Warning Method (String, Object[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Warning.htm" title="Warning Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Warning">Warning Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger<span id="LST39121515_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39121515_0?cpp=::|nu=.");</script>Warning Method (String, <span id="LST39121515_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39121515_1?cpp=array&lt;");</script>Object<span id="LST39121515_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39121515_2?cpp=&gt;|vb=()|nu=[]");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">Logs a message with severity Warning.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Warning</span>(
+ <span class="identifier">string</span> <span class="parameter">message</span>,
+ <span class="keyword">params</span> <span class="identifier">Object</span>[] <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Sub</span> <span class="identifier">Warning</span> (
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="keyword">ParamArray</span> <span class="parameter">formatArgs</span> <span class="keyword">As</span> <span class="identifier">Object</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">void</span> <span class="identifier">Warning</span>(
+ <span class="identifier">String</span>^ <span class="parameter">message</span>,
+ ... <span class="keyword">array</span>&lt;<span class="identifier">Object</span>^&gt;^ <span class="parameter">formatArgs</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Warning</span> :
+ <span class="parameter">message</span> : <span class="identifier">string</span> *
+ <span class="parameter">formatArgs</span> : <span class="identifier">Object</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST39121515_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39121515_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="message"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Warning(System.String,System.Object[])"]</p></dd><dt><span class="parameter">formatArgs</span></dt><dd>Type: <span id="LST39121515_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39121515_4?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST39121515_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39121515_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><span id="LST39121515_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39121515_6?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="formatArgs"/&gt; documentation for "M:Grpc.Core.Logging.ILogger.Warning(System.String,System.Object[])"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger Interface</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Logging_ILogger_Warning.htm">Warning Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Marshaller_1__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Marshaller_1__ctor.htm
new file mode 100644
index 0000000000..4bf979904b
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Marshaller_1__ctor.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshaller(T) Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Marshaller%3CT%3E structure, constructor" /><meta name="System.Keywords" content="Marshaller(Of T) structure, constructor" /><meta name="System.Keywords" content="Marshaller%3CT%3E.Marshaller constructor" /><meta name="System.Keywords" content="Marshaller(Of T).Marshaller constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshaller`1.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshaller`1.Marshaller" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Marshaller`1.#ctor(System.Func{`0,System.Byte[]},System.Func{System.Byte[],`0})" /><meta name="Description" content="Initializes a new marshaller." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Marshaller_1__ctor" /><meta name="guid" content="M_Grpc_Core_Marshaller_1__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Marshaller_1__ctor.htm" title="Marshaller(T) Constructor " tocid="M_Grpc_Core_Marshaller_1__ctor">Marshaller(T) Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Properties" tocid="Properties_T_Grpc_Core_Marshaller_1">Marshaller(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Methods" tocid="Methods_T_Grpc_Core_Marshaller_1">Marshaller(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshaller<span id="LSTA9F49B0_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTA9F49B0_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Initializes a new marshaller.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Marshaller</span>(
+ <span class="identifier">Func</span>&lt;T, <span class="identifier">byte</span>[]&gt; <span class="parameter">serializer</span>,
+ <span class="identifier">Func</span>&lt;<span class="identifier">byte</span>[], T&gt; <span class="parameter">deserializer</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">serializer</span> <span class="keyword">As</span> <span class="identifier">Func</span>(<span class="keyword">Of</span> T, <span class="identifier">Byte</span>()),
+ <span class="parameter">deserializer</span> <span class="keyword">As</span> <span class="identifier">Func</span>(<span class="keyword">Of</span> <span class="identifier">Byte</span>(), T)
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Marshaller</span>(
+ <span class="identifier">Func</span>&lt;T, <span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^&gt;^ <span class="parameter">serializer</span>,
+ <span class="identifier">Func</span>&lt;<span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^, T&gt;^ <span class="parameter">deserializer</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">serializer</span> : <span class="identifier">Func</span>&lt;'T, <span class="identifier">byte</span>[]&gt; *
+ <span class="parameter">deserializer</span> : <span class="identifier">Func</span>&lt;<span class="identifier">byte</span>[], 'T&gt; <span class="keyword">-&gt;</span> <span class="identifier">Marshaller</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">serializer</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/bb549151" target="_blank">System<span id="LSTA9F49B0_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Func</a><span id="LSTA9F49B0_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Marshaller_1.htm"><span class="typeparameter">T</span></a>, <span id="LSTA9F49B0_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_4?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/yyb1w04y" target="_blank">Byte</a><span id="LSTA9F49B0_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_5?cpp=&gt;|vb=()|nu=[]");</script><span id="LSTA9F49B0_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_6?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Function that will be used to serialize messages.</dd><dt><span class="parameter">deserializer</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/bb549151" target="_blank">System<span id="LSTA9F49B0_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Func</a><span id="LSTA9F49B0_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span id="LSTA9F49B0_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_9?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/yyb1w04y" target="_blank">Byte</a><span id="LSTA9F49B0_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_10?cpp=&gt;|vb=()|nu=[]");</script>, <a href="T_Grpc_Core_Marshaller_1.htm"><span class="typeparameter">T</span></a><span id="LSTA9F49B0_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_11?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Function that will be used to deserialize messages.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Marshaller_1.htm">Marshaller<span id="LSTA9F49B0_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_12?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTA9F49B0_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9F49B0_13?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Marshallers_Create__1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Marshallers_Create__1.htm
new file mode 100644
index 0000000000..61818afdb6
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Marshallers_Create__1.htm
@@ -0,0 +1,18 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshallers.Create(T) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Create%3CT%3E method" /><meta name="System.Keywords" content="Create(Of T) method" /><meta name="System.Keywords" content="Marshallers.Create%3CT%3E method" /><meta name="System.Keywords" content="Marshallers.Create(Of T) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshallers.Create``1" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Marshallers.Create``1(System.Func{``0,System.Byte[]},System.Func{System.Byte[],``0})" /><meta name="Description" content="Creates a marshaller from specified serializer and deserializer." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Marshallers_Create__1" /><meta name="guid" content="M_Grpc_Core_Marshallers_Create__1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Marshallers.htm" title="Marshallers Methods" tocid="Methods_T_Grpc_Core_Marshallers">Marshallers Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Marshallers_Create__1.htm" title="Create(T) Method " tocid="M_Grpc_Core_Marshallers_Create__1">Create(T) Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshallers<span id="LST736DAF32_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_0?cpp=::|nu=.");</script>Create<span id="LST736DAF32_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST736DAF32_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a marshaller from specified serializer and deserializer.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">Marshaller</span>&lt;T&gt; <span class="identifier">Create</span>&lt;T&gt;(
+ <span class="identifier">Func</span>&lt;T, <span class="identifier">byte</span>[]&gt; <span class="parameter">serializer</span>,
+ <span class="identifier">Func</span>&lt;<span class="identifier">byte</span>[], T&gt; <span class="parameter">deserializer</span>
+)
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">Create</span>(<span class="keyword">Of</span> T) (
+ <span class="parameter">serializer</span> <span class="keyword">As</span> <span class="identifier">Func</span>(<span class="keyword">Of</span> T, <span class="identifier">Byte</span>()),
+ <span class="parameter">deserializer</span> <span class="keyword">As</span> <span class="identifier">Func</span>(<span class="keyword">Of</span> <span class="identifier">Byte</span>(), T)
+) <span class="keyword">As</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> T)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">static</span> <span class="identifier">Marshaller</span>&lt;T&gt; <span class="identifier">Create</span>(
+ <span class="identifier">Func</span>&lt;T, <span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^&gt;^ <span class="parameter">serializer</span>,
+ <span class="identifier">Func</span>&lt;<span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^, T&gt;^ <span class="parameter">deserializer</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">Create</span> :
+ <span class="parameter">serializer</span> : <span class="identifier">Func</span>&lt;'T, <span class="identifier">byte</span>[]&gt; *
+ <span class="parameter">deserializer</span> : <span class="identifier">Func</span>&lt;<span class="identifier">byte</span>[], 'T&gt; <span class="keyword">-&gt;</span> <span class="identifier">Marshaller</span>&lt;'T&gt;
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">serializer</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/bb549151" target="_blank">System<span id="LST736DAF32_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Func</a><span id="LST736DAF32_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span>, <span id="LST736DAF32_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_5?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/yyb1w04y" target="_blank">Byte</a><span id="LST736DAF32_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_6?cpp=&gt;|vb=()|nu=[]");</script><span id="LST736DAF32_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="serializer"/&gt; documentation for "M:Grpc.Core.Marshallers.Create``1(System.Func{``0,System.Byte[]},System.Func{System.Byte[],``0})"]</p></dd><dt><span class="parameter">deserializer</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/bb549151" target="_blank">System<span id="LST736DAF32_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Func</a><span id="LST736DAF32_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_9?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span id="LST736DAF32_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_10?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/yyb1w04y" target="_blank">Byte</a><span id="LST736DAF32_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_11?cpp=&gt;|vb=()|nu=[]");</script>, <span class="selflink"><span class="typeparameter">T</span></span><span id="LST736DAF32_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_12?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="deserializer"/&gt; documentation for "M:Grpc.Core.Marshallers.Create``1(System.Func{``0,System.Byte[]},System.Func{System.Byte[],``0})"]</p></dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "M:Grpc.Core.Marshallers.Create``1(System.Func{``0,System.Byte[]},System.Func{System.Byte[],``0})"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_Marshaller_1.htm">Marshaller</a><span id="LST736DAF32_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_13?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LST736DAF32_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736DAF32_14?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Marshallers.htm">Marshallers Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add.htm
new file mode 100644
index 0000000000..c8137c6c11
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Add Method (Metadata.Entry)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.Add(Grpc.Core.Metadata.Entry)" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.Add(Grpc.Core.Metadata.Entry)" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_Add" /><meta name="guid" content="M_Grpc_Core_Metadata_Add" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add.htm" title="Add Method (Metadata.Entry)" tocid="M_Grpc_Core_Metadata_Add">Add Method (Metadata.Entry)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add_1.htm" title="Add Method (String, Byte[])" tocid="M_Grpc_Core_Metadata_Add_1">Add Method (String, Byte[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add_2.htm" title="Add Method (String, String)" tocid="M_Grpc_Core_Metadata_Add_2">Add Method (String, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTA6FD5627_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_0?cpp=::|nu=.");</script>Add Method (Metadata<span id="LSTA6FD5627_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_1?cpp=::|nu=.");</script>Entry)</td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.Add(Grpc.Core.Metadata.Entry)"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Add</span>(
+ <span class="identifier">Metadata<span id="LSTA6FD5627_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">item</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Add</span> (
+ <span class="parameter">item</span> <span class="keyword">As</span> <span class="identifier">Metadata<span id="LSTA6FD5627_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Add</span>(
+ <span class="identifier">Metadata<span id="LSTA6FD5627_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">item</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Add</span> :
+ <span class="parameter">item</span> : <span class="identifier">Metadata<span id="LSTA6FD5627_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Add</span> :
+ <span class="parameter">item</span> : <span class="identifier">Metadata<span id="LSTA6FD5627_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">item</span></dt><dd>Type: <a href="T_Grpc_Core_Metadata_Entry.htm">Grpc.Core<span id="LSTA6FD5627_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata<span id="LSTA6FD5627_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="item"/&gt; documentation for "M:Grpc.Core.Metadata.Add(Grpc.Core.Metadata.Entry)"]</p></dd></dl><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/63ywd54z" target="_blank">ICollection<span id="LSTA6FD5627_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_9?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTA6FD5627_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_10?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LSTA6FD5627_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA6FD5627_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Add(T)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Metadata_Add.htm">Add Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add_1.htm
new file mode 100644
index 0000000000..6240e9bbe2
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add_1.htm
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Add Method (String, Byte[])</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.Add(System.String,System.Byte[])" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.Add(System.String,System.Byte[])" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_Add_1" /><meta name="guid" content="M_Grpc_Core_Metadata_Add_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add.htm" title="Add Method (Metadata.Entry)" tocid="M_Grpc_Core_Metadata_Add">Add Method (Metadata.Entry)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add_1.htm" title="Add Method (String, Byte[])" tocid="M_Grpc_Core_Metadata_Add_1">Add Method (String, Byte[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add_2.htm" title="Add Method (String, String)" tocid="M_Grpc_Core_Metadata_Add_2">Add Method (String, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST8D3F14CE_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8D3F14CE_0?cpp=::|nu=.");</script>Add Method (String, <span id="LST8D3F14CE_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8D3F14CE_1?cpp=array&lt;");</script>Byte<span id="LST8D3F14CE_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8D3F14CE_2?cpp=&gt;|vb=()|nu=[]");</script>)</td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.Add(System.String,System.Byte[])"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Add</span>(
+ <span class="identifier">string</span> <span class="parameter">key</span>,
+ <span class="identifier">byte</span>[] <span class="parameter">valueBytes</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Add</span> (
+ <span class="parameter">key</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">valueBytes</span> <span class="keyword">As</span> <span class="identifier">Byte</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">void</span> <span class="identifier">Add</span>(
+ <span class="identifier">String</span>^ <span class="parameter">key</span>,
+ <span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^ <span class="parameter">valueBytes</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Add</span> :
+ <span class="parameter">key</span> : <span class="identifier">string</span> *
+ <span class="parameter">valueBytes</span> : <span class="identifier">byte</span>[] <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">key</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST8D3F14CE_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8D3F14CE_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="key"/&gt; documentation for "M:Grpc.Core.Metadata.Add(System.String,System.Byte[])"]</p></dd><dt><span class="parameter">valueBytes</span></dt><dd>Type: <span id="LST8D3F14CE_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8D3F14CE_4?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/yyb1w04y" target="_blank">System<span id="LST8D3F14CE_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8D3F14CE_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Byte</a><span id="LST8D3F14CE_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8D3F14CE_6?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="valueBytes"/&gt; documentation for "M:Grpc.Core.Metadata.Add(System.String,System.Byte[])"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Metadata_Add.htm">Add Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add_2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add_2.htm
new file mode 100644
index 0000000000..54030d4c1c
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Add_2.htm
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Add Method (String, String)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.Add(System.String,System.String)" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.Add(System.String,System.String)" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_Add_2" /><meta name="guid" content="M_Grpc_Core_Metadata_Add_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add.htm" title="Add Method (Metadata.Entry)" tocid="M_Grpc_Core_Metadata_Add">Add Method (Metadata.Entry)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add_1.htm" title="Add Method (String, Byte[])" tocid="M_Grpc_Core_Metadata_Add_1">Add Method (String, Byte[])</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add_2.htm" title="Add Method (String, String)" tocid="M_Grpc_Core_Metadata_Add_2">Add Method (String, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTB5FDEA85_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB5FDEA85_0?cpp=::|nu=.");</script>Add Method (String, String)</td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.Add(System.String,System.String)"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Add</span>(
+ <span class="identifier">string</span> <span class="parameter">key</span>,
+ <span class="identifier">string</span> <span class="parameter">value</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Add</span> (
+ <span class="parameter">key</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">value</span> <span class="keyword">As</span> <span class="identifier">String</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">void</span> <span class="identifier">Add</span>(
+ <span class="identifier">String</span>^ <span class="parameter">key</span>,
+ <span class="identifier">String</span>^ <span class="parameter">value</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Add</span> :
+ <span class="parameter">key</span> : <span class="identifier">string</span> *
+ <span class="parameter">value</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">key</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTB5FDEA85_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB5FDEA85_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="key"/&gt; documentation for "M:Grpc.Core.Metadata.Add(System.String,System.String)"]</p></dd><dt><span class="parameter">value</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTB5FDEA85_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB5FDEA85_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="value"/&gt; documentation for "M:Grpc.Core.Metadata.Add(System.String,System.String)"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Metadata_Add.htm">Add Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Clear.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Clear.htm
new file mode 100644
index 0000000000..63b79b103e
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Clear.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Clear Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Clear method" /><meta name="System.Keywords" content="Metadata.Clear method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Clear" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.Clear" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.Clear" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_Clear" /><meta name="guid" content="M_Grpc_Core_Metadata_Clear" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Clear.htm" title="Clear Method " tocid="M_Grpc_Core_Metadata_Clear">Clear Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Contains.htm" title="Contains Method " tocid="M_Grpc_Core_Metadata_Contains">Contains Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_CopyTo.htm" title="CopyTo Method " tocid="M_Grpc_Core_Metadata_CopyTo">CopyTo Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Metadata_GetEnumerator">GetEnumerator Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_IndexOf.htm" title="IndexOf Method " tocid="M_Grpc_Core_Metadata_IndexOf">IndexOf Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Insert.htm" title="Insert Method " tocid="M_Grpc_Core_Metadata_Insert">Insert Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Remove.htm" title="Remove Method " tocid="M_Grpc_Core_Metadata_Remove">Remove Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_RemoveAt.htm" title="RemoveAt Method " tocid="M_Grpc_Core_Metadata_RemoveAt">RemoveAt Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST9CAE7D56_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9CAE7D56_0?cpp=::|nu=.");</script>Clear Method </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.Clear"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Clear</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Clear</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Clear</span>() <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Clear</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Clear</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/5axy4fbh" target="_blank">ICollection<span id="LST9CAE7D56_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9CAE7D56_1?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9CAE7D56_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9CAE7D56_2?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LST9CAE7D56_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9CAE7D56_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Clear<span id="LST9CAE7D56_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9CAE7D56_4?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Contains.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Contains.htm
new file mode 100644
index 0000000000..25711d28fa
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Contains.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Contains Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Contains method" /><meta name="System.Keywords" content="Metadata.Contains method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Contains" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.Contains(Grpc.Core.Metadata.Entry)" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.Contains(Grpc.Core.Metadata.Entry)" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_Contains" /><meta name="guid" content="M_Grpc_Core_Metadata_Contains" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Clear.htm" title="Clear Method " tocid="M_Grpc_Core_Metadata_Clear">Clear Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Contains.htm" title="Contains Method " tocid="M_Grpc_Core_Metadata_Contains">Contains Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_CopyTo.htm" title="CopyTo Method " tocid="M_Grpc_Core_Metadata_CopyTo">CopyTo Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Metadata_GetEnumerator">GetEnumerator Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_IndexOf.htm" title="IndexOf Method " tocid="M_Grpc_Core_Metadata_IndexOf">IndexOf Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Insert.htm" title="Insert Method " tocid="M_Grpc_Core_Metadata_Insert">Insert Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Remove.htm" title="Remove Method " tocid="M_Grpc_Core_Metadata_Remove">Remove Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_RemoveAt.htm" title="RemoveAt Method " tocid="M_Grpc_Core_Metadata_RemoveAt">RemoveAt Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTD24E38ED_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_0?cpp=::|nu=.");</script>Contains Method </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.Contains(Grpc.Core.Metadata.Entry)"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">bool</span> <span class="identifier">Contains</span>(
+ <span class="identifier">Metadata<span id="LSTD24E38ED_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">item</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">Contains</span> (
+ <span class="parameter">item</span> <span class="keyword">As</span> <span class="identifier">Metadata<span id="LSTD24E38ED_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>
+) <span class="keyword">As</span> <span class="identifier">Boolean</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="identifier">bool</span> <span class="identifier">Contains</span>(
+ <span class="identifier">Metadata<span id="LSTD24E38ED_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">item</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Contains</span> :
+ <span class="parameter">item</span> : <span class="identifier">Metadata<span id="LSTD24E38ED_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">-&gt;</span> <span class="identifier">bool</span>
+<span class="keyword">override</span> <span class="identifier">Contains</span> :
+ <span class="parameter">item</span> : <span class="identifier">Metadata<span id="LSTD24E38ED_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">-&gt;</span> <span class="identifier">bool</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">item</span></dt><dd>Type: <a href="T_Grpc_Core_Metadata_Entry.htm">Grpc.Core<span id="LSTD24E38ED_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata<span id="LSTD24E38ED_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="item"/&gt; documentation for "M:Grpc.Core.Metadata.Contains(Grpc.Core.Metadata.Entry)"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">Boolean</a><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/k5cf1d56" target="_blank">ICollection<span id="LSTD24E38ED_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_8?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTD24E38ED_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_9?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LSTD24E38ED_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD24E38ED_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Contains(T)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_CopyTo.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_CopyTo.htm
new file mode 100644
index 0000000000..151dc2e4cd
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_CopyTo.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.CopyTo Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CopyTo method" /><meta name="System.Keywords" content="Metadata.CopyTo method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.CopyTo" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.CopyTo(Grpc.Core.Metadata.Entry[],System.Int32)" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.CopyTo(Grpc.Core.Metadata.Entry[],System.Int32)" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_CopyTo" /><meta name="guid" content="M_Grpc_Core_Metadata_CopyTo" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Clear.htm" title="Clear Method " tocid="M_Grpc_Core_Metadata_Clear">Clear Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Contains.htm" title="Contains Method " tocid="M_Grpc_Core_Metadata_Contains">Contains Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_CopyTo.htm" title="CopyTo Method " tocid="M_Grpc_Core_Metadata_CopyTo">CopyTo Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Metadata_GetEnumerator">GetEnumerator Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_IndexOf.htm" title="IndexOf Method " tocid="M_Grpc_Core_Metadata_IndexOf">IndexOf Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Insert.htm" title="Insert Method " tocid="M_Grpc_Core_Metadata_Insert">Insert Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Remove.htm" title="Remove Method " tocid="M_Grpc_Core_Metadata_Remove">Remove Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_RemoveAt.htm" title="RemoveAt Method " tocid="M_Grpc_Core_Metadata_RemoveAt">RemoveAt Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST9AE6E237_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_0?cpp=::|nu=.");</script>CopyTo Method </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.CopyTo(Grpc.Core.Metadata.Entry[],System.Int32)"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">CopyTo</span>(
+ <span class="identifier">Metadata<span id="LST9AE6E237_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>[] <span class="parameter">array</span>,
+ <span class="identifier">int</span> <span class="parameter">arrayIndex</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">CopyTo</span> (
+ <span class="parameter">array</span> <span class="keyword">As</span> <span class="identifier">Metadata<span id="LST9AE6E237_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>(),
+ <span class="parameter">arrayIndex</span> <span class="keyword">As</span> <span class="identifier">Integer</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">CopyTo</span>(
+ <span class="keyword">array</span>&lt;<span class="identifier">Metadata<span id="LST9AE6E237_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;^ <span class="parameter">array</span>,
+ <span class="identifier">int</span> <span class="parameter">arrayIndex</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">CopyTo</span> :
+ <span class="parameter">array</span> : <span class="identifier">Metadata<span id="LST9AE6E237_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>[] *
+ <span class="parameter">arrayIndex</span> : <span class="identifier">int</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">CopyTo</span> :
+ <span class="parameter">array</span> : <span class="identifier">Metadata<span id="LST9AE6E237_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>[] *
+ <span class="parameter">arrayIndex</span> : <span class="identifier">int</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">array</span></dt><dd>Type: <span id="LST9AE6E237_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_6?cpp=array&lt;");</script><a href="T_Grpc_Core_Metadata_Entry.htm">Grpc.Core<span id="LST9AE6E237_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata<span id="LST9AE6E237_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a><span id="LST9AE6E237_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_9?cpp=&gt;|vb=()|nu=[]");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="array"/&gt; documentation for "M:Grpc.Core.Metadata.CopyTo(Grpc.Core.Metadata.Entry[],System.Int32)"]</p></dd><dt><span class="parameter">arrayIndex</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">System<span id="LST9AE6E237_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Int32</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="arrayIndex"/&gt; documentation for "M:Grpc.Core.Metadata.CopyTo(Grpc.Core.Metadata.Entry[],System.Int32)"]</p></dd></dl><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/0efx51xw" target="_blank">ICollection<span id="LST9AE6E237_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_11?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9AE6E237_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_12?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LST9AE6E237_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_13?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>CopyTo(<span id="LST9AE6E237_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_14?cpp=array&lt;");</script>T<span id="LST9AE6E237_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AE6E237_15?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>, Int32)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry_ToString.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry_ToString.htm
new file mode 100644
index 0000000000..88c335739a
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry_ToString.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Entry.ToString Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ToString method" /><meta name="System.Keywords" content="Metadata.Entry.ToString method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.ToString" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.Entry.ToString" /><meta name="Description" content="Returns a that represents the current ." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_Entry_ToString" /><meta name="guid" content="M_Grpc_Core_Metadata_Entry_ToString" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata_Entry.htm" title="Entry Methods" tocid="Methods_T_Grpc_Core_Metadata_Entry">Entry Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Entry_ToString.htm" title="ToString Method " tocid="M_Grpc_Core_Metadata_Entry_ToString">ToString Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST510AC259_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST510AC259_0?cpp=::|nu=.");</script>Entry<span id="LST510AC259_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST510AC259_1?cpp=::|nu=.");</script>ToString Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns a <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a> that represents the current <a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST510AC259_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST510AC259_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a>.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">override</span> <span class="identifier">string</span> <span class="identifier">ToString</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Overrides</span> <span class="keyword">Function</span> <span class="identifier">ToString</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="identifier">String</span>^ <span class="identifier">ToString</span>() <span class="keyword">override</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">ToString</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">string</span>
+<span class="keyword">override</span> <span class="identifier">ToString</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">string</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST510AC259_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST510AC259_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry__ctor.htm
new file mode 100644
index 0000000000..775e8b5a94
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry__ctor.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Entry Constructor (String, Byte[])</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.Entry.#ctor(System.String,System.Byte[])" /><meta name="Description" content="Initializes a new instance of the struct with a binary value." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_Entry__ctor" /><meta name="guid" content="M_Grpc_Core_Metadata_Entry__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Entry__ctor.htm" title="Entry Constructor " tocid="Overload_Grpc_Core_Metadata_Entry__ctor">Entry Constructor </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Entry__ctor.htm" title="Metadata.Entry Constructor (String, Byte[])" tocid="M_Grpc_Core_Metadata_Entry__ctor">Metadata.Entry Constructor (String, Byte[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Entry__ctor_1.htm" title="Metadata.Entry Constructor (String, String)" tocid="M_Grpc_Core_Metadata_Entry__ctor_1">Metadata.Entry Constructor (String, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTBEFDA85C_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBEFDA85C_0?cpp=::|nu=.");</script>Entry Constructor (String, <span id="LSTBEFDA85C_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBEFDA85C_1?cpp=array&lt;");</script>Byte<span id="LSTBEFDA85C_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBEFDA85C_2?cpp=&gt;|vb=()|nu=[]");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Initializes a new instance of the <a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LSTBEFDA85C_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBEFDA85C_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a> struct with a binary value.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Entry</span>(
+ <span class="identifier">string</span> <span class="parameter">key</span>,
+ <span class="identifier">byte</span>[] <span class="parameter">valueBytes</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">key</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">valueBytes</span> <span class="keyword">As</span> <span class="identifier">Byte</span>()
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Entry</span>(
+ <span class="identifier">String</span>^ <span class="parameter">key</span>,
+ <span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^ <span class="parameter">valueBytes</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">key</span> : <span class="identifier">string</span> *
+ <span class="parameter">valueBytes</span> : <span class="identifier">byte</span>[] <span class="keyword">-&gt;</span> <span class="identifier">Entry</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">key</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTBEFDA85C_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBEFDA85C_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Metadata key, needs to have suffix indicating a binary valued metadata entry.</dd><dt><span class="parameter">valueBytes</span></dt><dd>Type: <span id="LSTBEFDA85C_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBEFDA85C_5?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/yyb1w04y" target="_blank">System<span id="LSTBEFDA85C_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBEFDA85C_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Byte</a><span id="LSTBEFDA85C_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBEFDA85C_7?cpp=&gt;|vb=()|nu=[]");</script><br />Value bytes.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LSTBEFDA85C_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBEFDA85C_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Structure</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Metadata_Entry__ctor.htm">Metadata<span id="LSTBEFDA85C_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBEFDA85C_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry__ctor_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry__ctor_1.htm
new file mode 100644
index 0000000000..355545e1ac
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Entry__ctor_1.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Entry Constructor (String, String)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.Entry.#ctor(System.String,System.String)" /><meta name="Description" content="Initializes a new instance of the struct holding an ASCII value." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_Entry__ctor_1" /><meta name="guid" content="M_Grpc_Core_Metadata_Entry__ctor_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Entry__ctor.htm" title="Entry Constructor " tocid="Overload_Grpc_Core_Metadata_Entry__ctor">Entry Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Entry__ctor.htm" title="Metadata.Entry Constructor (String, Byte[])" tocid="M_Grpc_Core_Metadata_Entry__ctor">Metadata.Entry Constructor (String, Byte[])</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Entry__ctor_1.htm" title="Metadata.Entry Constructor (String, String)" tocid="M_Grpc_Core_Metadata_Entry__ctor_1">Metadata.Entry Constructor (String, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTEBD28067_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEBD28067_0?cpp=::|nu=.");</script>Entry Constructor (String, String)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Initializes a new instance of the <a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LSTEBD28067_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEBD28067_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a> struct holding an ASCII value.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Entry</span>(
+ <span class="identifier">string</span> <span class="parameter">key</span>,
+ <span class="identifier">string</span> <span class="parameter">value</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">key</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">value</span> <span class="keyword">As</span> <span class="identifier">String</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Entry</span>(
+ <span class="identifier">String</span>^ <span class="parameter">key</span>,
+ <span class="identifier">String</span>^ <span class="parameter">value</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">key</span> : <span class="identifier">string</span> *
+ <span class="parameter">value</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="identifier">Entry</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">key</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTEBD28067_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEBD28067_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Metadata key, must not use suffix indicating a binary valued metadata entry.</dd><dt><span class="parameter">value</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTEBD28067_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEBD28067_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Value string. Only ASCII characters are allowed.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LSTEBD28067_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEBD28067_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Structure</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Metadata_Entry__ctor.htm">Metadata<span id="LSTEBD28067_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEBD28067_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_GetEnumerator.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_GetEnumerator.htm
new file mode 100644
index 0000000000..a8720d73a1
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_GetEnumerator.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.GetEnumerator Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetEnumerator method" /><meta name="System.Keywords" content="Metadata.GetEnumerator method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.GetEnumerator" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.GetEnumerator" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.GetEnumerator" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_GetEnumerator" /><meta name="guid" content="M_Grpc_Core_Metadata_GetEnumerator" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Clear.htm" title="Clear Method " tocid="M_Grpc_Core_Metadata_Clear">Clear Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Contains.htm" title="Contains Method " tocid="M_Grpc_Core_Metadata_Contains">Contains Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_CopyTo.htm" title="CopyTo Method " tocid="M_Grpc_Core_Metadata_CopyTo">CopyTo Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Metadata_GetEnumerator">GetEnumerator Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_IndexOf.htm" title="IndexOf Method " tocid="M_Grpc_Core_Metadata_IndexOf">IndexOf Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Insert.htm" title="Insert Method " tocid="M_Grpc_Core_Metadata_Insert">Insert Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Remove.htm" title="Remove Method " tocid="M_Grpc_Core_Metadata_Remove">Remove Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_RemoveAt.htm" title="RemoveAt Method " tocid="M_Grpc_Core_Metadata_RemoveAt">RemoveAt Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST72131FD7_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_0?cpp=::|nu=.");</script>GetEnumerator Method </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.GetEnumerator"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">Metadata<span id="LST72131FD7_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt; <span class="identifier">GetEnumerator</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetEnumerator</span> <span class="keyword">As</span> <span class="identifier">IEnumerator</span>(<span class="keyword">Of</span> <span class="identifier">Metadata<span id="LST72131FD7_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">Metadata<span id="LST72131FD7_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;^ <span class="identifier">GetEnumerator</span>() <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">GetEnumerator</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">Metadata<span id="LST72131FD7_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;
+<span class="keyword">override</span> <span class="identifier">GetEnumerator</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">Metadata<span id="LST72131FD7_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt; </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/78dfe2yb" target="_blank">IEnumerator</a><span id="LST72131FD7_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST72131FD7_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a><span id="LST72131FD7_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_8?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/s793z9y2" target="_blank">IEnumerable<span id="LST72131FD7_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_9?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST72131FD7_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_10?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LST72131FD7_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>GetEnumerator<span id="LST72131FD7_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72131FD7_12?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_IndexOf.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_IndexOf.htm
new file mode 100644
index 0000000000..e1791e7231
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_IndexOf.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.IndexOf Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IndexOf method" /><meta name="System.Keywords" content="Metadata.IndexOf method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.IndexOf" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.IndexOf(Grpc.Core.Metadata.Entry)" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.IndexOf(Grpc.Core.Metadata.Entry)" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_IndexOf" /><meta name="guid" content="M_Grpc_Core_Metadata_IndexOf" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Clear.htm" title="Clear Method " tocid="M_Grpc_Core_Metadata_Clear">Clear Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Contains.htm" title="Contains Method " tocid="M_Grpc_Core_Metadata_Contains">Contains Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_CopyTo.htm" title="CopyTo Method " tocid="M_Grpc_Core_Metadata_CopyTo">CopyTo Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Metadata_GetEnumerator">GetEnumerator Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_IndexOf.htm" title="IndexOf Method " tocid="M_Grpc_Core_Metadata_IndexOf">IndexOf Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Insert.htm" title="Insert Method " tocid="M_Grpc_Core_Metadata_Insert">Insert Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Remove.htm" title="Remove Method " tocid="M_Grpc_Core_Metadata_Remove">Remove Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_RemoveAt.htm" title="RemoveAt Method " tocid="M_Grpc_Core_Metadata_RemoveAt">RemoveAt Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST107B9B5_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_0?cpp=::|nu=.");</script>IndexOf Method </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.IndexOf(Grpc.Core.Metadata.Entry)"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">int</span> <span class="identifier">IndexOf</span>(
+ <span class="identifier">Metadata<span id="LST107B9B5_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">item</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">IndexOf</span> (
+ <span class="parameter">item</span> <span class="keyword">As</span> <span class="identifier">Metadata<span id="LST107B9B5_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>
+) <span class="keyword">As</span> <span class="identifier">Integer</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="identifier">int</span> <span class="identifier">IndexOf</span>(
+ <span class="identifier">Metadata<span id="LST107B9B5_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">item</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">IndexOf</span> :
+ <span class="parameter">item</span> : <span class="identifier">Metadata<span id="LST107B9B5_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">-&gt;</span> <span class="identifier">int</span>
+<span class="keyword">override</span> <span class="identifier">IndexOf</span> :
+ <span class="parameter">item</span> : <span class="identifier">Metadata<span id="LST107B9B5_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">-&gt;</span> <span class="identifier">int</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">item</span></dt><dd>Type: <a href="T_Grpc_Core_Metadata_Entry.htm">Grpc.Core<span id="LST107B9B5_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata<span id="LST107B9B5_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="item"/&gt; documentation for "M:Grpc.Core.Metadata.IndexOf(Grpc.Core.Metadata.Entry)"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/3w0148af" target="_blank">IList<span id="LST107B9B5_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_8?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST107B9B5_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_9?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LST107B9B5_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST107B9B5_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IndexOf(T)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Insert.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Insert.htm
new file mode 100644
index 0000000000..a6f0cfd163
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Insert.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Insert Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Insert method" /><meta name="System.Keywords" content="Metadata.Insert method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Insert" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.Insert(System.Int32,Grpc.Core.Metadata.Entry)" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.Insert(System.Int32,Grpc.Core.Metadata.Entry)" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_Insert" /><meta name="guid" content="M_Grpc_Core_Metadata_Insert" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Clear.htm" title="Clear Method " tocid="M_Grpc_Core_Metadata_Clear">Clear Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Contains.htm" title="Contains Method " tocid="M_Grpc_Core_Metadata_Contains">Contains Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_CopyTo.htm" title="CopyTo Method " tocid="M_Grpc_Core_Metadata_CopyTo">CopyTo Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Metadata_GetEnumerator">GetEnumerator Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_IndexOf.htm" title="IndexOf Method " tocid="M_Grpc_Core_Metadata_IndexOf">IndexOf Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Insert.htm" title="Insert Method " tocid="M_Grpc_Core_Metadata_Insert">Insert Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Remove.htm" title="Remove Method " tocid="M_Grpc_Core_Metadata_Remove">Remove Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_RemoveAt.htm" title="RemoveAt Method " tocid="M_Grpc_Core_Metadata_RemoveAt">RemoveAt Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTDAE97622_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_0?cpp=::|nu=.");</script>Insert Method </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.Insert(System.Int32,Grpc.Core.Metadata.Entry)"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Insert</span>(
+ <span class="identifier">int</span> <span class="parameter">index</span>,
+ <span class="identifier">Metadata<span id="LSTDAE97622_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">item</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Insert</span> (
+ <span class="parameter">index</span> <span class="keyword">As</span> <span class="identifier">Integer</span>,
+ <span class="parameter">item</span> <span class="keyword">As</span> <span class="identifier">Metadata<span id="LSTDAE97622_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">Insert</span>(
+ <span class="identifier">int</span> <span class="parameter">index</span>,
+ <span class="identifier">Metadata<span id="LSTDAE97622_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">item</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Insert</span> :
+ <span class="parameter">index</span> : <span class="identifier">int</span> *
+ <span class="parameter">item</span> : <span class="identifier">Metadata<span id="LSTDAE97622_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">Insert</span> :
+ <span class="parameter">index</span> : <span class="identifier">int</span> *
+ <span class="parameter">item</span> : <span class="identifier">Metadata<span id="LSTDAE97622_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">index</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">System<span id="LSTDAE97622_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Int32</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="index"/&gt; documentation for "M:Grpc.Core.Metadata.Insert(System.Int32,Grpc.Core.Metadata.Entry)"]</p></dd><dt><span class="parameter">item</span></dt><dd>Type: <a href="T_Grpc_Core_Metadata_Entry.htm">Grpc.Core<span id="LSTDAE97622_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata<span id="LSTDAE97622_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="item"/&gt; documentation for "M:Grpc.Core.Metadata.Insert(System.Int32,Grpc.Core.Metadata.Entry)"]</p></dd></dl><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/8zsfbxz8" target="_blank">IList<span id="LSTDAE97622_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_9?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTDAE97622_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_10?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LSTDAE97622_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE97622_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Insert(Int32, T)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Remove.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Remove.htm
new file mode 100644
index 0000000000..fda57bc458
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_Remove.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Remove Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Remove method" /><meta name="System.Keywords" content="Metadata.Remove method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Remove" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.Remove(Grpc.Core.Metadata.Entry)" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.Remove(Grpc.Core.Metadata.Entry)" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_Remove" /><meta name="guid" content="M_Grpc_Core_Metadata_Remove" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Clear.htm" title="Clear Method " tocid="M_Grpc_Core_Metadata_Clear">Clear Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Contains.htm" title="Contains Method " tocid="M_Grpc_Core_Metadata_Contains">Contains Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_CopyTo.htm" title="CopyTo Method " tocid="M_Grpc_Core_Metadata_CopyTo">CopyTo Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Metadata_GetEnumerator">GetEnumerator Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_IndexOf.htm" title="IndexOf Method " tocid="M_Grpc_Core_Metadata_IndexOf">IndexOf Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Insert.htm" title="Insert Method " tocid="M_Grpc_Core_Metadata_Insert">Insert Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Remove.htm" title="Remove Method " tocid="M_Grpc_Core_Metadata_Remove">Remove Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_RemoveAt.htm" title="RemoveAt Method " tocid="M_Grpc_Core_Metadata_RemoveAt">RemoveAt Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTF942BBA0_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_0?cpp=::|nu=.");</script>Remove Method </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.Remove(Grpc.Core.Metadata.Entry)"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">bool</span> <span class="identifier">Remove</span>(
+ <span class="identifier">Metadata<span id="LSTF942BBA0_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">item</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">Remove</span> (
+ <span class="parameter">item</span> <span class="keyword">As</span> <span class="identifier">Metadata<span id="LSTF942BBA0_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>
+) <span class="keyword">As</span> <span class="identifier">Boolean</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="identifier">bool</span> <span class="identifier">Remove</span>(
+ <span class="identifier">Metadata<span id="LSTF942BBA0_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">item</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Remove</span> :
+ <span class="parameter">item</span> : <span class="identifier">Metadata<span id="LSTF942BBA0_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">-&gt;</span> <span class="identifier">bool</span>
+<span class="keyword">override</span> <span class="identifier">Remove</span> :
+ <span class="parameter">item</span> : <span class="identifier">Metadata<span id="LSTF942BBA0_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">-&gt;</span> <span class="identifier">bool</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">item</span></dt><dd>Type: <a href="T_Grpc_Core_Metadata_Entry.htm">Grpc.Core<span id="LSTF942BBA0_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata<span id="LSTF942BBA0_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="item"/&gt; documentation for "M:Grpc.Core.Metadata.Remove(Grpc.Core.Metadata.Entry)"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">Boolean</a><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/bye7h94w" target="_blank">ICollection<span id="LSTF942BBA0_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_8?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTF942BBA0_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_9?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LSTF942BBA0_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF942BBA0_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Remove(T)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_RemoveAt.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_RemoveAt.htm
new file mode 100644
index 0000000000..519eac63b7
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata_RemoveAt.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.RemoveAt Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RemoveAt method" /><meta name="System.Keywords" content="Metadata.RemoveAt method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.RemoveAt" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.RemoveAt(System.Int32)" /><meta name="Description" content="summaryM:Grpc.Core.Metadata.RemoveAt(System.Int32)" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata_RemoveAt" /><meta name="guid" content="M_Grpc_Core_Metadata_RemoveAt" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Clear.htm" title="Clear Method " tocid="M_Grpc_Core_Metadata_Clear">Clear Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Contains.htm" title="Contains Method " tocid="M_Grpc_Core_Metadata_Contains">Contains Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_CopyTo.htm" title="CopyTo Method " tocid="M_Grpc_Core_Metadata_CopyTo">CopyTo Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Metadata_GetEnumerator">GetEnumerator Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_IndexOf.htm" title="IndexOf Method " tocid="M_Grpc_Core_Metadata_IndexOf">IndexOf Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Insert.htm" title="Insert Method " tocid="M_Grpc_Core_Metadata_Insert">Insert Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Remove.htm" title="Remove Method " tocid="M_Grpc_Core_Metadata_Remove">Remove Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_RemoveAt.htm" title="RemoveAt Method " tocid="M_Grpc_Core_Metadata_RemoveAt">RemoveAt Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST39A81B3A_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39A81B3A_0?cpp=::|nu=.");</script>RemoveAt Method </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "M:Grpc.Core.Metadata.RemoveAt(System.Int32)"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">RemoveAt</span>(
+ <span class="identifier">int</span> <span class="parameter">index</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">RemoveAt</span> (
+ <span class="parameter">index</span> <span class="keyword">As</span> <span class="identifier">Integer</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">void</span> <span class="identifier">RemoveAt</span>(
+ <span class="identifier">int</span> <span class="parameter">index</span>
+) <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">RemoveAt</span> :
+ <span class="parameter">index</span> : <span class="identifier">int</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+<span class="keyword">override</span> <span class="identifier">RemoveAt</span> :
+ <span class="parameter">index</span> : <span class="identifier">int</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">index</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">System<span id="LST39A81B3A_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39A81B3A_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Int32</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="index"/&gt; documentation for "M:Grpc.Core.Metadata.RemoveAt(System.Int32)"]</p></dd></dl><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/c93ab5c9" target="_blank">IList<span id="LST39A81B3A_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39A81B3A_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST39A81B3A_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39A81B3A_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LST39A81B3A_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39A81B3A_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>RemoveAt(Int32)</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Metadata__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata__ctor.htm
new file mode 100644
index 0000000000..844e6135cc
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Metadata__ctor.htm
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Metadata class, constructor" /><meta name="System.Keywords" content="Metadata.Metadata constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Metadata" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Metadata.#ctor" /><meta name="Description" content="Initializes a new instance of Metadata." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Metadata__ctor" /><meta name="guid" content="M_Grpc_Core_Metadata__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata__ctor.htm" title="Metadata Constructor " tocid="M_Grpc_Core_Metadata__ctor">Metadata Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata.htm" title="Metadata Properties" tocid="Properties_T_Grpc_Core_Metadata">Metadata Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_Metadata.htm" title="Metadata Fields" tocid="Fields_T_Grpc_Core_Metadata">Metadata Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Initializes a new instance of <span class="code">Metadata</span>.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Metadata</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Metadata</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Metadata</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Method_2__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Method_2__ctor.htm
new file mode 100644
index 0000000000..7708571728
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Method_2__ctor.htm
@@ -0,0 +1,27 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Method(TRequest, TResponse) Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E class, constructor" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse) class, constructor" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E.Method constructor" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse).Method constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.Method" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Method`2.#ctor(Grpc.Core.MethodType,System.String,System.String,Grpc.Core.Marshaller{`0},Grpc.Core.Marshaller{`1})" /><meta name="Description" content="Initializes a new instance of the Method class." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Method_2__ctor" /><meta name="guid" content="M_Grpc_Core_Method_2__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Method_2__ctor.htm" title="Method(TRequest, TResponse) Constructor " tocid="M_Grpc_Core_Method_2__ctor">Method(TRequest, TResponse) Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Method<span id="LSTA90ABCA2_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTA90ABCA2_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Initializes a new instance of the <span class="code">Method</span> class.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Method</span>(
+ <span class="identifier">MethodType</span> <span class="parameter">type</span>,
+ <span class="identifier">string</span> <span class="parameter">serviceName</span>,
+ <span class="identifier">string</span> <span class="parameter">name</span>,
+ <span class="identifier">Marshaller</span>&lt;TRequest&gt; <span class="parameter">requestMarshaller</span>,
+ <span class="identifier">Marshaller</span>&lt;TResponse&gt; <span class="parameter">responseMarshaller</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">type</span> <span class="keyword">As</span> <span class="identifier">MethodType</span>,
+ <span class="parameter">serviceName</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">name</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">requestMarshaller</span> <span class="keyword">As</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> TRequest),
+ <span class="parameter">responseMarshaller</span> <span class="keyword">As</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> TResponse)
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Method</span>(
+ <span class="identifier">MethodType</span> <span class="parameter">type</span>,
+ <span class="identifier">String</span>^ <span class="parameter">serviceName</span>,
+ <span class="identifier">String</span>^ <span class="parameter">name</span>,
+ <span class="identifier">Marshaller</span>&lt;TRequest&gt; <span class="parameter">requestMarshaller</span>,
+ <span class="identifier">Marshaller</span>&lt;TResponse&gt; <span class="parameter">responseMarshaller</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">type</span> : <span class="identifier">MethodType</span> *
+ <span class="parameter">serviceName</span> : <span class="identifier">string</span> *
+ <span class="parameter">name</span> : <span class="identifier">string</span> *
+ <span class="parameter">requestMarshaller</span> : <span class="identifier">Marshaller</span>&lt;'TRequest&gt; *
+ <span class="parameter">responseMarshaller</span> : <span class="identifier">Marshaller</span>&lt;'TResponse&gt; <span class="keyword">-&gt;</span> <span class="identifier">Method</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">type</span></dt><dd>Type: <a href="T_Grpc_Core_MethodType.htm">Grpc.Core<span id="LSTA90ABCA2_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>MethodType</a><br />Type of method.</dd><dt><span class="parameter">serviceName</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTA90ABCA2_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Name of service this method belongs to.</dd><dt><span class="parameter">name</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTA90ABCA2_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Unqualified name of the method.</dd><dt><span class="parameter">requestMarshaller</span></dt><dd>Type: <a href="T_Grpc_Core_Marshaller_1.htm">Grpc.Core<span id="LSTA90ABCA2_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Marshaller</a><span id="LSTA90ABCA2_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Method_2.htm"><span class="typeparameter">TRequest</span></a><span id="LSTA90ABCA2_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Marshaller used for request messages.</dd><dt><span class="parameter">responseMarshaller</span></dt><dd>Type: <a href="T_Grpc_Core_Marshaller_1.htm">Grpc.Core<span id="LSTA90ABCA2_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Marshaller</a><span id="LSTA90ABCA2_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_9?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Method_2.htm"><span class="typeparameter">TResponse</span></a><span id="LSTA90ABCA2_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_10?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Marshaller used for response messages.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Method_2.htm">Method<span id="LSTA90ABCA2_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_11?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA90ABCA2_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA90ABCA2_12?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_RpcException__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_RpcException__ctor.htm
new file mode 100644
index 0000000000..0eacf485d3
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_RpcException__ctor.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>RpcException Constructor (Status)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.RpcException.#ctor(Grpc.Core.Status)" /><meta name="Description" content="Creates a new RpcException associated with given status." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_RpcException__ctor" /><meta name="guid" content="M_Grpc_Core_RpcException__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_RpcException__ctor.htm" title="RpcException Constructor " tocid="Overload_Grpc_Core_RpcException__ctor">RpcException Constructor </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_RpcException__ctor.htm" title="RpcException Constructor (Status)" tocid="M_Grpc_Core_RpcException__ctor">RpcException Constructor (Status)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_RpcException__ctor_1.htm" title="RpcException Constructor (Status, String)" tocid="M_Grpc_Core_RpcException__ctor_1">RpcException Constructor (Status, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">RpcException Constructor (Status)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a new <span class="code">RpcException</span> associated with given status.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">RpcException</span>(
+ <span class="identifier">Status</span> <span class="parameter">status</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">status</span> <span class="keyword">As</span> <span class="identifier">Status</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">RpcException</span>(
+ <span class="identifier">Status</span> <span class="parameter">status</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">status</span> : <span class="identifier">Status</span> <span class="keyword">-&gt;</span> <span class="identifier">RpcException</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">status</span></dt><dd>Type: <a href="T_Grpc_Core_Status.htm">Grpc.Core<span id="LST84587763_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST84587763_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Status</a><br />Resulting status of a call.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_RpcException.htm">RpcException Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_RpcException__ctor.htm">RpcException Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_RpcException__ctor_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_RpcException__ctor_1.htm
new file mode 100644
index 0000000000..d1611a2c41
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_RpcException__ctor_1.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>RpcException Constructor (Status, String)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.RpcException.#ctor(Grpc.Core.Status,System.String)" /><meta name="Description" content="Creates a new RpcException associated with given status and message." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_RpcException__ctor_1" /><meta name="guid" content="M_Grpc_Core_RpcException__ctor_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_RpcException__ctor.htm" title="RpcException Constructor " tocid="Overload_Grpc_Core_RpcException__ctor">RpcException Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_RpcException__ctor.htm" title="RpcException Constructor (Status)" tocid="M_Grpc_Core_RpcException__ctor">RpcException Constructor (Status)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_RpcException__ctor_1.htm" title="RpcException Constructor (Status, String)" tocid="M_Grpc_Core_RpcException__ctor_1">RpcException Constructor (Status, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">RpcException Constructor (Status, String)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a new <span class="code">RpcException</span> associated with given status and message.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">RpcException</span>(
+ <span class="identifier">Status</span> <span class="parameter">status</span>,
+ <span class="identifier">string</span> <span class="parameter">message</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">status</span> <span class="keyword">As</span> <span class="identifier">Status</span>,
+ <span class="parameter">message</span> <span class="keyword">As</span> <span class="identifier">String</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">RpcException</span>(
+ <span class="identifier">Status</span> <span class="parameter">status</span>,
+ <span class="identifier">String</span>^ <span class="parameter">message</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">status</span> : <span class="identifier">Status</span> *
+ <span class="parameter">message</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="identifier">RpcException</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">status</span></dt><dd>Type: <a href="T_Grpc_Core_Status.htm">Grpc.Core<span id="LSTFBC91421_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFBC91421_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Status</a><br />Resulting status of a call.</dd><dt><span class="parameter">message</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTFBC91421_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFBC91421_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />The exception message.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_RpcException.htm">RpcException Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_RpcException__ctor.htm">RpcException Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm
new file mode 100644
index 0000000000..40fbe7c30e
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.CreatePropagationToken Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CreatePropagationToken method" /><meta name="System.Keywords" content="ServerCallContext.CreatePropagationToken method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.CreatePropagationToken" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerCallContext.CreatePropagationToken(Grpc.Core.ContextPropagationOptions)" /><meta name="Description" content="Creates a propagation token to be used to propagate call context to a child call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerCallContext_CreatePropagationToken" /><meta name="guid" content="M_Grpc_Core_ServerCallContext_CreatePropagationToken" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Methods" tocid="Methods_T_Grpc_Core_ServerCallContext">ServerCallContext Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm" title="CreatePropagationToken Method " tocid="M_Grpc_Core_ServerCallContext_CreatePropagationToken">CreatePropagationToken Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm" title="WriteResponseHeadersAsync Method " tocid="M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync">WriteResponseHeadersAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LSTCF5DA64A_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCF5DA64A_0?cpp=::|nu=.");</script>CreatePropagationToken Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a propagation token to be used to propagate call context to a child call.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ContextPropagationToken</span> <span class="identifier">CreatePropagationToken</span>(
+ <span class="identifier">ContextPropagationOptions</span> <span class="parameter">options</span> = <span class="keyword">null</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">CreatePropagationToken</span> (
+ Optional <span class="parameter">options</span> <span class="keyword">As</span> <span class="identifier">ContextPropagationOptions</span> = <span class="keyword">Nothing</span>
+) <span class="keyword">As</span> <span class="identifier">ContextPropagationToken</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">ContextPropagationToken</span>^ <span class="identifier">CreatePropagationToken</span>(
+ <span class="identifier">ContextPropagationOptions</span>^ <span class="parameter">options</span> = <span class="keyword">nullptr</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">CreatePropagationToken</span> :
+ ?<span class="parameter">options</span> : <span class="identifier">ContextPropagationOptions</span>
+(* Defaults:
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">options</span> = defaultArg <span class="identifier">options</span> <span class="keyword">null</span>
+*)
+<span class="keyword">-&gt;</span> <span class="identifier">ContextPropagationToken</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">options</span> (Optional)</dt><dd>Type: <a href="T_Grpc_Core_ContextPropagationOptions.htm">Grpc.Core<span id="LSTCF5DA64A_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCF5DA64A_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ContextPropagationOptions</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="options"/&gt; documentation for "M:Grpc.Core.ServerCallContext.CreatePropagationToken(Grpc.Core.ContextPropagationOptions)"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_ContextPropagationToken.htm">ContextPropagationToken</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm
new file mode 100644
index 0000000000..b62606fafd
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.WriteResponseHeadersAsync Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteResponseHeadersAsync method" /><meta name="System.Keywords" content="ServerCallContext.WriteResponseHeadersAsync method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.WriteResponseHeadersAsync" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerCallContext.WriteResponseHeadersAsync(Grpc.Core.Metadata)" /><meta name="Description" content="Asynchronously sends response headers for the current call to the client. This method may only be invoked once for each call and needs to be invoked before any response messages are written." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync" /><meta name="guid" content="M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Methods" tocid="Methods_T_Grpc_Core_ServerCallContext">ServerCallContext Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm" title="CreatePropagationToken Method " tocid="M_Grpc_Core_ServerCallContext_CreatePropagationToken">CreatePropagationToken Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm" title="WriteResponseHeadersAsync Method " tocid="M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync">WriteResponseHeadersAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LSTCC9C7C69_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCC9C7C69_0?cpp=::|nu=.");</script>WriteResponseHeadersAsync Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Asynchronously sends response headers for the current call to the client. This method may only be invoked once for each call and needs to be invoked
+ before any response messages are written. Writing the first response message implicitly sends empty response headers if <span class="code">WriteResponseHeadersAsync</span> haven't
+ been called yet.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span> <span class="identifier">WriteResponseHeadersAsync</span>(
+ <span class="identifier">Metadata</span> <span class="parameter">responseHeaders</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">WriteResponseHeadersAsync</span> (
+ <span class="parameter">responseHeaders</span> <span class="keyword">As</span> <span class="identifier">Metadata</span>
+) <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Task</span>^ <span class="identifier">WriteResponseHeadersAsync</span>(
+ <span class="identifier">Metadata</span>^ <span class="parameter">responseHeaders</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">WriteResponseHeadersAsync</span> :
+ <span class="parameter">responseHeaders</span> : <span class="identifier">Metadata</span> <span class="keyword">-&gt;</span> <span class="identifier">Task</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">responseHeaders</span></dt><dd>Type: <a href="T_Grpc_Core_Metadata.htm">Grpc.Core<span id="LSTCC9C7C69_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCC9C7C69_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata</a><br />The response headers to send.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a><br />The task that finished once response headers have been written.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerCredentials__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerCredentials__ctor.htm
new file mode 100644
index 0000000000..ec8b030d85
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerCredentials__ctor.htm
@@ -0,0 +1,2 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCredentials Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerCredentials class, constructor" /><meta name="System.Keywords" content="ServerCredentials.ServerCredentials constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCredentials.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCredentials.ServerCredentials" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerCredentials.#ctor" /><meta name="Description" content="Grpc.Core.ServerCredentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerCredentials__ctor" /><meta name="guid" content="M_Grpc_Core_ServerCredentials__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerCredentials__ctor.htm" title="ServerCredentials Constructor " tocid="M_Grpc_Core_ServerCredentials__ctor">ServerCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Properties" tocid="Properties_T_Grpc_Core_ServerCredentials">ServerCredentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Methods" tocid="Methods_T_Grpc_Core_ServerCredentials">ServerCredentials Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCredentials Constructor </td></tr></table><span class="introStyle"></span><div class="summary">Initializes a new instance of the <a href="T_Grpc_Core_ServerCredentials.htm">ServerCredentials</a> class</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">protected</span> <span class="identifier">ServerCredentials</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Protected</span> <span class="keyword">Sub</span> <span class="identifier">New</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">protected</span>:
+<span class="identifier">ServerCredentials</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">ServerCredentials</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCredentials.htm">ServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerPort__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerPort__ctor.htm
new file mode 100644
index 0000000000..4d29fd3c5b
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerPort__ctor.htm
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPort Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerPort class, constructor" /><meta name="System.Keywords" content="ServerPort.ServerPort constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.ServerPort" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerPort.#ctor(System.String,System.Int32,Grpc.Core.ServerCredentials)" /><meta name="Description" content="Creates a new port on which server should listen." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerPort__ctor" /><meta name="guid" content="M_Grpc_Core_ServerPort__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerPort__ctor.htm" title="ServerPort Constructor " tocid="M_Grpc_Core_ServerPort__ctor">ServerPort Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerPort.htm" title="ServerPort Properties" tocid="Properties_T_Grpc_Core_ServerPort">ServerPort Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ServerPort.htm" title="ServerPort Methods" tocid="Methods_T_Grpc_Core_ServerPort">ServerPort Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ServerPort.htm" title="ServerPort Fields" tocid="Fields_T_Grpc_Core_ServerPort">ServerPort Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPort Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a new port on which server should listen.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ServerPort</span>(
+ <span class="identifier">string</span> <span class="parameter">host</span>,
+ <span class="identifier">int</span> <span class="parameter">port</span>,
+ <span class="identifier">ServerCredentials</span> <span class="parameter">credentials</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">host</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">port</span> <span class="keyword">As</span> <span class="identifier">Integer</span>,
+ <span class="parameter">credentials</span> <span class="keyword">As</span> <span class="identifier">ServerCredentials</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">ServerPort</span>(
+ <span class="identifier">String</span>^ <span class="parameter">host</span>,
+ <span class="identifier">int</span> <span class="parameter">port</span>,
+ <span class="identifier">ServerCredentials</span>^ <span class="parameter">credentials</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">host</span> : <span class="identifier">string</span> *
+ <span class="parameter">port</span> : <span class="identifier">int</span> *
+ <span class="parameter">credentials</span> : <span class="identifier">ServerCredentials</span> <span class="keyword">-&gt;</span> <span class="identifier">ServerPort</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">host</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST6079785F_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6079785F_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />the host</dd><dt><span class="parameter">port</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">System<span id="LST6079785F_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6079785F_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Int32</a><br />the port. If zero, an unused port is chosen automatically.</dd><dt><span class="parameter">credentials</span></dt><dd>Type: <a href="T_Grpc_Core_ServerCredentials.htm">Grpc.Core<span id="LST6079785F_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6079785F_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerCredentials</a><br />credentials to use to secure this port.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <br />The port on which server will be listening.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerPort.htm">ServerPort Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm
new file mode 100644
index 0000000000..2fadac3cf8
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm
@@ -0,0 +1,22 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerServiceDefinition.Builder.AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerServiceDefinition.Builder.AddMethod``2(Grpc.Core.Method{``0,``1},Grpc.Core.ClientStreamingServerMethod{``0,``1})" /><meta name="Description" content="Adds a definitions for a client streaming method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2" /><meta name="guid" content="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="Builder Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition_Builder">Builder Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm" title="AddMethod Method " tocid="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod">AddMethod Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerServiceDefinition<span id="LST4448590B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_0?cpp=::|nu=.");</script>Builder<span id="LST4448590B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_1?cpp=::|nu=.");</script>AddMethod<span id="LST4448590B_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST4448590B_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method (Method<span id="LST4448590B_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST4448590B_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, ClientStreamingServerMethod<span id="LST4448590B_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST4448590B_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Adds a definitions for a client streaming method.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ServerServiceDefinition<span id="LST4448590B_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span> <span class="identifier">AddMethod</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt; <span class="parameter">method</span>,
+ <span class="identifier">ClientStreamingServerMethod</span>&lt;TRequest, TResponse&gt; <span class="parameter">handler</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">AddMethod</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">method</span> <span class="keyword">As</span> <span class="identifier">Method</span>(<span class="keyword">Of</span> TRequest, TResponse),
+ <span class="parameter">handler</span> <span class="keyword">As</span> <span class="identifier">ClientStreamingServerMethod</span>(<span class="keyword">Of</span> TRequest, TResponse)
+) <span class="keyword">As</span> <span class="identifier">ServerServiceDefinition<span id="LST4448590B_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="identifier">ServerServiceDefinition<span id="LST4448590B_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span>^ <span class="identifier">AddMethod</span>(
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">method</span>,
+ <span class="identifier">ClientStreamingServerMethod</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">handler</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">AddMethod</span> :
+ <span class="parameter">method</span> : <span class="identifier">Method</span>&lt;'TRequest, 'TResponse&gt; *
+ <span class="parameter">handler</span> : <span class="identifier">ClientStreamingServerMethod</span>&lt;'TRequest, 'TResponse&gt; <span class="keyword">-&gt;</span> <span class="identifier">ServerServiceDefinition<span id="LST4448590B_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span> <span class="keyword">when</span> 'TRequest : <span class="keyword">not struct</span> <span class="keyword">when</span> 'TResponse : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">method</span></dt><dd>Type: <a href="T_Grpc_Core_Method_2.htm">Grpc.Core<span id="LST4448590B_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_12?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Method</a><span id="LST4448590B_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_13?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST4448590B_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_14?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The method.</dd><dt><span class="parameter">handler</span></dt><dd>Type: <a href="T_Grpc_Core_ClientStreamingServerMethod_2.htm">Grpc.Core<span id="LST4448590B_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_15?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ClientStreamingServerMethod</a><span id="LST4448590B_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_16?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST4448590B_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_17?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The method handler.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>The request message class.</dd><dt><span class="parameter">TResponse</span></dt><dd>The response message class.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LST4448590B_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_18?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</a><br />This builder instance.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LST4448590B_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4448590B_19?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm">AddMethod Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm
new file mode 100644
index 0000000000..da7d825115
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm
@@ -0,0 +1,22 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerServiceDefinition.Builder.AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerServiceDefinition.Builder.AddMethod``2(Grpc.Core.Method{``0,``1},Grpc.Core.DuplexStreamingServerMethod{``0,``1})" /><meta name="Description" content="Adds a definitions for a bidirectional streaming method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1" /><meta name="guid" content="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="Builder Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition_Builder">Builder Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm" title="AddMethod Method " tocid="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod">AddMethod Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerServiceDefinition<span id="LST36F972AE_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_0?cpp=::|nu=.");</script>Builder<span id="LST36F972AE_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_1?cpp=::|nu=.");</script>AddMethod<span id="LST36F972AE_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST36F972AE_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method (Method<span id="LST36F972AE_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST36F972AE_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, DuplexStreamingServerMethod<span id="LST36F972AE_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST36F972AE_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Adds a definitions for a bidirectional streaming method.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ServerServiceDefinition<span id="LST36F972AE_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span> <span class="identifier">AddMethod</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt; <span class="parameter">method</span>,
+ <span class="identifier">DuplexStreamingServerMethod</span>&lt;TRequest, TResponse&gt; <span class="parameter">handler</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">AddMethod</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">method</span> <span class="keyword">As</span> <span class="identifier">Method</span>(<span class="keyword">Of</span> TRequest, TResponse),
+ <span class="parameter">handler</span> <span class="keyword">As</span> <span class="identifier">DuplexStreamingServerMethod</span>(<span class="keyword">Of</span> TRequest, TResponse)
+) <span class="keyword">As</span> <span class="identifier">ServerServiceDefinition<span id="LST36F972AE_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="identifier">ServerServiceDefinition<span id="LST36F972AE_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span>^ <span class="identifier">AddMethod</span>(
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">method</span>,
+ <span class="identifier">DuplexStreamingServerMethod</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">handler</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">AddMethod</span> :
+ <span class="parameter">method</span> : <span class="identifier">Method</span>&lt;'TRequest, 'TResponse&gt; *
+ <span class="parameter">handler</span> : <span class="identifier">DuplexStreamingServerMethod</span>&lt;'TRequest, 'TResponse&gt; <span class="keyword">-&gt;</span> <span class="identifier">ServerServiceDefinition<span id="LST36F972AE_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span> <span class="keyword">when</span> 'TRequest : <span class="keyword">not struct</span> <span class="keyword">when</span> 'TResponse : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">method</span></dt><dd>Type: <a href="T_Grpc_Core_Method_2.htm">Grpc.Core<span id="LST36F972AE_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_12?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Method</a><span id="LST36F972AE_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_13?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST36F972AE_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_14?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The method.</dd><dt><span class="parameter">handler</span></dt><dd>Type: <a href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm">Grpc.Core<span id="LST36F972AE_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_15?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>DuplexStreamingServerMethod</a><span id="LST36F972AE_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_16?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST36F972AE_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_17?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The method handler.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>The request message class.</dd><dt><span class="parameter">TResponse</span></dt><dd>The response message class.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LST36F972AE_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_18?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</a><br />This builder instance.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LST36F972AE_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST36F972AE_19?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm">AddMethod Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm
new file mode 100644
index 0000000000..9e8a832ba5
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm
@@ -0,0 +1,22 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerServiceDefinition.Builder.AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerServiceDefinition.Builder.AddMethod``2(Grpc.Core.Method{``0,``1},Grpc.Core.ServerStreamingServerMethod{``0,``1})" /><meta name="Description" content="Adds a definitions for a server streaming method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2" /><meta name="guid" content="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="Builder Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition_Builder">Builder Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm" title="AddMethod Method " tocid="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod">AddMethod Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerServiceDefinition<span id="LSTA856FEF7_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_0?cpp=::|nu=.");</script>Builder<span id="LSTA856FEF7_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_1?cpp=::|nu=.");</script>AddMethod<span id="LSTA856FEF7_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTA856FEF7_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method (Method<span id="LSTA856FEF7_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTA856FEF7_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, ServerStreamingServerMethod<span id="LSTA856FEF7_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTA856FEF7_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Adds a definitions for a server streaming method.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ServerServiceDefinition<span id="LSTA856FEF7_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span> <span class="identifier">AddMethod</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt; <span class="parameter">method</span>,
+ <span class="identifier">ServerStreamingServerMethod</span>&lt;TRequest, TResponse&gt; <span class="parameter">handler</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">AddMethod</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">method</span> <span class="keyword">As</span> <span class="identifier">Method</span>(<span class="keyword">Of</span> TRequest, TResponse),
+ <span class="parameter">handler</span> <span class="keyword">As</span> <span class="identifier">ServerStreamingServerMethod</span>(<span class="keyword">Of</span> TRequest, TResponse)
+) <span class="keyword">As</span> <span class="identifier">ServerServiceDefinition<span id="LSTA856FEF7_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="identifier">ServerServiceDefinition<span id="LSTA856FEF7_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span>^ <span class="identifier">AddMethod</span>(
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">method</span>,
+ <span class="identifier">ServerStreamingServerMethod</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">handler</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">AddMethod</span> :
+ <span class="parameter">method</span> : <span class="identifier">Method</span>&lt;'TRequest, 'TResponse&gt; *
+ <span class="parameter">handler</span> : <span class="identifier">ServerStreamingServerMethod</span>&lt;'TRequest, 'TResponse&gt; <span class="keyword">-&gt;</span> <span class="identifier">ServerServiceDefinition<span id="LSTA856FEF7_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span> <span class="keyword">when</span> 'TRequest : <span class="keyword">not struct</span> <span class="keyword">when</span> 'TResponse : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">method</span></dt><dd>Type: <a href="T_Grpc_Core_Method_2.htm">Grpc.Core<span id="LSTA856FEF7_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_12?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Method</a><span id="LSTA856FEF7_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_13?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LSTA856FEF7_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_14?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The method.</dd><dt><span class="parameter">handler</span></dt><dd>Type: <a href="T_Grpc_Core_ServerStreamingServerMethod_2.htm">Grpc.Core<span id="LSTA856FEF7_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_15?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerStreamingServerMethod</a><span id="LSTA856FEF7_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_16?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LSTA856FEF7_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_17?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The method handler.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>The request message class.</dd><dt><span class="parameter">TResponse</span></dt><dd>The response message class.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LSTA856FEF7_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_18?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</a><br />This builder instance.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LSTA856FEF7_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA856FEF7_19?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm">AddMethod Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm
new file mode 100644
index 0000000000..de304e706c
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm
@@ -0,0 +1,22 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerServiceDefinition.Builder.AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerServiceDefinition.Builder.AddMethod``2(Grpc.Core.Method{``0,``1},Grpc.Core.UnaryServerMethod{``0,``1})" /><meta name="Description" content="Adds a definitions for a single request - single response method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3" /><meta name="guid" content="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="Builder Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition_Builder">Builder Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm" title="AddMethod Method " tocid="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod">AddMethod Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerServiceDefinition<span id="LSTF6C2EF8B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_0?cpp=::|nu=.");</script>Builder<span id="LSTF6C2EF8B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_1?cpp=::|nu=.");</script>AddMethod<span id="LSTF6C2EF8B_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTF6C2EF8B_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method (Method<span id="LSTF6C2EF8B_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTF6C2EF8B_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, UnaryServerMethod<span id="LSTF6C2EF8B_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTF6C2EF8B_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Adds a definitions for a single request - single response method.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ServerServiceDefinition<span id="LSTF6C2EF8B_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span> <span class="identifier">AddMethod</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt; <span class="parameter">method</span>,
+ <span class="identifier">UnaryServerMethod</span>&lt;TRequest, TResponse&gt; <span class="parameter">handler</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">AddMethod</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">method</span> <span class="keyword">As</span> <span class="identifier">Method</span>(<span class="keyword">Of</span> TRequest, TResponse),
+ <span class="parameter">handler</span> <span class="keyword">As</span> <span class="identifier">UnaryServerMethod</span>(<span class="keyword">Of</span> TRequest, TResponse)
+) <span class="keyword">As</span> <span class="identifier">ServerServiceDefinition<span id="LSTF6C2EF8B_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="identifier">ServerServiceDefinition<span id="LSTF6C2EF8B_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span>^ <span class="identifier">AddMethod</span>(
+ <span class="identifier">Method</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">method</span>,
+ <span class="identifier">UnaryServerMethod</span>&lt;TRequest, TResponse&gt;^ <span class="parameter">handler</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">AddMethod</span> :
+ <span class="parameter">method</span> : <span class="identifier">Method</span>&lt;'TRequest, 'TResponse&gt; *
+ <span class="parameter">handler</span> : <span class="identifier">UnaryServerMethod</span>&lt;'TRequest, 'TResponse&gt; <span class="keyword">-&gt;</span> <span class="identifier">ServerServiceDefinition<span id="LSTF6C2EF8B_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span> <span class="keyword">when</span> 'TRequest : <span class="keyword">not struct</span> <span class="keyword">when</span> 'TResponse : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">method</span></dt><dd>Type: <a href="T_Grpc_Core_Method_2.htm">Grpc.Core<span id="LSTF6C2EF8B_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_12?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Method</a><span id="LSTF6C2EF8B_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_13?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LSTF6C2EF8B_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_14?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The method.</dd><dt><span class="parameter">handler</span></dt><dd>Type: <a href="T_Grpc_Core_UnaryServerMethod_2.htm">Grpc.Core<span id="LSTF6C2EF8B_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_15?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>UnaryServerMethod</a><span id="LSTF6C2EF8B_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_16?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span>, <span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LSTF6C2EF8B_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_17?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />The method handler.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>The request message class.</dd><dt><span class="parameter">TResponse</span></dt><dd>The response message class.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LSTF6C2EF8B_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_18?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</a><br />This builder instance.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LSTF6C2EF8B_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF6C2EF8B_19?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm">AddMethod Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm
new file mode 100644
index 0000000000..38d2dff08b
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerServiceDefinition.Builder.Build Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Build method" /><meta name="System.Keywords" content="ServerServiceDefinition.Builder.Build method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerServiceDefinition.Builder.Build" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerServiceDefinition.Builder.Build" /><meta name="Description" content="Creates an immutable ServerServiceDefinition from this builder." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerServiceDefinition_Builder_Build" /><meta name="guid" content="M_Grpc_Core_ServerServiceDefinition_Builder_Build" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="Builder Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition_Builder">Builder Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm" title="AddMethod Method " tocid="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod">AddMethod Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm" title="Build Method " tocid="M_Grpc_Core_ServerServiceDefinition_Builder_Build">Build Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerServiceDefinition<span id="LSTEF72785C_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEF72785C_0?cpp=::|nu=.");</script>Builder<span id="LSTEF72785C_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEF72785C_1?cpp=::|nu=.");</script>Build Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates an immutable <span class="code">ServerServiceDefinition</span> from this builder.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ServerServiceDefinition</span> <span class="identifier">Build</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">Build</span> <span class="keyword">As</span> <span class="identifier">ServerServiceDefinition</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">ServerServiceDefinition</span>^ <span class="identifier">Build</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Build</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">ServerServiceDefinition</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_ServerServiceDefinition.htm">ServerServiceDefinition</a><br />The <span class="code">ServerServiceDefinition</span> object.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LSTEF72785C_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEF72785C_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm
new file mode 100644
index 0000000000..dae62e8948
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerServiceDefinition.Builder Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerServiceDefinition.Builder class, constructor" /><meta name="System.Keywords" content="ServerServiceDefinition.Builder.Builder constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerServiceDefinition.Builder.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerServiceDefinition.Builder.Builder" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerServiceDefinition.Builder.#ctor(System.String)" /><meta name="Description" content="Creates a new instance of builder." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerServiceDefinition_Builder__ctor" /><meta name="guid" content="M_Grpc_Core_ServerServiceDefinition_Builder__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm" title="ServerServiceDefinition.Builder Constructor " tocid="M_Grpc_Core_ServerServiceDefinition_Builder__ctor">ServerServiceDefinition.Builder Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="Builder Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition_Builder">Builder Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerServiceDefinition<span id="LST82E36366_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST82E36366_0?cpp=::|nu=.");</script>Builder Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a new instance of builder.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Builder</span>(
+ <span class="identifier">string</span> <span class="parameter">serviceName</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">serviceName</span> <span class="keyword">As</span> <span class="identifier">String</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Builder</span>(
+ <span class="identifier">String</span>^ <span class="parameter">serviceName</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">serviceName</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="identifier">Builder</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">serviceName</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST82E36366_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST82E36366_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />The service name.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LST82E36366_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST82E36366_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm
new file mode 100644
index 0000000000..c4773bb452
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerServiceDefinition.CreateBuilder Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CreateBuilder method" /><meta name="System.Keywords" content="ServerServiceDefinition.CreateBuilder method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerServiceDefinition.CreateBuilder" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.ServerServiceDefinition.CreateBuilder(System.String)" /><meta name="Description" content="Creates a new builder object for ServerServiceDefinition." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_ServerServiceDefinition_CreateBuilder" /><meta name="guid" content="M_Grpc_Core_ServerServiceDefinition_CreateBuilder" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm" title="CreateBuilder Method " tocid="M_Grpc_Core_ServerServiceDefinition_CreateBuilder">CreateBuilder Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerServiceDefinition<span id="LST50D5ABBF_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST50D5ABBF_0?cpp=::|nu=.");</script>CreateBuilder Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a new builder object for <span class="code">ServerServiceDefinition</span>.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">ServerServiceDefinition<span id="LST50D5ABBF_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST50D5ABBF_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span> <span class="identifier">CreateBuilder</span>(
+ <span class="identifier">string</span> <span class="parameter">serviceName</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">CreateBuilder</span> (
+ <span class="parameter">serviceName</span> <span class="keyword">As</span> <span class="identifier">String</span>
+) <span class="keyword">As</span> <span class="identifier">ServerServiceDefinition<span id="LST50D5ABBF_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST50D5ABBF_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="identifier">ServerServiceDefinition<span id="LST50D5ABBF_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST50D5ABBF_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span>^ <span class="identifier">CreateBuilder</span>(
+ <span class="identifier">String</span>^ <span class="parameter">serviceName</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">CreateBuilder</span> :
+ <span class="parameter">serviceName</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="identifier">ServerServiceDefinition<span id="LST50D5ABBF_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST50D5ABBF_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">serviceName</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST50D5ABBF_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST50D5ABBF_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />The service name.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LST50D5ABBF_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST50D5ABBF_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</a><br />The builder object.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerServiceDefinition.htm">ServerServiceDefinition Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Server_KillAsync.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Server_KillAsync.htm
new file mode 100644
index 0000000000..426ecb6761
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Server_KillAsync.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.KillAsync Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="KillAsync method" /><meta name="System.Keywords" content="Server.KillAsync method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.KillAsync" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Server.KillAsync" /><meta name="Description" content="Requests server shutdown while cancelling all the in-progress calls. The returned task finishes when shutdown procedure is complete." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Server_KillAsync" /><meta name="guid" content="M_Grpc_Core_Server_KillAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server.htm" title="Server Methods" tocid="Methods_T_Grpc_Core_Server">Server Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_KillAsync.htm" title="KillAsync Method " tocid="M_Grpc_Core_Server_KillAsync">KillAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ShutdownAsync.htm" title="ShutdownAsync Method " tocid="M_Grpc_Core_Server_ShutdownAsync">ShutdownAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_Start.htm" title="Start Method " tocid="M_Grpc_Core_Server_Start">Start Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LSTBDF23A25_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBDF23A25_0?cpp=::|nu=.");</script>KillAsync Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Requests server shutdown while cancelling all the in-progress calls.
+ The returned task finishes when shutdown procedure is complete.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span> <span class="identifier">KillAsync</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">KillAsync</span> <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Task</span>^ <span class="identifier">KillAsync</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">KillAsync</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Task</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server.htm">Server Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_Add.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_Add.htm
new file mode 100644
index 0000000000..1630b0207d
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_Add.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.ServerPortCollection.Add Method (ServerPort)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Server.ServerPortCollection.Add(Grpc.Core.ServerPort)" /><meta name="Description" content="Adds a new port on which server should listen. Only call this before Start(). The port on which server will be listening." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Server_ServerPortCollection_Add" /><meta name="guid" content="M_Grpc_Core_Server_ServerPortCollection_Add" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server_ServerPortCollection.htm" title="ServerPortCollection Methods" tocid="Methods_T_Grpc_Core_Server_ServerPortCollection">ServerPortCollection Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Server_ServerPortCollection_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Server_ServerPortCollection_Add">Add Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServerPortCollection_Add.htm" title="Add Method (ServerPort)" tocid="M_Grpc_Core_Server_ServerPortCollection_Add">Add Method (ServerPort)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServerPortCollection_Add_1.htm" title="Add Method (String, Int32, ServerCredentials)" tocid="M_Grpc_Core_Server_ServerPortCollection_Add_1">Add Method (String, Int32, ServerCredentials)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LST2A6387EA_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A6387EA_0?cpp=::|nu=.");</script>ServerPortCollection<span id="LST2A6387EA_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A6387EA_1?cpp=::|nu=.");</script>Add Method (ServerPort)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Adds a new port on which server should listen.
+ Only call this before Start().
+ <h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a><br />The port on which server will be listening.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">int</span> <span class="identifier">Add</span>(
+ <span class="identifier">ServerPort</span> <span class="parameter">serverPort</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">Add</span> (
+ <span class="parameter">serverPort</span> <span class="keyword">As</span> <span class="identifier">ServerPort</span>
+) <span class="keyword">As</span> <span class="identifier">Integer</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">int</span> <span class="identifier">Add</span>(
+ <span class="identifier">ServerPort</span>^ <span class="parameter">serverPort</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Add</span> :
+ <span class="parameter">serverPort</span> : <span class="identifier">ServerPort</span> <span class="keyword">-&gt;</span> <span class="identifier">int</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">serverPort</span></dt><dd>Type: <a href="T_Grpc_Core_ServerPort.htm">Grpc.Core<span id="LST2A6387EA_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A6387EA_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPort</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="serverPort"/&gt; documentation for "M:Grpc.Core.Server.ServerPortCollection.Add(Grpc.Core.ServerPort)"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server_ServerPortCollection.htm">Server<span id="LST2A6387EA_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A6387EA_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Server_ServerPortCollection_Add.htm">Add Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_Add_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_Add_1.htm
new file mode 100644
index 0000000000..5ab9914936
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_Add_1.htm
@@ -0,0 +1,20 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.ServerPortCollection.Add Method (String, Int32, ServerCredentials)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Server.ServerPortCollection.Add(System.String,System.Int32,Grpc.Core.ServerCredentials)" /><meta name="Description" content="Adds a new port on which server should listen. The port on which server will be listening." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Server_ServerPortCollection_Add_1" /><meta name="guid" content="M_Grpc_Core_Server_ServerPortCollection_Add_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server_ServerPortCollection.htm" title="ServerPortCollection Methods" tocid="Methods_T_Grpc_Core_Server_ServerPortCollection">ServerPortCollection Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Server_ServerPortCollection_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Server_ServerPortCollection_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServerPortCollection_Add.htm" title="Add Method (ServerPort)" tocid="M_Grpc_Core_Server_ServerPortCollection_Add">Add Method (ServerPort)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServerPortCollection_Add_1.htm" title="Add Method (String, Int32, ServerCredentials)" tocid="M_Grpc_Core_Server_ServerPortCollection_Add_1">Add Method (String, Int32, ServerCredentials)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LST9300D080_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9300D080_0?cpp=::|nu=.");</script>ServerPortCollection<span id="LST9300D080_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9300D080_1?cpp=::|nu=.");</script>Add Method (String, Int32, ServerCredentials)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Adds a new port on which server should listen.
+ <h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a><br />The port on which server will be listening.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">int</span> <span class="identifier">Add</span>(
+ <span class="identifier">string</span> <span class="parameter">host</span>,
+ <span class="identifier">int</span> <span class="parameter">port</span>,
+ <span class="identifier">ServerCredentials</span> <span class="parameter">credentials</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">Add</span> (
+ <span class="parameter">host</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">port</span> <span class="keyword">As</span> <span class="identifier">Integer</span>,
+ <span class="parameter">credentials</span> <span class="keyword">As</span> <span class="identifier">ServerCredentials</span>
+) <span class="keyword">As</span> <span class="identifier">Integer</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">int</span> <span class="identifier">Add</span>(
+ <span class="identifier">String</span>^ <span class="parameter">host</span>,
+ <span class="identifier">int</span> <span class="parameter">port</span>,
+ <span class="identifier">ServerCredentials</span>^ <span class="parameter">credentials</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Add</span> :
+ <span class="parameter">host</span> : <span class="identifier">string</span> *
+ <span class="parameter">port</span> : <span class="identifier">int</span> *
+ <span class="parameter">credentials</span> : <span class="identifier">ServerCredentials</span> <span class="keyword">-&gt;</span> <span class="identifier">int</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">host</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST9300D080_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9300D080_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />the host</dd><dt><span class="parameter">port</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">System<span id="LST9300D080_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9300D080_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Int32</a><br />the port. If zero, an unused port is chosen automatically.</dd><dt><span class="parameter">credentials</span></dt><dd>Type: <a href="T_Grpc_Core_ServerCredentials.htm">Grpc.Core<span id="LST9300D080_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9300D080_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerCredentials</a><br />credentials to use to secure this port.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server_ServerPortCollection.htm">Server<span id="LST9300D080_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9300D080_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Server_ServerPortCollection_Add.htm">Add Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm
new file mode 100644
index 0000000000..c3f3397367
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.ServerPortCollection.GetEnumerator Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetEnumerator method" /><meta name="System.Keywords" content="Server.ServerPortCollection.GetEnumerator method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.ServerPortCollection.GetEnumerator" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Server.ServerPortCollection.GetEnumerator" /><meta name="Description" content="Gets enumerator for this collection." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Server_ServerPortCollection_GetEnumerator" /><meta name="guid" content="M_Grpc_Core_Server_ServerPortCollection_GetEnumerator" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server_ServerPortCollection.htm" title="ServerPortCollection Methods" tocid="Methods_T_Grpc_Core_Server_ServerPortCollection">ServerPortCollection Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Server_ServerPortCollection_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Server_ServerPortCollection_Add">Add Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Server_ServerPortCollection_GetEnumerator">GetEnumerator Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LSTB74197FB_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB74197FB_0?cpp=::|nu=.");</script>ServerPortCollection<span id="LSTB74197FB_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB74197FB_1?cpp=::|nu=.");</script>GetEnumerator Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets enumerator for this collection.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">ServerPort</span>&gt; <span class="identifier">GetEnumerator</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetEnumerator</span> <span class="keyword">As</span> <span class="identifier">IEnumerator</span>(<span class="keyword">Of</span> <span class="identifier">ServerPort</span>)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">ServerPort</span>^&gt;^ <span class="identifier">GetEnumerator</span>() <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">GetEnumerator</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">ServerPort</span>&gt;
+<span class="keyword">override</span> <span class="identifier">GetEnumerator</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">ServerPort</span>&gt; </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/78dfe2yb" target="_blank">IEnumerator</a><span id="LSTB74197FB_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB74197FB_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_ServerPort.htm">ServerPort</a><span id="LSTB74197FB_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB74197FB_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/s793z9y2" target="_blank">IEnumerable<span id="LSTB74197FB_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB74197FB_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTB74197FB_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB74197FB_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LSTB74197FB_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB74197FB_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>GetEnumerator<span id="LSTB74197FB_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB74197FB_7?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server_ServerPortCollection.htm">Server<span id="LSTB74197FB_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB74197FB_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm
new file mode 100644
index 0000000000..c525f99a9e
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.ServiceDefinitionCollection.Add Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Add method" /><meta name="System.Keywords" content="Server.ServiceDefinitionCollection.Add method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.ServiceDefinitionCollection.Add" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Server.ServiceDefinitionCollection.Add(Grpc.Core.ServerServiceDefinition)" /><meta name="Description" content="Adds a service definition to the server. This is how you register handlers for a service with the server. Only call this before Start()." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Server_ServiceDefinitionCollection_Add" /><meta name="guid" content="M_Grpc_Core_Server_ServiceDefinitionCollection_Add" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="ServiceDefinitionCollection Methods" tocid="Methods_T_Grpc_Core_Server_ServiceDefinitionCollection">ServiceDefinitionCollection Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm" title="Add Method " tocid="M_Grpc_Core_Server_ServiceDefinitionCollection_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator">GetEnumerator Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LSTAC5304BD_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAC5304BD_0?cpp=::|nu=.");</script>ServiceDefinitionCollection<span id="LSTAC5304BD_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAC5304BD_1?cpp=::|nu=.");</script>Add Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Adds a service definition to the server. This is how you register
+ handlers for a service with the server. Only call this before Start().
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Add</span>(
+ <span class="identifier">ServerServiceDefinition</span> <span class="parameter">serviceDefinition</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Add</span> (
+ <span class="parameter">serviceDefinition</span> <span class="keyword">As</span> <span class="identifier">ServerServiceDefinition</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">void</span> <span class="identifier">Add</span>(
+ <span class="identifier">ServerServiceDefinition</span>^ <span class="parameter">serviceDefinition</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Add</span> :
+ <span class="parameter">serviceDefinition</span> : <span class="identifier">ServerServiceDefinition</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">serviceDefinition</span></dt><dd>Type: <a href="T_Grpc_Core_ServerServiceDefinition.htm">Grpc.Core<span id="LSTAC5304BD_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAC5304BD_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerServiceDefinition</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="serviceDefinition"/&gt; documentation for "M:Grpc.Core.Server.ServiceDefinitionCollection.Add(Grpc.Core.ServerServiceDefinition)"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm">Server<span id="LSTAC5304BD_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAC5304BD_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm
new file mode 100644
index 0000000000..afa388ca28
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.ServiceDefinitionCollection.GetEnumerator Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GetEnumerator method" /><meta name="System.Keywords" content="Server.ServiceDefinitionCollection.GetEnumerator method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.ServiceDefinitionCollection.GetEnumerator" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Server.ServiceDefinitionCollection.GetEnumerator" /><meta name="Description" content="Gets enumerator for this collection." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator" /><meta name="guid" content="M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="ServiceDefinitionCollection Methods" tocid="Methods_T_Grpc_Core_Server_ServiceDefinitionCollection">ServiceDefinitionCollection Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm" title="Add Method " tocid="M_Grpc_Core_Server_ServiceDefinitionCollection_Add">Add Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator">GetEnumerator Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LSTCABA4EC3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCABA4EC3_0?cpp=::|nu=.");</script>ServiceDefinitionCollection<span id="LSTCABA4EC3_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCABA4EC3_1?cpp=::|nu=.");</script>GetEnumerator Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets enumerator for this collection.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">ServerServiceDefinition</span>&gt; <span class="identifier">GetEnumerator</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">GetEnumerator</span> <span class="keyword">As</span> <span class="identifier">IEnumerator</span>(<span class="keyword">Of</span> <span class="identifier">ServerServiceDefinition</span>)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">ServerServiceDefinition</span>^&gt;^ <span class="identifier">GetEnumerator</span>() <span class="keyword">sealed</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">GetEnumerator</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">ServerServiceDefinition</span>&gt;
+<span class="keyword">override</span> <span class="identifier">GetEnumerator</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">IEnumerator</span>&lt;<span class="identifier">ServerServiceDefinition</span>&gt; </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/78dfe2yb" target="_blank">IEnumerator</a><span id="LSTCABA4EC3_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCABA4EC3_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_ServerServiceDefinition.htm">ServerServiceDefinition</a><span id="LSTCABA4EC3_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCABA4EC3_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/s793z9y2" target="_blank">IEnumerable<span id="LSTCABA4EC3_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCABA4EC3_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTCABA4EC3_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCABA4EC3_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LSTCABA4EC3_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCABA4EC3_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>GetEnumerator<span id="LSTCABA4EC3_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCABA4EC3_7?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm">Server<span id="LSTCABA4EC3_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCABA4EC3_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Server_ShutdownAsync.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ShutdownAsync.htm
new file mode 100644
index 0000000000..77cc86e8fe
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Server_ShutdownAsync.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.ShutdownAsync Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ShutdownAsync method" /><meta name="System.Keywords" content="Server.ShutdownAsync method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.ShutdownAsync" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Server.ShutdownAsync" /><meta name="Description" content="Requests server shutdown and when there are no more calls being serviced, cleans up used resources. The returned task finishes when shutdown procedure is complete." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Server_ShutdownAsync" /><meta name="guid" content="M_Grpc_Core_Server_ShutdownAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server.htm" title="Server Methods" tocid="Methods_T_Grpc_Core_Server">Server Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_KillAsync.htm" title="KillAsync Method " tocid="M_Grpc_Core_Server_KillAsync">KillAsync Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ShutdownAsync.htm" title="ShutdownAsync Method " tocid="M_Grpc_Core_Server_ShutdownAsync">ShutdownAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_Start.htm" title="Start Method " tocid="M_Grpc_Core_Server_Start">Start Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LST176A8547_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST176A8547_0?cpp=::|nu=.");</script>ShutdownAsync Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Requests server shutdown and when there are no more calls being serviced,
+ cleans up used resources. The returned task finishes when shutdown procedure
+ is complete.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span> <span class="identifier">ShutdownAsync</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Function</span> <span class="identifier">ShutdownAsync</span> <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Task</span>^ <span class="identifier">ShutdownAsync</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ShutdownAsync</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">Task</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server.htm">Server Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Server_Start.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Server_Start.htm
new file mode 100644
index 0000000000..09d55ea546
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Server_Start.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.Start Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Start method" /><meta name="System.Keywords" content="Server.Start method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.Start" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Server.Start" /><meta name="Description" content="Starts the server." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Server_Start" /><meta name="guid" content="M_Grpc_Core_Server_Start" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server.htm" title="Server Methods" tocid="Methods_T_Grpc_Core_Server">Server Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_KillAsync.htm" title="KillAsync Method " tocid="M_Grpc_Core_Server_KillAsync">KillAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ShutdownAsync.htm" title="ShutdownAsync Method " tocid="M_Grpc_Core_Server_ShutdownAsync">ShutdownAsync Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_Start.htm" title="Start Method " tocid="M_Grpc_Core_Server_Start">Start Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LST94819305_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST94819305_0?cpp=::|nu=.");</script>Start Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Starts the server.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">void</span> <span class="identifier">Start</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">Start</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">void</span> <span class="identifier">Start</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Start</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server.htm">Server Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Server__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Server__ctor.htm
new file mode 100644
index 0000000000..268246bb35
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Server__ctor.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Server class, constructor" /><meta name="System.Keywords" content="Server.Server constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.Server" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Server.#ctor(System.Collections.Generic.IEnumerable{Grpc.Core.ChannelOption})" /><meta name="Description" content="Create a new server." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Server__ctor" /><meta name="guid" content="M_Grpc_Core_Server__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server__ctor.htm" title="Server Constructor " tocid="M_Grpc_Core_Server__ctor">Server Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Server.htm" title="Server Properties" tocid="Properties_T_Grpc_Core_Server">Server Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server.htm" title="Server Methods" tocid="Methods_T_Grpc_Core_Server">Server Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Create a new server.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Server</span>(
+ <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ChannelOption</span>&gt; <span class="parameter">options</span> = <span class="keyword">null</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ Optional <span class="parameter">options</span> <span class="keyword">As</span> <span class="identifier">IEnumerable</span>(<span class="keyword">Of</span> <span class="identifier">ChannelOption</span>) = <span class="keyword">Nothing</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Server</span>(
+ <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ChannelOption</span>^&gt;^ <span class="parameter">options</span> = <span class="keyword">nullptr</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ ?<span class="parameter">options</span> : <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ChannelOption</span>&gt;
+(* Defaults:
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">options</span> = defaultArg <span class="identifier">options</span> <span class="keyword">null</span>
+*)
+<span class="keyword">-&gt;</span> <span class="identifier">Server</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">options</span> (Optional)</dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/9eekhta0" target="_blank">System.Collections.Generic<span id="LSTB7B395F0_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB7B395F0_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IEnumerable</a><span id="LSTB7B395F0_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB7B395F0_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption</a><span id="LSTB7B395F0_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB7B395F0_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Channel options.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server.htm">Server Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor.htm
new file mode 100644
index 0000000000..eda9fee34e
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslCredentials Constructor </title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.SslCredentials.#ctor" /><meta name="Description" content="Creates client-side SSL credentials loaded from disk file pointed to by the GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment variable. If that fails, gets the roots certificates from a well known place on disk." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_SslCredentials__ctor" /><meta name="guid" content="M_Grpc_Core_SslCredentials__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslCredentials__ctor.htm" title="SslCredentials Constructor " tocid="Overload_Grpc_Core_SslCredentials__ctor">SslCredentials Constructor </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor.htm" title="SslCredentials Constructor " tocid="M_Grpc_Core_SslCredentials__ctor">SslCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor_1.htm" title="SslCredentials Constructor (String)" tocid="M_Grpc_Core_SslCredentials__ctor_1">SslCredentials Constructor (String)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor_2.htm" title="SslCredentials Constructor (String, KeyCertificatePair)" tocid="M_Grpc_Core_SslCredentials__ctor_2">SslCredentials Constructor (String, KeyCertificatePair)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslCredentials Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates client-side SSL credentials loaded from
+ disk file pointed to by the GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment variable.
+ If that fails, gets the roots certificates from a well known place on disk.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">SslCredentials</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">SslCredentials</span>()</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">SslCredentials</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslCredentials.htm">SslCredentials Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_SslCredentials__ctor.htm">SslCredentials Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor_1.htm
new file mode 100644
index 0000000000..cfdcd658e0
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor_1.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslCredentials Constructor (String)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.SslCredentials.#ctor(System.String)" /><meta name="Description" content="Creates client-side SSL credentials from a string containing PEM encoded root certificates." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_SslCredentials__ctor_1" /><meta name="guid" content="M_Grpc_Core_SslCredentials__ctor_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslCredentials__ctor.htm" title="SslCredentials Constructor " tocid="Overload_Grpc_Core_SslCredentials__ctor">SslCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor.htm" title="SslCredentials Constructor " tocid="M_Grpc_Core_SslCredentials__ctor">SslCredentials Constructor </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor_1.htm" title="SslCredentials Constructor (String)" tocid="M_Grpc_Core_SslCredentials__ctor_1">SslCredentials Constructor (String)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor_2.htm" title="SslCredentials Constructor (String, KeyCertificatePair)" tocid="M_Grpc_Core_SslCredentials__ctor_2">SslCredentials Constructor (String, KeyCertificatePair)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslCredentials Constructor (String)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates client-side SSL credentials from
+ a string containing PEM encoded root certificates.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">SslCredentials</span>(
+ <span class="identifier">string</span> <span class="parameter">rootCertificates</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">rootCertificates</span> <span class="keyword">As</span> <span class="identifier">String</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">SslCredentials</span>(
+ <span class="identifier">String</span>^ <span class="parameter">rootCertificates</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">rootCertificates</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="identifier">SslCredentials</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">rootCertificates</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTAEB814F4_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAEB814F4_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="rootCertificates"/&gt; documentation for "M:Grpc.Core.SslCredentials.#ctor(System.String)"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslCredentials.htm">SslCredentials Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_SslCredentials__ctor.htm">SslCredentials Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor_2.htm b/doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor_2.htm
new file mode 100644
index 0000000000..4f73a16035
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_SslCredentials__ctor_2.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslCredentials Constructor (String, KeyCertificatePair)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.SslCredentials.#ctor(System.String,Grpc.Core.KeyCertificatePair)" /><meta name="Description" content="Creates client-side SSL credentials." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_SslCredentials__ctor_2" /><meta name="guid" content="M_Grpc_Core_SslCredentials__ctor_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslCredentials__ctor.htm" title="SslCredentials Constructor " tocid="Overload_Grpc_Core_SslCredentials__ctor">SslCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor.htm" title="SslCredentials Constructor " tocid="M_Grpc_Core_SslCredentials__ctor">SslCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor_1.htm" title="SslCredentials Constructor (String)" tocid="M_Grpc_Core_SslCredentials__ctor_1">SslCredentials Constructor (String)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor_2.htm" title="SslCredentials Constructor (String, KeyCertificatePair)" tocid="M_Grpc_Core_SslCredentials__ctor_2">SslCredentials Constructor (String, KeyCertificatePair)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslCredentials Constructor (String, KeyCertificatePair)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates client-side SSL credentials.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">SslCredentials</span>(
+ <span class="identifier">string</span> <span class="parameter">rootCertificates</span>,
+ <span class="identifier">KeyCertificatePair</span> <span class="parameter">keyCertificatePair</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">rootCertificates</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">keyCertificatePair</span> <span class="keyword">As</span> <span class="identifier">KeyCertificatePair</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">SslCredentials</span>(
+ <span class="identifier">String</span>^ <span class="parameter">rootCertificates</span>,
+ <span class="identifier">KeyCertificatePair</span>^ <span class="parameter">keyCertificatePair</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">rootCertificates</span> : <span class="identifier">string</span> *
+ <span class="parameter">keyCertificatePair</span> : <span class="identifier">KeyCertificatePair</span> <span class="keyword">-&gt;</span> <span class="identifier">SslCredentials</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">rootCertificates</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST62FC7787_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST62FC7787_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />string containing PEM encoded server root certificates.</dd><dt><span class="parameter">keyCertificatePair</span></dt><dd>Type: <a href="T_Grpc_Core_KeyCertificatePair.htm">Grpc.Core<span id="LST62FC7787_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST62FC7787_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>KeyCertificatePair</a><br />a key certificate pair.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslCredentials.htm">SslCredentials Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_SslCredentials__ctor.htm">SslCredentials Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_SslServerCredentials__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_SslServerCredentials__ctor.htm
new file mode 100644
index 0000000000..f7042eb5d4
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_SslServerCredentials__ctor.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslServerCredentials Constructor (IEnumerable(KeyCertificatePair))</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.SslServerCredentials.#ctor(System.Collections.Generic.IEnumerable{Grpc.Core.KeyCertificatePair})" /><meta name="Description" content="Creates server-side SSL credentials. This constructor should be use if you do not wish to autheticate client using client root certificates." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_SslServerCredentials__ctor" /><meta name="guid" content="M_Grpc_Core_SslServerCredentials__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslServerCredentials__ctor.htm" title="SslServerCredentials Constructor " tocid="Overload_Grpc_Core_SslServerCredentials__ctor">SslServerCredentials Constructor </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslServerCredentials__ctor.htm" title="SslServerCredentials Constructor (IEnumerable(KeyCertificatePair))" tocid="M_Grpc_Core_SslServerCredentials__ctor">SslServerCredentials Constructor (IEnumerable(KeyCertificatePair))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslServerCredentials__ctor_1.htm" title="SslServerCredentials Constructor (IEnumerable(KeyCertificatePair), String, Boolean)" tocid="M_Grpc_Core_SslServerCredentials__ctor_1">SslServerCredentials Constructor (IEnumerable(KeyCertificatePair), String, Boolean)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslServerCredentials Constructor (IEnumerable<span id="LSTAB2A1886_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB2A1886_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>KeyCertificatePair<span id="LSTAB2A1886_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB2A1886_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates server-side SSL credentials.
+ This constructor should be use if you do not wish to autheticate client
+ using client root certificates.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">SslServerCredentials</span>(
+ <span class="identifier">IEnumerable</span>&lt;<span class="identifier">KeyCertificatePair</span>&gt; <span class="parameter">keyCertificatePairs</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">keyCertificatePairs</span> <span class="keyword">As</span> <span class="identifier">IEnumerable</span>(<span class="keyword">Of</span> <span class="identifier">KeyCertificatePair</span>)
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">SslServerCredentials</span>(
+ <span class="identifier">IEnumerable</span>&lt;<span class="identifier">KeyCertificatePair</span>^&gt;^ <span class="parameter">keyCertificatePairs</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">keyCertificatePairs</span> : <span class="identifier">IEnumerable</span>&lt;<span class="identifier">KeyCertificatePair</span>&gt; <span class="keyword">-&gt;</span> <span class="identifier">SslServerCredentials</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">keyCertificatePairs</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/9eekhta0" target="_blank">System.Collections.Generic<span id="LSTAB2A1886_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB2A1886_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IEnumerable</a><span id="LSTAB2A1886_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB2A1886_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair</a><span id="LSTAB2A1886_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAB2A1886_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Key-certificates to use.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_SslServerCredentials__ctor.htm">SslServerCredentials Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_SslServerCredentials__ctor_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_SslServerCredentials__ctor_1.htm
new file mode 100644
index 0000000000..39b6f74eb0
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_SslServerCredentials__ctor_1.htm
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslServerCredentials Constructor (IEnumerable(KeyCertificatePair), String, Boolean)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.SslServerCredentials.#ctor(System.Collections.Generic.IEnumerable{Grpc.Core.KeyCertificatePair},System.String,System.Boolean)" /><meta name="Description" content="Creates server-side SSL credentials." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_SslServerCredentials__ctor_1" /><meta name="guid" content="M_Grpc_Core_SslServerCredentials__ctor_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslServerCredentials__ctor.htm" title="SslServerCredentials Constructor " tocid="Overload_Grpc_Core_SslServerCredentials__ctor">SslServerCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslServerCredentials__ctor.htm" title="SslServerCredentials Constructor (IEnumerable(KeyCertificatePair))" tocid="M_Grpc_Core_SslServerCredentials__ctor">SslServerCredentials Constructor (IEnumerable(KeyCertificatePair))</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslServerCredentials__ctor_1.htm" title="SslServerCredentials Constructor (IEnumerable(KeyCertificatePair), String, Boolean)" tocid="M_Grpc_Core_SslServerCredentials__ctor_1">SslServerCredentials Constructor (IEnumerable(KeyCertificatePair), String, Boolean)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslServerCredentials Constructor (IEnumerable<span id="LST8C6762F7_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8C6762F7_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>KeyCertificatePair<span id="LST8C6762F7_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8C6762F7_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, String, Boolean)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates server-side SSL credentials.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">SslServerCredentials</span>(
+ <span class="identifier">IEnumerable</span>&lt;<span class="identifier">KeyCertificatePair</span>&gt; <span class="parameter">keyCertificatePairs</span>,
+ <span class="identifier">string</span> <span class="parameter">rootCertificates</span>,
+ <span class="identifier">bool</span> <span class="parameter">forceClientAuth</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">keyCertificatePairs</span> <span class="keyword">As</span> <span class="identifier">IEnumerable</span>(<span class="keyword">Of</span> <span class="identifier">KeyCertificatePair</span>),
+ <span class="parameter">rootCertificates</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">forceClientAuth</span> <span class="keyword">As</span> <span class="identifier">Boolean</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">SslServerCredentials</span>(
+ <span class="identifier">IEnumerable</span>&lt;<span class="identifier">KeyCertificatePair</span>^&gt;^ <span class="parameter">keyCertificatePairs</span>,
+ <span class="identifier">String</span>^ <span class="parameter">rootCertificates</span>,
+ <span class="identifier">bool</span> <span class="parameter">forceClientAuth</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">keyCertificatePairs</span> : <span class="identifier">IEnumerable</span>&lt;<span class="identifier">KeyCertificatePair</span>&gt; *
+ <span class="parameter">rootCertificates</span> : <span class="identifier">string</span> *
+ <span class="parameter">forceClientAuth</span> : <span class="identifier">bool</span> <span class="keyword">-&gt;</span> <span class="identifier">SslServerCredentials</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">keyCertificatePairs</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/9eekhta0" target="_blank">System.Collections.Generic<span id="LST8C6762F7_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8C6762F7_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IEnumerable</a><span id="LST8C6762F7_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8C6762F7_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair</a><span id="LST8C6762F7_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8C6762F7_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br />Key-certificates to use.</dd><dt><span class="parameter">rootCertificates</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST8C6762F7_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8C6762F7_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />PEM encoded client root certificates used to authenticate client.</dd><dt><span class="parameter">forceClientAuth</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">System<span id="LST8C6762F7_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8C6762F7_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Boolean</a><br />If true, client will be rejected unless it proves its unthenticity using against rootCertificates.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_SslServerCredentials__ctor.htm">SslServerCredentials Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Status_ToString.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Status_ToString.htm
new file mode 100644
index 0000000000..5132664b73
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Status_ToString.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Status.ToString Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ToString method" /><meta name="System.Keywords" content="Status.ToString method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Status.ToString" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Status.ToString" /><meta name="Description" content="Returns a that represents the current ." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Status_ToString" /><meta name="guid" content="M_Grpc_Core_Status_ToString" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Status.htm" title="Status Methods" tocid="Methods_T_Grpc_Core_Status">Status Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Status_ToString.htm" title="ToString Method " tocid="M_Grpc_Core_Status_ToString">ToString Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Status<span id="LST9E36D944_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9E36D944_0?cpp=::|nu=.");</script>ToString Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns a <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a> that represents the current <a href="T_Grpc_Core_Status.htm">Status</a>.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">override</span> <span class="identifier">string</span> <span class="identifier">ToString</span>()</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Overrides</span> <span class="keyword">Function</span> <span class="identifier">ToString</span> <span class="keyword">As</span> <span class="identifier">String</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="identifier">String</span>^ <span class="identifier">ToString</span>() <span class="keyword">override</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">ToString</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">string</span>
+<span class="keyword">override</span> <span class="identifier">ToString</span> : <span class="keyword">unit</span> <span class="keyword">-&gt;</span> <span class="identifier">string</span> </pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Status.htm">Status Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Status__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Status__ctor.htm
new file mode 100644
index 0000000000..1e613e2ab0
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Status__ctor.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Status Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Status structure, constructor" /><meta name="System.Keywords" content="Status.Status constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Status.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Status.Status" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Status.#ctor(Grpc.Core.StatusCode,System.String)" /><meta name="Description" content="Creates a new instance of Status." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_Status__ctor" /><meta name="guid" content="M_Grpc_Core_Status__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Status__ctor.htm" title="Status Constructor " tocid="M_Grpc_Core_Status__ctor">Status Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Status.htm" title="Status Properties" tocid="Properties_T_Grpc_Core_Status">Status Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Status.htm" title="Status Methods" tocid="Methods_T_Grpc_Core_Status">Status Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_Status.htm" title="Status Fields" tocid="Fields_T_Grpc_Core_Status">Status Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Status Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Creates a new instance of <span class="code">Status</span>.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Status</span>(
+ <span class="identifier">StatusCode</span> <span class="parameter">statusCode</span>,
+ <span class="identifier">string</span> <span class="parameter">detail</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ <span class="parameter">statusCode</span> <span class="keyword">As</span> <span class="identifier">StatusCode</span>,
+ <span class="parameter">detail</span> <span class="keyword">As</span> <span class="identifier">String</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">Status</span>(
+ <span class="identifier">StatusCode</span> <span class="parameter">statusCode</span>,
+ <span class="identifier">String</span>^ <span class="parameter">detail</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ <span class="parameter">statusCode</span> : <span class="identifier">StatusCode</span> *
+ <span class="parameter">detail</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="identifier">Status</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">statusCode</span></dt><dd>Type: <a href="T_Grpc_Core_StatusCode.htm">Grpc.Core<span id="LST603383C6_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST603383C6_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>StatusCode</a><br />Status code.</dd><dt><span class="parameter">detail</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST603383C6_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST603383C6_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />Detail.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Status.htm">Status Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm
new file mode 100644
index 0000000000..ad827bda7b
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm
@@ -0,0 +1,23 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncStreamExtensions.ForEachAsync(T) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ForEachAsync%3CT%3E method" /><meta name="System.Keywords" content="ForEachAsync(Of T) method" /><meta name="System.Keywords" content="AsyncStreamExtensions.ForEachAsync%3CT%3E method" /><meta name="System.Keywords" content="AsyncStreamExtensions.ForEachAsync(Of T) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.AsyncStreamExtensions.ForEachAsync``1" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.AsyncStreamExtensions.ForEachAsync``1(Grpc.Core.IAsyncStreamReader{``0},System.Func{``0,System.Threading.Tasks.Task})" /><meta name="Description" content="Reads the entire stream and executes an async action for each element." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1" /><meta name="guid" content="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Class" tocid="T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Methods" tocid="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm" title="ForEachAsync(T) Method " tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1">ForEachAsync(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm" title="ToListAsync(T) Method " tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1">ToListAsync(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm" title="WriteAllAsync Method " tocid="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync">WriteAllAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncStreamExtensions<span id="LST91555AB7_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_0?cpp=::|nu=.");</script>ForEachAsync<span id="LST91555AB7_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST91555AB7_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Reads the entire stream and executes an async action for each element.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">Task</span> <span class="identifier">ForEachAsync</span>&lt;T&gt;(
+ <span class="keyword">this</span> <span class="identifier">IAsyncStreamReader</span>&lt;T&gt; <span class="parameter">streamReader</span>,
+ <span class="identifier">Func</span>&lt;T, <span class="identifier">Task</span>&gt; <span class="parameter">asyncAction</span>
+)
+<span class="keyword">where</span> T : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">&lt;<span class="identifier">ExtensionAttribute</span>&gt;
+<span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">ForEachAsync</span>(<span class="keyword">Of</span> T <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">streamReader</span> <span class="keyword">As</span> <span class="identifier">IAsyncStreamReader</span>(<span class="keyword">Of</span> T),
+ <span class="parameter">asyncAction</span> <span class="keyword">As</span> <span class="identifier">Func</span>(<span class="keyword">Of</span> T, <span class="identifier">Task</span>)
+) <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+[<span class="identifier">ExtensionAttribute</span>]
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">where</span> T : <span class="keyword">ref class</span>
+<span class="keyword">static</span> <span class="identifier">Task</span>^ <span class="identifier">ForEachAsync</span>(
+ <span class="identifier">IAsyncStreamReader</span>&lt;T&gt;^ <span class="parameter">streamReader</span>,
+ <span class="identifier">Func</span>&lt;T, <span class="identifier">Task</span>^&gt;^ <span class="parameter">asyncAction</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">ExtensionAttribute</span>&gt;]
+<span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">ForEachAsync</span> :
+ <span class="parameter">streamReader</span> : <span class="identifier">IAsyncStreamReader</span>&lt;'T&gt; *
+ <span class="parameter">asyncAction</span> : <span class="identifier">Func</span>&lt;'T, <span class="identifier">Task</span>&gt; <span class="keyword">-&gt;</span> <span class="identifier">Task</span> <span class="keyword">when</span> 'T : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">streamReader</span></dt><dd>Type: <a href="T_Grpc_Core_IAsyncStreamReader_1.htm">Grpc.Core<span id="LST91555AB7_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IAsyncStreamReader</a><span id="LST91555AB7_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LST91555AB7_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="streamReader"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.ForEachAsync``1(Grpc.Core.IAsyncStreamReader{``0},System.Func{``0,System.Threading.Tasks.Task})"]</p></dd><dt><span class="parameter">asyncAction</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/bb549151" target="_blank">System<span id="LST91555AB7_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Func</a><span id="LST91555AB7_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_7?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span>, <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a><span id="LST91555AB7_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_8?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="asyncAction"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.ForEachAsync``1(Grpc.Core.IAsyncStreamReader{``0},System.Func{``0,System.Threading.Tasks.Task})"]</p></dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.ForEachAsync``1(Grpc.Core.IAsyncStreamReader{``0},System.Func{``0,System.Threading.Tasks.Task})"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a><h4 class="subHeading">Usage Note</h4>In Visual Basic and C#, you can call this method as an instance method on any object of type <a href="T_Grpc_Core_IAsyncStreamReader_1.htm">IAsyncStreamReader</a><span id="LST91555AB7_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_9?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LST91555AB7_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST91555AB7_10?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>. When you use instance method syntax to call this method, omit the first parameter. For more information, see <a href="http://msdn.microsoft.com/en-us/library/bb384936.aspx" target="_blank">Extension Methods (Visual Basic)</a> or <a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank">Extension Methods (C# Programming Guide)</a>.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm
new file mode 100644
index 0000000000..3b76b6d21f
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncStreamExtensions.ToListAsync(T) Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ToListAsync%3CT%3E method" /><meta name="System.Keywords" content="ToListAsync(Of T) method" /><meta name="System.Keywords" content="AsyncStreamExtensions.ToListAsync%3CT%3E method" /><meta name="System.Keywords" content="AsyncStreamExtensions.ToListAsync(Of T) method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.AsyncStreamExtensions.ToListAsync``1" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.AsyncStreamExtensions.ToListAsync``1(Grpc.Core.IAsyncStreamReader{``0})" /><meta name="Description" content="Reads the entire stream and creates a list containing all the elements read." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1" /><meta name="guid" content="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Class" tocid="T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Methods" tocid="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm" title="ForEachAsync(T) Method " tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1">ForEachAsync(T) Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm" title="ToListAsync(T) Method " tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1">ToListAsync(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm" title="WriteAllAsync Method " tocid="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync">WriteAllAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncStreamExtensions<span id="LSTB2641AD3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_0?cpp=::|nu=.");</script>ToListAsync<span id="LSTB2641AD3_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTB2641AD3_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Reads the entire stream and creates a list containing all the elements read.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">Task</span>&lt;<span class="identifier">List</span>&lt;T&gt;&gt; <span class="identifier">ToListAsync</span>&lt;T&gt;(
+ <span class="keyword">this</span> <span class="identifier">IAsyncStreamReader</span>&lt;T&gt; <span class="parameter">streamReader</span>
+)
+<span class="keyword">where</span> T : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">&lt;<span class="identifier">ExtensionAttribute</span>&gt;
+<span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">ToListAsync</span>(<span class="keyword">Of</span> T <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">streamReader</span> <span class="keyword">As</span> <span class="identifier">IAsyncStreamReader</span>(<span class="keyword">Of</span> T)
+) <span class="keyword">As</span> <span class="identifier">Task</span>(<span class="keyword">Of</span> <span class="identifier">List</span>(<span class="keyword">Of</span> T))</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+[<span class="identifier">ExtensionAttribute</span>]
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">where</span> T : <span class="keyword">ref class</span>
+<span class="keyword">static</span> <span class="identifier">Task</span>&lt;<span class="identifier">List</span>&lt;T&gt;^&gt;^ <span class="identifier">ToListAsync</span>(
+ <span class="identifier">IAsyncStreamReader</span>&lt;T&gt;^ <span class="parameter">streamReader</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">ExtensionAttribute</span>&gt;]
+<span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">ToListAsync</span> :
+ <span class="parameter">streamReader</span> : <span class="identifier">IAsyncStreamReader</span>&lt;'T&gt; <span class="keyword">-&gt;</span> <span class="identifier">Task</span>&lt;<span class="identifier">List</span>&lt;'T&gt;&gt; <span class="keyword">when</span> 'T : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">streamReader</span></dt><dd>Type: <a href="T_Grpc_Core_IAsyncStreamReader_1.htm">Grpc.Core<span id="LSTB2641AD3_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IAsyncStreamReader</a><span id="LSTB2641AD3_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LSTB2641AD3_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="streamReader"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.ToListAsync``1(Grpc.Core.IAsyncStreamReader{``0})"]</p></dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.ToListAsync``1(Grpc.Core.IAsyncStreamReader{``0})"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd321424" target="_blank">Task</a><span id="LSTB2641AD3_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="http://msdn2.microsoft.com/en-us/library/6sh2ey19" target="_blank">List</a><span id="LSTB2641AD3_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_7?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LSTB2641AD3_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_8?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTB2641AD3_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><h4 class="subHeading">Usage Note</h4>In Visual Basic and C#, you can call this method as an instance method on any object of type <a href="T_Grpc_Core_IAsyncStreamReader_1.htm">IAsyncStreamReader</a><span id="LSTB2641AD3_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_10?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LSTB2641AD3_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2641AD3_11?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>. When you use instance method syntax to call this method, omit the first parameter. For more information, see <a href="http://msdn.microsoft.com/en-us/library/bb384936.aspx" target="_blank">Extension Methods (Visual Basic)</a> or <a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank">Extension Methods (C# Programming Guide)</a>.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm
new file mode 100644
index 0000000000..cd81b87f03
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm
@@ -0,0 +1,32 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncStreamExtensions.WriteAllAsync(T) Method (IClientStreamWriter(T), IEnumerable(T), Boolean)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync``1(Grpc.Core.IClientStreamWriter{``0},System.Collections.Generic.IEnumerable{``0},System.Boolean)" /><meta name="Description" content="Writes all elements from given enumerable to the stream. Completes the stream afterwards unless close = false." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1" /><meta name="guid" content="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Class" tocid="T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Methods" tocid="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm" title="WriteAllAsync Method " tocid="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync">WriteAllAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm" title="WriteAllAsync(T) Method (IServerStreamWriter(T), IEnumerable(T))" tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1">WriteAllAsync(T) Method (IServerStreamWriter(T), IEnumerable(T))</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm" title="WriteAllAsync(T) Method (IClientStreamWriter(T), IEnumerable(T), Boolean)" tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1">WriteAllAsync(T) Method (IClientStreamWriter(T), IEnumerable(T), Boolean)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncStreamExtensions<span id="LSTF01F7D4C_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_0?cpp=::|nu=.");</script>WriteAllAsync<span id="LSTF01F7D4C_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTF01F7D4C_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method (IClientStreamWriter<span id="LSTF01F7D4C_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTF01F7D4C_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, IEnumerable<span id="LSTF01F7D4C_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_5?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTF01F7D4C_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_6?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, Boolean)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ Completes the stream afterwards unless close = false.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">Task</span> <span class="identifier">WriteAllAsync</span>&lt;T&gt;(
+ <span class="keyword">this</span> <span class="identifier">IClientStreamWriter</span>&lt;T&gt; <span class="parameter">streamWriter</span>,
+ <span class="identifier">IEnumerable</span>&lt;T&gt; <span class="parameter">elements</span>,
+ <span class="identifier">bool</span> <span class="parameter">complete</span> = <span class="keyword">true</span>
+)
+<span class="keyword">where</span> T : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">&lt;<span class="identifier">ExtensionAttribute</span>&gt;
+<span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">WriteAllAsync</span>(<span class="keyword">Of</span> T <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">streamWriter</span> <span class="keyword">As</span> <span class="identifier">IClientStreamWriter</span>(<span class="keyword">Of</span> T),
+ <span class="parameter">elements</span> <span class="keyword">As</span> <span class="identifier">IEnumerable</span>(<span class="keyword">Of</span> T),
+ Optional <span class="parameter">complete</span> <span class="keyword">As</span> <span class="identifier">Boolean</span> = <span class="keyword">true</span>
+) <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+[<span class="identifier">ExtensionAttribute</span>]
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">where</span> T : <span class="keyword">ref class</span>
+<span class="keyword">static</span> <span class="identifier">Task</span>^ <span class="identifier">WriteAllAsync</span>(
+ <span class="identifier">IClientStreamWriter</span>&lt;T&gt;^ <span class="parameter">streamWriter</span>,
+ <span class="identifier">IEnumerable</span>&lt;T&gt;^ <span class="parameter">elements</span>,
+ <span class="identifier">bool</span> <span class="parameter">complete</span> = <span class="keyword">true</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">ExtensionAttribute</span>&gt;]
+<span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">WriteAllAsync</span> :
+ <span class="parameter">streamWriter</span> : <span class="identifier">IClientStreamWriter</span>&lt;'T&gt; *
+ <span class="parameter">elements</span> : <span class="identifier">IEnumerable</span>&lt;'T&gt; *
+ ?<span class="parameter">complete</span> : <span class="identifier">bool</span>
+(* Defaults:
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">complete</span> = defaultArg <span class="identifier">complete</span> <span class="keyword">true</span>
+*)
+<span class="keyword">-&gt;</span> <span class="identifier">Task</span> <span class="keyword">when</span> 'T : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">streamWriter</span></dt><dd>Type: <a href="T_Grpc_Core_IClientStreamWriter_1.htm">Grpc.Core<span id="LSTF01F7D4C_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IClientStreamWriter</a><span id="LSTF01F7D4C_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LSTF01F7D4C_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="streamWriter"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync``1(Grpc.Core.IClientStreamWriter{``0},System.Collections.Generic.IEnumerable{``0},System.Boolean)"]</p></dd><dt><span class="parameter">elements</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/9eekhta0" target="_blank">System.Collections.Generic<span id="LSTF01F7D4C_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IEnumerable</a><span id="LSTF01F7D4C_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_11?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LSTF01F7D4C_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_12?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="elements"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync``1(Grpc.Core.IClientStreamWriter{``0},System.Collections.Generic.IEnumerable{``0},System.Boolean)"]</p></dd><dt><span class="parameter">complete</span> (Optional)</dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">System<span id="LSTF01F7D4C_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_13?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Boolean</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="complete"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync``1(Grpc.Core.IClientStreamWriter{``0},System.Collections.Generic.IEnumerable{``0},System.Boolean)"]</p></dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync``1(Grpc.Core.IClientStreamWriter{``0},System.Collections.Generic.IEnumerable{``0},System.Boolean)"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a><h4 class="subHeading">Usage Note</h4>In Visual Basic and C#, you can call this method as an instance method on any object of type <a href="T_Grpc_Core_IClientStreamWriter_1.htm">IClientStreamWriter</a><span id="LSTF01F7D4C_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_14?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LSTF01F7D4C_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF01F7D4C_15?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>. When you use instance method syntax to call this method, omit the first parameter. For more information, see <a href="http://msdn.microsoft.com/en-us/library/bb384936.aspx" target="_blank">Extension Methods (Visual Basic)</a> or <a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank">Extension Methods (C# Programming Guide)</a>.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm">WriteAllAsync Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm
new file mode 100644
index 0000000000..04fb4e5235
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm
@@ -0,0 +1,23 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncStreamExtensions.WriteAllAsync(T) Method (IServerStreamWriter(T), IEnumerable(T))</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync``1(Grpc.Core.IServerStreamWriter{``0},System.Collections.Generic.IEnumerable{``0})" /><meta name="Description" content="Writes all elements from given enumerable to the stream." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1" /><meta name="guid" content="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Class" tocid="T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Methods" tocid="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm" title="WriteAllAsync Method " tocid="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync">WriteAllAsync Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm" title="WriteAllAsync(T) Method (IServerStreamWriter(T), IEnumerable(T))" tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1">WriteAllAsync(T) Method (IServerStreamWriter(T), IEnumerable(T))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm" title="WriteAllAsync(T) Method (IClientStreamWriter(T), IEnumerable(T), Boolean)" tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1">WriteAllAsync(T) Method (IClientStreamWriter(T), IEnumerable(T), Boolean)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncStreamExtensions<span id="LSTA533BD61_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_0?cpp=::|nu=.");</script>WriteAllAsync<span id="LSTA533BD61_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTA533BD61_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method (IServerStreamWriter<span id="LSTA533BD61_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTA533BD61_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, IEnumerable<span id="LSTA533BD61_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_5?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTA533BD61_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_6?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">Task</span> <span class="identifier">WriteAllAsync</span>&lt;T&gt;(
+ <span class="keyword">this</span> <span class="identifier">IServerStreamWriter</span>&lt;T&gt; <span class="parameter">streamWriter</span>,
+ <span class="identifier">IEnumerable</span>&lt;T&gt; <span class="parameter">elements</span>
+)
+<span class="keyword">where</span> T : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">&lt;<span class="identifier">ExtensionAttribute</span>&gt;
+<span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">WriteAllAsync</span>(<span class="keyword">Of</span> T <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">streamWriter</span> <span class="keyword">As</span> <span class="identifier">IServerStreamWriter</span>(<span class="keyword">Of</span> T),
+ <span class="parameter">elements</span> <span class="keyword">As</span> <span class="identifier">IEnumerable</span>(<span class="keyword">Of</span> T)
+) <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+[<span class="identifier">ExtensionAttribute</span>]
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">where</span> T : <span class="keyword">ref class</span>
+<span class="keyword">static</span> <span class="identifier">Task</span>^ <span class="identifier">WriteAllAsync</span>(
+ <span class="identifier">IServerStreamWriter</span>&lt;T&gt;^ <span class="parameter">streamWriter</span>,
+ <span class="identifier">IEnumerable</span>&lt;T&gt;^ <span class="parameter">elements</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">ExtensionAttribute</span>&gt;]
+<span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">WriteAllAsync</span> :
+ <span class="parameter">streamWriter</span> : <span class="identifier">IServerStreamWriter</span>&lt;'T&gt; *
+ <span class="parameter">elements</span> : <span class="identifier">IEnumerable</span>&lt;'T&gt; <span class="keyword">-&gt;</span> <span class="identifier">Task</span> <span class="keyword">when</span> 'T : <span class="keyword">not struct</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">streamWriter</span></dt><dd>Type: <a href="T_Grpc_Core_IServerStreamWriter_1.htm">Grpc.Core<span id="LSTA533BD61_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IServerStreamWriter</a><span id="LSTA533BD61_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LSTA533BD61_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="streamWriter"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync``1(Grpc.Core.IServerStreamWriter{``0},System.Collections.Generic.IEnumerable{``0})"]</p></dd><dt><span class="parameter">elements</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/9eekhta0" target="_blank">System.Collections.Generic<span id="LSTA533BD61_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IEnumerable</a><span id="LSTA533BD61_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_11?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LSTA533BD61_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_12?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="elements"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync``1(Grpc.Core.IServerStreamWriter{``0},System.Collections.Generic.IEnumerable{``0})"]</p></dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "M:Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync``1(Grpc.Core.IServerStreamWriter{``0},System.Collections.Generic.IEnumerable{``0})"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a><h4 class="subHeading">Usage Note</h4>In Visual Basic and C#, you can call this method as an instance method on any object of type <a href="T_Grpc_Core_IServerStreamWriter_1.htm">IServerStreamWriter</a><span id="LSTA533BD61_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_13?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LSTA533BD61_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA533BD61_14?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>. When you use instance method syntax to call this method, omit the first parameter. For more information, see <a href="http://msdn.microsoft.com/en-us/library/bb384936.aspx" target="_blank">Extension Methods (Visual Basic)</a> or <a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx" target="_blank">Extension Methods (C# Programming Guide)</a>.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm">WriteAllAsync Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm
new file mode 100644
index 0000000000..47138a00ba
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm
@@ -0,0 +1,20 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>BenchmarkUtil.RunBenchmark Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RunBenchmark method" /><meta name="System.Keywords" content="BenchmarkUtil.RunBenchmark method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.BenchmarkUtil.RunBenchmark" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.BenchmarkUtil.RunBenchmark(System.Int32,System.Int32,System.Action)" /><meta name="Description" content="Runs a simple benchmark preceded by warmup phase." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark" /><meta name="guid" content="M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_BenchmarkUtil.htm" title="BenchmarkUtil Class" tocid="T_Grpc_Core_Utils_BenchmarkUtil">BenchmarkUtil Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm" title="BenchmarkUtil Methods" tocid="Methods_T_Grpc_Core_Utils_BenchmarkUtil">BenchmarkUtil Methods</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm" title="RunBenchmark Method " tocid="M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark">RunBenchmark Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">BenchmarkUtil<span id="LST916D07CA_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST916D07CA_0?cpp=::|nu=.");</script>RunBenchmark Method </td></tr></table><span class="introStyle"></span><div class="summary">
+ Runs a simple benchmark preceded by warmup phase.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">RunBenchmark</span>(
+ <span class="identifier">int</span> <span class="parameter">warmupIterations</span>,
+ <span class="identifier">int</span> <span class="parameter">benchmarkIterations</span>,
+ <span class="identifier">Action</span> <span class="parameter">action</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Sub</span> <span class="identifier">RunBenchmark</span> (
+ <span class="parameter">warmupIterations</span> <span class="keyword">As</span> <span class="identifier">Integer</span>,
+ <span class="parameter">benchmarkIterations</span> <span class="keyword">As</span> <span class="identifier">Integer</span>,
+ <span class="parameter">action</span> <span class="keyword">As</span> <span class="identifier">Action</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">RunBenchmark</span>(
+ <span class="identifier">int</span> <span class="parameter">warmupIterations</span>,
+ <span class="identifier">int</span> <span class="parameter">benchmarkIterations</span>,
+ <span class="identifier">Action</span>^ <span class="parameter">action</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">RunBenchmark</span> :
+ <span class="parameter">warmupIterations</span> : <span class="identifier">int</span> *
+ <span class="parameter">benchmarkIterations</span> : <span class="identifier">int</span> *
+ <span class="parameter">action</span> : <span class="identifier">Action</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">warmupIterations</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">System<span id="LST916D07CA_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST916D07CA_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Int32</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="warmupIterations"/&gt; documentation for "M:Grpc.Core.Utils.BenchmarkUtil.RunBenchmark(System.Int32,System.Int32,System.Action)"]</p></dd><dt><span class="parameter">benchmarkIterations</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">System<span id="LST916D07CA_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST916D07CA_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Int32</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="benchmarkIterations"/&gt; documentation for "M:Grpc.Core.Utils.BenchmarkUtil.RunBenchmark(System.Int32,System.Int32,System.Action)"]</p></dd><dt><span class="parameter">action</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/bb534741" target="_blank">System<span id="LST916D07CA_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST916D07CA_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Action</a><br /><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;param name="action"/&gt; documentation for "M:Grpc.Core.Utils.BenchmarkUtil.RunBenchmark(System.Int32,System.Int32,System.Action)"]</p></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_BenchmarkUtil.htm">BenchmarkUtil Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckArgument.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckArgument.htm
new file mode 100644
index 0000000000..067a90ed7c
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckArgument.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions.CheckArgument Method (Boolean)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.Preconditions.CheckArgument(System.Boolean)" /><meta name="Description" content="Throws if condition is false." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_Preconditions_CheckArgument" /><meta name="guid" content="M_Grpc_Core_Utils_Preconditions_CheckArgument" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm" title="CheckArgument Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckArgument">CheckArgument Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckArgument.htm" title="CheckArgument Method (Boolean)" tocid="M_Grpc_Core_Utils_Preconditions_CheckArgument">CheckArgument Method (Boolean)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm" title="CheckArgument Method (Boolean, String)" tocid="M_Grpc_Core_Utils_Preconditions_CheckArgument_1">CheckArgument Method (Boolean, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions<span id="LST9B182B11_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B182B11_0?cpp=::|nu=.");</script>CheckArgument Method (Boolean)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/3w1b3114" target="_blank">ArgumentException</a> if condition is false.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">CheckArgument</span>(
+ <span class="identifier">bool</span> <span class="parameter">condition</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Sub</span> <span class="identifier">CheckArgument</span> (
+ <span class="parameter">condition</span> <span class="keyword">As</span> <span class="identifier">Boolean</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">CheckArgument</span>(
+ <span class="identifier">bool</span> <span class="parameter">condition</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">CheckArgument</span> :
+ <span class="parameter">condition</span> : <span class="identifier">bool</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">condition</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">System<span id="LST9B182B11_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B182B11_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Boolean</a><br />The condition.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm">CheckArgument Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm
new file mode 100644
index 0000000000..4bc9b4e26f
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions.CheckArgument Method (Boolean, String)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.Preconditions.CheckArgument(System.Boolean,System.String)" /><meta name="Description" content="Throws with given message if condition is false." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_Preconditions_CheckArgument_1" /><meta name="guid" content="M_Grpc_Core_Utils_Preconditions_CheckArgument_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm" title="CheckArgument Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckArgument">CheckArgument Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckArgument.htm" title="CheckArgument Method (Boolean)" tocid="M_Grpc_Core_Utils_Preconditions_CheckArgument">CheckArgument Method (Boolean)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm" title="CheckArgument Method (Boolean, String)" tocid="M_Grpc_Core_Utils_Preconditions_CheckArgument_1">CheckArgument Method (Boolean, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions<span id="LSTDE78F4C7_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDE78F4C7_0?cpp=::|nu=.");</script>CheckArgument Method (Boolean, String)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/3w1b3114" target="_blank">ArgumentException</a> with given message if condition is false.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">CheckArgument</span>(
+ <span class="identifier">bool</span> <span class="parameter">condition</span>,
+ <span class="identifier">string</span> <span class="parameter">errorMessage</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Sub</span> <span class="identifier">CheckArgument</span> (
+ <span class="parameter">condition</span> <span class="keyword">As</span> <span class="identifier">Boolean</span>,
+ <span class="parameter">errorMessage</span> <span class="keyword">As</span> <span class="identifier">String</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">CheckArgument</span>(
+ <span class="identifier">bool</span> <span class="parameter">condition</span>,
+ <span class="identifier">String</span>^ <span class="parameter">errorMessage</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">CheckArgument</span> :
+ <span class="parameter">condition</span> : <span class="identifier">bool</span> *
+ <span class="parameter">errorMessage</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">condition</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">System<span id="LSTDE78F4C7_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDE78F4C7_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Boolean</a><br />The condition.</dd><dt><span class="parameter">errorMessage</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTDE78F4C7_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDE78F4C7_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />The error message.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm">CheckArgument Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm
new file mode 100644
index 0000000000..71e0951801
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions.CheckNotNull(T) Method (T)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.Preconditions.CheckNotNull``1(``0)" /><meta name="Description" content="Throws if reference is null." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1" /><meta name="guid" content="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm" title="CheckNotNull Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull">CheckNotNull Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm" title="CheckNotNull(T) Method (T)" tocid="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1">CheckNotNull(T) Method (T)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm" title="CheckNotNull(T) Method (T, String)" tocid="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1">CheckNotNull(T) Method (T, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions<span id="LST64EC5978_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST64EC5978_0?cpp=::|nu=.");</script>CheckNotNull<span id="LST64EC5978_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST64EC5978_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST64EC5978_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST64EC5978_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method (<span class="typeparameter">T</span>)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/27426hcy" target="_blank">ArgumentNullException</a> if reference is null.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> T <span class="identifier">CheckNotNull</span>&lt;T&gt;(
+ T <span class="parameter">reference</span>
+)
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">CheckNotNull</span>(<span class="keyword">Of</span> T) (
+ <span class="parameter">reference</span> <span class="keyword">As</span> T
+) <span class="keyword">As</span> T</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">static</span> T <span class="identifier">CheckNotNull</span>(
+ T <span class="parameter">reference</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">CheckNotNull</span> :
+ <span class="parameter">reference</span> : 'T <span class="keyword">-&gt;</span> 'T
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">reference</span></dt><dd>Type: <span class="selflink"><span class="typeparameter">T</span></span><br />The reference.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "M:Grpc.Core.Utils.Preconditions.CheckNotNull``1(``0)"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <span class="selflink"><span class="typeparameter">T</span></span></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm">CheckNotNull Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm
new file mode 100644
index 0000000000..a8442ff5f9
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm
@@ -0,0 +1,18 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions.CheckNotNull(T) Method (T, String)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.Preconditions.CheckNotNull``1(``0,System.String)" /><meta name="Description" content="Throws if reference is null." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1" /><meta name="guid" content="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm" title="CheckNotNull Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull">CheckNotNull Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm" title="CheckNotNull(T) Method (T)" tocid="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1">CheckNotNull(T) Method (T)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm" title="CheckNotNull(T) Method (T, String)" tocid="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1">CheckNotNull(T) Method (T, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions<span id="LSTE5BEC16C_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE5BEC16C_0?cpp=::|nu=.");</script>CheckNotNull<span id="LSTE5BEC16C_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE5BEC16C_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTE5BEC16C_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE5BEC16C_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Method (<span class="typeparameter">T</span>, String)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/27426hcy" target="_blank">ArgumentNullException</a> if reference is null.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> T <span class="identifier">CheckNotNull</span>&lt;T&gt;(
+ T <span class="parameter">reference</span>,
+ <span class="identifier">string</span> <span class="parameter">paramName</span>
+)
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Function</span> <span class="identifier">CheckNotNull</span>(<span class="keyword">Of</span> T) (
+ <span class="parameter">reference</span> <span class="keyword">As</span> T,
+ <span class="parameter">paramName</span> <span class="keyword">As</span> <span class="identifier">String</span>
+) <span class="keyword">As</span> T</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">static</span> T <span class="identifier">CheckNotNull</span>(
+ T <span class="parameter">reference</span>,
+ <span class="identifier">String</span>^ <span class="parameter">paramName</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">CheckNotNull</span> :
+ <span class="parameter">reference</span> : 'T *
+ <span class="parameter">paramName</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> 'T
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">reference</span></dt><dd>Type: <span class="selflink"><span class="typeparameter">T</span></span><br />The reference.</dd><dt><span class="parameter">paramName</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LSTE5BEC16C_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE5BEC16C_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />The parameter name.</dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "M:Grpc.Core.Utils.Preconditions.CheckNotNull``1(``0,System.String)"]</p></dd></dl><h4 class="subHeading">Return Value</h4>Type: <span class="selflink"><span class="typeparameter">T</span></span></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm">CheckNotNull Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckState.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckState.htm
new file mode 100644
index 0000000000..db25a18cc3
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckState.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions.CheckState Method (Boolean)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.Preconditions.CheckState(System.Boolean)" /><meta name="Description" content="Throws if condition is false." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_Preconditions_CheckState" /><meta name="guid" content="M_Grpc_Core_Utils_Preconditions_CheckState" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckState.htm" title="CheckState Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckState">CheckState Method </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckState.htm" title="CheckState Method (Boolean)" tocid="M_Grpc_Core_Utils_Preconditions_CheckState">CheckState Method (Boolean)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckState_1.htm" title="CheckState Method (Boolean, String)" tocid="M_Grpc_Core_Utils_Preconditions_CheckState_1">CheckState Method (Boolean, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions<span id="LST7567FB95_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7567FB95_0?cpp=::|nu=.");</script>CheckState Method (Boolean)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/2asft85a" target="_blank">InvalidOperationException</a> if condition is false.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">CheckState</span>(
+ <span class="identifier">bool</span> <span class="parameter">condition</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Sub</span> <span class="identifier">CheckState</span> (
+ <span class="parameter">condition</span> <span class="keyword">As</span> <span class="identifier">Boolean</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">CheckState</span>(
+ <span class="identifier">bool</span> <span class="parameter">condition</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">CheckState</span> :
+ <span class="parameter">condition</span> : <span class="identifier">bool</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">condition</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">System<span id="LST7567FB95_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7567FB95_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Boolean</a><br />The condition.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Utils_Preconditions_CheckState.htm">CheckState Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckState_1.htm b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckState_1.htm
new file mode 100644
index 0000000000..98a215c2aa
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_Utils_Preconditions_CheckState_1.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions.CheckState Method (Boolean, String)</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.Utils.Preconditions.CheckState(System.Boolean,System.String)" /><meta name="Description" content="Throws with given message if condition is false." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="M_Grpc_Core_Utils_Preconditions_CheckState_1" /><meta name="guid" content="M_Grpc_Core_Utils_Preconditions_CheckState_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckState.htm" title="CheckState Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckState">CheckState Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckState.htm" title="CheckState Method (Boolean)" tocid="M_Grpc_Core_Utils_Preconditions_CheckState">CheckState Method (Boolean)</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckState_1.htm" title="CheckState Method (Boolean, String)" tocid="M_Grpc_Core_Utils_Preconditions_CheckState_1">CheckState Method (Boolean, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions<span id="LST8CA3BEB3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8CA3BEB3_0?cpp=::|nu=.");</script>CheckState Method (Boolean, String)</td></tr></table><span class="introStyle"></span><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/2asft85a" target="_blank">InvalidOperationException</a> with given message if condition is false.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">CheckState</span>(
+ <span class="identifier">bool</span> <span class="parameter">condition</span>,
+ <span class="identifier">string</span> <span class="parameter">errorMessage</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">Sub</span> <span class="identifier">CheckState</span> (
+ <span class="parameter">condition</span> <span class="keyword">As</span> <span class="identifier">Boolean</span>,
+ <span class="parameter">errorMessage</span> <span class="keyword">As</span> <span class="identifier">String</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">CheckState</span>(
+ <span class="identifier">bool</span> <span class="parameter">condition</span>,
+ <span class="identifier">String</span>^ <span class="parameter">errorMessage</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">CheckState</span> :
+ <span class="parameter">condition</span> : <span class="identifier">bool</span> *
+ <span class="parameter">errorMessage</span> : <span class="identifier">string</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">condition</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">System<span id="LST8CA3BEB3_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8CA3BEB3_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Boolean</a><br />The condition.</dd><dt><span class="parameter">errorMessage</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST8CA3BEB3_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8CA3BEB3_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br />The error message.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions Class</a></div><div class="seeAlsoStyle"><a href="Overload_Grpc_Core_Utils_Preconditions_CheckState.htm">CheckState Overload</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/M_Grpc_Core_WriteOptions__ctor.htm b/doc/ref/csharp/html/html/M_Grpc_Core_WriteOptions__ctor.htm
new file mode 100644
index 0000000000..8d09de8108
--- /dev/null
+++ b/doc/ref/csharp/html/html/M_Grpc_Core_WriteOptions__ctor.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>WriteOptions Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteOptions class, constructor" /><meta name="System.Keywords" content="WriteOptions.WriteOptions constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.WriteOptions.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.WriteOptions.WriteOptions" /><meta name="Microsoft.Help.Id" content="M:Grpc.Core.WriteOptions.#ctor(Grpc.Core.WriteFlags)" /><meta name="Description" content="Initializes a new instance of WriteOptions class." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="M_Grpc_Core_WriteOptions__ctor" /><meta name="guid" content="M_Grpc_Core_WriteOptions__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_WriteOptions__ctor.htm" title="WriteOptions Constructor " tocid="M_Grpc_Core_WriteOptions__ctor">WriteOptions Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Properties" tocid="Properties_T_Grpc_Core_WriteOptions">WriteOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Methods" tocid="Methods_T_Grpc_Core_WriteOptions">WriteOptions Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Fields" tocid="Fields_T_Grpc_Core_WriteOptions">WriteOptions Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">WriteOptions Constructor </td></tr></table><span class="introStyle"></span><div class="summary">
+ Initializes a new instance of <span class="code">WriteOptions</span> class.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">WriteOptions</span>(
+ <span class="identifier">WriteFlags</span> <span class="parameter">flags</span> =
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Sub</span> <span class="identifier">New</span> (
+ Optional <span class="parameter">flags</span> <span class="keyword">As</span> <span class="identifier">WriteFlags</span> =
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="identifier">WriteOptions</span>(
+ <span class="identifier">WriteFlags</span> <span class="parameter">flags</span> =
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">new</span> :
+ ?<span class="parameter">flags</span> : <span class="identifier">WriteFlags</span>
+(* Defaults:
+ <span class="keyword">let </span><span class="identifier">_</span><span class="identifier">flags</span> = defaultArg <span class="identifier">flags</span>
+*)
+<span class="keyword">-&gt;</span> <span class="identifier">WriteOptions</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">flags</span> (Optional)</dt><dd>Type: <a href="T_Grpc_Core_WriteFlags.htm">Grpc.Core<span id="LST20A2751C_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST20A2751C_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>WriteFlags</a><br />The write flags.</dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_WriteOptions.htm">WriteOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Auth_AuthInterceptors.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Auth_AuthInterceptors.htm
new file mode 100644
index 0000000000..67729e61c1
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Auth_AuthInterceptors.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AuthInterceptors Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AuthInterceptors class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Auth.AuthInterceptors" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Auth" /><meta name="file" content="Methods_T_Grpc_Auth_AuthInterceptors" /><meta name="guid" content="Methods_T_Grpc_Auth_AuthInterceptors" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Auth.htm" title="Grpc.Auth" tocid="N_Grpc_Auth">Grpc.Auth</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Auth_AuthInterceptors.htm" title="AuthInterceptors Class" tocid="T_Grpc_Auth_AuthInterceptors">AuthInterceptors Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Auth_AuthInterceptors.htm" title="AuthInterceptors Methods" tocid="Methods_T_Grpc_Auth_AuthInterceptors">AuthInterceptors Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm" title="FromAccessToken Method " tocid="M_Grpc_Auth_AuthInterceptors_FromAccessToken">FromAccessToken Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Auth_AuthInterceptors_FromCredential.htm" title="FromCredential Method " tocid="M_Grpc_Auth_AuthInterceptors_FromCredential">FromCredential Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AuthInterceptors Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Auth_AuthInterceptors.htm">AuthInterceptors</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm">FromAccessToken</a></td><td><div class="summary">
+ Creates OAuth2 interceptor that will use given access token as authorization.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Auth_AuthInterceptors_FromCredential.htm">FromCredential</a></td><td><div class="summary">
+ Creates interceptor that will obtain access token from any credential type that implements
+ <span class="code">ITokenAccess</span>. (e.g. <span class="code">GoogleCredential</span>).
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Auth_AuthInterceptors.htm">AuthInterceptors Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Auth.htm">Grpc.Auth Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm
new file mode 100644
index 0000000000..1a980e8a2a
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncClientStreamingCall(TRequest, TResponse) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E class, methods" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse) class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.AsyncClientStreamingCall`2" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_AsyncClientStreamingCall_2" /><meta name="guid" content="Methods_T_Grpc_Core_AsyncClientStreamingCall_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm" title="GetAwaiter Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter">GetAwaiter Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncClientStreamingCall<span id="LSTB54A532_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB54A532_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTB54A532_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB54A532_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LSTB54A532_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB54A532_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTB54A532_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB54A532_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm">Dispose</a></td><td><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (request stream has been completed and call result has been received), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm">GetAwaiter</a></td><td><div class="summary">
+ Allows awaiting this object directly.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm">GetStatus</a></td><td><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm">GetTrailers</a></td><td><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LSTB54A532_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB54A532_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTB54A532_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB54A532_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm
new file mode 100644
index 0000000000..b52e7bb7c7
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncDuplexStreamingCall(TRequest, TResponse) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E class, methods" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse) class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.AsyncDuplexStreamingCall`2" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2" /><meta name="guid" content="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncDuplexStreamingCall<span id="LSTAE1A0197_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAE1A0197_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTAE1A0197_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAE1A0197_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LSTAE1A0197_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAE1A0197_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTAE1A0197_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAE1A0197_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm">Dispose</a></td><td><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (request stream has been completed and response stream has been fully read), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm">GetStatus</a></td><td><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm">GetTrailers</a></td><td><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LSTAE1A0197_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAE1A0197_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTAE1A0197_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTAE1A0197_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm
new file mode 100644
index 0000000000..c2cbdffe87
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncServerStreamingCall(TResponse) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncServerStreamingCall%3CTResponse%3E class, methods" /><meta name="System.Keywords" content="AsyncServerStreamingCall(Of TResponse) class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.AsyncServerStreamingCall`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_AsyncServerStreamingCall_1" /><meta name="guid" content="Methods_T_Grpc_Core_AsyncServerStreamingCall_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncServerStreamingCall<span id="LST7FD8EB31_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7FD8EB31_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LST7FD8EB31_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7FD8EB31_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall<span id="LST7FD8EB31_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7FD8EB31_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST7FD8EB31_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7FD8EB31_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm">Dispose</a></td><td><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (response stream has been fully read), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm">GetStatus</a></td><td><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm">GetTrailers</a></td><td><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall<span id="LST7FD8EB31_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7FD8EB31_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST7FD8EB31_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7FD8EB31_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncUnaryCall_1.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncUnaryCall_1.htm
new file mode 100644
index 0000000000..7be009c069
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_AsyncUnaryCall_1.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncUnaryCall(TResponse) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTResponse%3E class, methods" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TResponse) class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.AsyncUnaryCall`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_AsyncUnaryCall_1" /><meta name="guid" content="Methods_T_Grpc_Core_AsyncUnaryCall_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm" title="Dispose Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_Dispose">Dispose Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm" title="GetAwaiter Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter">GetAwaiter Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm" title="GetStatus Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetStatus">GetStatus Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm" title="GetTrailers Method " tocid="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers">GetTrailers Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncUnaryCall<span id="LSTB2FF69B1_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2FF69B1_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LSTB2FF69B1_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2FF69B1_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LSTB2FF69B1_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2FF69B1_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTB2FF69B1_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2FF69B1_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm">Dispose</a></td><td><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (request stream has been completed and call result has been received), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm">GetAwaiter</a></td><td><div class="summary">
+ Allows awaiting this object directly.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm">GetStatus</a></td><td><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm">GetTrailers</a></td><td><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LSTB2FF69B1_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2FF69B1_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTB2FF69B1_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB2FF69B1_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_CallInvocationDetails_2.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_CallInvocationDetails_2.htm
new file mode 100644
index 0000000000..2cc225528f
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_CallInvocationDetails_2.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E structure, methods" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse) structure, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.CallInvocationDetails`2" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_CallInvocationDetails_2" /><meta name="guid" content="Methods_T_Grpc_Core_CallInvocationDetails_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm" title="WithOptions Method " tocid="M_Grpc_Core_CallInvocationDetails_2_WithOptions">WithOptions Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LST196181DB_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST196181DB_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST196181DB_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST196181DB_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST196181DB_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST196181DB_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST196181DB_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST196181DB_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2dts52z7" target="_blank">Equals</a></td><td><div class="summary">Indicates whether this instance and a specified object are equal.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/y3509fc2" target="_blank">GetHashCode</a></td><td><div class="summary">Returns the hash code for this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/wb77sz3h" target="_blank">ToString</a></td><td><div class="summary">Returns the fully qualified type name of this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm">WithOptions</a></td><td><div class="summary">
+ Returns new instance of <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST196181DB_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST196181DB_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST196181DB_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST196181DB_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> with
+ <span class="code">Options</span> set to the value provided. Values of all other fields are preserved.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST196181DB_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST196181DB_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST196181DB_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST196181DB_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_CallOptions.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_CallOptions.htm
new file mode 100644
index 0000000000..f9fe02ed1c
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_CallOptions.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CallOptions structure, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.CallOptions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_CallOptions" /><meta name="guid" content="Methods_T_Grpc_Core_CallOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_CallOptions.htm" title="CallOptions Methods" tocid="Methods_T_Grpc_Core_CallOptions">CallOptions Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithCancellationToken.htm" title="WithCancellationToken Method " tocid="M_Grpc_Core_CallOptions_WithCancellationToken">WithCancellationToken Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithDeadline.htm" title="WithDeadline Method " tocid="M_Grpc_Core_CallOptions_WithDeadline">WithDeadline Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions_WithHeaders.htm" title="WithHeaders Method " tocid="M_Grpc_Core_CallOptions_WithHeaders">WithHeaders Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2dts52z7" target="_blank">Equals</a></td><td><div class="summary">Indicates whether this instance and a specified object are equal.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/y3509fc2" target="_blank">GetHashCode</a></td><td><div class="summary">Returns the hash code for this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/wb77sz3h" target="_blank">ToString</a></td><td><div class="summary">Returns the fully qualified type name of this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallOptions_WithCancellationToken.htm">WithCancellationToken</a></td><td><div class="summary">
+ Returns new instance of <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a> with
+ <span class="code">CancellationToken</span> set to the value provided. Values of all other fields are preserved.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallOptions_WithDeadline.htm">WithDeadline</a></td><td><div class="summary">
+ Returns new instance of <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a> with
+ <span class="code">Deadline</span> set to the value provided. Values of all other fields are preserved.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallOptions_WithHeaders.htm">WithHeaders</a></td><td><div class="summary">
+ Returns new instance of <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a> with
+ <span class="code">Headers</span> set to the value provided. Values of all other fields are preserved.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Calls.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Calls.htm
new file mode 100644
index 0000000000..8933af3fea
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Calls.htm
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Calls Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Calls class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Calls" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Calls" /><meta name="guid" content="Methods_T_Grpc_Core_Calls" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Calls.htm" title="Calls Methods" tocid="Methods_T_Grpc_Core_Calls">Calls Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncClientStreamingCall__2">AsyncClientStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2">AsyncDuplexStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" title="AsyncServerStreamingCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncServerStreamingCall__2">AsyncServerStreamingCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" title="AsyncUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_AsyncUnaryCall__2">AsyncUnaryCall(TRequest, TResponse) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" title="BlockingUnaryCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_Calls_BlockingUnaryCall__2">BlockingUnaryCall(TRequest, TResponse) Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Calls Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Calls.htm">Calls</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm">AsyncClientStreamingCall<span id="LST141FFE22_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST141FFE22_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST141FFE22_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST141FFE22_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Invokes a client streaming call asynchronously.
+ In client streaming scenario, client sends a stream of requests and server responds with a single response.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm">AsyncDuplexStreamingCall<span id="LST141FFE22_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST141FFE22_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST141FFE22_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST141FFE22_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Invokes a duplex streaming call asynchronously.
+ In duplex streaming scenario, client sends a stream of requests and server responds with a stream of responses.
+ The response stream is completely independent and both side can be sending messages at the same time.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm">AsyncServerStreamingCall<span id="LST141FFE22_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST141FFE22_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST141FFE22_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST141FFE22_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Invokes a server streaming call asynchronously.
+ In server streaming scenario, client sends on request and server responds with a stream of responses.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Calls_AsyncUnaryCall__2.htm">AsyncUnaryCall<span id="LST141FFE22_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST141FFE22_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST141FFE22_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST141FFE22_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Invokes a simple remote call asynchronously.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Calls_BlockingUnaryCall__2.htm">BlockingUnaryCall<span id="LST141FFE22_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST141FFE22_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST141FFE22_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST141FFE22_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Invokes a simple remote call in a blocking fashion.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Calls.htm">Calls Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Channel.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Channel.htm
new file mode 100644
index 0000000000..5aa7e52175
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Channel.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Channel class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Channel" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Channel" /><meta name="guid" content="Methods_T_Grpc_Core_Channel" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Channel.htm" title="Channel Methods" tocid="Methods_T_Grpc_Core_Channel">Channel Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_ConnectAsync.htm" title="ConnectAsync Method " tocid="M_Grpc_Core_Channel_ConnectAsync">ConnectAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_ShutdownAsync.htm" title="ShutdownAsync Method " tocid="M_Grpc_Core_Channel_ShutdownAsync">ShutdownAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel_WaitForStateChangedAsync.htm" title="WaitForStateChangedAsync Method " tocid="M_Grpc_Core_Channel_WaitForStateChangedAsync">WaitForStateChangedAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Channel.htm">Channel</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Channel_ConnectAsync.htm">ConnectAsync</a></td><td><div class="summary">
+ Allows explicitly requesting channel to connect without starting an RPC.
+ Returned task completes once state Ready was seen. If the deadline is reached,
+ or channel enters the FatalFailure state, the task is cancelled.
+ There is no need to call this explicitly unless your use case requires that.
+ Starting an RPC on a new channel will request connection implicitly.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Channel_ShutdownAsync.htm">ShutdownAsync</a></td><td><div class="summary">
+ Waits until there are no more active calls for this channel and then cleans up
+ resources used by this channel.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Channel_WaitForStateChangedAsync.htm">WaitForStateChangedAsync</a></td><td><div class="summary">
+ Returned tasks completes once channel state has become different from
+ given lastObservedState.
+ If deadline is reached or and error occurs, returned task is cancelled.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ChannelOption.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ChannelOption.htm
new file mode 100644
index 0000000000..4629b7a4a3
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ChannelOption.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ChannelOption class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.ChannelOption" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_ChannelOption" /><meta name="guid" content="Methods_T_Grpc_Core_ChannelOption" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ChannelOption__ctor.htm" title="ChannelOption Constructor " tocid="Overload_Grpc_Core_ChannelOption__ctor">ChannelOption Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ChannelOption.htm" title="ChannelOption Properties" tocid="Properties_T_Grpc_Core_ChannelOption">ChannelOption Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ChannelOption.htm" title="ChannelOption Methods" tocid="Methods_T_Grpc_Core_ChannelOption">ChannelOption Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ChannelOption.htm">ChannelOption</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ClientBase.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ClientBase.htm
new file mode 100644
index 0000000000..b0f38c947f
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ClientBase.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ClientBase Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ClientBase class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.ClientBase" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_ClientBase" /><meta name="guid" content="Methods_T_Grpc_Core_ClientBase" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ClientBase.htm" title="ClientBase Methods" tocid="Methods_T_Grpc_Core_ClientBase">ClientBase Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ClientBase_CreateCall__2.htm" title="CreateCall(TRequest, TResponse) Method " tocid="M_Grpc_Core_ClientBase_CreateCall__2">CreateCall(TRequest, TResponse) Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ClientBase Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ClientBase.htm">ClientBase</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="protected;declared;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="M_Grpc_Core_ClientBase_CreateCall__2.htm">CreateCall<span id="LST805621DD_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST805621DD_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST805621DD_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST805621DD_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Creates a new call to given method.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ClientBase.htm">ClientBase Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ContextPropagationOptions.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ContextPropagationOptions.htm
new file mode 100644
index 0000000000..abc1abbea8
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ContextPropagationOptions.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ContextPropagationOptions Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ContextPropagationOptions class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.ContextPropagationOptions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_ContextPropagationOptions" /><meta name="guid" content="Methods_T_Grpc_Core_ContextPropagationOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ContextPropagationOptions__ctor.htm" title="ContextPropagationOptions Constructor " tocid="M_Grpc_Core_ContextPropagationOptions__ctor">ContextPropagationOptions Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Properties" tocid="Properties_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Methods" tocid="Methods_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Fields" tocid="Fields_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ContextPropagationOptions Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ContextPropagationToken.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ContextPropagationToken.htm
new file mode 100644
index 0000000000..0bf0e221ad
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ContextPropagationToken.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ContextPropagationToken Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ContextPropagationToken class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.ContextPropagationToken" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_ContextPropagationToken" /><meta name="guid" content="Methods_T_Grpc_Core_ContextPropagationToken" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Methods" tocid="Methods_T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ContextPropagationToken Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ContextPropagationToken.htm">ContextPropagationToken</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ContextPropagationToken.htm">ContextPropagationToken Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Credentials.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Credentials.htm
new file mode 100644
index 0000000000..2ab1c23063
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Credentials.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Credentials Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Credentials class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Credentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Credentials" /><meta name="guid" content="Methods_T_Grpc_Core_Credentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Credentials__ctor.htm" title="Credentials Constructor " tocid="M_Grpc_Core_Credentials__ctor">Credentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Credentials.htm" title="Credentials Properties" tocid="Properties_T_Grpc_Core_Credentials">Credentials Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_Credentials.htm" title="Credentials Methods" tocid="Methods_T_Grpc_Core_Credentials">Credentials Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Credentials Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Credentials.htm">Credentials</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Credentials.htm">Credentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_GrpcEnvironment.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_GrpcEnvironment.htm
new file mode 100644
index 0000000000..56aede9447
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_GrpcEnvironment.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>GrpcEnvironment Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GrpcEnvironment class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.GrpcEnvironment" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_GrpcEnvironment" /><meta name="guid" content="Methods_T_Grpc_Core_GrpcEnvironment" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Methods" tocid="Methods_T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_GrpcEnvironment_SetLogger.htm" title="SetLogger Method " tocid="M_Grpc_Core_GrpcEnvironment_SetLogger">SetLogger Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">GrpcEnvironment Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_GrpcEnvironment.htm">GrpcEnvironment</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_GrpcEnvironment_SetLogger.htm">SetLogger</a></td><td><div class="summary">
+ Sets the application-wide logger that should be used by gRPC.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_GrpcEnvironment.htm">GrpcEnvironment Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IAsyncStreamReader_1.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IAsyncStreamReader_1.htm
new file mode 100644
index 0000000000..9ccee5b4b6
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IAsyncStreamReader_1.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IAsyncStreamReader(T) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IAsyncStreamReader%3CT%3E interface, methods" /><meta name="System.Keywords" content="IAsyncStreamReader(Of T) interface, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.IAsyncStreamReader`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_IAsyncStreamReader_1" /><meta name="guid" content="Methods_T_Grpc_Core_IAsyncStreamReader_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Properties_T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Properties" tocid="Properties_T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Methods" tocid="Methods_T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IAsyncStreamReader<span id="LSTFECD0C64_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTFECD0C64_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_IAsyncStreamReader_1.htm">IAsyncStreamReader<span id="LSTFECD0C64_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTFECD0C64_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/es4s3w1d" target="_blank">Dispose</a></td><td><div class="summary">Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aax125c9" target="_blank">IDisposable</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><span class="nolink">MoveNext</span></td><td> (Inherited from <span class="nolink">IAsyncEnumerator</span><span id="LSTFECD0C64_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_IAsyncStreamReader_1.htm"><span class="typeparameter">T</span></a><span id="LSTFECD0C64_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Extension Methods</span></div><div id="ID1RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubextension.gif" alt="Public Extension Method" title="Public Extension Method" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm">ForEachAsync<span id="LSTFECD0C64_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LSTFECD0C64_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Reads the entire stream and executes an async action for each element.
+ </div> (Defined by <a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubextension.gif" alt="Public Extension Method" title="Public Extension Method" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm">ToListAsync<span id="LSTFECD0C64_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LSTFECD0C64_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Reads the entire stream and creates a list containing all the elements read.
+ </div> (Defined by <a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IAsyncStreamReader_1.htm">IAsyncStreamReader<span id="LSTFECD0C64_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_10?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTFECD0C64_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFECD0C64_11?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm
new file mode 100644
index 0000000000..f69951fdf0
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IAsyncStreamWriter(T) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IAsyncStreamWriter%3CT%3E interface, methods" /><meta name="System.Keywords" content="IAsyncStreamWriter(Of T) interface, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.IAsyncStreamWriter`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_IAsyncStreamWriter_1" /><meta name="guid" content="Methods_T_Grpc_Core_IAsyncStreamWriter_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Methods" tocid="Methods_T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm" title="WriteAsync Method " tocid="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync">WriteAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IAsyncStreamWriter<span id="LST736674CC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736674CC_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST736674CC_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736674CC_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST736674CC_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736674CC_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST736674CC_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736674CC_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm">WriteAsync</a></td><td><div class="summary">
+ Writes a single asynchronously. Only one write can be pending at a time.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST736674CC_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736674CC_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST736674CC_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST736674CC_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IClientStreamWriter_1.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IClientStreamWriter_1.htm
new file mode 100644
index 0000000000..271b5cf251
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IClientStreamWriter_1.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IClientStreamWriter(T) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IClientStreamWriter%3CT%3E interface, methods" /><meta name="System.Keywords" content="IClientStreamWriter(Of T) interface, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.IClientStreamWriter`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_IClientStreamWriter_1" /><meta name="guid" content="Methods_T_Grpc_Core_IClientStreamWriter_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Methods" tocid="Methods_T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm" title="CompleteAsync Method " tocid="M_Grpc_Core_IClientStreamWriter_1_CompleteAsync">CompleteAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IClientStreamWriter<span id="LST9AAAD0F7_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AAAD0F7_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST9AAAD0F7_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AAAD0F7_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_IClientStreamWriter_1.htm">IClientStreamWriter<span id="LST9AAAD0F7_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AAAD0F7_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9AAAD0F7_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AAAD0F7_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm">CompleteAsync</a></td><td><div class="summary">
+ Completes/closes the stream. Can only be called once there is no pending write. No writes should follow calling this.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm">WriteAsync</a></td><td><div class="summary">
+ Writes a single asynchronously. Only one write can be pending at a time.
+ </div> (Inherited from <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST9AAAD0F7_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AAAD0F7_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9AAAD0F7_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AAAD0F7_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Extension Methods</span></div><div id="ID1RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubextension.gif" alt="Public Extension Method" title="Public Extension Method" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm">WriteAllAsync<span id="LST9AAAD0F7_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AAAD0F7_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST9AAAD0F7_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AAAD0F7_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ Completes the stream afterwards unless close = false.
+ </div> (Defined by <a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IClientStreamWriter_1.htm">IClientStreamWriter<span id="LST9AAAD0F7_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AAAD0F7_8?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9AAAD0F7_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9AAAD0F7_9?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IServerStreamWriter_1.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IServerStreamWriter_1.htm
new file mode 100644
index 0000000000..9ab9b0d00f
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_IServerStreamWriter_1.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IServerStreamWriter(T) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IServerStreamWriter%3CT%3E interface, methods" /><meta name="System.Keywords" content="IServerStreamWriter(Of T) interface, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.IServerStreamWriter`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_IServerStreamWriter_1" /><meta name="guid" content="Methods_T_Grpc_Core_IServerStreamWriter_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Properties_T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Properties" tocid="Properties_T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Methods" tocid="Methods_T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IServerStreamWriter<span id="LST555FD703_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST555FD703_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST555FD703_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST555FD703_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_IServerStreamWriter_1.htm">IServerStreamWriter<span id="LST555FD703_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST555FD703_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST555FD703_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST555FD703_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm">WriteAsync</a></td><td><div class="summary">
+ Writes a single asynchronously. Only one write can be pending at a time.
+ </div> (Inherited from <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST555FD703_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST555FD703_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST555FD703_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST555FD703_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Extension Methods</span></div><div id="ID1RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubextension.gif" alt="Public Extension Method" title="Public Extension Method" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm">WriteAllAsync<span id="LST555FD703_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST555FD703_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST555FD703_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST555FD703_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ </div> (Defined by <a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IServerStreamWriter_1.htm">IServerStreamWriter<span id="LST555FD703_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST555FD703_8?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST555FD703_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST555FD703_9?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_KeyCertificatePair.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_KeyCertificatePair.htm
new file mode 100644
index 0000000000..31988564f9
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_KeyCertificatePair.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>KeyCertificatePair Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="KeyCertificatePair class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.KeyCertificatePair" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_KeyCertificatePair" /><meta name="guid" content="Methods_T_Grpc_Core_KeyCertificatePair" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_KeyCertificatePair__ctor.htm" title="KeyCertificatePair Constructor " tocid="M_Grpc_Core_KeyCertificatePair__ctor">KeyCertificatePair Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Properties" tocid="Properties_T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Methods" tocid="Methods_T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">KeyCertificatePair Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Logging_ConsoleLogger.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Logging_ConsoleLogger.htm
new file mode 100644
index 0000000000..5ee03065d1
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Logging_ConsoleLogger.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ConsoleLogger class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Logging.ConsoleLogger" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="Methods_T_Grpc_Core_Logging_ConsoleLogger" /><meta name="guid" content="Methods_T_Grpc_Core_Logging_ConsoleLogger" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Debug.htm" title="Debug Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_Debug">Debug Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Error">Error Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm" title="ForType(T) Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_ForType__1">ForType(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Info.htm" title="Info Method " tocid="M_Grpc_Core_Logging_ConsoleLogger_Info">Info Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Warning">Warning Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Debug.htm">Debug</a></td><td><div class="summary">Logs a message with severity Debug.</div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm">Error(String, <span id="LSTF124503F_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF124503F_0?cpp=array&lt;");</script>Object<span id="LSTF124503F_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF124503F_1?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Error.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Error.htm">Error(Exception, String, <span id="LSTF124503F_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF124503F_2?cpp=array&lt;");</script>Object<span id="LSTF124503F_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF124503F_3?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Error.</div></td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm">ForType<span id="LSTF124503F_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF124503F_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LSTF124503F_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF124503F_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Returns a logger associated with the specified type.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Info.htm">Info</a></td><td><div class="summary">Logs a message with severity Info.</div></td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm">Warning(String, <span id="LSTF124503F_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF124503F_6?cpp=array&lt;");</script>Object<span id="LSTF124503F_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF124503F_7?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Warning.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Warning.htm">Warning(Exception, String, <span id="LSTF124503F_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF124503F_8?cpp=array&lt;");</script>Object<span id="LSTF124503F_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF124503F_9?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Warning.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Logging_ILogger.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Logging_ILogger.htm
new file mode 100644
index 0000000000..0f4357be40
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Logging_ILogger.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ILogger interface, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Logging.ILogger" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="Methods_T_Grpc_Core_Logging_ILogger" /><meta name="guid" content="Methods_T_Grpc_Core_Logging_ILogger" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Debug.htm" title="Debug Method " tocid="M_Grpc_Core_Logging_ILogger_Debug">Debug Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ILogger_Error">Error Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_ForType__1.htm" title="ForType(T) Method " tocid="M_Grpc_Core_Logging_ILogger_ForType__1">ForType(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Info.htm" title="Info Method " tocid="M_Grpc_Core_Logging_ILogger_Info">Info Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ILogger_Warning">Warning Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Logging_ILogger.htm">ILogger</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Debug.htm">Debug</a></td><td><div class="summary">Logs a message with severity Debug.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Error_1.htm">Error(String, <span id="LSTE3256261_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE3256261_0?cpp=array&lt;");</script>Object<span id="LSTE3256261_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE3256261_1?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Error.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Error.htm">Error(Exception, String, <span id="LSTE3256261_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE3256261_2?cpp=array&lt;");</script>Object<span id="LSTE3256261_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE3256261_3?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Error.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_ForType__1.htm">ForType<span id="LSTE3256261_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE3256261_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LSTE3256261_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE3256261_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">Returns a logger associated with the specified type.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Info.htm">Info</a></td><td><div class="summary">Logs a message with severity Info.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Warning_1.htm">Warning(String, <span id="LSTE3256261_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE3256261_6?cpp=array&lt;");</script>Object<span id="LSTE3256261_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE3256261_7?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Warning.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Warning.htm">Warning(Exception, String, <span id="LSTE3256261_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE3256261_8?cpp=array&lt;");</script>Object<span id="LSTE3256261_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE3256261_9?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Warning.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Marshaller_1.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Marshaller_1.htm
new file mode 100644
index 0000000000..127f58079d
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Marshaller_1.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshaller(T) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Marshaller%3CT%3E structure, methods" /><meta name="System.Keywords" content="Marshaller(Of T) structure, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Marshaller`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Marshaller_1" /><meta name="guid" content="Methods_T_Grpc_Core_Marshaller_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Marshaller_1__ctor.htm" title="Marshaller(T) Constructor " tocid="M_Grpc_Core_Marshaller_1__ctor">Marshaller(T) Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Properties" tocid="Properties_T_Grpc_Core_Marshaller_1">Marshaller(T) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Methods" tocid="Methods_T_Grpc_Core_Marshaller_1">Marshaller(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshaller<span id="LST9643DA0B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9643DA0B_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST9643DA0B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9643DA0B_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Marshaller_1.htm">Marshaller<span id="LST9643DA0B_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9643DA0B_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9643DA0B_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9643DA0B_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2dts52z7" target="_blank">Equals</a></td><td><div class="summary">Indicates whether this instance and a specified object are equal.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/y3509fc2" target="_blank">GetHashCode</a></td><td><div class="summary">Returns the hash code for this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/wb77sz3h" target="_blank">ToString</a></td><td><div class="summary">Returns the fully qualified type name of this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Marshaller_1.htm">Marshaller<span id="LST9643DA0B_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9643DA0B_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9643DA0B_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9643DA0B_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Marshallers.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Marshallers.htm
new file mode 100644
index 0000000000..aa8491ca2f
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Marshallers.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshallers Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Marshallers class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Marshallers" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Marshallers" /><meta name="guid" content="Methods_T_Grpc_Core_Marshallers" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Marshallers.htm" title="Marshallers Methods" tocid="Methods_T_Grpc_Core_Marshallers">Marshallers Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Marshallers_Create__1.htm" title="Create(T) Method " tocid="M_Grpc_Core_Marshallers_Create__1">Create(T) Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshallers Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Marshallers.htm">Marshallers</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Marshallers_Create__1.htm">Create<span id="LSTE65BE31_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE65BE31_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LSTE65BE31_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE65BE31_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Creates a marshaller from specified serializer and deserializer.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Marshallers.htm">Marshallers Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Metadata.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Metadata.htm
new file mode 100644
index 0000000000..aacbe035f7
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Metadata.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Metadata class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Metadata" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Metadata" /><meta name="guid" content="Methods_T_Grpc_Core_Metadata" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Clear.htm" title="Clear Method " tocid="M_Grpc_Core_Metadata_Clear">Clear Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Contains.htm" title="Contains Method " tocid="M_Grpc_Core_Metadata_Contains">Contains Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_CopyTo.htm" title="CopyTo Method " tocid="M_Grpc_Core_Metadata_CopyTo">CopyTo Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Metadata_GetEnumerator">GetEnumerator Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_IndexOf.htm" title="IndexOf Method " tocid="M_Grpc_Core_Metadata_IndexOf">IndexOf Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Insert.htm" title="Insert Method " tocid="M_Grpc_Core_Metadata_Insert">Insert Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Remove.htm" title="Remove Method " tocid="M_Grpc_Core_Metadata_Remove">Remove Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_RemoveAt.htm" title="RemoveAt Method " tocid="M_Grpc_Core_Metadata_RemoveAt">RemoveAt Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Metadata.htm">Metadata</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Add.htm">Add(Metadata<span id="LSTEBEE00C8_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEBEE00C8_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry)</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Add_1.htm">Add(String, <span id="LSTEBEE00C8_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEBEE00C8_1?cpp=array&lt;");</script>Byte<span id="LSTEBEE00C8_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEBEE00C8_2?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Add_2.htm">Add(String, String)</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Clear.htm">Clear</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Contains.htm">Contains</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_CopyTo.htm">CopyTo</a></td><td /></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_GetEnumerator.htm">GetEnumerator</a></td><td /></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_IndexOf.htm">IndexOf</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Insert.htm">Insert</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Remove.htm">Remove</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_RemoveAt.htm">RemoveAt</a></td><td /></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Metadata_Entry.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Metadata_Entry.htm
new file mode 100644
index 0000000000..44e0cd1fa0
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Metadata_Entry.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Entry Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Entry structure, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Metadata.Entry" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Metadata_Entry" /><meta name="guid" content="Methods_T_Grpc_Core_Metadata_Entry" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata_Entry.htm" title="Entry Methods" tocid="Methods_T_Grpc_Core_Metadata_Entry">Entry Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Entry_ToString.htm" title="ToString Method " tocid="M_Grpc_Core_Metadata_Entry_ToString">ToString Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Entry Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST12C96E1E_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST12C96E1E_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2dts52z7" target="_blank">Equals</a></td><td><div class="summary">Indicates whether this instance and a specified object are equal.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/y3509fc2" target="_blank">GetHashCode</a></td><td><div class="summary">Returns the hash code for this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Entry_ToString.htm">ToString</a></td><td><div class="summary">
+ Returns a <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a> that represents the current <a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST12C96E1E_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST12C96E1E_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a>.
+ </div> (Overrides <a href="http://msdn2.microsoft.com/en-us/library/wb77sz3h" target="_blank">ValueType<span id="LST12C96E1E_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST12C96E1E_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ToString<span id="LST12C96E1E_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST12C96E1E_3?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST12C96E1E_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST12C96E1E_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Method_2.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Method_2.htm
new file mode 100644
index 0000000000..b4b0b5cc63
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Method_2.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Method(TRequest, TResponse) Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E class, methods" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse) class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Method`2" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Method_2" /><meta name="guid" content="Methods_T_Grpc_Core_Method_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Method_2__ctor.htm" title="Method(TRequest, TResponse) Constructor " tocid="M_Grpc_Core_Method_2__ctor">Method(TRequest, TResponse) Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Method<span id="LSTCE77B052_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCE77B052_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTCE77B052_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCE77B052_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Method_2.htm">Method<span id="LSTCE77B052_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCE77B052_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTCE77B052_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCE77B052_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Method_2.htm">Method<span id="LSTCE77B052_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCE77B052_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTCE77B052_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCE77B052_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_RpcException.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_RpcException.htm
new file mode 100644
index 0000000000..83c86a8206
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_RpcException.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>RpcException Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RpcException class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.RpcException" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_RpcException" /><meta name="guid" content="Methods_T_Grpc_Core_RpcException" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_RpcException__ctor.htm" title="RpcException Constructor " tocid="Overload_Grpc_Core_RpcException__ctor">RpcException Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_RpcException.htm" title="RpcException Properties" tocid="Properties_T_Grpc_Core_RpcException">RpcException Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_RpcException.htm" title="RpcException Methods" tocid="Methods_T_Grpc_Core_RpcException">RpcException Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Events_T_Grpc_Core_RpcException.htm" title="RpcException Events" tocid="Events_T_Grpc_Core_RpcException">RpcException Events</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">RpcException Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_RpcException.htm">RpcException</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/49kcee3b" target="_blank">GetBaseException</a></td><td><div class="summary">When overridden in a derived class, returns the <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a> that is the root cause of one or more subsequent exceptions.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/fwb1489e" target="_blank">GetObjectData</a></td><td><div class="summary">When overridden in a derived class, sets the <a href="http://msdn2.microsoft.com/en-us/library/a9b6042e" target="_blank">SerializationInfo</a> with information about the exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/44zb316t" target="_blank">GetType</a></td><td><div class="summary">Gets the runtime type of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/es4y6f7e" target="_blank">ToString</a></td><td><div class="summary">Creates and returns a string representation of the current exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_RpcException.htm">RpcException Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server.htm
new file mode 100644
index 0000000000..bf2e344c91
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Server class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Server" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Server" /><meta name="guid" content="Methods_T_Grpc_Core_Server" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server.htm" title="Server Methods" tocid="Methods_T_Grpc_Core_Server">Server Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_KillAsync.htm" title="KillAsync Method " tocid="M_Grpc_Core_Server_KillAsync">KillAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ShutdownAsync.htm" title="ShutdownAsync Method " tocid="M_Grpc_Core_Server_ShutdownAsync">ShutdownAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_Start.htm" title="Start Method " tocid="M_Grpc_Core_Server_Start">Start Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Server.htm">Server</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_KillAsync.htm">KillAsync</a></td><td><div class="summary">
+ Requests server shutdown while cancelling all the in-progress calls.
+ The returned task finishes when shutdown procedure is complete.
+ </div></td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ShutdownAsync.htm">ShutdownAsync</a></td><td><div class="summary">
+ Requests server shutdown and when there are no more calls being serviced,
+ cleans up used resources. The returned task finishes when shutdown procedure
+ is complete.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_Start.htm">Start</a></td><td><div class="summary">
+ Starts the server.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server.htm">Server Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerCallContext.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerCallContext.htm
new file mode 100644
index 0000000000..a55e4815e5
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerCallContext.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerCallContext class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.ServerCallContext" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_ServerCallContext" /><meta name="guid" content="Methods_T_Grpc_Core_ServerCallContext" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Methods" tocid="Methods_T_Grpc_Core_ServerCallContext">ServerCallContext Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm" title="CreatePropagationToken Method " tocid="M_Grpc_Core_ServerCallContext_CreatePropagationToken">CreatePropagationToken Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm" title="WriteResponseHeadersAsync Method " tocid="M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync">WriteResponseHeadersAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm">CreatePropagationToken</a></td><td><div class="summary">
+ Creates a propagation token to be used to propagate call context to a child call.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm">WriteResponseHeadersAsync</a></td><td><div class="summary">
+ Asynchronously sends response headers for the current call to the client. This method may only be invoked once for each call and needs to be invoked
+ before any response messages are written. Writing the first response message implicitly sends empty response headers if <span class="code">WriteResponseHeadersAsync</span> haven't
+ been called yet.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerCredentials.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerCredentials.htm
new file mode 100644
index 0000000000..c603f7c234
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerCredentials.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCredentials Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerCredentials class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.ServerCredentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_ServerCredentials" /><meta name="guid" content="Methods_T_Grpc_Core_ServerCredentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerCredentials__ctor.htm" title="ServerCredentials Constructor " tocid="M_Grpc_Core_ServerCredentials__ctor">ServerCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Properties" tocid="Properties_T_Grpc_Core_ServerCredentials">ServerCredentials Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Methods" tocid="Methods_T_Grpc_Core_ServerCredentials">ServerCredentials Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCredentials Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ServerCredentials.htm">ServerCredentials</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCredentials.htm">ServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerPort.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerPort.htm
new file mode 100644
index 0000000000..87d83868f7
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerPort.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPort Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerPort class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.ServerPort" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_ServerPort" /><meta name="guid" content="Methods_T_Grpc_Core_ServerPort" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerPort__ctor.htm" title="ServerPort Constructor " tocid="M_Grpc_Core_ServerPort__ctor">ServerPort Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerPort.htm" title="ServerPort Properties" tocid="Properties_T_Grpc_Core_ServerPort">ServerPort Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ServerPort.htm" title="ServerPort Methods" tocid="Methods_T_Grpc_Core_ServerPort">ServerPort Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ServerPort.htm" title="ServerPort Fields" tocid="Fields_T_Grpc_Core_ServerPort">ServerPort Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPort Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ServerPort.htm">ServerPort</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerPort.htm">ServerPort Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerServiceDefinition.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerServiceDefinition.htm
new file mode 100644
index 0000000000..11b1491871
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerServiceDefinition.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerServiceDefinition Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerServiceDefinition class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.ServerServiceDefinition" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_ServerServiceDefinition" /><meta name="guid" content="Methods_T_Grpc_Core_ServerServiceDefinition" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm" title="CreateBuilder Method " tocid="M_Grpc_Core_ServerServiceDefinition_CreateBuilder">CreateBuilder Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerServiceDefinition Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ServerServiceDefinition.htm">ServerServiceDefinition</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm">CreateBuilder</a></td><td><div class="summary">
+ Creates a new builder object for <span class="code">ServerServiceDefinition</span>.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerServiceDefinition.htm">ServerServiceDefinition Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm
new file mode 100644
index 0000000000..dccc51fe17
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Builder Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Builder class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.ServerServiceDefinition.Builder" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_ServerServiceDefinition_Builder" /><meta name="guid" content="Methods_T_Grpc_Core_ServerServiceDefinition_Builder" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="Builder Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition_Builder">Builder Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm" title="AddMethod Method " tocid="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod">AddMethod Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm" title="Build Method " tocid="M_Grpc_Core_ServerServiceDefinition_Builder_Build">Build Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Builder Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LSTBC1182BB_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm">AddMethod<span id="LSTBC1182BB_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LSTBC1182BB_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, ClientStreamingServerMethod<span id="LSTBC1182BB_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_5?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_6?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a client streaming method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm">AddMethod<span id="LSTBC1182BB_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_7?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_8?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LSTBC1182BB_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_9?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_10?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, DuplexStreamingServerMethod<span id="LSTBC1182BB_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_11?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_12?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a bidirectional streaming method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm">AddMethod<span id="LSTBC1182BB_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_13?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_14?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LSTBC1182BB_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_15?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_16?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, ServerStreamingServerMethod<span id="LSTBC1182BB_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_17?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_18?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a server streaming method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm">AddMethod<span id="LSTBC1182BB_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_19?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_20"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_20?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LSTBC1182BB_21"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_21?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_22"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_22?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, UnaryServerMethod<span id="LSTBC1182BB_23"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_23?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTBC1182BB_24"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_24?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a single request - single response method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm">Build</a></td><td><div class="summary">
+ Creates an immutable <span class="code">ServerServiceDefinition</span> from this builder.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LSTBC1182BB_25"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBC1182BB_25?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server_ServerPortCollection.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server_ServerPortCollection.htm
new file mode 100644
index 0000000000..b8e44358fb
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server_ServerPortCollection.htm
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPortCollection Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerPortCollection class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Server.ServerPortCollection" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Server_ServerPortCollection" /><meta name="guid" content="Methods_T_Grpc_Core_Server_ServerPortCollection" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server_ServerPortCollection.htm" title="ServerPortCollection Methods" tocid="Methods_T_Grpc_Core_Server_ServerPortCollection">ServerPortCollection Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Server_ServerPortCollection_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Server_ServerPortCollection_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Server_ServerPortCollection_GetEnumerator">GetEnumerator Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPortCollection Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Server_ServerPortCollection.htm">Server<span id="LSTBAF264D0_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBAF264D0_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServerPortCollection_Add.htm">Add(ServerPort)</a></td><td><div class="summary">
+ Adds a new port on which server should listen.
+ Only call this before Start().
+ <h4 class="subHeading">Return Value</h4>Type: <br />The port on which server will be listening.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServerPortCollection_Add_1.htm">Add(String, Int32, ServerCredentials)</a></td><td><div class="summary">
+ Adds a new port on which server should listen.
+ <h4 class="subHeading">Return Value</h4>Type: <br />The port on which server will be listening.</div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm">GetEnumerator</a></td><td><div class="summary">
+ Gets enumerator for this collection.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server_ServerPortCollection.htm">Server<span id="LSTBAF264D0_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBAF264D0_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm
new file mode 100644
index 0000000000..08c940b831
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServiceDefinitionCollection Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServiceDefinitionCollection class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Server.ServiceDefinitionCollection" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Server_ServiceDefinitionCollection" /><meta name="guid" content="Methods_T_Grpc_Core_Server_ServiceDefinitionCollection" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="ServiceDefinitionCollection Methods" tocid="Methods_T_Grpc_Core_Server_ServiceDefinitionCollection">ServiceDefinitionCollection Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm" title="Add Method " tocid="M_Grpc_Core_Server_ServiceDefinitionCollection_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm" title="GetEnumerator Method " tocid="M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator">GetEnumerator Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServiceDefinitionCollection Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm">Server<span id="LSTCF6FB296_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCF6FB296_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm">Add</a></td><td><div class="summary">
+ Adds a service definition to the server. This is how you register
+ handlers for a service with the server. Only call this before Start().
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm">GetEnumerator</a></td><td><div class="summary">
+ Gets enumerator for this collection.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm">Server<span id="LSTCF6FB296_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCF6FB296_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_SslCredentials.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_SslCredentials.htm
new file mode 100644
index 0000000000..b4ef394fbe
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_SslCredentials.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslCredentials Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SslCredentials class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.SslCredentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_SslCredentials" /><meta name="guid" content="Methods_T_Grpc_Core_SslCredentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslCredentials__ctor.htm" title="SslCredentials Constructor " tocid="Overload_Grpc_Core_SslCredentials__ctor">SslCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslCredentials.htm" title="SslCredentials Properties" tocid="Properties_T_Grpc_Core_SslCredentials">SslCredentials Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_SslCredentials.htm" title="SslCredentials Methods" tocid="Methods_T_Grpc_Core_SslCredentials">SslCredentials Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslCredentials Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_SslCredentials.htm">SslCredentials</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslCredentials.htm">SslCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_SslServerCredentials.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_SslServerCredentials.htm
new file mode 100644
index 0000000000..cbe8f3e41f
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_SslServerCredentials.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslServerCredentials Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SslServerCredentials class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.SslServerCredentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_SslServerCredentials" /><meta name="guid" content="Methods_T_Grpc_Core_SslServerCredentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslServerCredentials__ctor.htm" title="SslServerCredentials Constructor " tocid="Overload_Grpc_Core_SslServerCredentials__ctor">SslServerCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Properties" tocid="Properties_T_Grpc_Core_SslServerCredentials">SslServerCredentials Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Methods" tocid="Methods_T_Grpc_Core_SslServerCredentials">SslServerCredentials Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslServerCredentials Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Status.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Status.htm
new file mode 100644
index 0000000000..8a477adba0
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Status.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Status Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Status structure, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Status" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_Status" /><meta name="guid" content="Methods_T_Grpc_Core_Status" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Status.htm" title="Status Methods" tocid="Methods_T_Grpc_Core_Status">Status Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Status_ToString.htm" title="ToString Method " tocid="M_Grpc_Core_Status_ToString">ToString Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Status Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Status.htm">Status</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2dts52z7" target="_blank">Equals</a></td><td><div class="summary">Indicates whether this instance and a specified object are equal.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/y3509fc2" target="_blank">GetHashCode</a></td><td><div class="summary">Returns the hash code for this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Status_ToString.htm">ToString</a></td><td><div class="summary">
+ Returns a <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a> that represents the current <a href="T_Grpc_Core_Status.htm">Status</a>.
+ </div> (Overrides <a href="http://msdn2.microsoft.com/en-us/library/wb77sz3h" target="_blank">ValueType<span id="LST11F02AB9_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST11F02AB9_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ToString<span id="LST11F02AB9_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST11F02AB9_1?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Status.htm">Status Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm
new file mode 100644
index 0000000000..bade3e79f2
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncStreamExtensions Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncStreamExtensions class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Utils.AsyncStreamExtensions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions" /><meta name="guid" content="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Class" tocid="T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Methods" tocid="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm" title="ForEachAsync(T) Method " tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1">ForEachAsync(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm" title="ToListAsync(T) Method " tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1">ToListAsync(T) Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm" title="WriteAllAsync Method " tocid="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync">WriteAllAsync Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncStreamExtensions Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm">ForEachAsync<span id="LST3F5F5CD6_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST3F5F5CD6_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Reads the entire stream and executes an async action for each element.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm">ToListAsync<span id="LST3F5F5CD6_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST3F5F5CD6_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Reads the entire stream and creates a list containing all the elements read.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm">WriteAllAsync<span id="LST3F5F5CD6_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST3F5F5CD6_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(IServerStreamWriter<span id="LST3F5F5CD6_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST3F5F5CD6_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, IEnumerable<span id="LST3F5F5CD6_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST3F5F5CD6_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm">WriteAllAsync<span id="LST3F5F5CD6_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_10?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST3F5F5CD6_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_11?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(IClientStreamWriter<span id="LST3F5F5CD6_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_12?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST3F5F5CD6_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_13?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, IEnumerable<span id="LST3F5F5CD6_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_14?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST3F5F5CD6_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3F5F5CD6_15?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, Boolean)</a></td><td><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ Completes the stream afterwards unless close = false.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm
new file mode 100644
index 0000000000..cf12124a28
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>BenchmarkUtil Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="BenchmarkUtil class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Utils.BenchmarkUtil" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="Methods_T_Grpc_Core_Utils_BenchmarkUtil" /><meta name="guid" content="Methods_T_Grpc_Core_Utils_BenchmarkUtil" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_BenchmarkUtil.htm" title="BenchmarkUtil Class" tocid="T_Grpc_Core_Utils_BenchmarkUtil">BenchmarkUtil Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm" title="BenchmarkUtil Methods" tocid="Methods_T_Grpc_Core_Utils_BenchmarkUtil">BenchmarkUtil Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm" title="RunBenchmark Method " tocid="M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark">RunBenchmark Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">BenchmarkUtil Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Utils_BenchmarkUtil.htm">BenchmarkUtil</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm">RunBenchmark</a></td><td><div class="summary">
+ Runs a simple benchmark preceded by warmup phase.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_BenchmarkUtil.htm">BenchmarkUtil Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_Preconditions.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_Preconditions.htm
new file mode 100644
index 0000000000..9b150653cb
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_Utils_Preconditions.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Preconditions class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.Utils.Preconditions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="Methods_T_Grpc_Core_Utils_Preconditions" /><meta name="guid" content="Methods_T_Grpc_Core_Utils_Preconditions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm" title="CheckArgument Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckArgument">CheckArgument Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm" title="CheckNotNull Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull">CheckNotNull Method </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckState.htm" title="CheckState Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckState">CheckState Method </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions Methods</td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckArgument.htm">CheckArgument(Boolean)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/3w1b3114" target="_blank">ArgumentException</a> if condition is false.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm">CheckArgument(Boolean, String)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/3w1b3114" target="_blank">ArgumentException</a> with given message if condition is false.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm">CheckNotNull<span id="LST65D0D273_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST65D0D273_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST65D0D273_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST65D0D273_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(T)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/27426hcy" target="_blank">ArgumentNullException</a> if reference is null.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm">CheckNotNull<span id="LST65D0D273_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST65D0D273_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST65D0D273_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST65D0D273_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(T, String)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/27426hcy" target="_blank">ArgumentNullException</a> if reference is null.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckState.htm">CheckState(Boolean)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/2asft85a" target="_blank">InvalidOperationException</a> if condition is false.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckState_1.htm">CheckState(Boolean, String)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/2asft85a" target="_blank">InvalidOperationException</a> with given message if condition is false.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Methods_T_Grpc_Core_WriteOptions.htm b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_WriteOptions.htm
new file mode 100644
index 0000000000..abfae7f92a
--- /dev/null
+++ b/doc/ref/csharp/html/html/Methods_T_Grpc_Core_WriteOptions.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>WriteOptions Methods</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteOptions class, methods" /><meta name="Microsoft.Help.Id" content="Methods.T:Grpc.Core.WriteOptions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Methods_T_Grpc_Core_WriteOptions" /><meta name="guid" content="Methods_T_Grpc_Core_WriteOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_WriteOptions__ctor.htm" title="WriteOptions Constructor " tocid="M_Grpc_Core_WriteOptions__ctor">WriteOptions Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Properties" tocid="Properties_T_Grpc_Core_WriteOptions">WriteOptions Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Methods" tocid="Methods_T_Grpc_Core_WriteOptions">WriteOptions Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Fields" tocid="Fields_T_Grpc_Core_WriteOptions">WriteOptions Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">WriteOptions Methods</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_WriteOptions.htm">WriteOptions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_WriteOptions.htm">WriteOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/N_Grpc_Auth.htm b/doc/ref/csharp/html/html/N_Grpc_Auth.htm
new file mode 100644
index 0000000000..2b80dc68bd
--- /dev/null
+++ b/doc/ref/csharp/html/html/N_Grpc_Auth.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Grpc.Auth Namespace</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Grpc.Auth namespace" /><meta name="Microsoft.Help.F1" content="Grpc.Auth" /><meta name="Microsoft.Help.Id" content="N:Grpc.Auth" /><meta name="Description" content="Provides OAuth2 based authentication for gRPC. Grpc.Auth currently consists of a set of very lightweight wrappers and uses C# Google.Apis.Auth library." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Auth" /><meta name="file" content="N_Grpc_Auth" /><meta name="guid" content="N_Grpc_Auth" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Auth.htm" title="Grpc.Auth" tocid="N_Grpc_Auth">Grpc.Auth</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Auth_AuthInterceptors.htm" title="AuthInterceptors Class" tocid="T_Grpc_Auth_AuthInterceptors">AuthInterceptors Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Grpc.Auth Namespace</td></tr></table><span class="introStyle"></span><div class="summary">Provides OAuth2 based authentication for gRPC. <span class="code">Grpc.Auth</span> currently consists of a set of very lightweight wrappers and uses C# <a href="https://www.nuget.org/packages/Google.Apis.Auth/">Google.Apis.Auth</a> library.</div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Classes</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="typeList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Class</th><th>Description</th></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Auth_AuthInterceptors.htm">AuthInterceptors</a></td><td><div class="summary">
+ Factory methods to create authorization interceptors. Interceptors created can be registered with gRPC client classes (autogenerated client stubs that
+ inherit from <a href="T_Grpc_Core_ClientBase.htm">ClientBase</a>).
+ </div></td></tr></table></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/N_Grpc_Core.htm b/doc/ref/csharp/html/html/N_Grpc_Core.htm
new file mode 100644
index 0000000000..83d06a4951
--- /dev/null
+++ b/doc/ref/csharp/html/html/N_Grpc_Core.htm
@@ -0,0 +1,133 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Grpc.Core Namespace</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Grpc.Core namespace" /><meta name="Microsoft.Help.F1" content="Grpc.Core" /><meta name="Microsoft.Help.Id" content="N:Grpc.Core" /><meta name="Description" content="Main namespace for gRPC C# functionality. Contains concepts representing both client side and server side gRPC logic." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="N_Grpc_Core" /><meta name="guid" content="N_Grpc_Core" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Grpc.Core Namespace</td></tr></table><span class="introStyle"></span><div class="summary">Main namespace for gRPC C# functionality. Contains concepts representing both client side and server side gRPC logic.
+
+</div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Classes</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="typeList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Class</th><th>Description</th></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LST9697633_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_0?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9697633_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_1?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Return type for client streaming calls.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LST9697633_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9697633_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Return type for bidirectional streaming calls.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall<span id="LST9697633_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST9697633_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Return type for server streaming calls.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LST9697633_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST9697633_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Return type for single request - single response call.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Calls.htm">Calls</a></td><td><div class="summary">
+ Helper methods for generated clients to make RPC calls.
+ Most users will use this class only indirectly and will be
+ making calls using client object generated from protocol
+ buffer definition files.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Channel.htm">Channel</a></td><td><div class="summary">
+ Represents a gRPC channel. Channels are an abstraction of long-lived connections to remote servers.
+ 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.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption</a></td><td><div class="summary">
+ Channel option specified when creating a channel.
+ Corresponds to grpc_channel_args from grpc/grpc.h.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_ChannelOptions.htm">ChannelOptions</a></td><td><div class="summary">
+ Defines names of supported channel options.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_ClientBase.htm">ClientBase</a></td><td><div class="summary">
+ Base class for client-side stubs.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions</a></td><td><div class="summary">
+ Options for <a href="T_Grpc_Core_ContextPropagationToken.htm">ContextPropagationToken</a>.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_ContextPropagationToken.htm">ContextPropagationToken</a></td><td><div class="summary">
+ Token for propagating context of server side handlers to child calls.
+ In situations when a backend is making calls to another backend,
+ it makes sense to propagate properties like deadline and cancellation
+ token of the server call to the child call.
+ The gRPC native layer provides some other contexts (like tracing context) that
+ are not accessible to explicitly C# layer, but this token still allows propagating them.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Credentials.htm">Credentials</a></td><td><div class="summary">
+ Client-side credentials. Used for creation of a secure channel.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_GrpcEnvironment.htm">GrpcEnvironment</a></td><td><div class="summary">
+ Encapsulates initialization and shutdown of gRPC library.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair</a></td><td><div class="summary">
+ Key certificate pair (in PEM encoding).
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Marshallers.htm">Marshallers</a></td><td><div class="summary">
+ Utilities for creating marshallers.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Metadata.htm">Metadata</a></td><td><div class="summary">
+ A collection of metadata entries that can be exchanged during a call.
+ gRPC supports these types of metadata:
+ <ul><li><strong>Request headers</strong> - are sent by the client at the beginning of a remote call before any request messages are sent.</li><li><strong>Response headers</strong> - are sent by the server at the beginning of a remote call handler before any response messages are sent.</li><li><strong>Response trailers</strong> - are sent by the server at the end of a remote call along with resulting call status.</li></ul></div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Method_2.htm">Method<span id="LST9697633_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_8?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9697633_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_9?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ A description of a remote method.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_RpcException.htm">RpcException</a></td><td><div class="summary">
+ Thrown when remote procedure call fails. Every <span class="code">RpcException</span> is associated with a resulting <a href="P_Grpc_Core_RpcException_Status.htm">Status</a> of the call.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Server.htm">Server</a></td><td><div class="summary">
+ gRPC server. A single server can server arbitrary number of services and can listen on more than one ports.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Server_ServerPortCollection.htm">Server<span id="LST9697633_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection</a></td><td><div class="summary">
+ Collection of server ports.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm">Server<span id="LST9697633_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection</a></td><td><div class="summary">
+ Collection of service definitions.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext</a></td><td><div class="summary">
+ Context for a server-side call.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_ServerCredentials.htm">ServerCredentials</a></td><td><div class="summary">
+ Server side credentials.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_ServerPort.htm">ServerPort</a></td><td><div class="summary">
+ A port exposed by a server.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_ServerServiceDefinition.htm">ServerServiceDefinition</a></td><td><div class="summary">
+ Mapping of method names to server call handlers.
+ Normally, the <span class="code">ServerServiceDefinition</span> objects will be created by the <span class="code">BindService</span> factory method
+ that is part of the autogenerated code for a protocol buffers service definition.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LST9697633_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_12?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</a></td><td><div class="summary">
+ Builder class for <a href="T_Grpc_Core_ServerServiceDefinition.htm">ServerServiceDefinition</a>.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_SslCredentials.htm">SslCredentials</a></td><td><div class="summary">
+ Client-side SSL credentials.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials</a></td><td><div class="summary">
+ Server-side SSL credentials.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_VersionInfo.htm">VersionInfo</a></td><td><div class="summary">
+ Provides info about current version of gRPC.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Options for write operations.
+ </div></td></tr></table></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Structures</span></div><div id="ID1RBSection" class="collapsibleSection"><table id="typeList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Structure</th><th>Description</th></tr><tr data="structure; public"><td><img src="../icons/pubstructure.gif" alt="Public structure" title="Public structure" /></td><td><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST9697633_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_13?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9697633_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_14?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Details about a client-side call to be invoked.
+ </div></td></tr><tr data="structure; public"><td><img src="../icons/pubstructure.gif" alt="Public structure" title="Public structure" /></td><td><a href="T_Grpc_Core_CallOptions.htm">CallOptions</a></td><td><div class="summary">
+ Options for calls made by client.
+ </div></td></tr><tr data="structure; public"><td><img src="../icons/pubstructure.gif" alt="Public structure" title="Public structure" /></td><td><a href="T_Grpc_Core_Marshaller_1.htm">Marshaller<span id="LST9697633_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_15?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9697633_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_16?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Encapsulates the logic for serializing and deserializing messages.
+ </div></td></tr><tr data="structure; public"><td><img src="../icons/pubstructure.gif" alt="Public structure" title="Public structure" /></td><td><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST9697633_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_17?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a></td><td><div class="summary">
+ Metadata entry
+ </div></td></tr><tr data="structure; public"><td><img src="../icons/pubstructure.gif" alt="Public structure" title="Public structure" /></td><td><a href="T_Grpc_Core_Status.htm">Status</a></td><td><div class="summary">
+ Represents RPC result, which consists of <a href="P_Grpc_Core_Status_StatusCode.htm">StatusCode</a> and an optional detail string.
+ </div></td></tr></table></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Interfaces</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="typeList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Interface</th><th>Description</th></tr><tr data="interface; public"><td><img src="../icons/pubinterface.gif" alt="Public interface" title="Public interface" /></td><td><a href="T_Grpc_Core_IAsyncStreamReader_1.htm">IAsyncStreamReader<span id="LST9697633_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_18?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9697633_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_19?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ A stream of messages to be read.
+ </div></td></tr><tr data="interface; public"><td><img src="../icons/pubinterface.gif" alt="Public interface" title="Public interface" /></td><td><a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST9697633_20"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_20?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9697633_21"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_21?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ A writable stream of messages.
+ </div></td></tr><tr data="interface; public"><td><img src="../icons/pubinterface.gif" alt="Public interface" title="Public interface" /></td><td><a href="T_Grpc_Core_IClientStreamWriter_1.htm">IClientStreamWriter<span id="LST9697633_22"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_22?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9697633_23"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_23?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Client-side writable stream of messages with Close capability.
+ </div></td></tr><tr data="interface; public"><td><img src="../icons/pubinterface.gif" alt="Public interface" title="Public interface" /></td><td><a href="T_Grpc_Core_IHasWriteOptions.htm">IHasWriteOptions</a></td><td><div class="summary">
+ Allows sharing write options between ServerCallContext and other objects.
+ </div></td></tr><tr data="interface; public"><td><img src="../icons/pubinterface.gif" alt="Public interface" title="Public interface" /></td><td><a href="T_Grpc_Core_IMethod.htm">IMethod</a></td><td><div class="summary">
+ A non-generic representation of a remote method.
+ </div></td></tr><tr data="interface; public"><td><img src="../icons/pubinterface.gif" alt="Public interface" title="Public interface" /></td><td><a href="T_Grpc_Core_IServerStreamWriter_1.htm">IServerStreamWriter<span id="LST9697633_24"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_24?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST9697633_25"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_25?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ A writable stream of messages that is used in server-side handlers.
+ </div></td></tr></table></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Delegates</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="typeList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Delegate</th><th>Description</th></tr><tr data="delegate; public"><td><img src="../icons/pubdelegate.gif" alt="Public delegate" title="Public delegate" /></td><td><a href="T_Grpc_Core_ClientStreamingServerMethod_2.htm">ClientStreamingServerMethod<span id="LST9697633_26"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_26?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9697633_27"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_27?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Server-side handler for client streaming call.
+ </div></td></tr><tr data="delegate; public"><td><img src="../icons/pubdelegate.gif" alt="Public delegate" title="Public delegate" /></td><td><a href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm">DuplexStreamingServerMethod<span id="LST9697633_28"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_28?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9697633_29"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_29?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Server-side handler for bidi streaming call.
+ </div></td></tr><tr data="delegate; public"><td><img src="../icons/pubdelegate.gif" alt="Public delegate" title="Public delegate" /></td><td><a href="T_Grpc_Core_HeaderInterceptor.htm">HeaderInterceptor</a></td><td><div class="summary">
+ Interceptor for call headers.
+ </div></td></tr><tr data="delegate; public"><td><img src="../icons/pubdelegate.gif" alt="Public delegate" title="Public delegate" /></td><td><a href="T_Grpc_Core_ServerStreamingServerMethod_2.htm">ServerStreamingServerMethod<span id="LST9697633_30"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_30?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9697633_31"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_31?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Server-side handler for server streaming call.
+ </div></td></tr><tr data="delegate; public"><td><img src="../icons/pubdelegate.gif" alt="Public delegate" title="Public delegate" /></td><td><a href="T_Grpc_Core_UnaryServerMethod_2.htm">UnaryServerMethod<span id="LST9697633_32"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_32?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9697633_33"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_33?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Server-side handler for unary call.
+ </div></td></tr></table></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Enumerations</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="typeList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Enumeration</th><th>Description</th></tr><tr data="enumeration; public"><td><img src="../icons/pubenumeration.gif" alt="Public enumeration" title="Public enumeration" /></td><td><a href="T_Grpc_Core_ChannelOption_OptionType.htm">ChannelOption<span id="LST9697633_34"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9697633_34?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>OptionType</a></td><td><div class="summary">
+ Type of <span class="code">ChannelOption</span>.
+ </div></td></tr><tr data="enumeration; public"><td><img src="../icons/pubenumeration.gif" alt="Public enumeration" title="Public enumeration" /></td><td><a href="T_Grpc_Core_ChannelState.htm">ChannelState</a></td><td><div class="summary">
+ Connectivity state of a channel.
+ Based on grpc_connectivity_state from grpc/grpc.h
+ </div></td></tr><tr data="enumeration; public"><td><img src="../icons/pubenumeration.gif" alt="Public enumeration" title="Public enumeration" /></td><td><a href="T_Grpc_Core_CompressionLevel.htm">CompressionLevel</a></td><td><div class="summary">
+ Compression level based on grpc_compression_level from grpc/compression.h
+ </div></td></tr><tr data="enumeration; public"><td><img src="../icons/pubenumeration.gif" alt="Public enumeration" title="Public enumeration" /></td><td><a href="T_Grpc_Core_MethodType.htm">MethodType</a></td><td><div class="summary">
+ Method types supported by gRPC.
+ </div></td></tr><tr data="enumeration; public"><td><img src="../icons/pubenumeration.gif" alt="Public enumeration" title="Public enumeration" /></td><td><a href="T_Grpc_Core_StatusCode.htm">StatusCode</a></td><td><div class="summary">
+ Result of a remote procedure call.
+ Based on grpc_status_code from grpc/status.h
+ </div></td></tr><tr data="enumeration; public"><td><img src="../icons/pubenumeration.gif" alt="Public enumeration" title="Public enumeration" /></td><td><a href="T_Grpc_Core_WriteFlags.htm">WriteFlags</a></td><td><div class="summary">
+ Flags for write operations.
+ </div></td></tr></table></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><span class="nolink">[Grpc.Core.Channel]</span></div><div class="seeAlsoStyle"><span class="nolink">[Grpc.Core.Server]</span></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/N_Grpc_Core_Logging.htm b/doc/ref/csharp/html/html/N_Grpc_Core_Logging.htm
new file mode 100644
index 0000000000..e0f8f6fae6
--- /dev/null
+++ b/doc/ref/csharp/html/html/N_Grpc_Core_Logging.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Grpc.Core.Logging Namespace</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Grpc.Core.Logging namespace" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging" /><meta name="Microsoft.Help.Id" content="N:Grpc.Core.Logging" /><meta name="Description" content="Provides functionality to redirect gRPC logs to application-specified destination." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="N_Grpc_Core_Logging" /><meta name="guid" content="N_Grpc_Core_Logging" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Grpc.Core.Logging Namespace</td></tr></table><span class="introStyle"></span><div class="summary">Provides functionality to redirect gRPC logs to application-specified destination.</div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Classes</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="typeList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Class</th><th>Description</th></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger</a></td><td><div class="summary">Logger that logs to System.Console.</div></td></tr></table></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Interfaces</span></div><div id="ID1RBSection" class="collapsibleSection"><table id="typeList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Interface</th><th>Description</th></tr><tr data="interface; public"><td><img src="../icons/pubinterface.gif" alt="Public interface" title="Public interface" /></td><td><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger</a></td><td><div class="summary">For logging messages.</div></td></tr></table></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/N_Grpc_Core_Utils.htm b/doc/ref/csharp/html/html/N_Grpc_Core_Utils.htm
new file mode 100644
index 0000000000..07574fcfa8
--- /dev/null
+++ b/doc/ref/csharp/html/html/N_Grpc_Core_Utils.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Grpc.Core.Utils Namespace</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Grpc.Core.Utils namespace" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils" /><meta name="Microsoft.Help.Id" content="N:Grpc.Core.Utils" /><meta name="Description" content="Various utilities for gRPC C#." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="N_Grpc_Core_Utils" /><meta name="guid" content="N_Grpc_Core_Utils" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Class" tocid="T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_BenchmarkUtil.htm" title="BenchmarkUtil Class" tocid="T_Grpc_Core_Utils_BenchmarkUtil">BenchmarkUtil Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Grpc.Core.Utils Namespace</td></tr></table><span class="introStyle"></span><div class="summary">Various utilities for gRPC C#.</div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Classes</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="typeList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Class</th><th>Description</th></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions</a></td><td><div class="summary">
+ Extension methods that simplify work with gRPC streaming calls.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Utils_BenchmarkUtil.htm">BenchmarkUtil</a></td><td><div class="summary">
+ Utility methods to run microbenchmarks.
+ </div></td></tr><tr data="class; public"><td><img src="../icons/pubclass.gif" alt="Public class" title="Public class" /></td><td><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions</a></td><td><div class="summary">
+ Utility methods to simplify checking preconditions in the code.
+ </div></td></tr></table></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm
new file mode 100644
index 0000000000..bdfed5182c
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse) Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E structure, constructor" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse) structure, constructor" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E.CallInvocationDetails constructor" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse).CallInvocationDetails constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.CallInvocationDetails" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.CallInvocationDetails`2.#ctor" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Overload_Grpc_Core_CallInvocationDetails_2__ctor" /><meta name="guid" content="Overload_Grpc_Core_CallInvocationDetails_2__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor " tocid="Overload_Grpc_Core_CallInvocationDetails_2__ctor">CallInvocationDetails(TRequest, TResponse) Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor_1">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)" tocid="M_Grpc_Core_CallInvocationDetails_2__ctor_2">CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LSTA61218D2_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTA61218D2_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Constructor </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallInvocationDetails_2__ctor.htm">CallInvocationDetails<span id="LSTA61218D2_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA61218D2_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script>(Channel, Method<span id="LSTA61218D2_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTA61218D2_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, CallOptions)</a></td><td><div class="summary">
+ Initializes a new instance of the <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LSTA61218D2_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA61218D2_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> struct.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm">CallInvocationDetails<span id="LSTA61218D2_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_8?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA61218D2_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_9?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script>(Channel, Method<span id="LSTA61218D2_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_10?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTA61218D2_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_11?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, String, CallOptions)</a></td><td><div class="summary">
+ Initializes a new instance of the <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LSTA61218D2_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_12?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA61218D2_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_13?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> struct.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm">CallInvocationDetails<span id="LSTA61218D2_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_14?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA61218D2_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_15?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script>(Channel, String, String, Marshaller<span id="LSTA61218D2_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_16?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest<span id="LSTA61218D2_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_17?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, Marshaller<span id="LSTA61218D2_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_18?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TResponse<span id="LSTA61218D2_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_19?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, CallOptions)</a></td><td><div class="summary">
+ Initializes a new instance of the <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LSTA61218D2_20"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_20?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA61218D2_21"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_21?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> struct.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LSTA61218D2_22"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_22?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA61218D2_23"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA61218D2_23?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_ChannelOption__ctor.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_ChannelOption__ctor.htm
new file mode 100644
index 0000000000..f9d3b53755
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_ChannelOption__ctor.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ChannelOption class, constructor" /><meta name="System.Keywords" content="ChannelOption.ChannelOption constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.ChannelOption" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.ChannelOption.#ctor" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Overload_Grpc_Core_ChannelOption__ctor" /><meta name="guid" content="Overload_Grpc_Core_ChannelOption__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ChannelOption__ctor.htm" title="ChannelOption Constructor " tocid="Overload_Grpc_Core_ChannelOption__ctor">ChannelOption Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ChannelOption__ctor.htm" title="ChannelOption Constructor (String, Int32)" tocid="M_Grpc_Core_ChannelOption__ctor">ChannelOption Constructor (String, Int32)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ChannelOption__ctor_1.htm" title="ChannelOption Constructor (String, String)" tocid="M_Grpc_Core_ChannelOption__ctor_1">ChannelOption Constructor (String, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption Constructor </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ChannelOption__ctor.htm">ChannelOption(String, Int32)</a></td><td><div class="summary">
+ Creates a channel option with an integer value.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ChannelOption__ctor_1.htm">ChannelOption(String, String)</a></td><td><div class="summary">
+ Creates a channel option with a string value.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Channel__ctor.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Channel__ctor.htm
new file mode 100644
index 0000000000..ba465a1a91
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Channel__ctor.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Channel class, constructor" /><meta name="System.Keywords" content="Channel.Channel constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.Channel" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Channel.#ctor" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Overload_Grpc_Core_Channel__ctor" /><meta name="guid" content="Overload_Grpc_Core_Channel__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Channel__ctor.htm" title="Channel Constructor " tocid="Overload_Grpc_Core_Channel__ctor">Channel Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel__ctor.htm" title="Channel Constructor (String, Credentials, IEnumerable(ChannelOption))" tocid="M_Grpc_Core_Channel__ctor">Channel Constructor (String, Credentials, IEnumerable(ChannelOption))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Channel__ctor_1.htm" title="Channel Constructor (String, Int32, Credentials, IEnumerable(ChannelOption))" tocid="M_Grpc_Core_Channel__ctor_1">Channel Constructor (String, Int32, Credentials, IEnumerable(ChannelOption))</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel Constructor </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Channel__ctor.htm">Channel(String, Credentials, IEnumerable<span id="LSTF16262A3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF16262A3_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>ChannelOption<span id="LSTF16262A3_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF16262A3_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Creates a channel that connects to a specific host.
+ Port will default to 80 for an unsecure channel and to 443 for a secure channel.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Channel__ctor_1.htm">Channel(String, Int32, Credentials, IEnumerable<span id="LSTF16262A3_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF16262A3_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>ChannelOption<span id="LSTF16262A3_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF16262A3_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Creates a channel that connects to a specific host and port.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm
new file mode 100644
index 0000000000..534abce9e1
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger.Error Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Error method" /><meta name="System.Keywords" content="ConsoleLogger.Error method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ConsoleLogger.Error" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Logging.ConsoleLogger.Error" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="Overload_Grpc_Core_Logging_ConsoleLogger_Error" /><meta name="guid" content="Overload_Grpc_Core_Logging_ConsoleLogger_Error" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Error">Error Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm" title="Error Method (String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Error_1">Error Method (String, Object[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Error.htm" title="Error Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Error">Error Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger<span id="LST2B8A68E7_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2B8A68E7_0?cpp=::|nu=.");</script>Error Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm">Error(String, <span id="LST2B8A68E7_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2B8A68E7_1?cpp=array&lt;");</script>Object<span id="LST2B8A68E7_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2B8A68E7_2?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Error.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Error.htm">Error(Exception, String, <span id="LST2B8A68E7_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2B8A68E7_3?cpp=array&lt;");</script>Object<span id="LST2B8A68E7_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2B8A68E7_4?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Error.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm
new file mode 100644
index 0000000000..463eff0486
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger.Warning Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Warning method" /><meta name="System.Keywords" content="ConsoleLogger.Warning method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ConsoleLogger.Warning" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Logging.ConsoleLogger.Warning" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="Overload_Grpc_Core_Logging_ConsoleLogger_Warning" /><meta name="guid" content="Overload_Grpc_Core_Logging_ConsoleLogger_Warning" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ConsoleLogger_Warning">Warning Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm" title="Warning Method (String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Warning_1">Warning Method (String, Object[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger_Warning.htm" title="Warning Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ConsoleLogger_Warning">Warning Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger<span id="LSTC7B3B9A1_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC7B3B9A1_0?cpp=::|nu=.");</script>Warning Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm">Warning(String, <span id="LSTC7B3B9A1_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC7B3B9A1_1?cpp=array&lt;");</script>Object<span id="LSTC7B3B9A1_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC7B3B9A1_2?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Warning.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Warning.htm">Warning(Exception, String, <span id="LSTC7B3B9A1_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC7B3B9A1_3?cpp=array&lt;");</script>Object<span id="LSTC7B3B9A1_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC7B3B9A1_4?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Warning.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ConsoleLogger.htm">ConsoleLogger Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ILogger_Error.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ILogger_Error.htm
new file mode 100644
index 0000000000..38204e336d
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ILogger_Error.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger.Error Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Error method" /><meta name="System.Keywords" content="ILogger.Error method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ILogger.Error" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Logging.ILogger.Error" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="Overload_Grpc_Core_Logging_ILogger_Error" /><meta name="guid" content="Overload_Grpc_Core_Logging_ILogger_Error" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Error.htm" title="Error Method " tocid="Overload_Grpc_Core_Logging_ILogger_Error">Error Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Error_1.htm" title="Error Method (String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Error_1">Error Method (String, Object[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Error.htm" title="Error Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Error">Error Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger<span id="LST85C5CE55_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST85C5CE55_0?cpp=::|nu=.");</script>Error Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Error_1.htm">Error(String, <span id="LST85C5CE55_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST85C5CE55_1?cpp=array&lt;");</script>Object<span id="LST85C5CE55_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST85C5CE55_2?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Error.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Error.htm">Error(Exception, String, <span id="LST85C5CE55_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST85C5CE55_3?cpp=array&lt;");</script>Object<span id="LST85C5CE55_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST85C5CE55_4?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Error.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ILogger_Warning.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ILogger_Warning.htm
new file mode 100644
index 0000000000..bfb1543a0a
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Logging_ILogger_Warning.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger.Warning Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Warning method" /><meta name="System.Keywords" content="ILogger.Warning method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ILogger.Warning" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Logging.ILogger.Warning" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="Overload_Grpc_Core_Logging_ILogger_Warning" /><meta name="guid" content="Overload_Grpc_Core_Logging_ILogger_Warning" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Logging_ILogger_Warning.htm" title="Warning Method " tocid="Overload_Grpc_Core_Logging_ILogger_Warning">Warning Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Warning_1.htm" title="Warning Method (String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Warning_1">Warning Method (String, Object[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ILogger_Warning.htm" title="Warning Method (Exception, String, Object[])" tocid="M_Grpc_Core_Logging_ILogger_Warning">Warning Method (Exception, String, Object[])</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger<span id="LSTB9831373_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB9831373_0?cpp=::|nu=.");</script>Warning Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Warning_1.htm">Warning(String, <span id="LSTB9831373_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB9831373_1?cpp=array&lt;");</script>Object<span id="LSTB9831373_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB9831373_2?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Warning.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Warning.htm">Warning(Exception, String, <span id="LSTB9831373_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB9831373_3?cpp=array&lt;");</script>Object<span id="LSTB9831373_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB9831373_4?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Warning.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Logging_ILogger.htm">ILogger Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Metadata_Add.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Metadata_Add.htm
new file mode 100644
index 0000000000..58693f58dd
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Metadata_Add.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Add Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Add method" /><meta name="System.Keywords" content="Metadata.Add method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Add" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Metadata.Add" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Overload_Grpc_Core_Metadata_Add" /><meta name="guid" content="Overload_Grpc_Core_Metadata_Add" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Metadata_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add.htm" title="Add Method (Metadata.Entry)" tocid="M_Grpc_Core_Metadata_Add">Add Method (Metadata.Entry)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add_1.htm" title="Add Method (String, Byte[])" tocid="M_Grpc_Core_Metadata_Add_1">Add Method (String, Byte[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Add_2.htm" title="Add Method (String, String)" tocid="M_Grpc_Core_Metadata_Add_2">Add Method (String, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTDDACDB19_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDDACDB19_0?cpp=::|nu=.");</script>Add Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Add.htm">Add(Metadata<span id="LSTDDACDB19_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDDACDB19_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry)</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Add_1.htm">Add(String, <span id="LSTDDACDB19_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDDACDB19_2?cpp=array&lt;");</script>Byte<span id="LSTDDACDB19_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDDACDB19_3?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Add_2.htm">Add(String, String)</a></td><td /></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Metadata_Entry__ctor.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Metadata_Entry__ctor.htm
new file mode 100644
index 0000000000..7355bb6cd1
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Metadata_Entry__ctor.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Entry Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Metadata.Entry structure, constructor" /><meta name="System.Keywords" content="Metadata.Entry.Entry constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.Entry" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Metadata.Entry.#ctor" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Overload_Grpc_Core_Metadata_Entry__ctor" /><meta name="guid" content="Overload_Grpc_Core_Metadata_Entry__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Entry__ctor.htm" title="Entry Constructor " tocid="Overload_Grpc_Core_Metadata_Entry__ctor">Entry Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Entry__ctor.htm" title="Metadata.Entry Constructor (String, Byte[])" tocid="M_Grpc_Core_Metadata_Entry__ctor">Metadata.Entry Constructor (String, Byte[])</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata_Entry__ctor_1.htm" title="Metadata.Entry Constructor (String, String)" tocid="M_Grpc_Core_Metadata_Entry__ctor_1">Metadata.Entry Constructor (String, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Entry Constructor </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Entry__ctor.htm">Metadata<span id="LST3A8BC45F_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3A8BC45F_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry(String, <span id="LST3A8BC45F_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3A8BC45F_1?cpp=array&lt;");</script>Byte<span id="LST3A8BC45F_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3A8BC45F_2?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">
+ Initializes a new instance of the <a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST3A8BC45F_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3A8BC45F_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a> struct with a binary value.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Entry__ctor_1.htm">Metadata<span id="LST3A8BC45F_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3A8BC45F_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry(String, String)</a></td><td><div class="summary">
+ Initializes a new instance of the <a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST3A8BC45F_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3A8BC45F_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a> struct holding an ASCII value.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST3A8BC45F_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3A8BC45F_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_RpcException__ctor.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_RpcException__ctor.htm
new file mode 100644
index 0000000000..aa64c87501
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_RpcException__ctor.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>RpcException Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RpcException class, constructor" /><meta name="System.Keywords" content="RpcException.RpcException constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.RpcException.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.RpcException.RpcException" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.RpcException.#ctor" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Overload_Grpc_Core_RpcException__ctor" /><meta name="guid" content="Overload_Grpc_Core_RpcException__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_RpcException__ctor.htm" title="RpcException Constructor " tocid="Overload_Grpc_Core_RpcException__ctor">RpcException Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_RpcException__ctor.htm" title="RpcException Constructor (Status)" tocid="M_Grpc_Core_RpcException__ctor">RpcException Constructor (Status)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_RpcException__ctor_1.htm" title="RpcException Constructor (Status, String)" tocid="M_Grpc_Core_RpcException__ctor_1">RpcException Constructor (Status, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">RpcException Constructor </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_RpcException__ctor.htm">RpcException(Status)</a></td><td><div class="summary">
+ Creates a new <span class="code">RpcException</span> associated with given status.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_RpcException__ctor_1.htm">RpcException(Status, String)</a></td><td><div class="summary">
+ Creates a new <span class="code">RpcException</span> associated with given status and message.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_RpcException.htm">RpcException Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm
new file mode 100644
index 0000000000..534bdc6001
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Builder.AddMethod Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AddMethod method" /><meta name="System.Keywords" content="ServerServiceDefinition.Builder.AddMethod method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerServiceDefinition.Builder.AddMethod" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerServiceDefinition.Builder.AddMethod``2" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.ServerServiceDefinition.Builder.AddMethod" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod" /><meta name="guid" content="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="Builder Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition_Builder">Builder Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm" title="AddMethod Method " tocid="Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod">AddMethod Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm" title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))" tocid="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3">AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Builder<span id="LST6DB3BCAD_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_0?cpp=::|nu=.");</script>AddMethod Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm">AddMethod<span id="LST6DB3BCAD_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LST6DB3BCAD_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, ClientStreamingServerMethod<span id="LST6DB3BCAD_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_5?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_6?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a client streaming method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm">AddMethod<span id="LST6DB3BCAD_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_7?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_8?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LST6DB3BCAD_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_9?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_10?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, DuplexStreamingServerMethod<span id="LST6DB3BCAD_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_11?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_12?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a bidirectional streaming method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm">AddMethod<span id="LST6DB3BCAD_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_13?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_14?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LST6DB3BCAD_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_15?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_16?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, ServerStreamingServerMethod<span id="LST6DB3BCAD_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_17?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_18?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a server streaming method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm">AddMethod<span id="LST6DB3BCAD_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_19?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_20"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_20?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LST6DB3BCAD_21"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_21?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_22"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_22?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, UnaryServerMethod<span id="LST6DB3BCAD_23"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_23?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST6DB3BCAD_24"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_24?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a single request - single response method.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerServiceDefinition_Builder.htm">ServerServiceDefinition<span id="LST6DB3BCAD_25"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6DB3BCAD_25?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Server_ServerPortCollection_Add.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Server_ServerPortCollection_Add.htm
new file mode 100644
index 0000000000..9e5a944189
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Server_ServerPortCollection_Add.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPortCollection.Add Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Add method" /><meta name="System.Keywords" content="Server.ServerPortCollection.Add method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.ServerPortCollection.Add" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Server.ServerPortCollection.Add" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Overload_Grpc_Core_Server_ServerPortCollection_Add" /><meta name="guid" content="Overload_Grpc_Core_Server_ServerPortCollection_Add" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server_ServerPortCollection.htm" title="ServerPortCollection Methods" tocid="Methods_T_Grpc_Core_Server_ServerPortCollection">ServerPortCollection Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Server_ServerPortCollection_Add.htm" title="Add Method " tocid="Overload_Grpc_Core_Server_ServerPortCollection_Add">Add Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServerPortCollection_Add.htm" title="Add Method (ServerPort)" tocid="M_Grpc_Core_Server_ServerPortCollection_Add">Add Method (ServerPort)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server_ServerPortCollection_Add_1.htm" title="Add Method (String, Int32, ServerCredentials)" tocid="M_Grpc_Core_Server_ServerPortCollection_Add_1">Add Method (String, Int32, ServerCredentials)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPortCollection<span id="LSTC57FAF81_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC57FAF81_0?cpp=::|nu=.");</script>Add Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServerPortCollection_Add.htm">Add(ServerPort)</a></td><td><div class="summary">
+ Adds a new port on which server should listen.
+ Only call this before Start().
+ <h4 class="subHeading">Return Value</h4>Type: <br />The port on which server will be listening.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServerPortCollection_Add_1.htm">Add(String, Int32, ServerCredentials)</a></td><td><div class="summary">
+ Adds a new port on which server should listen.
+ <h4 class="subHeading">Return Value</h4>Type: <br />The port on which server will be listening.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server_ServerPortCollection.htm">Server<span id="LSTC57FAF81_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC57FAF81_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_SslCredentials__ctor.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_SslCredentials__ctor.htm
new file mode 100644
index 0000000000..93219ea152
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_SslCredentials__ctor.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslCredentials Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SslCredentials class, constructor" /><meta name="System.Keywords" content="SslCredentials.SslCredentials constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslCredentials.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslCredentials.SslCredentials" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.SslCredentials.#ctor" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Overload_Grpc_Core_SslCredentials__ctor" /><meta name="guid" content="Overload_Grpc_Core_SslCredentials__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslCredentials__ctor.htm" title="SslCredentials Constructor " tocid="Overload_Grpc_Core_SslCredentials__ctor">SslCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor.htm" title="SslCredentials Constructor " tocid="M_Grpc_Core_SslCredentials__ctor">SslCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor_1.htm" title="SslCredentials Constructor (String)" tocid="M_Grpc_Core_SslCredentials__ctor_1">SslCredentials Constructor (String)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslCredentials__ctor_2.htm" title="SslCredentials Constructor (String, KeyCertificatePair)" tocid="M_Grpc_Core_SslCredentials__ctor_2">SslCredentials Constructor (String, KeyCertificatePair)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslCredentials Constructor </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_SslCredentials__ctor.htm">SslCredentials<span id="LSTC1C606C2_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC1C606C2_0?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a></td><td><div class="summary">
+ Creates client-side SSL credentials loaded from
+ disk file pointed to by the GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment variable.
+ If that fails, gets the roots certificates from a well known place on disk.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_SslCredentials__ctor_1.htm">SslCredentials(String)</a></td><td><div class="summary">
+ Creates client-side SSL credentials from
+ a string containing PEM encoded root certificates.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_SslCredentials__ctor_2.htm">SslCredentials(String, KeyCertificatePair)</a></td><td><div class="summary">
+ Creates client-side SSL credentials.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslCredentials.htm">SslCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_SslServerCredentials__ctor.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_SslServerCredentials__ctor.htm
new file mode 100644
index 0000000000..f8506d929d
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_SslServerCredentials__ctor.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslServerCredentials Constructor </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SslServerCredentials class, constructor" /><meta name="System.Keywords" content="SslServerCredentials.SslServerCredentials constructor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslServerCredentials.#ctor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslServerCredentials.SslServerCredentials" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.SslServerCredentials.#ctor" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Overload_Grpc_Core_SslServerCredentials__ctor" /><meta name="guid" content="Overload_Grpc_Core_SslServerCredentials__ctor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslServerCredentials__ctor.htm" title="SslServerCredentials Constructor " tocid="Overload_Grpc_Core_SslServerCredentials__ctor">SslServerCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslServerCredentials__ctor.htm" title="SslServerCredentials Constructor (IEnumerable(KeyCertificatePair))" tocid="M_Grpc_Core_SslServerCredentials__ctor">SslServerCredentials Constructor (IEnumerable(KeyCertificatePair))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_SslServerCredentials__ctor_1.htm" title="SslServerCredentials Constructor (IEnumerable(KeyCertificatePair), String, Boolean)" tocid="M_Grpc_Core_SslServerCredentials__ctor_1">SslServerCredentials Constructor (IEnumerable(KeyCertificatePair), String, Boolean)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslServerCredentials Constructor </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_SslServerCredentials__ctor.htm">SslServerCredentials(IEnumerable<span id="LST13CCA219_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13CCA219_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>KeyCertificatePair<span id="LST13CCA219_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13CCA219_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Creates server-side SSL credentials.
+ This constructor should be use if you do not wish to autheticate client
+ using client root certificates.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_SslServerCredentials__ctor_1.htm">SslServerCredentials(IEnumerable<span id="LST13CCA219_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13CCA219_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>KeyCertificatePair<span id="LST13CCA219_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13CCA219_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, String, Boolean)</a></td><td><div class="summary">
+ Creates server-side SSL credentials.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm
new file mode 100644
index 0000000000..af7b957887
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncStreamExtensions.WriteAllAsync Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteAllAsync method" /><meta name="System.Keywords" content="AsyncStreamExtensions.WriteAllAsync method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync``1" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Utils.AsyncStreamExtensions.WriteAllAsync" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync" /><meta name="guid" content="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Class" tocid="T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Methods" tocid="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm" title="WriteAllAsync Method " tocid="Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync">WriteAllAsync Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm" title="WriteAllAsync(T) Method (IServerStreamWriter(T), IEnumerable(T))" tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1">WriteAllAsync(T) Method (IServerStreamWriter(T), IEnumerable(T))</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm" title="WriteAllAsync(T) Method (IClientStreamWriter(T), IEnumerable(T), Boolean)" tocid="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1">WriteAllAsync(T) Method (IClientStreamWriter(T), IEnumerable(T), Boolean)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncStreamExtensions<span id="LST99B1CCC8_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_0?cpp=::|nu=.");</script>WriteAllAsync Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm">WriteAllAsync<span id="LST99B1CCC8_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST99B1CCC8_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(IServerStreamWriter<span id="LST99B1CCC8_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST99B1CCC8_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, IEnumerable<span id="LST99B1CCC8_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_5?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST99B1CCC8_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_6?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm">WriteAllAsync<span id="LST99B1CCC8_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_7?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST99B1CCC8_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_8?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(IClientStreamWriter<span id="LST99B1CCC8_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_9?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST99B1CCC8_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_10?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, IEnumerable<span id="LST99B1CCC8_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_11?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST99B1CCC8_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99B1CCC8_12?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, Boolean)</a></td><td><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ Completes the stream afterwards unless close = false.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm
new file mode 100644
index 0000000000..4b4a4afdf9
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions.CheckArgument Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CheckArgument method" /><meta name="System.Keywords" content="Preconditions.CheckArgument method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.Preconditions.CheckArgument" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Utils.Preconditions.CheckArgument" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="Overload_Grpc_Core_Utils_Preconditions_CheckArgument" /><meta name="guid" content="Overload_Grpc_Core_Utils_Preconditions_CheckArgument" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm" title="CheckArgument Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckArgument">CheckArgument Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckArgument.htm" title="CheckArgument Method (Boolean)" tocid="M_Grpc_Core_Utils_Preconditions_CheckArgument">CheckArgument Method (Boolean)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm" title="CheckArgument Method (Boolean, String)" tocid="M_Grpc_Core_Utils_Preconditions_CheckArgument_1">CheckArgument Method (Boolean, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions<span id="LSTBDFD9818_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBDFD9818_0?cpp=::|nu=.");</script>CheckArgument Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckArgument.htm">CheckArgument(Boolean)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/3w1b3114" target="_blank">ArgumentException</a> if condition is false.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm">CheckArgument(Boolean, String)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/3w1b3114" target="_blank">ArgumentException</a> with given message if condition is false.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm
new file mode 100644
index 0000000000..3d1638474d
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions.CheckNotNull Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CheckNotNull method" /><meta name="System.Keywords" content="Preconditions.CheckNotNull method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.Preconditions.CheckNotNull" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.Preconditions.CheckNotNull``1" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Utils.Preconditions.CheckNotNull" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull" /><meta name="guid" content="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm" title="CheckNotNull Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckNotNull">CheckNotNull Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm" title="CheckNotNull(T) Method (T)" tocid="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1">CheckNotNull(T) Method (T)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm" title="CheckNotNull(T) Method (T, String)" tocid="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1">CheckNotNull(T) Method (T, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions<span id="LST6FDE5657_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6FDE5657_0?cpp=::|nu=.");</script>CheckNotNull Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm">CheckNotNull<span id="LST6FDE5657_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6FDE5657_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST6FDE5657_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6FDE5657_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(T)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/27426hcy" target="_blank">ArgumentNullException</a> if reference is null.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm">CheckNotNull<span id="LST6FDE5657_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6FDE5657_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST6FDE5657_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST6FDE5657_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(T, String)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/27426hcy" target="_blank">ArgumentNullException</a> if reference is null.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckState.htm b/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckState.htm
new file mode 100644
index 0000000000..2e223aabd9
--- /dev/null
+++ b/doc/ref/csharp/html/html/Overload_Grpc_Core_Utils_Preconditions_CheckState.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions.CheckState Method </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CheckState method" /><meta name="System.Keywords" content="Preconditions.CheckState method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.Preconditions.CheckState" /><meta name="Microsoft.Help.Id" content="Overload:Grpc.Core.Utils.Preconditions.CheckState" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="Overload_Grpc_Core_Utils_Preconditions_CheckState" /><meta name="guid" content="Overload_Grpc_Core_Utils_Preconditions_CheckState" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Utils_Preconditions_CheckState.htm" title="CheckState Method " tocid="Overload_Grpc_Core_Utils_Preconditions_CheckState">CheckState Method </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckState.htm" title="CheckState Method (Boolean)" tocid="M_Grpc_Core_Utils_Preconditions_CheckState">CheckState Method (Boolean)</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Utils_Preconditions_CheckState_1.htm" title="CheckState Method (Boolean, String)" tocid="M_Grpc_Core_Utils_Preconditions_CheckState_1">CheckState Method (Boolean, String)</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions<span id="LSTC2A6C8E4_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2A6C8E4_0?cpp=::|nu=.");</script>CheckState Method </td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Overload List</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckState.htm">CheckState(Boolean)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/2asft85a" target="_blank">InvalidOperationException</a> if condition is false.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckState_1.htm">CheckState(Boolean, String)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/2asft85a" target="_blank">InvalidOperationException</a> with given message if condition is false.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Utils_Preconditions.htm">Preconditions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm
new file mode 100644
index 0000000000..de95638d56
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncClientStreamingCall(TRequest, TResponse).RequestStream Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RequestStream property" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E.RequestStream property" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse).RequestStream property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2.RequestStream" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2.get_RequestStream" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.AsyncClientStreamingCall`2.RequestStream" /><meta name="Description" content="Async stream to send streaming requests." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream" /><meta name="guid" content="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm" title="RequestStream Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream">RequestStream Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm" title="ResponseAsync Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync">ResponseAsync Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncClientStreamingCall<span id="LSTA32BC263_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA32BC263_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTA32BC263_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA32BC263_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTA32BC263_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA32BC263_2?cpp=::|nu=.");</script>RequestStream Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Async stream to send streaming requests.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">IClientStreamWriter</span>&lt;TRequest&gt; <span class="identifier">RequestStream</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">RequestStream</span> <span class="keyword">As</span> <span class="identifier">IClientStreamWriter</span>(<span class="keyword">Of</span> TRequest)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">IClientStreamWriter</span>&lt;TRequest&gt;^ <span class="identifier">RequestStream</span> {
+ <span class="identifier">IClientStreamWriter</span>&lt;TRequest&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">RequestStream</span> : <span class="identifier">IClientStreamWriter</span>&lt;'TRequest&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_IClientStreamWriter_1.htm">IClientStreamWriter</a><span id="LSTA32BC263_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA32BC263_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm"><span class="typeparameter">TRequest</span></a><span id="LSTA32BC263_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA32BC263_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LSTA32BC263_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA32BC263_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTA32BC263_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA32BC263_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm
new file mode 100644
index 0000000000..35acc657aa
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncClientStreamingCall(TRequest, TResponse).ResponseAsync Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseAsync property" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E.ResponseAsync property" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse).ResponseAsync property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2.ResponseAsync" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2.get_ResponseAsync" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.AsyncClientStreamingCall`2.ResponseAsync" /><meta name="Description" content="Asynchronous call result." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync" /><meta name="guid" content="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm" title="RequestStream Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream">RequestStream Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm" title="ResponseAsync Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync">ResponseAsync Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncClientStreamingCall<span id="LST10A751EB_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST10A751EB_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST10A751EB_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST10A751EB_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST10A751EB_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST10A751EB_2?cpp=::|nu=.");</script>ResponseAsync Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Asynchronous call result.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span>&lt;TResponse&gt; <span class="identifier">ResponseAsync</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseAsync</span> <span class="keyword">As</span> <span class="identifier">Task</span>(<span class="keyword">Of</span> TResponse)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Task</span>&lt;TResponse&gt;^ <span class="identifier">ResponseAsync</span> {
+ <span class="identifier">Task</span>&lt;TResponse&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseAsync</span> : <span class="identifier">Task</span>&lt;'TResponse&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd321424" target="_blank">Task</a><span id="LST10A751EB_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST10A751EB_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm"><span class="typeparameter">TResponse</span></a><span id="LST10A751EB_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST10A751EB_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LST10A751EB_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST10A751EB_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST10A751EB_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST10A751EB_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm
new file mode 100644
index 0000000000..78a07362f3
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncClientStreamingCall(TRequest, TResponse).ResponseHeadersAsync Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseHeadersAsync property" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E.ResponseHeadersAsync property" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse).ResponseHeadersAsync property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2.ResponseHeadersAsync" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2.get_ResponseHeadersAsync" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.AsyncClientStreamingCall`2.ResponseHeadersAsync" /><meta name="Description" content="Asynchronous access to response headers." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync" /><meta name="guid" content="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm" title="RequestStream Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream">RequestStream Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm" title="ResponseAsync Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync">ResponseAsync Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncClientStreamingCall<span id="LST5918A883_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5918A883_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST5918A883_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5918A883_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST5918A883_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5918A883_2?cpp=::|nu=.");</script>ResponseHeadersAsync Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Asynchronous access to response headers.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>&gt; <span class="identifier">ResponseHeadersAsync</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseHeadersAsync</span> <span class="keyword">As</span> <span class="identifier">Task</span>(<span class="keyword">Of</span> <span class="identifier">Metadata</span>)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>^&gt;^ <span class="identifier">ResponseHeadersAsync</span> {
+ <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>^&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseHeadersAsync</span> : <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd321424" target="_blank">Task</a><span id="LST5918A883_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5918A883_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Metadata.htm">Metadata</a><span id="LST5918A883_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5918A883_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LST5918A883_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5918A883_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST5918A883_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5918A883_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm
new file mode 100644
index 0000000000..7a79a06a9d
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncDuplexStreamingCall(TRequest, TResponse).RequestStream Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RequestStream property" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E.RequestStream property" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse).RequestStream property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncDuplexStreamingCall`2.RequestStream" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncDuplexStreamingCall`2.get_RequestStream" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.AsyncDuplexStreamingCall`2.RequestStream" /><meta name="Description" content="Async stream to send streaming requests." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream" /><meta name="guid" content="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm" title="RequestStream Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream">RequestStream Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm" title="ResponseStream Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream">ResponseStream Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncDuplexStreamingCall<span id="LST997F9BF6_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST997F9BF6_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST997F9BF6_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST997F9BF6_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST997F9BF6_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST997F9BF6_2?cpp=::|nu=.");</script>RequestStream Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Async stream to send streaming requests.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">IClientStreamWriter</span>&lt;TRequest&gt; <span class="identifier">RequestStream</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">RequestStream</span> <span class="keyword">As</span> <span class="identifier">IClientStreamWriter</span>(<span class="keyword">Of</span> TRequest)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">IClientStreamWriter</span>&lt;TRequest&gt;^ <span class="identifier">RequestStream</span> {
+ <span class="identifier">IClientStreamWriter</span>&lt;TRequest&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">RequestStream</span> : <span class="identifier">IClientStreamWriter</span>&lt;'TRequest&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_IClientStreamWriter_1.htm">IClientStreamWriter</a><span id="LST997F9BF6_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST997F9BF6_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm"><span class="typeparameter">TRequest</span></a><span id="LST997F9BF6_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST997F9BF6_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LST997F9BF6_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST997F9BF6_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST997F9BF6_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST997F9BF6_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm
new file mode 100644
index 0000000000..7c331475f0
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncDuplexStreamingCall(TRequest, TResponse).ResponseHeadersAsync Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseHeadersAsync property" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E.ResponseHeadersAsync property" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse).ResponseHeadersAsync property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncDuplexStreamingCall`2.ResponseHeadersAsync" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncDuplexStreamingCall`2.get_ResponseHeadersAsync" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.AsyncDuplexStreamingCall`2.ResponseHeadersAsync" /><meta name="Description" content="Asynchronous access to response headers." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync" /><meta name="guid" content="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm" title="RequestStream Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream">RequestStream Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm" title="ResponseStream Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream">ResponseStream Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncDuplexStreamingCall<span id="LSTEDB7E5F8_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEDB7E5F8_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTEDB7E5F8_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEDB7E5F8_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTEDB7E5F8_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEDB7E5F8_2?cpp=::|nu=.");</script>ResponseHeadersAsync Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Asynchronous access to response headers.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>&gt; <span class="identifier">ResponseHeadersAsync</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseHeadersAsync</span> <span class="keyword">As</span> <span class="identifier">Task</span>(<span class="keyword">Of</span> <span class="identifier">Metadata</span>)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>^&gt;^ <span class="identifier">ResponseHeadersAsync</span> {
+ <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>^&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseHeadersAsync</span> : <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd321424" target="_blank">Task</a><span id="LSTEDB7E5F8_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEDB7E5F8_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Metadata.htm">Metadata</a><span id="LSTEDB7E5F8_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEDB7E5F8_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LSTEDB7E5F8_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEDB7E5F8_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTEDB7E5F8_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEDB7E5F8_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm
new file mode 100644
index 0000000000..c5b298e025
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncDuplexStreamingCall(TRequest, TResponse).ResponseStream Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseStream property" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E.ResponseStream property" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse).ResponseStream property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncDuplexStreamingCall`2.ResponseStream" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncDuplexStreamingCall`2.get_ResponseStream" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.AsyncDuplexStreamingCall`2.ResponseStream" /><meta name="Description" content="Async stream to read streaming responses." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream" /><meta name="guid" content="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm" title="RequestStream Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream">RequestStream Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm" title="ResponseStream Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream">ResponseStream Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncDuplexStreamingCall<span id="LST178939A2_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST178939A2_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST178939A2_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST178939A2_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST178939A2_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST178939A2_2?cpp=::|nu=.");</script>ResponseStream Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Async stream to read streaming responses.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">IAsyncStreamReader</span>&lt;TResponse&gt; <span class="identifier">ResponseStream</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseStream</span> <span class="keyword">As</span> <span class="identifier">IAsyncStreamReader</span>(<span class="keyword">Of</span> TResponse)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">IAsyncStreamReader</span>&lt;TResponse&gt;^ <span class="identifier">ResponseStream</span> {
+ <span class="identifier">IAsyncStreamReader</span>&lt;TResponse&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseStream</span> : <span class="identifier">IAsyncStreamReader</span>&lt;'TResponse&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_IAsyncStreamReader_1.htm">IAsyncStreamReader</a><span id="LST178939A2_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST178939A2_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm"><span class="typeparameter">TResponse</span></a><span id="LST178939A2_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST178939A2_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LST178939A2_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST178939A2_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST178939A2_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST178939A2_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm
new file mode 100644
index 0000000000..5b1ab81753
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncServerStreamingCall(TResponse).ResponseHeadersAsync Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseHeadersAsync property" /><meta name="System.Keywords" content="AsyncServerStreamingCall%3CTResponse%3E.ResponseHeadersAsync property" /><meta name="System.Keywords" content="AsyncServerStreamingCall(Of TResponse).ResponseHeadersAsync property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncServerStreamingCall`1.ResponseHeadersAsync" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncServerStreamingCall`1.get_ResponseHeadersAsync" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.AsyncServerStreamingCall`1.ResponseHeadersAsync" /><meta name="Description" content="Asynchronous access to response headers." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync" /><meta name="guid" content="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm" title="ResponseStream Property " tocid="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream">ResponseStream Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncServerStreamingCall<span id="LST16DB19F2_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST16DB19F2_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LST16DB19F2_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST16DB19F2_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST16DB19F2_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST16DB19F2_2?cpp=::|nu=.");</script>ResponseHeadersAsync Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Asynchronous access to response headers.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>&gt; <span class="identifier">ResponseHeadersAsync</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseHeadersAsync</span> <span class="keyword">As</span> <span class="identifier">Task</span>(<span class="keyword">Of</span> <span class="identifier">Metadata</span>)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>^&gt;^ <span class="identifier">ResponseHeadersAsync</span> {
+ <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>^&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseHeadersAsync</span> : <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd321424" target="_blank">Task</a><span id="LST16DB19F2_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST16DB19F2_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Metadata.htm">Metadata</a><span id="LST16DB19F2_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST16DB19F2_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall<span id="LST16DB19F2_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST16DB19F2_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST16DB19F2_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST16DB19F2_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm
new file mode 100644
index 0000000000..d6124eff06
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncServerStreamingCall(TResponse).ResponseStream Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseStream property" /><meta name="System.Keywords" content="AsyncServerStreamingCall%3CTResponse%3E.ResponseStream property" /><meta name="System.Keywords" content="AsyncServerStreamingCall(Of TResponse).ResponseStream property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncServerStreamingCall`1.ResponseStream" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncServerStreamingCall`1.get_ResponseStream" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.AsyncServerStreamingCall`1.ResponseStream" /><meta name="Description" content="Async stream to read streaming responses." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream" /><meta name="guid" content="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm" title="ResponseStream Property " tocid="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream">ResponseStream Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncServerStreamingCall<span id="LSTE0341870_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE0341870_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LSTE0341870_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE0341870_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTE0341870_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE0341870_2?cpp=::|nu=.");</script>ResponseStream Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Async stream to read streaming responses.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">IAsyncStreamReader</span>&lt;TResponse&gt; <span class="identifier">ResponseStream</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseStream</span> <span class="keyword">As</span> <span class="identifier">IAsyncStreamReader</span>(<span class="keyword">Of</span> TResponse)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">IAsyncStreamReader</span>&lt;TResponse&gt;^ <span class="identifier">ResponseStream</span> {
+ <span class="identifier">IAsyncStreamReader</span>&lt;TResponse&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseStream</span> : <span class="identifier">IAsyncStreamReader</span>&lt;'TResponse&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_IAsyncStreamReader_1.htm">IAsyncStreamReader</a><span id="LSTE0341870_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE0341870_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm"><span class="typeparameter">TResponse</span></a><span id="LSTE0341870_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE0341870_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall<span id="LSTE0341870_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE0341870_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTE0341870_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE0341870_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm
new file mode 100644
index 0000000000..cefbf51be2
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncUnaryCall(TResponse).ResponseAsync Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseAsync property" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTResponse%3E.ResponseAsync property" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TResponse).ResponseAsync property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncUnaryCall`1.ResponseAsync" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncUnaryCall`1.get_ResponseAsync" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.AsyncUnaryCall`1.ResponseAsync" /><meta name="Description" content="Asynchronous call result." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync" /><meta name="guid" content="P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm" title="ResponseAsync Property " tocid="P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync">ResponseAsync Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncUnaryCall<span id="LSTDAE65B8A_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE65B8A_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LSTDAE65B8A_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE65B8A_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTDAE65B8A_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE65B8A_2?cpp=::|nu=.");</script>ResponseAsync Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Asynchronous call result.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span>&lt;TResponse&gt; <span class="identifier">ResponseAsync</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseAsync</span> <span class="keyword">As</span> <span class="identifier">Task</span>(<span class="keyword">Of</span> TResponse)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Task</span>&lt;TResponse&gt;^ <span class="identifier">ResponseAsync</span> {
+ <span class="identifier">Task</span>&lt;TResponse&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseAsync</span> : <span class="identifier">Task</span>&lt;'TResponse&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd321424" target="_blank">Task</a><span id="LSTDAE65B8A_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE65B8A_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_AsyncUnaryCall_1.htm"><span class="typeparameter">TResponse</span></a><span id="LSTDAE65B8A_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE65B8A_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LSTDAE65B8A_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE65B8A_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTDAE65B8A_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDAE65B8A_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm
new file mode 100644
index 0000000000..9e40fbf328
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncUnaryCall(TResponse).ResponseHeadersAsync Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseHeadersAsync property" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTResponse%3E.ResponseHeadersAsync property" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TResponse).ResponseHeadersAsync property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncUnaryCall`1.ResponseHeadersAsync" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncUnaryCall`1.get_ResponseHeadersAsync" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.AsyncUnaryCall`1.ResponseHeadersAsync" /><meta name="Description" content="Asynchronous access to response headers." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync" /><meta name="guid" content="P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm" title="ResponseAsync Property " tocid="P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync">ResponseAsync Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncUnaryCall<span id="LST2A3E0C80_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A3E0C80_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LST2A3E0C80_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A3E0C80_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST2A3E0C80_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A3E0C80_2?cpp=::|nu=.");</script>ResponseHeadersAsync Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Asynchronous access to response headers.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>&gt; <span class="identifier">ResponseHeadersAsync</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseHeadersAsync</span> <span class="keyword">As</span> <span class="identifier">Task</span>(<span class="keyword">Of</span> <span class="identifier">Metadata</span>)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>^&gt;^ <span class="identifier">ResponseHeadersAsync</span> {
+ <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>^&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseHeadersAsync</span> : <span class="identifier">Task</span>&lt;<span class="identifier">Metadata</span>&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd321424" target="_blank">Task</a><span id="LST2A3E0C80_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A3E0C80_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Metadata.htm">Metadata</a><span id="LST2A3E0C80_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A3E0C80_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LST2A3E0C80_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A3E0C80_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST2A3E0C80_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2A3E0C80_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Channel.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Channel.htm
new file mode 100644
index 0000000000..ada168e569
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Channel.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse).Channel Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Channel property" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E.Channel property" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse).Channel property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.Channel" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.get_Channel" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallInvocationDetails`2.Channel" /><meta name="Description" content="Get channel associated with this call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallInvocationDetails_2_Channel" /><meta name="guid" content="P_Grpc_Core_CallInvocationDetails_2_Channel" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Channel">Channel Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Host.htm" title="Host Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Method.htm" title="Method Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Options.htm" title="Options Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Options">Options Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller">ResponseMarshaller Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LST87651AEC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST87651AEC_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST87651AEC_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST87651AEC_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST87651AEC_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST87651AEC_2?cpp=::|nu=.");</script>Channel Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Get channel associated with this call.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Channel</span> <span class="identifier">Channel</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Channel</span> <span class="keyword">As</span> <span class="identifier">Channel</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Channel</span>^ <span class="identifier">Channel</span> {
+ <span class="identifier">Channel</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Channel</span> : <span class="identifier">Channel</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Channel.htm">Channel</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST87651AEC_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST87651AEC_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST87651AEC_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST87651AEC_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Host.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Host.htm
new file mode 100644
index 0000000000..2482b0c997
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Host.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse).Host Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Host property" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E.Host property" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse).Host property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.Host" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.get_Host" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallInvocationDetails`2.Host" /><meta name="Description" content="Get name of host." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallInvocationDetails_2_Host" /><meta name="guid" content="P_Grpc_Core_CallInvocationDetails_2_Host" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Channel">Channel Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Host.htm" title="Host Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Method.htm" title="Method Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Options.htm" title="Options Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Options">Options Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller">ResponseMarshaller Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LST4EBEFB2B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4EBEFB2B_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST4EBEFB2B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4EBEFB2B_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST4EBEFB2B_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4EBEFB2B_2?cpp=::|nu=.");</script>Host Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Get name of host.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Host</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Host</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Host</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Host</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST4EBEFB2B_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4EBEFB2B_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST4EBEFB2B_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4EBEFB2B_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Method.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Method.htm
new file mode 100644
index 0000000000..26913ed373
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Method.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse).Method Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Method property" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E.Method property" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse).Method property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.Method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.get_Method" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallInvocationDetails`2.Method" /><meta name="Description" content="Gets name of method to be called." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallInvocationDetails_2_Method" /><meta name="guid" content="P_Grpc_Core_CallInvocationDetails_2_Method" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Channel">Channel Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Host.htm" title="Host Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Host">Host Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Method.htm" title="Method Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Options.htm" title="Options Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Options">Options Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller">ResponseMarshaller Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LSTC988C3E4_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC988C3E4_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTC988C3E4_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC988C3E4_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTC988C3E4_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC988C3E4_2?cpp=::|nu=.");</script>Method Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets name of method to be called.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Method</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Method</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Method</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Method</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LSTC988C3E4_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC988C3E4_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC988C3E4_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC988C3E4_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Options.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Options.htm
new file mode 100644
index 0000000000..ddcf02baa4
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_Options.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse).Options Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Options property" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E.Options property" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse).Options property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.Options" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.get_Options" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallInvocationDetails`2.Options" /><meta name="Description" content="Gets the call options." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallInvocationDetails_2_Options" /><meta name="guid" content="P_Grpc_Core_CallInvocationDetails_2_Options" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Channel">Channel Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Host.htm" title="Host Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Method.htm" title="Method Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Method">Method Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Options.htm" title="Options Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Options">Options Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller">ResponseMarshaller Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LST1DD0B003_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1DD0B003_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST1DD0B003_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1DD0B003_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST1DD0B003_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1DD0B003_2?cpp=::|nu=.");</script>Options Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the call options.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CallOptions</span> <span class="identifier">Options</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Options</span> <span class="keyword">As</span> <span class="identifier">CallOptions</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">CallOptions</span> <span class="identifier">Options</span> {
+ <span class="identifier">CallOptions</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Options</span> : <span class="identifier">CallOptions</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST1DD0B003_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1DD0B003_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST1DD0B003_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1DD0B003_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm
new file mode 100644
index 0000000000..ecd5500821
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse).RequestMarshaller Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RequestMarshaller property" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E.RequestMarshaller property" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse).RequestMarshaller property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.RequestMarshaller" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.get_RequestMarshaller" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallInvocationDetails`2.RequestMarshaller" /><meta name="Description" content="Gets marshaller used to serialize requests." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller" /><meta name="guid" content="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Channel">Channel Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Host.htm" title="Host Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Method.htm" title="Method Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Options.htm" title="Options Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Options">Options Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller">ResponseMarshaller Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LST58489E69_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST58489E69_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST58489E69_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST58489E69_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST58489E69_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST58489E69_2?cpp=::|nu=.");</script>RequestMarshaller Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets marshaller used to serialize requests.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Marshaller</span>&lt;TRequest&gt; <span class="identifier">RequestMarshaller</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">RequestMarshaller</span> <span class="keyword">As</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> TRequest)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Marshaller</span>&lt;TRequest&gt; <span class="identifier">RequestMarshaller</span> {
+ <span class="identifier">Marshaller</span>&lt;TRequest&gt; <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">RequestMarshaller</span> : <span class="identifier">Marshaller</span>&lt;'TRequest&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Marshaller_1.htm">Marshaller</a><span id="LST58489E69_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST58489E69_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_CallInvocationDetails_2.htm"><span class="typeparameter">TRequest</span></a><span id="LST58489E69_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST58489E69_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST58489E69_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST58489E69_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST58489E69_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST58489E69_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm
new file mode 100644
index 0000000000..6b74eb825d
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse).ResponseMarshaller Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseMarshaller property" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E.ResponseMarshaller property" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse).ResponseMarshaller property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.ResponseMarshaller" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2.get_ResponseMarshaller" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallInvocationDetails`2.ResponseMarshaller" /><meta name="Description" content="Gets marshaller used to deserialized responses." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller" /><meta name="guid" content="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Channel">Channel Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Host.htm" title="Host Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Method.htm" title="Method Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Options.htm" title="Options Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Options">Options Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller">ResponseMarshaller Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LST9DBBB8FB_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9DBBB8FB_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST9DBBB8FB_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9DBBB8FB_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST9DBBB8FB_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9DBBB8FB_2?cpp=::|nu=.");</script>ResponseMarshaller Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets marshaller used to deserialized responses.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Marshaller</span>&lt;TResponse&gt; <span class="identifier">ResponseMarshaller</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseMarshaller</span> <span class="keyword">As</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> TResponse)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Marshaller</span>&lt;TResponse&gt; <span class="identifier">ResponseMarshaller</span> {
+ <span class="identifier">Marshaller</span>&lt;TResponse&gt; <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseMarshaller</span> : <span class="identifier">Marshaller</span>&lt;'TResponse&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Marshaller_1.htm">Marshaller</a><span id="LST9DBBB8FB_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9DBBB8FB_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_CallInvocationDetails_2.htm"><span class="typeparameter">TResponse</span></a><span id="LST9DBBB8FB_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9DBBB8FB_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LST9DBBB8FB_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9DBBB8FB_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9DBBB8FB_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9DBBB8FB_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_CancellationToken.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_CancellationToken.htm
new file mode 100644
index 0000000000..6aa8d3d3f6
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_CancellationToken.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions.CancellationToken Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CancellationToken property" /><meta name="System.Keywords" content="CallOptions.CancellationToken property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.CancellationToken" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.get_CancellationToken" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallOptions.CancellationToken" /><meta name="Description" content="Token that can be used for cancelling the call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallOptions_CancellationToken" /><meta name="guid" content="P_Grpc_Core_CallOptions_CancellationToken" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallOptions.htm" title="CallOptions Properties" tocid="Properties_T_Grpc_Core_CallOptions">CallOptions Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_CallOptions_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_CallOptions_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Headers.htm" title="Headers Property " tocid="P_Grpc_Core_CallOptions_Headers">Headers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_PropagationToken.htm" title="PropagationToken Property " tocid="P_Grpc_Core_CallOptions_PropagationToken">PropagationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_CallOptions_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions<span id="LST47F9ABE3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST47F9ABE3_0?cpp=::|nu=.");</script>CancellationToken Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Token that can be used for cancelling the call.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CancellationToken</span> <span class="identifier">CancellationToken</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">CancellationToken</span> <span class="keyword">As</span> <span class="identifier">CancellationToken</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">CancellationToken</span> <span class="identifier">CancellationToken</span> {
+ <span class="identifier">CancellationToken</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">CancellationToken</span> : <span class="identifier">CancellationToken</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd384802" target="_blank">CancellationToken</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_Deadline.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_Deadline.htm
new file mode 100644
index 0000000000..5581337213
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_Deadline.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions.Deadline Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Deadline property" /><meta name="System.Keywords" content="CallOptions.Deadline property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.Deadline" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.get_Deadline" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallOptions.Deadline" /><meta name="Description" content="Call deadline." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallOptions_Deadline" /><meta name="guid" content="P_Grpc_Core_CallOptions_Deadline" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallOptions.htm" title="CallOptions Properties" tocid="Properties_T_Grpc_Core_CallOptions">CallOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_CallOptions_CancellationToken">CancellationToken Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_CallOptions_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Headers.htm" title="Headers Property " tocid="P_Grpc_Core_CallOptions_Headers">Headers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_PropagationToken.htm" title="PropagationToken Property " tocid="P_Grpc_Core_CallOptions_PropagationToken">PropagationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_CallOptions_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions<span id="LSTC2776B71_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2776B71_0?cpp=::|nu=.");</script>Deadline Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Call deadline.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; <span class="identifier">Deadline</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Deadline</span> <span class="keyword">As</span> <span class="identifier">Nullable</span>(<span class="keyword">Of</span> <span class="identifier">DateTime</span>)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; <span class="identifier">Deadline</span> {
+ <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Deadline</span> : <span class="identifier">Nullable</span>&lt;<span class="identifier">DateTime</span>&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/b3h38hb0" target="_blank">Nullable</a><span id="LSTC2776B71_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2776B71_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="http://msdn2.microsoft.com/en-us/library/03ybds8y" target="_blank">DateTime</a><span id="LSTC2776B71_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2776B71_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_Headers.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_Headers.htm
new file mode 100644
index 0000000000..3637bd445f
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_Headers.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions.Headers Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Headers property" /><meta name="System.Keywords" content="CallOptions.Headers property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.Headers" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.get_Headers" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallOptions.Headers" /><meta name="Description" content="Headers to send at the beginning of the call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallOptions_Headers" /><meta name="guid" content="P_Grpc_Core_CallOptions_Headers" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallOptions.htm" title="CallOptions Properties" tocid="Properties_T_Grpc_Core_CallOptions">CallOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_CallOptions_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_CallOptions_Deadline">Deadline Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Headers.htm" title="Headers Property " tocid="P_Grpc_Core_CallOptions_Headers">Headers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_PropagationToken.htm" title="PropagationToken Property " tocid="P_Grpc_Core_CallOptions_PropagationToken">PropagationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_CallOptions_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions<span id="LSTD5D1C29F_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD5D1C29F_0?cpp=::|nu=.");</script>Headers Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Headers to send at the beginning of the call.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Metadata</span> <span class="identifier">Headers</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Headers</span> <span class="keyword">As</span> <span class="identifier">Metadata</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Metadata</span>^ <span class="identifier">Headers</span> {
+ <span class="identifier">Metadata</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Headers</span> : <span class="identifier">Metadata</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Metadata.htm">Metadata</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_PropagationToken.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_PropagationToken.htm
new file mode 100644
index 0000000000..6f3c6ab081
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_PropagationToken.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions.PropagationToken Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="PropagationToken property" /><meta name="System.Keywords" content="CallOptions.PropagationToken property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.PropagationToken" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.get_PropagationToken" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallOptions.PropagationToken" /><meta name="Description" content="Token for propagating parent call context." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallOptions_PropagationToken" /><meta name="guid" content="P_Grpc_Core_CallOptions_PropagationToken" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallOptions.htm" title="CallOptions Properties" tocid="Properties_T_Grpc_Core_CallOptions">CallOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_CallOptions_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_CallOptions_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Headers.htm" title="Headers Property " tocid="P_Grpc_Core_CallOptions_Headers">Headers Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_PropagationToken.htm" title="PropagationToken Property " tocid="P_Grpc_Core_CallOptions_PropagationToken">PropagationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_CallOptions_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions<span id="LST53ACD4AE_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST53ACD4AE_0?cpp=::|nu=.");</script>PropagationToken Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Token for propagating parent call context.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ContextPropagationToken</span> <span class="identifier">PropagationToken</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">PropagationToken</span> <span class="keyword">As</span> <span class="identifier">ContextPropagationToken</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">ContextPropagationToken</span>^ <span class="identifier">PropagationToken</span> {
+ <span class="identifier">ContextPropagationToken</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">PropagationToken</span> : <span class="identifier">ContextPropagationToken</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_ContextPropagationToken.htm">ContextPropagationToken</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_WriteOptions.htm b/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_WriteOptions.htm
new file mode 100644
index 0000000000..c95e3f6835
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_CallOptions_WriteOptions.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions.WriteOptions Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteOptions property" /><meta name="System.Keywords" content="CallOptions.WriteOptions property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.WriteOptions" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions.get_WriteOptions" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.CallOptions.WriteOptions" /><meta name="Description" content="Write options that will be used for this call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_CallOptions_WriteOptions" /><meta name="guid" content="P_Grpc_Core_CallOptions_WriteOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallOptions.htm" title="CallOptions Properties" tocid="Properties_T_Grpc_Core_CallOptions">CallOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_CallOptions_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_CallOptions_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Headers.htm" title="Headers Property " tocid="P_Grpc_Core_CallOptions_Headers">Headers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_PropagationToken.htm" title="PropagationToken Property " tocid="P_Grpc_Core_CallOptions_PropagationToken">PropagationToken Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_CallOptions_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions<span id="LSTA9E51D6_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA9E51D6_0?cpp=::|nu=.");</script>WriteOptions Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Write options that will be used for this call.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">WriteOptions</span> <span class="identifier">WriteOptions</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">WriteOptions</span> <span class="keyword">As</span> <span class="identifier">WriteOptions</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">WriteOptions</span>^ <span class="identifier">WriteOptions</span> {
+ <span class="identifier">WriteOptions</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">WriteOptions</span> : <span class="identifier">WriteOptions</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_WriteOptions.htm">WriteOptions</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_IntValue.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_IntValue.htm
new file mode 100644
index 0000000000..dc638c48ee
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_IntValue.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption.IntValue Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IntValue property" /><meta name="System.Keywords" content="ChannelOption.IntValue property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.IntValue" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.get_IntValue" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ChannelOption.IntValue" /><meta name="Description" content="Gets the integer value the ChannelOption." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ChannelOption_IntValue" /><meta name="guid" content="P_Grpc_Core_ChannelOption_IntValue" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ChannelOption.htm" title="ChannelOption Properties" tocid="Properties_T_Grpc_Core_ChannelOption">ChannelOption Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_IntValue.htm" title="IntValue Property " tocid="P_Grpc_Core_ChannelOption_IntValue">IntValue Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_Name.htm" title="Name Property " tocid="P_Grpc_Core_ChannelOption_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_StringValue.htm" title="StringValue Property " tocid="P_Grpc_Core_ChannelOption_StringValue">StringValue Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_Type.htm" title="Type Property " tocid="P_Grpc_Core_ChannelOption_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption<span id="LST18C163F5_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18C163F5_0?cpp=::|nu=.");</script>IntValue Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the integer value the <span class="code">ChannelOption</span>.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">int</span> <span class="identifier">IntValue</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">IntValue</span> <span class="keyword">As</span> <span class="identifier">Integer</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">int</span> <span class="identifier">IntValue</span> {
+ <span class="identifier">int</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">IntValue</span> : <span class="identifier">int</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_Name.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_Name.htm
new file mode 100644
index 0000000000..2115bbc7c4
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_Name.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption.Name Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Name property" /><meta name="System.Keywords" content="ChannelOption.Name property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.Name" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.get_Name" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ChannelOption.Name" /><meta name="Description" content="Gets the name of the ChannelOption." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ChannelOption_Name" /><meta name="guid" content="P_Grpc_Core_ChannelOption_Name" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ChannelOption.htm" title="ChannelOption Properties" tocid="Properties_T_Grpc_Core_ChannelOption">ChannelOption Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_IntValue.htm" title="IntValue Property " tocid="P_Grpc_Core_ChannelOption_IntValue">IntValue Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_Name.htm" title="Name Property " tocid="P_Grpc_Core_ChannelOption_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_StringValue.htm" title="StringValue Property " tocid="P_Grpc_Core_ChannelOption_StringValue">StringValue Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_Type.htm" title="Type Property " tocid="P_Grpc_Core_ChannelOption_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption<span id="LSTF14A504E_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF14A504E_0?cpp=::|nu=.");</script>Name Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the name of the <span class="code">ChannelOption</span>.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Name</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Name</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Name</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Name</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_StringValue.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_StringValue.htm
new file mode 100644
index 0000000000..35f2567c0b
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_StringValue.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption.StringValue Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="StringValue property" /><meta name="System.Keywords" content="ChannelOption.StringValue property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.StringValue" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.get_StringValue" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ChannelOption.StringValue" /><meta name="Description" content="Gets the string value the ChannelOption." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ChannelOption_StringValue" /><meta name="guid" content="P_Grpc_Core_ChannelOption_StringValue" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ChannelOption.htm" title="ChannelOption Properties" tocid="Properties_T_Grpc_Core_ChannelOption">ChannelOption Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_IntValue.htm" title="IntValue Property " tocid="P_Grpc_Core_ChannelOption_IntValue">IntValue Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_Name.htm" title="Name Property " tocid="P_Grpc_Core_ChannelOption_Name">Name Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_StringValue.htm" title="StringValue Property " tocid="P_Grpc_Core_ChannelOption_StringValue">StringValue Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_Type.htm" title="Type Property " tocid="P_Grpc_Core_ChannelOption_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption<span id="LST7D3B1D1F_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7D3B1D1F_0?cpp=::|nu=.");</script>StringValue Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the string value the <span class="code">ChannelOption</span>.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">StringValue</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">StringValue</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">StringValue</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">StringValue</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_Type.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_Type.htm
new file mode 100644
index 0000000000..150b85c817
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ChannelOption_Type.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption.Type Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Type property" /><meta name="System.Keywords" content="ChannelOption.Type property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.Type" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.get_Type" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ChannelOption.Type" /><meta name="Description" content="Gets the type of the ChannelOption." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ChannelOption_Type" /><meta name="guid" content="P_Grpc_Core_ChannelOption_Type" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ChannelOption.htm" title="ChannelOption Properties" tocid="Properties_T_Grpc_Core_ChannelOption">ChannelOption Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_IntValue.htm" title="IntValue Property " tocid="P_Grpc_Core_ChannelOption_IntValue">IntValue Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_Name.htm" title="Name Property " tocid="P_Grpc_Core_ChannelOption_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_StringValue.htm" title="StringValue Property " tocid="P_Grpc_Core_ChannelOption_StringValue">StringValue Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_Type.htm" title="Type Property " tocid="P_Grpc_Core_ChannelOption_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption<span id="LST349A0DB9_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST349A0DB9_0?cpp=::|nu=.");</script>Type Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the type of the <span class="code">ChannelOption</span>.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ChannelOption<span id="LST349A0DB9_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST349A0DB9_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>OptionType</span> <span class="identifier">Type</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Type</span> <span class="keyword">As</span> <span class="identifier">ChannelOption<span id="LST349A0DB9_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST349A0DB9_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>OptionType</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">ChannelOption<span id="LST349A0DB9_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST349A0DB9_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>OptionType</span> <span class="identifier">Type</span> {
+ <span class="identifier">ChannelOption<span id="LST349A0DB9_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST349A0DB9_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>OptionType</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Type</span> : <span class="identifier">ChannelOption<span id="LST349A0DB9_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST349A0DB9_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>OptionType</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_ChannelOption_OptionType.htm">ChannelOption<span id="LST349A0DB9_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST349A0DB9_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>OptionType</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Channel_ResolvedTarget.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Channel_ResolvedTarget.htm
new file mode 100644
index 0000000000..daaf5c99f4
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Channel_ResolvedTarget.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel.ResolvedTarget Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResolvedTarget property" /><meta name="System.Keywords" content="Channel.ResolvedTarget property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.ResolvedTarget" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.get_ResolvedTarget" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Channel.ResolvedTarget" /><meta name="Description" content="Resolved address of the remote endpoint in URI format." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Channel_ResolvedTarget" /><meta name="guid" content="P_Grpc_Core_Channel_ResolvedTarget" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Channel.htm" title="Channel Properties" tocid="Properties_T_Grpc_Core_Channel">Channel Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_ResolvedTarget.htm" title="ResolvedTarget Property " tocid="P_Grpc_Core_Channel_ResolvedTarget">ResolvedTarget Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_State.htm" title="State Property " tocid="P_Grpc_Core_Channel_State">State Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_Target.htm" title="Target Property " tocid="P_Grpc_Core_Channel_Target">Target Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel<span id="LST4A6A67FB_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4A6A67FB_0?cpp=::|nu=.");</script>ResolvedTarget Property </td></tr></table><span class="introStyle"></span><div class="summary">Resolved address of the remote endpoint in URI format.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">ResolvedTarget</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResolvedTarget</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">ResolvedTarget</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResolvedTarget</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Channel_State.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Channel_State.htm
new file mode 100644
index 0000000000..d4c9af655a
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Channel_State.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel.State Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="State property" /><meta name="System.Keywords" content="Channel.State property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.State" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.get_State" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Channel.State" /><meta name="Description" content="Gets current connectivity state of this channel." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Channel_State" /><meta name="guid" content="P_Grpc_Core_Channel_State" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Channel.htm" title="Channel Properties" tocid="Properties_T_Grpc_Core_Channel">Channel Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_ResolvedTarget.htm" title="ResolvedTarget Property " tocid="P_Grpc_Core_Channel_ResolvedTarget">ResolvedTarget Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_State.htm" title="State Property " tocid="P_Grpc_Core_Channel_State">State Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_Target.htm" title="Target Property " tocid="P_Grpc_Core_Channel_Target">Target Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel<span id="LST9F9DBD3D_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9F9DBD3D_0?cpp=::|nu=.");</script>State Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets current connectivity state of this channel.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ChannelState</span> <span class="identifier">State</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">State</span> <span class="keyword">As</span> <span class="identifier">ChannelState</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">ChannelState</span> <span class="identifier">State</span> {
+ <span class="identifier">ChannelState</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">State</span> : <span class="identifier">ChannelState</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_ChannelState.htm">ChannelState</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Channel_Target.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Channel_Target.htm
new file mode 100644
index 0000000000..70d27d840f
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Channel_Target.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel.Target Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Target property" /><meta name="System.Keywords" content="Channel.Target property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.Target" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel.get_Target" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Channel.Target" /><meta name="Description" content="The original target used to create the channel." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Channel_Target" /><meta name="guid" content="P_Grpc_Core_Channel_Target" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Channel.htm" title="Channel Properties" tocid="Properties_T_Grpc_Core_Channel">Channel Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_ResolvedTarget.htm" title="ResolvedTarget Property " tocid="P_Grpc_Core_Channel_ResolvedTarget">ResolvedTarget Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_State.htm" title="State Property " tocid="P_Grpc_Core_Channel_State">State Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_Target.htm" title="Target Property " tocid="P_Grpc_Core_Channel_Target">Target Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel<span id="LSTB4DD124B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB4DD124B_0?cpp=::|nu=.");</script>Target Property </td></tr></table><span class="introStyle"></span><div class="summary">The original target used to create the channel.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Target</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Target</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Target</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Target</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_Channel.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_Channel.htm
new file mode 100644
index 0000000000..ed648e8dd3
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_Channel.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ClientBase.Channel Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Channel property" /><meta name="System.Keywords" content="ClientBase.Channel property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.Channel" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.get_Channel" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ClientBase.Channel" /><meta name="Description" content="Channel associated with this client." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ClientBase_Channel" /><meta name="guid" content="P_Grpc_Core_ClientBase_Channel" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ClientBase.htm" title="ClientBase Properties" tocid="Properties_T_Grpc_Core_ClientBase">ClientBase Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_ClientBase_Channel">Channel Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_HeaderInterceptor.htm" title="HeaderInterceptor Property " tocid="P_Grpc_Core_ClientBase_HeaderInterceptor">HeaderInterceptor Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_Host.htm" title="Host Property " tocid="P_Grpc_Core_ClientBase_Host">Host Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ClientBase<span id="LST911BFA6_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST911BFA6_0?cpp=::|nu=.");</script>Channel Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Channel associated with this client.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Channel</span> <span class="identifier">Channel</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Channel</span> <span class="keyword">As</span> <span class="identifier">Channel</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Channel</span>^ <span class="identifier">Channel</span> {
+ <span class="identifier">Channel</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Channel</span> : <span class="identifier">Channel</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Channel.htm">Channel</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ClientBase.htm">ClientBase Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_HeaderInterceptor.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_HeaderInterceptor.htm
new file mode 100644
index 0000000000..3187fe4724
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_HeaderInterceptor.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ClientBase.HeaderInterceptor Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="HeaderInterceptor property" /><meta name="System.Keywords" content="ClientBase.HeaderInterceptor property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.HeaderInterceptor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.get_HeaderInterceptor" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.set_HeaderInterceptor" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ClientBase.HeaderInterceptor" /><meta name="Description" content="Can be used to register a custom header (request metadata) interceptor. The interceptor is invoked each time a new call on this client is started." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ClientBase_HeaderInterceptor" /><meta name="guid" content="P_Grpc_Core_ClientBase_HeaderInterceptor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ClientBase.htm" title="ClientBase Properties" tocid="Properties_T_Grpc_Core_ClientBase">ClientBase Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_ClientBase_Channel">Channel Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_HeaderInterceptor.htm" title="HeaderInterceptor Property " tocid="P_Grpc_Core_ClientBase_HeaderInterceptor">HeaderInterceptor Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_Host.htm" title="Host Property " tocid="P_Grpc_Core_ClientBase_Host">Host Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ClientBase<span id="LSTD47471C1_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD47471C1_0?cpp=::|nu=.");</script>HeaderInterceptor Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Can be used to register a custom header (request metadata) interceptor.
+ The interceptor is invoked each time a new call on this client is started.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">HeaderInterceptor</span> <span class="identifier">HeaderInterceptor</span> { <span class="keyword">get</span>; <span class="keyword">set</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Property</span> <span class="identifier">HeaderInterceptor</span> <span class="keyword">As</span> <span class="identifier">HeaderInterceptor</span>
+ <span class="keyword">Get</span>
+ <span class="keyword">Set</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">HeaderInterceptor</span>^ <span class="identifier">HeaderInterceptor</span> {
+ <span class="identifier">HeaderInterceptor</span>^ <span class="keyword">get</span> ();
+ <span class="keyword">void</span> <span class="keyword">set</span> (<span class="identifier">HeaderInterceptor</span>^ <span class="parameter">value</span>);
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">HeaderInterceptor</span> : <span class="identifier">HeaderInterceptor</span> <span class="keyword">with</span> <span class="keyword">get</span>, <span class="keyword">set</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_HeaderInterceptor.htm">HeaderInterceptor</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ClientBase.htm">ClientBase Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_Host.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_Host.htm
new file mode 100644
index 0000000000..f25e313c96
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ClientBase_Host.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ClientBase.Host Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Host property" /><meta name="System.Keywords" content="ClientBase.Host property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.Host" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.get_Host" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase.set_Host" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ClientBase.Host" /><meta name="Description" content="gRPC supports multiple &quot;hosts&quot; being served by a single server. This property can be used to set the target host explicitly. By default, this will be set to null with the meaning &quot;use default host&quot;." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ClientBase_Host" /><meta name="guid" content="P_Grpc_Core_ClientBase_Host" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ClientBase.htm" title="ClientBase Properties" tocid="Properties_T_Grpc_Core_ClientBase">ClientBase Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_ClientBase_Channel">Channel Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_HeaderInterceptor.htm" title="HeaderInterceptor Property " tocid="P_Grpc_Core_ClientBase_HeaderInterceptor">HeaderInterceptor Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_Host.htm" title="Host Property " tocid="P_Grpc_Core_ClientBase_Host">Host Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ClientBase<span id="LSTD1D36BA5_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD1D36BA5_0?cpp=::|nu=.");</script>Host Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ gRPC supports multiple "hosts" being served by a single server.
+ This property can be used to set the target host explicitly.
+ By default, this will be set to <span class="code">null</span> with the meaning
+ "use default host".
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Host</span> { <span class="keyword">get</span>; <span class="keyword">set</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Property</span> <span class="identifier">Host</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span>
+ <span class="keyword">Set</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Host</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+ <span class="keyword">void</span> <span class="keyword">set</span> (<span class="identifier">String</span>^ <span class="parameter">value</span>);
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Host</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>, <span class="keyword">set</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ClientBase.htm">ClientBase Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm
new file mode 100644
index 0000000000..f6e87d64be
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ContextPropagationOptions.IsPropagateCancellation Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IsPropagateCancellation property" /><meta name="System.Keywords" content="ContextPropagationOptions.IsPropagateCancellation property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ContextPropagationOptions.IsPropagateCancellation" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ContextPropagationOptions.get_IsPropagateCancellation" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ContextPropagationOptions.IsPropagateCancellation" /><meta name="Description" content="true if parent call's cancellation token should be propagated to the child call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation" /><meta name="guid" content="P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Properties" tocid="Properties_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm" title="IsPropagateCancellation Property " tocid="P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation">IsPropagateCancellation Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm" title="IsPropagateDeadline Property " tocid="P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline">IsPropagateDeadline Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ContextPropagationOptions<span id="LST55448E1E_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST55448E1E_0?cpp=::|nu=.");</script>IsPropagateCancellation Property </td></tr></table><span class="introStyle"></span><div class="summary"><span class="code">true</span> if parent call's cancellation token should be propagated to the child call.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">bool</span> <span class="identifier">IsPropagateCancellation</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">IsPropagateCancellation</span> <span class="keyword">As</span> <span class="identifier">Boolean</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">bool</span> <span class="identifier">IsPropagateCancellation</span> {
+ <span class="identifier">bool</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">IsPropagateCancellation</span> : <span class="identifier">bool</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">Boolean</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm
new file mode 100644
index 0000000000..f5c43152c6
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ContextPropagationOptions.IsPropagateDeadline Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IsPropagateDeadline property" /><meta name="System.Keywords" content="ContextPropagationOptions.IsPropagateDeadline property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ContextPropagationOptions.IsPropagateDeadline" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ContextPropagationOptions.get_IsPropagateDeadline" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ContextPropagationOptions.IsPropagateDeadline" /><meta name="Description" content="true if parent call's deadline should be propagated to the child call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline" /><meta name="guid" content="P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Properties" tocid="Properties_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm" title="IsPropagateCancellation Property " tocid="P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation">IsPropagateCancellation Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm" title="IsPropagateDeadline Property " tocid="P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline">IsPropagateDeadline Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ContextPropagationOptions<span id="LST11E3C78B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST11E3C78B_0?cpp=::|nu=.");</script>IsPropagateDeadline Property </td></tr></table><span class="introStyle"></span><div class="summary"><span class="code">true</span> if parent call's deadline should be propagated to the child call.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">bool</span> <span class="identifier">IsPropagateDeadline</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">IsPropagateDeadline</span> <span class="keyword">As</span> <span class="identifier">Boolean</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">bool</span> <span class="identifier">IsPropagateDeadline</span> {
+ <span class="identifier">bool</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">IsPropagateDeadline</span> : <span class="identifier">bool</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">Boolean</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Credentials_Insecure.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Credentials_Insecure.htm
new file mode 100644
index 0000000000..bab175df21
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Credentials_Insecure.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Credentials.Insecure Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Insecure property" /><meta name="System.Keywords" content="Credentials.Insecure property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Credentials.Insecure" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Credentials.get_Insecure" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Credentials.Insecure" /><meta name="Description" content="Returns instance of credential that provides no security and will result in creating an unsecure channel with no encryption whatsoever." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Credentials_Insecure" /><meta name="guid" content="P_Grpc_Core_Credentials_Insecure" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Credentials.htm" title="Credentials Properties" tocid="Properties_T_Grpc_Core_Credentials">Credentials Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Credentials_Insecure.htm" title="Insecure Property " tocid="P_Grpc_Core_Credentials_Insecure">Insecure Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Credentials<span id="LST1887F985_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1887F985_0?cpp=::|nu=.");</script>Insecure Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns instance of credential that provides no security and
+ will result in creating an unsecure channel with no encryption whatsoever.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">Credentials</span> <span class="identifier">Insecure</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Insecure</span> <span class="keyword">As</span> <span class="identifier">Credentials</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">property</span> <span class="identifier">Credentials</span>^ <span class="identifier">Insecure</span> {
+ <span class="identifier">Credentials</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">Insecure</span> : <span class="identifier">Credentials</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Credentials.htm">Credentials</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Credentials.htm">Credentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_GrpcEnvironment_Logger.htm b/doc/ref/csharp/html/html/P_Grpc_Core_GrpcEnvironment_Logger.htm
new file mode 100644
index 0000000000..3e55247950
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_GrpcEnvironment_Logger.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>GrpcEnvironment.Logger Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Logger property" /><meta name="System.Keywords" content="GrpcEnvironment.Logger property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.GrpcEnvironment.Logger" /><meta name="Microsoft.Help.F1" content="Grpc.Core.GrpcEnvironment.get_Logger" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.GrpcEnvironment.Logger" /><meta name="Description" content="Gets application-wide logger used by gRPC." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_GrpcEnvironment_Logger" /><meta name="guid" content="P_Grpc_Core_GrpcEnvironment_Logger" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Properties" tocid="Properties_T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_GrpcEnvironment_Logger.htm" title="Logger Property " tocid="P_Grpc_Core_GrpcEnvironment_Logger">Logger Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">GrpcEnvironment<span id="LST50445AFC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST50445AFC_0?cpp=::|nu=.");</script>Logger Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets application-wide logger used by gRPC.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">ILogger</span> <span class="identifier">Logger</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Logger</span> <span class="keyword">As</span> <span class="identifier">ILogger</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">property</span> <span class="identifier">ILogger</span>^ <span class="identifier">Logger</span> {
+ <span class="identifier">ILogger</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">Logger</span> : <span class="identifier">ILogger</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Logging_ILogger.htm">ILogger</a><br />The logger.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_GrpcEnvironment.htm">GrpcEnvironment Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm b/doc/ref/csharp/html/html/P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm
new file mode 100644
index 0000000000..c6b3ebad54
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IAsyncStreamWriter(T).WriteOptions Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteOptions property" /><meta name="System.Keywords" content="IAsyncStreamWriter%3CT%3E.WriteOptions property" /><meta name="System.Keywords" content="IAsyncStreamWriter(Of T).WriteOptions property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IAsyncStreamWriter`1.WriteOptions" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IAsyncStreamWriter`1.get_WriteOptions" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IAsyncStreamWriter`1.set_WriteOptions" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.IAsyncStreamWriter`1.WriteOptions" /><meta name="Description" content="Write options that will be used for the next write. If null, default options will be used. Once set, this property maintains its value across subsequent writes." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions" /><meta name="guid" content="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Properties" tocid="Properties_T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IAsyncStreamWriter<span id="LST2C0CA8C1_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2C0CA8C1_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST2C0CA8C1_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2C0CA8C1_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST2C0CA8C1_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2C0CA8C1_2?cpp=::|nu=.");</script>WriteOptions Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Write options that will be used for the next write.
+ If null, default options will be used.
+ Once set, this property maintains its value across subsequent
+ writes.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="identifier">WriteOptions</span> <span class="identifier">WriteOptions</span> { <span class="keyword">get</span>; <span class="keyword">set</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Property</span> <span class="identifier">WriteOptions</span> <span class="keyword">As</span> <span class="identifier">WriteOptions</span>
+ <span class="keyword">Get</span>
+ <span class="keyword">Set</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">property</span> <span class="identifier">WriteOptions</span>^ <span class="identifier">WriteOptions</span> {
+ <span class="identifier">WriteOptions</span>^ <span class="keyword">get</span> ();
+ <span class="keyword">void</span> <span class="keyword">set</span> (<span class="identifier">WriteOptions</span>^ <span class="parameter">value</span>);
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">WriteOptions</span> : <span class="identifier">WriteOptions</span> <span class="keyword">with</span> <span class="keyword">get</span>, <span class="keyword">set</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_WriteOptions.htm">WriteOptions</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST2C0CA8C1_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2C0CA8C1_3?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST2C0CA8C1_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2C0CA8C1_4?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_IHasWriteOptions_WriteOptions.htm b/doc/ref/csharp/html/html/P_Grpc_Core_IHasWriteOptions_WriteOptions.htm
new file mode 100644
index 0000000000..6c0d622527
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_IHasWriteOptions_WriteOptions.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IHasWriteOptions.WriteOptions Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteOptions property" /><meta name="System.Keywords" content="IHasWriteOptions.WriteOptions property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IHasWriteOptions.WriteOptions" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IHasWriteOptions.get_WriteOptions" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IHasWriteOptions.set_WriteOptions" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.IHasWriteOptions.WriteOptions" /><meta name="Description" content="Gets or sets the write options." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_IHasWriteOptions_WriteOptions" /><meta name="guid" content="P_Grpc_Core_IHasWriteOptions_WriteOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Properties" tocid="Properties_T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IHasWriteOptions_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_IHasWriteOptions_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IHasWriteOptions<span id="LSTED26330_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTED26330_0?cpp=::|nu=.");</script>WriteOptions Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets or sets the write options.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="identifier">WriteOptions</span> <span class="identifier">WriteOptions</span> { <span class="keyword">get</span>; <span class="keyword">set</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Property</span> <span class="identifier">WriteOptions</span> <span class="keyword">As</span> <span class="identifier">WriteOptions</span>
+ <span class="keyword">Get</span>
+ <span class="keyword">Set</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">property</span> <span class="identifier">WriteOptions</span>^ <span class="identifier">WriteOptions</span> {
+ <span class="identifier">WriteOptions</span>^ <span class="keyword">get</span> ();
+ <span class="keyword">void</span> <span class="keyword">set</span> (<span class="identifier">WriteOptions</span>^ <span class="parameter">value</span>);
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">WriteOptions</span> : <span class="identifier">WriteOptions</span> <span class="keyword">with</span> <span class="keyword">get</span>, <span class="keyword">set</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_WriteOptions.htm">WriteOptions</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IHasWriteOptions.htm">IHasWriteOptions Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_FullName.htm b/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_FullName.htm
new file mode 100644
index 0000000000..5c89829621
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_FullName.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IMethod.FullName Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="FullName property" /><meta name="System.Keywords" content="IMethod.FullName property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IMethod.FullName" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IMethod.get_FullName" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.IMethod.FullName" /><meta name="Description" content="Gets the fully qualified name of the method. On the server side, methods are dispatched based on this name." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_IMethod_FullName" /><meta name="guid" content="P_Grpc_Core_IMethod_FullName" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IMethod.htm" title="IMethod Properties" tocid="Properties_T_Grpc_Core_IMethod">IMethod Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_IMethod_FullName">FullName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_Name.htm" title="Name Property " tocid="P_Grpc_Core_IMethod_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_IMethod_ServiceName">ServiceName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_Type.htm" title="Type Property " tocid="P_Grpc_Core_IMethod_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IMethod<span id="LST743F6173_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST743F6173_0?cpp=::|nu=.");</script>FullName Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the fully qualified name of the method. On the server side, methods are dispatched
+ based on this name.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="identifier">string</span> <span class="identifier">FullName</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">FullName</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">FullName</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">FullName</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IMethod.htm">IMethod Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_Name.htm b/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_Name.htm
new file mode 100644
index 0000000000..01fd7db14f
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_Name.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IMethod.Name Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Name property" /><meta name="System.Keywords" content="IMethod.Name property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IMethod.Name" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IMethod.get_Name" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.IMethod.Name" /><meta name="Description" content="Gets the unqualified name of the method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_IMethod_Name" /><meta name="guid" content="P_Grpc_Core_IMethod_Name" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IMethod.htm" title="IMethod Properties" tocid="Properties_T_Grpc_Core_IMethod">IMethod Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_IMethod_FullName">FullName Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_Name.htm" title="Name Property " tocid="P_Grpc_Core_IMethod_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_IMethod_ServiceName">ServiceName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_Type.htm" title="Type Property " tocid="P_Grpc_Core_IMethod_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IMethod<span id="LST50501866_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST50501866_0?cpp=::|nu=.");</script>Name Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the unqualified name of the method.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="identifier">string</span> <span class="identifier">Name</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Name</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Name</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Name</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IMethod.htm">IMethod Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_ServiceName.htm b/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_ServiceName.htm
new file mode 100644
index 0000000000..e94184fcc0
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_ServiceName.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IMethod.ServiceName Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServiceName property" /><meta name="System.Keywords" content="IMethod.ServiceName property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IMethod.ServiceName" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IMethod.get_ServiceName" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.IMethod.ServiceName" /><meta name="Description" content="Gets the name of the service to which this method belongs." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_IMethod_ServiceName" /><meta name="guid" content="P_Grpc_Core_IMethod_ServiceName" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IMethod.htm" title="IMethod Properties" tocid="Properties_T_Grpc_Core_IMethod">IMethod Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_IMethod_FullName">FullName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_Name.htm" title="Name Property " tocid="P_Grpc_Core_IMethod_Name">Name Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_IMethod_ServiceName">ServiceName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_Type.htm" title="Type Property " tocid="P_Grpc_Core_IMethod_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IMethod<span id="LSTA412F3B1_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA412F3B1_0?cpp=::|nu=.");</script>ServiceName Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the name of the service to which this method belongs.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="identifier">string</span> <span class="identifier">ServiceName</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ServiceName</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">ServiceName</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">ServiceName</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IMethod.htm">IMethod Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_Type.htm b/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_Type.htm
new file mode 100644
index 0000000000..54613fc5e6
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_IMethod_Type.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IMethod.Type Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Type property" /><meta name="System.Keywords" content="IMethod.Type property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IMethod.Type" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IMethod.get_Type" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.IMethod.Type" /><meta name="Description" content="Gets the type of the method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_IMethod_Type" /><meta name="guid" content="P_Grpc_Core_IMethod_Type" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IMethod.htm" title="IMethod Properties" tocid="Properties_T_Grpc_Core_IMethod">IMethod Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_IMethod_FullName">FullName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_Name.htm" title="Name Property " tocid="P_Grpc_Core_IMethod_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_IMethod_ServiceName">ServiceName Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_Type.htm" title="Type Property " tocid="P_Grpc_Core_IMethod_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IMethod<span id="LST939FDA4B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST939FDA4B_0?cpp=::|nu=.");</script>Type Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the type of the method.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="identifier">MethodType</span> <span class="identifier">Type</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Type</span> <span class="keyword">As</span> <span class="identifier">MethodType</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">property</span> <span class="identifier">MethodType</span> <span class="identifier">Type</span> {
+ <span class="identifier">MethodType</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Type</span> : <span class="identifier">MethodType</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_MethodType.htm">MethodType</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IMethod.htm">IMethod Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_KeyCertificatePair_CertificateChain.htm b/doc/ref/csharp/html/html/P_Grpc_Core_KeyCertificatePair_CertificateChain.htm
new file mode 100644
index 0000000000..3eae8efe9a
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_KeyCertificatePair_CertificateChain.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>KeyCertificatePair.CertificateChain Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CertificateChain property" /><meta name="System.Keywords" content="KeyCertificatePair.CertificateChain property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.KeyCertificatePair.CertificateChain" /><meta name="Microsoft.Help.F1" content="Grpc.Core.KeyCertificatePair.get_CertificateChain" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.KeyCertificatePair.CertificateChain" /><meta name="Description" content="PEM encoded certificate chain." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_KeyCertificatePair_CertificateChain" /><meta name="guid" content="P_Grpc_Core_KeyCertificatePair_CertificateChain" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Properties" tocid="Properties_T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_KeyCertificatePair_CertificateChain.htm" title="CertificateChain Property " tocid="P_Grpc_Core_KeyCertificatePair_CertificateChain">CertificateChain Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_KeyCertificatePair_PrivateKey.htm" title="PrivateKey Property " tocid="P_Grpc_Core_KeyCertificatePair_PrivateKey">PrivateKey Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">KeyCertificatePair<span id="LSTF3788CED_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF3788CED_0?cpp=::|nu=.");</script>CertificateChain Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ PEM encoded certificate chain.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">CertificateChain</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">CertificateChain</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">CertificateChain</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">CertificateChain</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_KeyCertificatePair_PrivateKey.htm b/doc/ref/csharp/html/html/P_Grpc_Core_KeyCertificatePair_PrivateKey.htm
new file mode 100644
index 0000000000..70ccc67e8e
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_KeyCertificatePair_PrivateKey.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>KeyCertificatePair.PrivateKey Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="PrivateKey property" /><meta name="System.Keywords" content="KeyCertificatePair.PrivateKey property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.KeyCertificatePair.PrivateKey" /><meta name="Microsoft.Help.F1" content="Grpc.Core.KeyCertificatePair.get_PrivateKey" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.KeyCertificatePair.PrivateKey" /><meta name="Description" content="PEM encoded private key." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_KeyCertificatePair_PrivateKey" /><meta name="guid" content="P_Grpc_Core_KeyCertificatePair_PrivateKey" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Properties" tocid="Properties_T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_KeyCertificatePair_CertificateChain.htm" title="CertificateChain Property " tocid="P_Grpc_Core_KeyCertificatePair_CertificateChain">CertificateChain Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_KeyCertificatePair_PrivateKey.htm" title="PrivateKey Property " tocid="P_Grpc_Core_KeyCertificatePair_PrivateKey">PrivateKey Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">KeyCertificatePair<span id="LSTCE561653_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCE561653_0?cpp=::|nu=.");</script>PrivateKey Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ PEM encoded private key.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">PrivateKey</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">PrivateKey</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">PrivateKey</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">PrivateKey</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Marshaller_1_Deserializer.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Marshaller_1_Deserializer.htm
new file mode 100644
index 0000000000..281cddc77a
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Marshaller_1_Deserializer.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshaller(T).Deserializer Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Deserializer property" /><meta name="System.Keywords" content="Marshaller%3CT%3E.Deserializer property" /><meta name="System.Keywords" content="Marshaller(Of T).Deserializer property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshaller`1.Deserializer" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshaller`1.get_Deserializer" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Marshaller`1.Deserializer" /><meta name="Description" content="Gets the deserializer function." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Marshaller_1_Deserializer" /><meta name="guid" content="P_Grpc_Core_Marshaller_1_Deserializer" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Properties" tocid="Properties_T_Grpc_Core_Marshaller_1">Marshaller(T) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Marshaller_1_Deserializer.htm" title="Deserializer Property " tocid="P_Grpc_Core_Marshaller_1_Deserializer">Deserializer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Marshaller_1_Serializer.htm" title="Serializer Property " tocid="P_Grpc_Core_Marshaller_1_Serializer">Serializer Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshaller<span id="LSTB75761F4_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB75761F4_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTB75761F4_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB75761F4_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTB75761F4_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB75761F4_2?cpp=::|nu=.");</script>Deserializer Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the deserializer function.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Func</span>&lt;<span class="identifier">byte</span>[], T&gt; <span class="identifier">Deserializer</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Deserializer</span> <span class="keyword">As</span> <span class="identifier">Func</span>(<span class="keyword">Of</span> <span class="identifier">Byte</span>(), T)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Func</span>&lt;<span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^, T&gt;^ <span class="identifier">Deserializer</span> {
+ <span class="identifier">Func</span>&lt;<span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^, T&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Deserializer</span> : <span class="identifier">Func</span>&lt;<span class="identifier">byte</span>[], 'T&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/bb549151" target="_blank">Func</a><span id="LSTB75761F4_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB75761F4_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span id="LSTB75761F4_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB75761F4_4?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/yyb1w04y" target="_blank">Byte</a><span id="LSTB75761F4_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB75761F4_5?cpp=&gt;|vb=()|nu=[]");</script>, <a href="T_Grpc_Core_Marshaller_1.htm"><span class="typeparameter">T</span></a><span id="LSTB75761F4_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB75761F4_6?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Marshaller_1.htm">Marshaller<span id="LSTB75761F4_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB75761F4_7?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTB75761F4_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB75761F4_8?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Marshaller_1_Serializer.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Marshaller_1_Serializer.htm
new file mode 100644
index 0000000000..d288c6329c
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Marshaller_1_Serializer.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshaller(T).Serializer Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Serializer property" /><meta name="System.Keywords" content="Marshaller%3CT%3E.Serializer property" /><meta name="System.Keywords" content="Marshaller(Of T).Serializer property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshaller`1.Serializer" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshaller`1.get_Serializer" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Marshaller`1.Serializer" /><meta name="Description" content="Gets the serializer function." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Marshaller_1_Serializer" /><meta name="guid" content="P_Grpc_Core_Marshaller_1_Serializer" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Properties" tocid="Properties_T_Grpc_Core_Marshaller_1">Marshaller(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Marshaller_1_Deserializer.htm" title="Deserializer Property " tocid="P_Grpc_Core_Marshaller_1_Deserializer">Deserializer Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Marshaller_1_Serializer.htm" title="Serializer Property " tocid="P_Grpc_Core_Marshaller_1_Serializer">Serializer Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshaller<span id="LSTB3003823_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB3003823_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTB3003823_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB3003823_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTB3003823_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB3003823_2?cpp=::|nu=.");</script>Serializer Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the serializer function.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Func</span>&lt;T, <span class="identifier">byte</span>[]&gt; <span class="identifier">Serializer</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Serializer</span> <span class="keyword">As</span> <span class="identifier">Func</span>(<span class="keyword">Of</span> T, <span class="identifier">Byte</span>())
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Func</span>&lt;T, <span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^&gt;^ <span class="identifier">Serializer</span> {
+ <span class="identifier">Func</span>&lt;T, <span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Serializer</span> : <span class="identifier">Func</span>&lt;'T, <span class="identifier">byte</span>[]&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/bb549151" target="_blank">Func</a><span id="LSTB3003823_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB3003823_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Marshaller_1.htm"><span class="typeparameter">T</span></a>, <span id="LSTB3003823_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB3003823_4?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/yyb1w04y" target="_blank">Byte</a><span id="LSTB3003823_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB3003823_5?cpp=&gt;|vb=()|nu=[]");</script><span id="LSTB3003823_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB3003823_6?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Marshaller_1.htm">Marshaller<span id="LSTB3003823_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB3003823_7?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTB3003823_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB3003823_8?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Marshallers_StringMarshaller.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Marshallers_StringMarshaller.htm
new file mode 100644
index 0000000000..0db6f764c0
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Marshallers_StringMarshaller.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshallers.StringMarshaller Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="StringMarshaller property" /><meta name="System.Keywords" content="Marshallers.StringMarshaller property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshallers.StringMarshaller" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshallers.get_StringMarshaller" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Marshallers.StringMarshaller" /><meta name="Description" content="Returns a marshaller for string type. This is useful for testing." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Marshallers_StringMarshaller" /><meta name="guid" content="P_Grpc_Core_Marshallers_StringMarshaller" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Marshallers.htm" title="Marshallers Properties" tocid="Properties_T_Grpc_Core_Marshallers">Marshallers Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Marshallers_StringMarshaller.htm" title="StringMarshaller Property " tocid="P_Grpc_Core_Marshallers_StringMarshaller">StringMarshaller Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshallers<span id="LST38F7A5B3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST38F7A5B3_0?cpp=::|nu=.");</script>StringMarshaller Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns a marshaller for <span class="code">string</span> type. This is useful for testing.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">Marshaller</span>&lt;<span class="identifier">string</span>&gt; <span class="identifier">StringMarshaller</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">StringMarshaller</span> <span class="keyword">As</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> <span class="identifier">String</span>)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">property</span> <span class="identifier">Marshaller</span>&lt;<span class="identifier">String</span>^&gt; <span class="identifier">StringMarshaller</span> {
+ <span class="identifier">Marshaller</span>&lt;<span class="identifier">String</span>^&gt; <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">StringMarshaller</span> : <span class="identifier">Marshaller</span>&lt;<span class="identifier">string</span>&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Marshaller_1.htm">Marshaller</a><span id="LST38F7A5B3_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST38F7A5B3_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a><span id="LST38F7A5B3_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST38F7A5B3_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Marshallers.htm">Marshallers Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Count.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Count.htm
new file mode 100644
index 0000000000..348175b939
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Count.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Count Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Count property" /><meta name="System.Keywords" content="Metadata.Count property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Count" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.get_Count" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Metadata.Count" /><meta name="Description" content="summaryP:Grpc.Core.Metadata.Count" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Metadata_Count" /><meta name="guid" content="P_Grpc_Core_Metadata_Count" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata.htm" title="Metadata Properties" tocid="Properties_T_Grpc_Core_Metadata">Metadata Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Count.htm" title="Count Property " tocid="P_Grpc_Core_Metadata_Count">Count Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_IsReadOnly.htm" title="IsReadOnly Property " tocid="P_Grpc_Core_Metadata_IsReadOnly">IsReadOnly Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Item.htm" title="Item Property " tocid="P_Grpc_Core_Metadata_Item">Item Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST2013FE93_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2013FE93_0?cpp=::|nu=.");</script>Count Property </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "P:Grpc.Core.Metadata.Count"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">int</span> <span class="identifier">Count</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Count</span> <span class="keyword">As</span> <span class="identifier">Integer</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">property</span> <span class="identifier">int</span> <span class="identifier">Count</span> {
+ <span class="identifier">int</span> <span class="keyword">get</span> () <span class="keyword">sealed</span>;
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Count</span> : <span class="identifier">int</span> <span class="keyword">with</span> <span class="keyword">get</span>
+<span class="keyword">override</span> <span class="identifier">Count</span> : <span class="identifier">int</span> <span class="keyword">with</span> <span class="keyword">get</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/5s3kzhec" target="_blank">ICollection<span id="LST2013FE93_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2013FE93_1?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST2013FE93_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2013FE93_2?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LST2013FE93_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2013FE93_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Count</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_IsBinary.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_IsBinary.htm
new file mode 100644
index 0000000000..efa7628e43
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_IsBinary.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Entry.IsBinary Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IsBinary property" /><meta name="System.Keywords" content="Metadata.Entry.IsBinary property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.IsBinary" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.get_IsBinary" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Metadata.Entry.IsBinary" /><meta name="Description" content="Returns true if this entry is a binary-value entry." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Metadata_Entry_IsBinary" /><meta name="guid" content="P_Grpc_Core_Metadata_Entry_IsBinary" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata_Entry.htm" title="Entry Properties" tocid="Properties_T_Grpc_Core_Metadata_Entry">Entry Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_IsBinary.htm" title="IsBinary Property " tocid="P_Grpc_Core_Metadata_Entry_IsBinary">IsBinary Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_Key.htm" title="Key Property " tocid="P_Grpc_Core_Metadata_Entry_Key">Key Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_Value.htm" title="Value Property " tocid="P_Grpc_Core_Metadata_Entry_Value">Value Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_ValueBytes.htm" title="ValueBytes Property " tocid="P_Grpc_Core_Metadata_Entry_ValueBytes">ValueBytes Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST97AF85A3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97AF85A3_0?cpp=::|nu=.");</script>Entry<span id="LST97AF85A3_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97AF85A3_1?cpp=::|nu=.");</script>IsBinary Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns <span class="code">true</span> if this entry is a binary-value entry.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">bool</span> <span class="identifier">IsBinary</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">IsBinary</span> <span class="keyword">As</span> <span class="identifier">Boolean</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">bool</span> <span class="identifier">IsBinary</span> {
+ <span class="identifier">bool</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">IsBinary</span> : <span class="identifier">bool</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">Boolean</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST97AF85A3_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97AF85A3_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_Key.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_Key.htm
new file mode 100644
index 0000000000..f72d768eb5
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_Key.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Entry.Key Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Key property" /><meta name="System.Keywords" content="Metadata.Entry.Key property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.Key" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.get_Key" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Metadata.Entry.Key" /><meta name="Description" content="Gets the metadata entry key." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Metadata_Entry_Key" /><meta name="guid" content="P_Grpc_Core_Metadata_Entry_Key" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata_Entry.htm" title="Entry Properties" tocid="Properties_T_Grpc_Core_Metadata_Entry">Entry Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_IsBinary.htm" title="IsBinary Property " tocid="P_Grpc_Core_Metadata_Entry_IsBinary">IsBinary Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_Key.htm" title="Key Property " tocid="P_Grpc_Core_Metadata_Entry_Key">Key Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_Value.htm" title="Value Property " tocid="P_Grpc_Core_Metadata_Entry_Value">Value Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_ValueBytes.htm" title="ValueBytes Property " tocid="P_Grpc_Core_Metadata_Entry_ValueBytes">ValueBytes Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTEFB11001_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEFB11001_0?cpp=::|nu=.");</script>Entry<span id="LSTEFB11001_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEFB11001_1?cpp=::|nu=.");</script>Key Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the metadata entry key.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Key</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Key</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Key</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Key</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LSTEFB11001_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEFB11001_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_Value.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_Value.htm
new file mode 100644
index 0000000000..53fc951503
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_Value.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Entry.Value Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Value property" /><meta name="System.Keywords" content="Metadata.Entry.Value property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.Value" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.get_Value" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Metadata.Entry.Value" /><meta name="Description" content="Gets the string value of this metadata entry." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Metadata_Entry_Value" /><meta name="guid" content="P_Grpc_Core_Metadata_Entry_Value" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata_Entry.htm" title="Entry Properties" tocid="Properties_T_Grpc_Core_Metadata_Entry">Entry Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_IsBinary.htm" title="IsBinary Property " tocid="P_Grpc_Core_Metadata_Entry_IsBinary">IsBinary Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_Key.htm" title="Key Property " tocid="P_Grpc_Core_Metadata_Entry_Key">Key Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_Value.htm" title="Value Property " tocid="P_Grpc_Core_Metadata_Entry_Value">Value Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_ValueBytes.htm" title="ValueBytes Property " tocid="P_Grpc_Core_Metadata_Entry_ValueBytes">ValueBytes Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTCEA6FA91_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCEA6FA91_0?cpp=::|nu=.");</script>Entry<span id="LSTCEA6FA91_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCEA6FA91_1?cpp=::|nu=.");</script>Value Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the string value of this metadata entry.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Value</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Value</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Value</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Value</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LSTCEA6FA91_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCEA6FA91_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_ValueBytes.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_ValueBytes.htm
new file mode 100644
index 0000000000..00b325c1c1
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Entry_ValueBytes.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Entry.ValueBytes Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ValueBytes property" /><meta name="System.Keywords" content="Metadata.Entry.ValueBytes property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.ValueBytes" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry.get_ValueBytes" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Metadata.Entry.ValueBytes" /><meta name="Description" content="Gets the binary value of this metadata entry." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Metadata_Entry_ValueBytes" /><meta name="guid" content="P_Grpc_Core_Metadata_Entry_ValueBytes" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata_Entry.htm" title="Entry Properties" tocid="Properties_T_Grpc_Core_Metadata_Entry">Entry Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_IsBinary.htm" title="IsBinary Property " tocid="P_Grpc_Core_Metadata_Entry_IsBinary">IsBinary Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_Key.htm" title="Key Property " tocid="P_Grpc_Core_Metadata_Entry_Key">Key Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_Value.htm" title="Value Property " tocid="P_Grpc_Core_Metadata_Entry_Value">Value Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_ValueBytes.htm" title="ValueBytes Property " tocid="P_Grpc_Core_Metadata_Entry_ValueBytes">ValueBytes Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST390CE018_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST390CE018_0?cpp=::|nu=.");</script>Entry<span id="LST390CE018_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST390CE018_1?cpp=::|nu=.");</script>ValueBytes Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the binary value of this metadata entry.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">byte</span>[] <span class="identifier">ValueBytes</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ValueBytes</span> <span class="keyword">As</span> <span class="identifier">Byte</span>()
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^ <span class="identifier">ValueBytes</span> {
+ <span class="keyword">array</span>&lt;<span class="identifier">unsigned char</span>&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ValueBytes</span> : <span class="identifier">byte</span>[] <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <span id="LST390CE018_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST390CE018_2?cpp=array&lt;");</script><a href="http://msdn2.microsoft.com/en-us/library/yyb1w04y" target="_blank">Byte</a><span id="LST390CE018_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST390CE018_3?cpp=&gt;|vb=()|nu=[]");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST390CE018_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST390CE018_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_IsReadOnly.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_IsReadOnly.htm
new file mode 100644
index 0000000000..da27809a7e
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_IsReadOnly.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.IsReadOnly Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IsReadOnly property" /><meta name="System.Keywords" content="Metadata.IsReadOnly property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.IsReadOnly" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.get_IsReadOnly" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Metadata.IsReadOnly" /><meta name="Description" content="summaryP:Grpc.Core.Metadata.IsReadOnly" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Metadata_IsReadOnly" /><meta name="guid" content="P_Grpc_Core_Metadata_IsReadOnly" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata.htm" title="Metadata Properties" tocid="Properties_T_Grpc_Core_Metadata">Metadata Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Count.htm" title="Count Property " tocid="P_Grpc_Core_Metadata_Count">Count Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_IsReadOnly.htm" title="IsReadOnly Property " tocid="P_Grpc_Core_Metadata_IsReadOnly">IsReadOnly Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Item.htm" title="Item Property " tocid="P_Grpc_Core_Metadata_Item">Item Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LSTA246E180_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA246E180_0?cpp=::|nu=.");</script>IsReadOnly Property </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "P:Grpc.Core.Metadata.IsReadOnly"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">bool</span> <span class="identifier">IsReadOnly</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">IsReadOnly</span> <span class="keyword">As</span> <span class="identifier">Boolean</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">property</span> <span class="identifier">bool</span> <span class="identifier">IsReadOnly</span> {
+ <span class="identifier">bool</span> <span class="keyword">get</span> () <span class="keyword">sealed</span>;
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">IsReadOnly</span> : <span class="identifier">bool</span> <span class="keyword">with</span> <span class="keyword">get</span>
+<span class="keyword">override</span> <span class="identifier">IsReadOnly</span> : <span class="identifier">bool</span> <span class="keyword">with</span> <span class="keyword">get</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">Boolean</a><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/0cfatk9t" target="_blank">ICollection<span id="LSTA246E180_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA246E180_1?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTA246E180_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA246E180_2?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LSTA246E180_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA246E180_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IsReadOnly</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Item.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Item.htm
new file mode 100644
index 0000000000..4147b73451
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Metadata_Item.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Item Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Item property" /><meta name="System.Keywords" content="Metadata.Item property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Item" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.get_Item" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.set_Item" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Metadata.Item(System.Int32)" /><meta name="Description" content="summaryP:Grpc.Core.Metadata.Item(System.Int32)" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Metadata_Item" /><meta name="guid" content="P_Grpc_Core_Metadata_Item" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata.htm" title="Metadata Properties" tocid="Properties_T_Grpc_Core_Metadata">Metadata Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Count.htm" title="Count Property " tocid="P_Grpc_Core_Metadata_Count">Count Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_IsReadOnly.htm" title="IsReadOnly Property " tocid="P_Grpc_Core_Metadata_IsReadOnly">IsReadOnly Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Item.htm" title="Item Property " tocid="P_Grpc_Core_Metadata_Item">Item Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST298F721D_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_0?cpp=::|nu=.");</script>Item Property </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "P:Grpc.Core.Metadata.Item(System.Int32)"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Metadata<span id="LST298F721D_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">this</span>[
+ <span class="identifier">int</span> <span class="parameter">index</span>
+] { <span class="keyword">get</span>; <span class="keyword">set</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Default</span> <span class="keyword">Property</span> <span class="identifier">Item</span> (
+ <span class="parameter">index</span> <span class="keyword">As</span> <span class="identifier">Integer</span>
+) <span class="keyword">As</span> <span class="identifier">Metadata<span id="LST298F721D_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>
+ <span class="keyword">Get</span>
+ <span class="keyword">Set</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">property</span> <span class="identifier">Metadata<span id="LST298F721D_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">default</span>[<span class="identifier">int</span> <span class="parameter">index</span>] {
+ <span class="identifier">Metadata<span id="LST298F721D_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">get</span> (<span class="identifier">int</span> <span class="parameter">index</span>) <span class="keyword">sealed</span>;
+ <span class="keyword">void</span> <span class="keyword">set</span> (<span class="identifier">int</span> <span class="parameter">index</span>, <span class="identifier">Metadata<span id="LST298F721D_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="parameter">value</span>) <span class="keyword">sealed</span>;
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Item</span> : <span class="identifier">Metadata<span id="LST298F721D_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">with</span> <span class="keyword">get</span>, <span class="keyword">set</span>
+<span class="keyword">override</span> <span class="identifier">Item</span> : <span class="identifier">Metadata<span id="LST298F721D_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> <span class="keyword">with</span> <span class="keyword">get</span>, <span class="keyword">set</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">index</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">System<span id="LST298F721D_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Int32</a><br /></dd></dl><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST298F721D_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a><h4 class="subHeading">Implements</h4><a href="http://msdn2.microsoft.com/en-us/library/ewthkb10" target="_blank">IList<span id="LST298F721D_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_10?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST298F721D_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_11?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script><span id="LST298F721D_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_12?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Item<span id="LST298F721D_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_13?cs=[|vb=(|cpp=[|nu=(|fs= ");</script>Int32<span id="LST298F721D_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST298F721D_14?cs=]|vb=)|cpp=]|nu=)|fs= ");</script></a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_FullName.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_FullName.htm
new file mode 100644
index 0000000000..d3940aeb12
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_FullName.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Method(TRequest, TResponse).FullName Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="FullName property" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E.FullName property" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse).FullName property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.FullName" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.get_FullName" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Method`2.FullName" /><meta name="Description" content="Gets the fully qualified name of the method. On the server side, methods are dispatched based on this name." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Method_2_FullName" /><meta name="guid" content="P_Grpc_Core_Method_2_FullName" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_Method_2_FullName">FullName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Name.htm" title="Name Property " tocid="P_Grpc_Core_Method_2_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_Method_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_Method_2_ResponseMarshaller">ResponseMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_Method_2_ServiceName">ServiceName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Type.htm" title="Type Property " tocid="P_Grpc_Core_Method_2_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Method<span id="LSTF00A04B2_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF00A04B2_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTF00A04B2_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF00A04B2_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTF00A04B2_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF00A04B2_2?cpp=::|nu=.");</script>FullName Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the fully qualified name of the method. On the server side, methods are dispatched
+ based on this name.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">FullName</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">FullName</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">FullName</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> () <span class="keyword">sealed</span>;
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">FullName</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+<span class="keyword">override</span> <span class="identifier">FullName</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a><h4 class="subHeading">Implements</h4><a href="P_Grpc_Core_IMethod_FullName.htm">IMethod<span id="LSTF00A04B2_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF00A04B2_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>FullName</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Method_2.htm">Method<span id="LSTF00A04B2_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF00A04B2_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTF00A04B2_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF00A04B2_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_Name.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_Name.htm
new file mode 100644
index 0000000000..832b968319
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_Name.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Method(TRequest, TResponse).Name Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Name property" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E.Name property" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse).Name property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.Name" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.get_Name" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Method`2.Name" /><meta name="Description" content="Gets the unqualified name of the method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Method_2_Name" /><meta name="guid" content="P_Grpc_Core_Method_2_Name" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_Method_2_FullName">FullName Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Name.htm" title="Name Property " tocid="P_Grpc_Core_Method_2_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_Method_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_Method_2_ResponseMarshaller">ResponseMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_Method_2_ServiceName">ServiceName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Type.htm" title="Type Property " tocid="P_Grpc_Core_Method_2_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Method<span id="LST951FE1A7_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST951FE1A7_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST951FE1A7_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST951FE1A7_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST951FE1A7_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST951FE1A7_2?cpp=::|nu=.");</script>Name Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the unqualified name of the method.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Name</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Name</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Name</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> () <span class="keyword">sealed</span>;
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Name</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+<span class="keyword">override</span> <span class="identifier">Name</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a><h4 class="subHeading">Implements</h4><a href="P_Grpc_Core_IMethod_Name.htm">IMethod<span id="LST951FE1A7_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST951FE1A7_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Name</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Method_2.htm">Method<span id="LST951FE1A7_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST951FE1A7_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST951FE1A7_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST951FE1A7_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_RequestMarshaller.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_RequestMarshaller.htm
new file mode 100644
index 0000000000..8a4c5b3da0
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_RequestMarshaller.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Method(TRequest, TResponse).RequestMarshaller Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RequestMarshaller property" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E.RequestMarshaller property" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse).RequestMarshaller property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.RequestMarshaller" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.get_RequestMarshaller" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Method`2.RequestMarshaller" /><meta name="Description" content="Gets the marshaller used for request messages." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Method_2_RequestMarshaller" /><meta name="guid" content="P_Grpc_Core_Method_2_RequestMarshaller" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_Method_2_FullName">FullName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Name.htm" title="Name Property " tocid="P_Grpc_Core_Method_2_Name">Name Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_Method_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_Method_2_ResponseMarshaller">ResponseMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_Method_2_ServiceName">ServiceName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Type.htm" title="Type Property " tocid="P_Grpc_Core_Method_2_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Method<span id="LSTD5673AAC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD5673AAC_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTD5673AAC_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD5673AAC_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LSTD5673AAC_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD5673AAC_2?cpp=::|nu=.");</script>RequestMarshaller Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the marshaller used for request messages.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Marshaller</span>&lt;TRequest&gt; <span class="identifier">RequestMarshaller</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">RequestMarshaller</span> <span class="keyword">As</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> TRequest)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Marshaller</span>&lt;TRequest&gt; <span class="identifier">RequestMarshaller</span> {
+ <span class="identifier">Marshaller</span>&lt;TRequest&gt; <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">RequestMarshaller</span> : <span class="identifier">Marshaller</span>&lt;'TRequest&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Marshaller_1.htm">Marshaller</a><span id="LSTD5673AAC_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD5673AAC_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Method_2.htm"><span class="typeparameter">TRequest</span></a><span id="LSTD5673AAC_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD5673AAC_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Method_2.htm">Method<span id="LSTD5673AAC_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD5673AAC_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTD5673AAC_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD5673AAC_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_ResponseMarshaller.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_ResponseMarshaller.htm
new file mode 100644
index 0000000000..dbe51e6d4d
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_ResponseMarshaller.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Method(TRequest, TResponse).ResponseMarshaller Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseMarshaller property" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E.ResponseMarshaller property" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse).ResponseMarshaller property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.ResponseMarshaller" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.get_ResponseMarshaller" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Method`2.ResponseMarshaller" /><meta name="Description" content="Gets the marshaller used for response messages." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Method_2_ResponseMarshaller" /><meta name="guid" content="P_Grpc_Core_Method_2_ResponseMarshaller" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_Method_2_FullName">FullName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Name.htm" title="Name Property " tocid="P_Grpc_Core_Method_2_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_Method_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_Method_2_ResponseMarshaller">ResponseMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_Method_2_ServiceName">ServiceName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Type.htm" title="Type Property " tocid="P_Grpc_Core_Method_2_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Method<span id="LST761D02DA_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST761D02DA_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST761D02DA_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST761D02DA_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST761D02DA_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST761D02DA_2?cpp=::|nu=.");</script>ResponseMarshaller Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the marshaller used for response messages.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Marshaller</span>&lt;TResponse&gt; <span class="identifier">ResponseMarshaller</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseMarshaller</span> <span class="keyword">As</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> TResponse)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Marshaller</span>&lt;TResponse&gt; <span class="identifier">ResponseMarshaller</span> {
+ <span class="identifier">Marshaller</span>&lt;TResponse&gt; <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseMarshaller</span> : <span class="identifier">Marshaller</span>&lt;'TResponse&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Marshaller_1.htm">Marshaller</a><span id="LST761D02DA_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST761D02DA_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_Method_2.htm"><span class="typeparameter">TResponse</span></a><span id="LST761D02DA_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST761D02DA_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Method_2.htm">Method<span id="LST761D02DA_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST761D02DA_5?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST761D02DA_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST761D02DA_6?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_ServiceName.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_ServiceName.htm
new file mode 100644
index 0000000000..00816a5b62
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_ServiceName.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Method(TRequest, TResponse).ServiceName Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServiceName property" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E.ServiceName property" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse).ServiceName property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.ServiceName" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.get_ServiceName" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Method`2.ServiceName" /><meta name="Description" content="Gets the name of the service to which this method belongs." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Method_2_ServiceName" /><meta name="guid" content="P_Grpc_Core_Method_2_ServiceName" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_Method_2_FullName">FullName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Name.htm" title="Name Property " tocid="P_Grpc_Core_Method_2_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_Method_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_Method_2_ResponseMarshaller">ResponseMarshaller Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_Method_2_ServiceName">ServiceName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Type.htm" title="Type Property " tocid="P_Grpc_Core_Method_2_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Method<span id="LST73E5C4FC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST73E5C4FC_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST73E5C4FC_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST73E5C4FC_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST73E5C4FC_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST73E5C4FC_2?cpp=::|nu=.");</script>ServiceName Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the name of the service to which this method belongs.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">ServiceName</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ServiceName</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">ServiceName</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> () <span class="keyword">sealed</span>;
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">ServiceName</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+<span class="keyword">override</span> <span class="identifier">ServiceName</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a><h4 class="subHeading">Implements</h4><a href="P_Grpc_Core_IMethod_ServiceName.htm">IMethod<span id="LST73E5C4FC_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST73E5C4FC_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceName</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Method_2.htm">Method<span id="LST73E5C4FC_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST73E5C4FC_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST73E5C4FC_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST73E5C4FC_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_Type.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_Type.htm
new file mode 100644
index 0000000000..76c2f26b0d
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Method_2_Type.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Method(TRequest, TResponse).Type Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Type property" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E.Type property" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse).Type property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.Type" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2.get_Type" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Method`2.Type" /><meta name="Description" content="Gets the type of the method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Method_2_Type" /><meta name="guid" content="P_Grpc_Core_Method_2_Type" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_Method_2_FullName">FullName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Name.htm" title="Name Property " tocid="P_Grpc_Core_Method_2_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_Method_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_Method_2_ResponseMarshaller">ResponseMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_Method_2_ServiceName">ServiceName Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Type.htm" title="Type Property " tocid="P_Grpc_Core_Method_2_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Method<span id="LST1B59ED48_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B59ED48_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST1B59ED48_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B59ED48_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><span id="LST1B59ED48_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B59ED48_2?cpp=::|nu=.");</script>Type Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the type of the method.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">MethodType</span> <span class="identifier">Type</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Type</span> <span class="keyword">As</span> <span class="identifier">MethodType</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">virtual</span> <span class="keyword">property</span> <span class="identifier">MethodType</span> <span class="identifier">Type</span> {
+ <span class="identifier">MethodType</span> <span class="keyword">get</span> () <span class="keyword">sealed</span>;
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">abstract</span> <span class="identifier">Type</span> : <span class="identifier">MethodType</span> <span class="keyword">with</span> <span class="keyword">get</span>
+<span class="keyword">override</span> <span class="identifier">Type</span> : <span class="identifier">MethodType</span> <span class="keyword">with</span> <span class="keyword">get</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_MethodType.htm">MethodType</a><h4 class="subHeading">Implements</h4><a href="P_Grpc_Core_IMethod_Type.htm">IMethod<span id="LST1B59ED48_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B59ED48_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Type</a><br /></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Method_2.htm">Method<span id="LST1B59ED48_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B59ED48_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST1B59ED48_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1B59ED48_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_RpcException_Status.htm b/doc/ref/csharp/html/html/P_Grpc_Core_RpcException_Status.htm
new file mode 100644
index 0000000000..679d1a940e
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_RpcException_Status.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>RpcException.Status Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Status property" /><meta name="System.Keywords" content="RpcException.Status property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.RpcException.Status" /><meta name="Microsoft.Help.F1" content="Grpc.Core.RpcException.get_Status" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.RpcException.Status" /><meta name="Description" content="Resulting status of the call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_RpcException_Status" /><meta name="guid" content="P_Grpc_Core_RpcException_Status" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_RpcException.htm" title="RpcException Properties" tocid="Properties_T_Grpc_Core_RpcException">RpcException Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_RpcException_Status.htm" title="Status Property " tocid="P_Grpc_Core_RpcException_Status">Status Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">RpcException<span id="LSTC5F49DDF_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC5F49DDF_0?cpp=::|nu=.");</script>Status Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Resulting status of the call.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Status</span> <span class="identifier">Status</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Status</span> <span class="keyword">As</span> <span class="identifier">Status</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Status</span> <span class="identifier">Status</span> {
+ <span class="identifier">Status</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Status</span> : <span class="identifier">Status</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Status.htm">Status</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_RpcException.htm">RpcException Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_CancellationToken.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_CancellationToken.htm
new file mode 100644
index 0000000000..15cfa92efb
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_CancellationToken.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.CancellationToken Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CancellationToken property" /><meta name="System.Keywords" content="ServerCallContext.CancellationToken property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.CancellationToken" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.get_CancellationToken" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerCallContext.CancellationToken" /><meta name="Description" content="Cancellation token signals when call is cancelled." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerCallContext_CancellationToken" /><meta name="guid" content="P_Grpc_Core_ServerCallContext_CancellationToken" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_ServerCallContext_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_ServerCallContext_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerCallContext_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Method.htm" title="Method Property " tocid="P_Grpc_Core_ServerCallContext_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Peer.htm" title="Peer Property " tocid="P_Grpc_Core_ServerCallContext_Peer">Peer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm" title="RequestHeaders Property " tocid="P_Grpc_Core_ServerCallContext_RequestHeaders">RequestHeaders Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" title="ResponseTrailers Property " tocid="P_Grpc_Core_ServerCallContext_ResponseTrailers">ResponseTrailers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Status.htm" title="Status Property " tocid="P_Grpc_Core_ServerCallContext_Status">Status Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_ServerCallContext_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LSTB10DDC99_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB10DDC99_0?cpp=::|nu=.");</script>CancellationToken Property </td></tr></table><span class="introStyle"></span><div class="summary">Cancellation token signals when call is cancelled.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">CancellationToken</span> <span class="identifier">CancellationToken</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">CancellationToken</span> <span class="keyword">As</span> <span class="identifier">CancellationToken</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">CancellationToken</span> <span class="identifier">CancellationToken</span> {
+ <span class="identifier">CancellationToken</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">CancellationToken</span> : <span class="identifier">CancellationToken</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd384802" target="_blank">CancellationToken</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Deadline.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Deadline.htm
new file mode 100644
index 0000000000..1c8c57decd
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Deadline.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.Deadline Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Deadline property" /><meta name="System.Keywords" content="ServerCallContext.Deadline property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.Deadline" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.get_Deadline" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerCallContext.Deadline" /><meta name="Description" content="Deadline for this RPC." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerCallContext_Deadline" /><meta name="guid" content="P_Grpc_Core_ServerCallContext_Deadline" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_ServerCallContext_CancellationToken">CancellationToken Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_ServerCallContext_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerCallContext_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Method.htm" title="Method Property " tocid="P_Grpc_Core_ServerCallContext_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Peer.htm" title="Peer Property " tocid="P_Grpc_Core_ServerCallContext_Peer">Peer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm" title="RequestHeaders Property " tocid="P_Grpc_Core_ServerCallContext_RequestHeaders">RequestHeaders Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" title="ResponseTrailers Property " tocid="P_Grpc_Core_ServerCallContext_ResponseTrailers">ResponseTrailers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Status.htm" title="Status Property " tocid="P_Grpc_Core_ServerCallContext_Status">Status Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_ServerCallContext_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LSTD0F7067_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD0F7067_0?cpp=::|nu=.");</script>Deadline Property </td></tr></table><span class="introStyle"></span><div class="summary">Deadline for this RPC.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">DateTime</span> <span class="identifier">Deadline</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Deadline</span> <span class="keyword">As</span> <span class="identifier">DateTime</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">DateTime</span> <span class="identifier">Deadline</span> {
+ <span class="identifier">DateTime</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Deadline</span> : <span class="identifier">DateTime</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/03ybds8y" target="_blank">DateTime</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Host.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Host.htm
new file mode 100644
index 0000000000..88cf207e61
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Host.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.Host Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Host property" /><meta name="System.Keywords" content="ServerCallContext.Host property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.Host" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.get_Host" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerCallContext.Host" /><meta name="Description" content="Name of host called in this RPC." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerCallContext_Host" /><meta name="guid" content="P_Grpc_Core_ServerCallContext_Host" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_ServerCallContext_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_ServerCallContext_Deadline">Deadline Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerCallContext_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Method.htm" title="Method Property " tocid="P_Grpc_Core_ServerCallContext_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Peer.htm" title="Peer Property " tocid="P_Grpc_Core_ServerCallContext_Peer">Peer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm" title="RequestHeaders Property " tocid="P_Grpc_Core_ServerCallContext_RequestHeaders">RequestHeaders Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" title="ResponseTrailers Property " tocid="P_Grpc_Core_ServerCallContext_ResponseTrailers">ResponseTrailers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Status.htm" title="Status Property " tocid="P_Grpc_Core_ServerCallContext_Status">Status Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_ServerCallContext_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LST708CE561_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST708CE561_0?cpp=::|nu=.");</script>Host Property </td></tr></table><span class="introStyle"></span><div class="summary">Name of host called in this RPC.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Host</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Host</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Host</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Host</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Method.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Method.htm
new file mode 100644
index 0000000000..5c8e643be3
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Method.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.Method Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Method property" /><meta name="System.Keywords" content="ServerCallContext.Method property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.Method" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.get_Method" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerCallContext.Method" /><meta name="Description" content="Name of method called in this RPC." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerCallContext_Method" /><meta name="guid" content="P_Grpc_Core_ServerCallContext_Method" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_ServerCallContext_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_ServerCallContext_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerCallContext_Host">Host Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Method.htm" title="Method Property " tocid="P_Grpc_Core_ServerCallContext_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Peer.htm" title="Peer Property " tocid="P_Grpc_Core_ServerCallContext_Peer">Peer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm" title="RequestHeaders Property " tocid="P_Grpc_Core_ServerCallContext_RequestHeaders">RequestHeaders Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" title="ResponseTrailers Property " tocid="P_Grpc_Core_ServerCallContext_ResponseTrailers">ResponseTrailers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Status.htm" title="Status Property " tocid="P_Grpc_Core_ServerCallContext_Status">Status Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_ServerCallContext_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LST3FB77324_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3FB77324_0?cpp=::|nu=.");</script>Method Property </td></tr></table><span class="introStyle"></span><div class="summary">Name of method called in this RPC.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Method</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Method</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Method</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Method</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Peer.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Peer.htm
new file mode 100644
index 0000000000..0222fd07f1
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Peer.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.Peer Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Peer property" /><meta name="System.Keywords" content="ServerCallContext.Peer property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.Peer" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.get_Peer" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerCallContext.Peer" /><meta name="Description" content="Address of the remote endpoint in URI format." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerCallContext_Peer" /><meta name="guid" content="P_Grpc_Core_ServerCallContext_Peer" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_ServerCallContext_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_ServerCallContext_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerCallContext_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Method.htm" title="Method Property " tocid="P_Grpc_Core_ServerCallContext_Method">Method Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Peer.htm" title="Peer Property " tocid="P_Grpc_Core_ServerCallContext_Peer">Peer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm" title="RequestHeaders Property " tocid="P_Grpc_Core_ServerCallContext_RequestHeaders">RequestHeaders Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" title="ResponseTrailers Property " tocid="P_Grpc_Core_ServerCallContext_ResponseTrailers">ResponseTrailers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Status.htm" title="Status Property " tocid="P_Grpc_Core_ServerCallContext_Status">Status Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_ServerCallContext_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LSTA036C407_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA036C407_0?cpp=::|nu=.");</script>Peer Property </td></tr></table><span class="introStyle"></span><div class="summary">Address of the remote endpoint in URI format.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Peer</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Peer</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Peer</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Peer</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_RequestHeaders.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_RequestHeaders.htm
new file mode 100644
index 0000000000..e81a00be35
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_RequestHeaders.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.RequestHeaders Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RequestHeaders property" /><meta name="System.Keywords" content="ServerCallContext.RequestHeaders property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.RequestHeaders" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.get_RequestHeaders" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerCallContext.RequestHeaders" /><meta name="Description" content="Initial metadata sent by client." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerCallContext_RequestHeaders" /><meta name="guid" content="P_Grpc_Core_ServerCallContext_RequestHeaders" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_ServerCallContext_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_ServerCallContext_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerCallContext_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Method.htm" title="Method Property " tocid="P_Grpc_Core_ServerCallContext_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Peer.htm" title="Peer Property " tocid="P_Grpc_Core_ServerCallContext_Peer">Peer Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm" title="RequestHeaders Property " tocid="P_Grpc_Core_ServerCallContext_RequestHeaders">RequestHeaders Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" title="ResponseTrailers Property " tocid="P_Grpc_Core_ServerCallContext_ResponseTrailers">ResponseTrailers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Status.htm" title="Status Property " tocid="P_Grpc_Core_ServerCallContext_Status">Status Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_ServerCallContext_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LST7FC6D30C_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7FC6D30C_0?cpp=::|nu=.");</script>RequestHeaders Property </td></tr></table><span class="introStyle"></span><div class="summary">Initial metadata sent by client.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Metadata</span> <span class="identifier">RequestHeaders</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">RequestHeaders</span> <span class="keyword">As</span> <span class="identifier">Metadata</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Metadata</span>^ <span class="identifier">RequestHeaders</span> {
+ <span class="identifier">Metadata</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">RequestHeaders</span> : <span class="identifier">Metadata</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Metadata.htm">Metadata</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_ResponseTrailers.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_ResponseTrailers.htm
new file mode 100644
index 0000000000..e80e639529
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_ResponseTrailers.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.ResponseTrailers Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ResponseTrailers property" /><meta name="System.Keywords" content="ServerCallContext.ResponseTrailers property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.ResponseTrailers" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.get_ResponseTrailers" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerCallContext.ResponseTrailers" /><meta name="Description" content="Trailers to send back to client after RPC finishes." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerCallContext_ResponseTrailers" /><meta name="guid" content="P_Grpc_Core_ServerCallContext_ResponseTrailers" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_ServerCallContext_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_ServerCallContext_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerCallContext_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Method.htm" title="Method Property " tocid="P_Grpc_Core_ServerCallContext_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Peer.htm" title="Peer Property " tocid="P_Grpc_Core_ServerCallContext_Peer">Peer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm" title="RequestHeaders Property " tocid="P_Grpc_Core_ServerCallContext_RequestHeaders">RequestHeaders Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" title="ResponseTrailers Property " tocid="P_Grpc_Core_ServerCallContext_ResponseTrailers">ResponseTrailers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Status.htm" title="Status Property " tocid="P_Grpc_Core_ServerCallContext_Status">Status Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_ServerCallContext_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LSTF8DE4F16_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF8DE4F16_0?cpp=::|nu=.");</script>ResponseTrailers Property </td></tr></table><span class="introStyle"></span><div class="summary">Trailers to send back to client after RPC finishes.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Metadata</span> <span class="identifier">ResponseTrailers</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ResponseTrailers</span> <span class="keyword">As</span> <span class="identifier">Metadata</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Metadata</span>^ <span class="identifier">ResponseTrailers</span> {
+ <span class="identifier">Metadata</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ResponseTrailers</span> : <span class="identifier">Metadata</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Metadata.htm">Metadata</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Status.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Status.htm
new file mode 100644
index 0000000000..fc2ff6fce2
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_Status.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.Status Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Status property" /><meta name="System.Keywords" content="ServerCallContext.Status property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.Status" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.get_Status" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.set_Status" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerCallContext.Status" /><meta name="Description" content="Status to send back to client after RPC finishes." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerCallContext_Status" /><meta name="guid" content="P_Grpc_Core_ServerCallContext_Status" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_ServerCallContext_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_ServerCallContext_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerCallContext_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Method.htm" title="Method Property " tocid="P_Grpc_Core_ServerCallContext_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Peer.htm" title="Peer Property " tocid="P_Grpc_Core_ServerCallContext_Peer">Peer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm" title="RequestHeaders Property " tocid="P_Grpc_Core_ServerCallContext_RequestHeaders">RequestHeaders Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" title="ResponseTrailers Property " tocid="P_Grpc_Core_ServerCallContext_ResponseTrailers">ResponseTrailers Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Status.htm" title="Status Property " tocid="P_Grpc_Core_ServerCallContext_Status">Status Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_ServerCallContext_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LSTC3876E65_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC3876E65_0?cpp=::|nu=.");</script>Status Property </td></tr></table><span class="introStyle"></span><div class="summary"> Status to send back to client after RPC finishes.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Status</span> <span class="identifier">Status</span> { <span class="keyword">get</span>; <span class="keyword">set</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Property</span> <span class="identifier">Status</span> <span class="keyword">As</span> <span class="identifier">Status</span>
+ <span class="keyword">Get</span>
+ <span class="keyword">Set</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Status</span> <span class="identifier">Status</span> {
+ <span class="identifier">Status</span> <span class="keyword">get</span> ();
+ <span class="keyword">void</span> <span class="keyword">set</span> (<span class="identifier">Status</span> <span class="parameter">value</span>);
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Status</span> : <span class="identifier">Status</span> <span class="keyword">with</span> <span class="keyword">get</span>, <span class="keyword">set</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Status.htm">Status</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_WriteOptions.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_WriteOptions.htm
new file mode 100644
index 0000000000..46365ef1b9
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCallContext_WriteOptions.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext.WriteOptions Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteOptions property" /><meta name="System.Keywords" content="ServerCallContext.WriteOptions property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.WriteOptions" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.get_WriteOptions" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext.set_WriteOptions" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerCallContext.WriteOptions" /><meta name="Description" content="Allows setting write options for the following write. For streaming response calls, this property is also exposed as on IServerStreamWriter for convenience. Both properties are backed by the same underlying value." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerCallContext_WriteOptions" /><meta name="guid" content="P_Grpc_Core_ServerCallContext_WriteOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_ServerCallContext_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_ServerCallContext_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerCallContext_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Method.htm" title="Method Property " tocid="P_Grpc_Core_ServerCallContext_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Peer.htm" title="Peer Property " tocid="P_Grpc_Core_ServerCallContext_Peer">Peer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm" title="RequestHeaders Property " tocid="P_Grpc_Core_ServerCallContext_RequestHeaders">RequestHeaders Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" title="ResponseTrailers Property " tocid="P_Grpc_Core_ServerCallContext_ResponseTrailers">ResponseTrailers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Status.htm" title="Status Property " tocid="P_Grpc_Core_ServerCallContext_Status">Status Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_ServerCallContext_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext<span id="LST7D808072_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7D808072_0?cpp=::|nu=.");</script>WriteOptions Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Allows setting write options for the following write.
+ For streaming response calls, this property is also exposed as on IServerStreamWriter for convenience.
+ Both properties are backed by the same underlying value.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">WriteOptions</span> <span class="identifier">WriteOptions</span> { <span class="keyword">get</span>; <span class="keyword">set</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Property</span> <span class="identifier">WriteOptions</span> <span class="keyword">As</span> <span class="identifier">WriteOptions</span>
+ <span class="keyword">Get</span>
+ <span class="keyword">Set</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">WriteOptions</span>^ <span class="identifier">WriteOptions</span> {
+ <span class="identifier">WriteOptions</span>^ <span class="keyword">get</span> ();
+ <span class="keyword">void</span> <span class="keyword">set</span> (<span class="identifier">WriteOptions</span>^ <span class="parameter">value</span>);
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">WriteOptions</span> : <span class="identifier">WriteOptions</span> <span class="keyword">with</span> <span class="keyword">get</span>, <span class="keyword">set</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_WriteOptions.htm">WriteOptions</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerCredentials_Insecure.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCredentials_Insecure.htm
new file mode 100644
index 0000000000..df7c2a2809
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerCredentials_Insecure.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCredentials.Insecure Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Insecure property" /><meta name="System.Keywords" content="ServerCredentials.Insecure property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCredentials.Insecure" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCredentials.get_Insecure" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerCredentials.Insecure" /><meta name="Description" content="Returns instance of credential that provides no security and will result in creating an unsecure server port with no encryption whatsoever." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerCredentials_Insecure" /><meta name="guid" content="P_Grpc_Core_ServerCredentials_Insecure" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Properties" tocid="Properties_T_Grpc_Core_ServerCredentials">ServerCredentials Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCredentials_Insecure.htm" title="Insecure Property " tocid="P_Grpc_Core_ServerCredentials_Insecure">Insecure Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCredentials<span id="LSTA8F38724_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA8F38724_0?cpp=::|nu=.");</script>Insecure Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Returns instance of credential that provides no security and
+ will result in creating an unsecure server port with no encryption whatsoever.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="identifier">ServerCredentials</span> <span class="identifier">Insecure</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Shared</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Insecure</span> <span class="keyword">As</span> <span class="identifier">ServerCredentials</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">static</span> <span class="keyword">property</span> <span class="identifier">ServerCredentials</span>^ <span class="identifier">Insecure</span> {
+ <span class="identifier">ServerCredentials</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">static</span> <span class="keyword">member</span> <span class="identifier">Insecure</span> : <span class="identifier">ServerCredentials</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_ServerCredentials.htm">ServerCredentials</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCredentials.htm">ServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_BoundPort.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_BoundPort.htm
new file mode 100644
index 0000000000..93075277bf
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_BoundPort.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPort.BoundPort Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="BoundPort property" /><meta name="System.Keywords" content="ServerPort.BoundPort property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.BoundPort" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.get_BoundPort" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerPort.BoundPort" /><meta name="Description" content="summaryP:Grpc.Core.ServerPort.BoundPort" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerPort_BoundPort" /><meta name="guid" content="P_Grpc_Core_ServerPort_BoundPort" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerPort.htm" title="ServerPort Properties" tocid="Properties_T_Grpc_Core_ServerPort">ServerPort Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_BoundPort.htm" title="BoundPort Property " tocid="P_Grpc_Core_ServerPort_BoundPort">BoundPort Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Credentials.htm" title="Credentials Property " tocid="P_Grpc_Core_ServerPort_Credentials">Credentials Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerPort_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Port.htm" title="Port Property " tocid="P_Grpc_Core_ServerPort_Port">Port Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPort<span id="LSTBDBCF25C_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBDBCF25C_0?cpp=::|nu=.");</script>BoundPort Property </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "P:Grpc.Core.ServerPort.BoundPort"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">int</span> <span class="identifier">BoundPort</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">BoundPort</span> <span class="keyword">As</span> <span class="identifier">Integer</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">int</span> <span class="identifier">BoundPort</span> {
+ <span class="identifier">int</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">BoundPort</span> : <span class="identifier">int</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a><br />
+ The port actually bound by the server. This is useful if you let server
+ pick port automatically. <a href="F_Grpc_Core_ServerPort_PickUnused.htm">PickUnused</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerPort.htm">ServerPort Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Credentials.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Credentials.htm
new file mode 100644
index 0000000000..cb062ea866
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Credentials.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPort.Credentials Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Credentials property" /><meta name="System.Keywords" content="ServerPort.Credentials property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.Credentials" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.get_Credentials" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerPort.Credentials" /><meta name="Description" content="summaryP:Grpc.Core.ServerPort.Credentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerPort_Credentials" /><meta name="guid" content="P_Grpc_Core_ServerPort_Credentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerPort.htm" title="ServerPort Properties" tocid="Properties_T_Grpc_Core_ServerPort">ServerPort Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_BoundPort.htm" title="BoundPort Property " tocid="P_Grpc_Core_ServerPort_BoundPort">BoundPort Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Credentials.htm" title="Credentials Property " tocid="P_Grpc_Core_ServerPort_Credentials">Credentials Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerPort_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Port.htm" title="Port Property " tocid="P_Grpc_Core_ServerPort_Port">Port Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPort<span id="LSTB7958D19_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTB7958D19_0?cpp=::|nu=.");</script>Credentials Property </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "P:Grpc.Core.ServerPort.Credentials"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">ServerCredentials</span> <span class="identifier">Credentials</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Credentials</span> <span class="keyword">As</span> <span class="identifier">ServerCredentials</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">ServerCredentials</span>^ <span class="identifier">Credentials</span> {
+ <span class="identifier">ServerCredentials</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Credentials</span> : <span class="identifier">ServerCredentials</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_ServerCredentials.htm">ServerCredentials</a><br />The server credentials.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerPort.htm">ServerPort Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Host.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Host.htm
new file mode 100644
index 0000000000..5788f1ecda
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Host.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPort.Host Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Host property" /><meta name="System.Keywords" content="ServerPort.Host property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.Host" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.get_Host" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerPort.Host" /><meta name="Description" content="summaryP:Grpc.Core.ServerPort.Host" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerPort_Host" /><meta name="guid" content="P_Grpc_Core_ServerPort_Host" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerPort.htm" title="ServerPort Properties" tocid="Properties_T_Grpc_Core_ServerPort">ServerPort Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_BoundPort.htm" title="BoundPort Property " tocid="P_Grpc_Core_ServerPort_BoundPort">BoundPort Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Credentials.htm" title="Credentials Property " tocid="P_Grpc_Core_ServerPort_Credentials">Credentials Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerPort_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Port.htm" title="Port Property " tocid="P_Grpc_Core_ServerPort_Port">Port Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPort<span id="LST41BD6AE5_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST41BD6AE5_0?cpp=::|nu=.");</script>Host Property </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "P:Grpc.Core.ServerPort.Host"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Host</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Host</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Host</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Host</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a><br />The host.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerPort.htm">ServerPort Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Port.htm b/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Port.htm
new file mode 100644
index 0000000000..5db0562f51
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_ServerPort_Port.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPort.Port Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Port property" /><meta name="System.Keywords" content="ServerPort.Port property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.Port" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort.get_Port" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.ServerPort.Port" /><meta name="Description" content="summaryP:Grpc.Core.ServerPort.Port" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_ServerPort_Port" /><meta name="guid" content="P_Grpc_Core_ServerPort_Port" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerPort.htm" title="ServerPort Properties" tocid="Properties_T_Grpc_Core_ServerPort">ServerPort Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_BoundPort.htm" title="BoundPort Property " tocid="P_Grpc_Core_ServerPort_BoundPort">BoundPort Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Credentials.htm" title="Credentials Property " tocid="P_Grpc_Core_ServerPort_Credentials">Credentials Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerPort_Host">Host Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Port.htm" title="Port Property " tocid="P_Grpc_Core_ServerPort_Port">Port Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPort<span id="LSTBDF3CA22_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBDF3CA22_0?cpp=::|nu=.");</script>Port Property </td></tr></table><span class="introStyle"></span><div class="summary"><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;summary&gt; documentation for "P:Grpc.Core.ServerPort.Port"]</p></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">int</span> <span class="identifier">Port</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Port</span> <span class="keyword">As</span> <span class="identifier">Integer</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">int</span> <span class="identifier">Port</span> {
+ <span class="identifier">int</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Port</span> : <span class="identifier">int</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank">Int32</a><br />The port.</div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerPort.htm">ServerPort Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Server_Ports.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Server_Ports.htm
new file mode 100644
index 0000000000..943d8173ea
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Server_Ports.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.Ports Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Ports property" /><meta name="System.Keywords" content="Server.Ports property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.Ports" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.get_Ports" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Server.Ports" /><meta name="Description" content="Ports on which the server will listen once started. Register a port with this server by adding its definition to this collection." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Server_Ports" /><meta name="guid" content="P_Grpc_Core_Server_Ports" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Server.htm" title="Server Properties" tocid="Properties_T_Grpc_Core_Server">Server Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_Ports.htm" title="Ports Property " tocid="P_Grpc_Core_Server_Ports">Ports Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_Services.htm" title="Services Property " tocid="P_Grpc_Core_Server_Services">Services Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_ShutdownTask.htm" title="ShutdownTask Property " tocid="P_Grpc_Core_Server_ShutdownTask">ShutdownTask Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LSTC46C77DC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC46C77DC_0?cpp=::|nu=.");</script>Ports Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Ports on which the server will listen once started. Register a port with this
+ server by adding its definition to this collection.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Server<span id="LSTC46C77DC_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC46C77DC_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection</span> <span class="identifier">Ports</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Ports</span> <span class="keyword">As</span> <span class="identifier">Server<span id="LSTC46C77DC_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC46C77DC_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Server<span id="LSTC46C77DC_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC46C77DC_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection</span>^ <span class="identifier">Ports</span> {
+ <span class="identifier">Server<span id="LSTC46C77DC_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC46C77DC_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Ports</span> : <span class="identifier">Server<span id="LSTC46C77DC_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC46C77DC_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Server_ServerPortCollection.htm">Server<span id="LSTC46C77DC_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC46C77DC_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server.htm">Server Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Server_Services.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Server_Services.htm
new file mode 100644
index 0000000000..ae85da5838
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Server_Services.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.Services Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Services property" /><meta name="System.Keywords" content="Server.Services property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.Services" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.get_Services" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Server.Services" /><meta name="Description" content="Services that will be exported by the server once started. Register a service with this server by adding its definition to this collection." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Server_Services" /><meta name="guid" content="P_Grpc_Core_Server_Services" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Server.htm" title="Server Properties" tocid="Properties_T_Grpc_Core_Server">Server Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_Ports.htm" title="Ports Property " tocid="P_Grpc_Core_Server_Ports">Ports Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_Services.htm" title="Services Property " tocid="P_Grpc_Core_Server_Services">Services Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_ShutdownTask.htm" title="ShutdownTask Property " tocid="P_Grpc_Core_Server_ShutdownTask">ShutdownTask Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LST66D89B60_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST66D89B60_0?cpp=::|nu=.");</script>Services Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Services that will be exported by the server once started. Register a service with this
+ server by adding its definition to this collection.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Server<span id="LST66D89B60_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST66D89B60_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection</span> <span class="identifier">Services</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Services</span> <span class="keyword">As</span> <span class="identifier">Server<span id="LST66D89B60_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST66D89B60_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Server<span id="LST66D89B60_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST66D89B60_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection</span>^ <span class="identifier">Services</span> {
+ <span class="identifier">Server<span id="LST66D89B60_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST66D89B60_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Services</span> : <span class="identifier">Server<span id="LST66D89B60_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST66D89B60_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm">Server<span id="LST66D89B60_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST66D89B60_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server.htm">Server Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Server_ShutdownTask.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Server_ShutdownTask.htm
new file mode 100644
index 0000000000..f9b26163d8
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Server_ShutdownTask.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.ShutdownTask Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ShutdownTask property" /><meta name="System.Keywords" content="Server.ShutdownTask property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.ShutdownTask" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.get_ShutdownTask" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Server.ShutdownTask" /><meta name="Description" content="To allow awaiting termination of the server." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Server_ShutdownTask" /><meta name="guid" content="P_Grpc_Core_Server_ShutdownTask" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Server.htm" title="Server Properties" tocid="Properties_T_Grpc_Core_Server">Server Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_Ports.htm" title="Ports Property " tocid="P_Grpc_Core_Server_Ports">Ports Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_Services.htm" title="Services Property " tocid="P_Grpc_Core_Server_Services">Services Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_ShutdownTask.htm" title="ShutdownTask Property " tocid="P_Grpc_Core_Server_ShutdownTask">ShutdownTask Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LSTC8798B05_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC8798B05_0?cpp=::|nu=.");</script>ShutdownTask Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ To allow awaiting termination of the server.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">Task</span> <span class="identifier">ShutdownTask</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ShutdownTask</span> <span class="keyword">As</span> <span class="identifier">Task</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">Task</span>^ <span class="identifier">ShutdownTask</span> {
+ <span class="identifier">Task</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ShutdownTask</span> : <span class="identifier">Task</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server.htm">Server Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_SslCredentials_KeyCertificatePair.htm b/doc/ref/csharp/html/html/P_Grpc_Core_SslCredentials_KeyCertificatePair.htm
new file mode 100644
index 0000000000..459a8c7a4a
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_SslCredentials_KeyCertificatePair.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslCredentials.KeyCertificatePair Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="KeyCertificatePair property" /><meta name="System.Keywords" content="SslCredentials.KeyCertificatePair property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslCredentials.KeyCertificatePair" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslCredentials.get_KeyCertificatePair" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.SslCredentials.KeyCertificatePair" /><meta name="Description" content="Client side key and certificate pair. If null, client will not use key and certificate pair." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_SslCredentials_KeyCertificatePair" /><meta name="guid" content="P_Grpc_Core_SslCredentials_KeyCertificatePair" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslCredentials.htm" title="SslCredentials Properties" tocid="Properties_T_Grpc_Core_SslCredentials">SslCredentials Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslCredentials_KeyCertificatePair.htm" title="KeyCertificatePair Property " tocid="P_Grpc_Core_SslCredentials_KeyCertificatePair">KeyCertificatePair Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslCredentials_RootCertificates.htm" title="RootCertificates Property " tocid="P_Grpc_Core_SslCredentials_RootCertificates">RootCertificates Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslCredentials<span id="LSTEE43ACE5_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEE43ACE5_0?cpp=::|nu=.");</script>KeyCertificatePair Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Client side key and certificate pair.
+ If null, client will not use key and certificate pair.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">KeyCertificatePair</span> <span class="identifier">KeyCertificatePair</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">KeyCertificatePair</span> <span class="keyword">As</span> <span class="identifier">KeyCertificatePair</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">KeyCertificatePair</span>^ <span class="identifier">KeyCertificatePair</span> {
+ <span class="identifier">KeyCertificatePair</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">KeyCertificatePair</span> : <span class="identifier">KeyCertificatePair</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslCredentials.htm">SslCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_SslCredentials_RootCertificates.htm b/doc/ref/csharp/html/html/P_Grpc_Core_SslCredentials_RootCertificates.htm
new file mode 100644
index 0000000000..730008cad7
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_SslCredentials_RootCertificates.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslCredentials.RootCertificates Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RootCertificates property" /><meta name="System.Keywords" content="SslCredentials.RootCertificates property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslCredentials.RootCertificates" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslCredentials.get_RootCertificates" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.SslCredentials.RootCertificates" /><meta name="Description" content="PEM encoding of the server root certificates." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_SslCredentials_RootCertificates" /><meta name="guid" content="P_Grpc_Core_SslCredentials_RootCertificates" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslCredentials.htm" title="SslCredentials Properties" tocid="Properties_T_Grpc_Core_SslCredentials">SslCredentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslCredentials_KeyCertificatePair.htm" title="KeyCertificatePair Property " tocid="P_Grpc_Core_SslCredentials_KeyCertificatePair">KeyCertificatePair Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslCredentials_RootCertificates.htm" title="RootCertificates Property " tocid="P_Grpc_Core_SslCredentials_RootCertificates">RootCertificates Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslCredentials<span id="LST9E8BA0ED_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9E8BA0ED_0?cpp=::|nu=.");</script>RootCertificates Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ PEM encoding of the server root certificates.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">RootCertificates</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">RootCertificates</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">RootCertificates</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">RootCertificates</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslCredentials.htm">SslCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm b/doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm
new file mode 100644
index 0000000000..0eb8dea6ff
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslServerCredentials.ForceClientAuthentication Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ForceClientAuthentication property" /><meta name="System.Keywords" content="SslServerCredentials.ForceClientAuthentication property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslServerCredentials.ForceClientAuthentication" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslServerCredentials.get_ForceClientAuthentication" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.SslServerCredentials.ForceClientAuthentication" /><meta name="Description" content="If true, the authenticity of client check will be enforced." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication" /><meta name="guid" content="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Properties" tocid="Properties_T_Grpc_Core_SslServerCredentials">SslServerCredentials Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm" title="ForceClientAuthentication Property " tocid="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication">ForceClientAuthentication Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm" title="KeyCertificatePairs Property " tocid="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs">KeyCertificatePairs Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_RootCertificates.htm" title="RootCertificates Property " tocid="P_Grpc_Core_SslServerCredentials_RootCertificates">RootCertificates Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslServerCredentials<span id="LSTCA30CF5E_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA30CF5E_0?cpp=::|nu=.");</script>ForceClientAuthentication Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ If true, the authenticity of client check will be enforced.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">bool</span> <span class="identifier">ForceClientAuthentication</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">ForceClientAuthentication</span> <span class="keyword">As</span> <span class="identifier">Boolean</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">bool</span> <span class="identifier">ForceClientAuthentication</span> {
+ <span class="identifier">bool</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">ForceClientAuthentication</span> : <span class="identifier">bool</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/a28wyd50" target="_blank">Boolean</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm b/doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm
new file mode 100644
index 0000000000..530f0677db
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslServerCredentials.KeyCertificatePairs Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="KeyCertificatePairs property" /><meta name="System.Keywords" content="SslServerCredentials.KeyCertificatePairs property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslServerCredentials.KeyCertificatePairs" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslServerCredentials.get_KeyCertificatePairs" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.SslServerCredentials.KeyCertificatePairs" /><meta name="Description" content="Key-certificate pairs." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs" /><meta name="guid" content="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Properties" tocid="Properties_T_Grpc_Core_SslServerCredentials">SslServerCredentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm" title="ForceClientAuthentication Property " tocid="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication">ForceClientAuthentication Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm" title="KeyCertificatePairs Property " tocid="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs">KeyCertificatePairs Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_RootCertificates.htm" title="RootCertificates Property " tocid="P_Grpc_Core_SslServerCredentials_RootCertificates">RootCertificates Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslServerCredentials<span id="LST66B91F8F_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST66B91F8F_0?cpp=::|nu=.");</script>KeyCertificatePairs Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Key-certificate pairs.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">IList</span>&lt;<span class="identifier">KeyCertificatePair</span>&gt; <span class="identifier">KeyCertificatePairs</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">KeyCertificatePairs</span> <span class="keyword">As</span> <span class="identifier">IList</span>(<span class="keyword">Of</span> <span class="identifier">KeyCertificatePair</span>)
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">IList</span>&lt;<span class="identifier">KeyCertificatePair</span>^&gt;^ <span class="identifier">KeyCertificatePairs</span> {
+ <span class="identifier">IList</span>&lt;<span class="identifier">KeyCertificatePair</span>^&gt;^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">KeyCertificatePairs</span> : <span class="identifier">IList</span>&lt;<span class="identifier">KeyCertificatePair</span>&gt; <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/5y536ey6" target="_blank">IList</a><span id="LST66B91F8F_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST66B91F8F_1?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair</a><span id="LST66B91F8F_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST66B91F8F_2?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_RootCertificates.htm b/doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_RootCertificates.htm
new file mode 100644
index 0000000000..44fb25a557
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_SslServerCredentials_RootCertificates.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslServerCredentials.RootCertificates Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RootCertificates property" /><meta name="System.Keywords" content="SslServerCredentials.RootCertificates property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslServerCredentials.RootCertificates" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslServerCredentials.get_RootCertificates" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.SslServerCredentials.RootCertificates" /><meta name="Description" content="PEM encoded client root certificates." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_SslServerCredentials_RootCertificates" /><meta name="guid" content="P_Grpc_Core_SslServerCredentials_RootCertificates" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Properties" tocid="Properties_T_Grpc_Core_SslServerCredentials">SslServerCredentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm" title="ForceClientAuthentication Property " tocid="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication">ForceClientAuthentication Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm" title="KeyCertificatePairs Property " tocid="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs">KeyCertificatePairs Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_RootCertificates.htm" title="RootCertificates Property " tocid="P_Grpc_Core_SslServerCredentials_RootCertificates">RootCertificates Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslServerCredentials<span id="LSTCD107BDA_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCD107BDA_0?cpp=::|nu=.");</script>RootCertificates Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ PEM encoded client root certificates.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">RootCertificates</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">RootCertificates</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">RootCertificates</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">RootCertificates</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Status_Detail.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Status_Detail.htm
new file mode 100644
index 0000000000..7510c98b0a
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Status_Detail.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Status.Detail Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Detail property" /><meta name="System.Keywords" content="Status.Detail property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Status.Detail" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Status.get_Detail" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Status.Detail" /><meta name="Description" content="Gets the detail." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Status_Detail" /><meta name="guid" content="P_Grpc_Core_Status_Detail" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Status.htm" title="Status Properties" tocid="Properties_T_Grpc_Core_Status">Status Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Status_Detail.htm" title="Detail Property " tocid="P_Grpc_Core_Status_Detail">Detail Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Status_StatusCode.htm" title="StatusCode Property " tocid="P_Grpc_Core_Status_StatusCode">StatusCode Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Status<span id="LSTC6E4E64E_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC6E4E64E_0?cpp=::|nu=.");</script>Detail Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the detail.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">string</span> <span class="identifier">Detail</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Detail</span> <span class="keyword">As</span> <span class="identifier">String</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">String</span>^ <span class="identifier">Detail</span> {
+ <span class="identifier">String</span>^ <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Detail</span> : <span class="identifier">string</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Status.htm">Status Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_Status_StatusCode.htm b/doc/ref/csharp/html/html/P_Grpc_Core_Status_StatusCode.htm
new file mode 100644
index 0000000000..accc218630
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_Status_StatusCode.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Status.StatusCode Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="StatusCode property" /><meta name="System.Keywords" content="Status.StatusCode property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Status.StatusCode" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Status.get_StatusCode" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.Status.StatusCode" /><meta name="Description" content="Gets the gRPC status code. OK indicates success, all other values indicate an error." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_Status_StatusCode" /><meta name="guid" content="P_Grpc_Core_Status_StatusCode" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Status.htm" title="Status Properties" tocid="Properties_T_Grpc_Core_Status">Status Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Status_Detail.htm" title="Detail Property " tocid="P_Grpc_Core_Status_Detail">Detail Property </a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Status_StatusCode.htm" title="StatusCode Property " tocid="P_Grpc_Core_Status_StatusCode">StatusCode Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Status<span id="LST8ACAFB60_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8ACAFB60_0?cpp=::|nu=.");</script>StatusCode Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the gRPC status code. OK indicates success, all other values indicate an error.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">StatusCode</span> <span class="identifier">StatusCode</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">StatusCode</span> <span class="keyword">As</span> <span class="identifier">StatusCode</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">StatusCode</span> <span class="identifier">StatusCode</span> {
+ <span class="identifier">StatusCode</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">StatusCode</span> : <span class="identifier">StatusCode</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_StatusCode.htm">StatusCode</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Status.htm">Status Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/P_Grpc_Core_WriteOptions_Flags.htm b/doc/ref/csharp/html/html/P_Grpc_Core_WriteOptions_Flags.htm
new file mode 100644
index 0000000000..5ef39577b8
--- /dev/null
+++ b/doc/ref/csharp/html/html/P_Grpc_Core_WriteOptions_Flags.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>WriteOptions.Flags Property </title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Flags property" /><meta name="System.Keywords" content="WriteOptions.Flags property" /><meta name="Microsoft.Help.F1" content="Grpc.Core.WriteOptions.Flags" /><meta name="Microsoft.Help.F1" content="Grpc.Core.WriteOptions.get_Flags" /><meta name="Microsoft.Help.Id" content="P:Grpc.Core.WriteOptions.Flags" /><meta name="Description" content="Gets the write flags." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="P_Grpc_Core_WriteOptions_Flags" /><meta name="guid" content="P_Grpc_Core_WriteOptions_Flags" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Properties" tocid="Properties_T_Grpc_Core_WriteOptions">WriteOptions Properties</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_WriteOptions_Flags.htm" title="Flags Property " tocid="P_Grpc_Core_WriteOptions_Flags">Flags Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">WriteOptions<span id="LSTD40C32E3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD40C32E3_0?cpp=::|nu=.");</script>Flags Property </td></tr></table><span class="introStyle"></span><div class="summary">
+ Gets the write flags.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="identifier">WriteFlags</span> <span class="identifier">Flags</span> { <span class="keyword">get</span>; }</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">ReadOnly</span> <span class="keyword">Property</span> <span class="identifier">Flags</span> <span class="keyword">As</span> <span class="identifier">WriteFlags</span>
+ <span class="keyword">Get</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span>:
+<span class="keyword">property</span> <span class="identifier">WriteFlags</span> <span class="identifier">Flags</span> {
+ <span class="identifier">WriteFlags</span> <span class="keyword">get</span> ();
+}</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">member</span> <span class="identifier">Flags</span> : <span class="identifier">WriteFlags</span> <span class="keyword">with</span> <span class="keyword">get</span>
+</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Property Value</h4>Type: <a href="T_Grpc_Core_WriteFlags.htm">WriteFlags</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_WriteOptions.htm">WriteOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm
new file mode 100644
index 0000000000..86ce8b1497
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncClientStreamingCall(TRequest, TResponse) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E class, properties" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse) class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.AsyncClientStreamingCall`2" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_AsyncClientStreamingCall_2" /><meta name="guid" content="Properties_T_Grpc_Core_AsyncClientStreamingCall_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm" title="RequestStream Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream">RequestStream Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm" title="ResponseAsync Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync">ResponseAsync Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncClientStreamingCall<span id="LSTC62EFC7B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC62EFC7B_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTC62EFC7B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC62EFC7B_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LSTC62EFC7B_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC62EFC7B_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC62EFC7B_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC62EFC7B_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm">RequestStream</a></td><td><div class="summary">
+ Async stream to send streaming requests.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm">ResponseAsync</a></td><td><div class="summary">
+ Asynchronous call result.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm">ResponseHeadersAsync</a></td><td><div class="summary">
+ Asynchronous access to response headers.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncClientStreamingCall_2.htm">AsyncClientStreamingCall<span id="LSTC62EFC7B_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC62EFC7B_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC62EFC7B_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC62EFC7B_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm
new file mode 100644
index 0000000000..40c4705d23
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncDuplexStreamingCall(TRequest, TResponse) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E class, properties" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse) class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.AsyncDuplexStreamingCall`2" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2" /><meta name="guid" content="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm" title="RequestStream Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream">RequestStream Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm" title="ResponseStream Property " tocid="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream">ResponseStream Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncDuplexStreamingCall<span id="LSTE7F59294_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE7F59294_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTE7F59294_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE7F59294_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LSTE7F59294_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE7F59294_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTE7F59294_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE7F59294_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm">RequestStream</a></td><td><div class="summary">
+ Async stream to send streaming requests.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm">ResponseHeadersAsync</a></td><td><div class="summary">
+ Asynchronous access to response headers.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm">ResponseStream</a></td><td><div class="summary">
+ Async stream to read streaming responses.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm">AsyncDuplexStreamingCall<span id="LSTE7F59294_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE7F59294_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTE7F59294_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE7F59294_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm
new file mode 100644
index 0000000000..7d3a77b2cb
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncServerStreamingCall(TResponse) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncServerStreamingCall%3CTResponse%3E class, properties" /><meta name="System.Keywords" content="AsyncServerStreamingCall(Of TResponse) class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.AsyncServerStreamingCall`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_AsyncServerStreamingCall_1" /><meta name="guid" content="Properties_T_Grpc_Core_AsyncServerStreamingCall_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm" title="ResponseStream Property " tocid="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream">ResponseStream Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncServerStreamingCall<span id="LST5247EF2A_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5247EF2A_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LST5247EF2A_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5247EF2A_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall<span id="LST5247EF2A_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5247EF2A_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST5247EF2A_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5247EF2A_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm">ResponseHeadersAsync</a></td><td><div class="summary">
+ Asynchronous access to response headers.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm">ResponseStream</a></td><td><div class="summary">
+ Async stream to read streaming responses.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncServerStreamingCall_1.htm">AsyncServerStreamingCall<span id="LST5247EF2A_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5247EF2A_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST5247EF2A_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5247EF2A_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncUnaryCall_1.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncUnaryCall_1.htm
new file mode 100644
index 0000000000..d9e266b437
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_AsyncUnaryCall_1.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncUnaryCall(TResponse) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTResponse%3E class, properties" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TResponse) class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.AsyncUnaryCall`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_AsyncUnaryCall_1" /><meta name="guid" content="Properties_T_Grpc_Core_AsyncUnaryCall_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm" title="ResponseAsync Property " tocid="P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync">ResponseAsync Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm" title="ResponseHeadersAsync Property " tocid="P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync">ResponseHeadersAsync Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncUnaryCall<span id="LSTF5A830B8_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF5A830B8_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LSTF5A830B8_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF5A830B8_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LSTF5A830B8_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF5A830B8_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTF5A830B8_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF5A830B8_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm">ResponseAsync</a></td><td><div class="summary">
+ Asynchronous call result.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm">ResponseHeadersAsync</a></td><td><div class="summary">
+ Asynchronous access to response headers.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_AsyncUnaryCall_1.htm">AsyncUnaryCall<span id="LSTF5A830B8_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF5A830B8_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTF5A830B8_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF5A830B8_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_CallInvocationDetails_2.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_CallInvocationDetails_2.htm
new file mode 100644
index 0000000000..258b83626a
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_CallInvocationDetails_2.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E structure, properties" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse) structure, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.CallInvocationDetails`2" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_CallInvocationDetails_2" /><meta name="guid" content="Properties_T_Grpc_Core_CallInvocationDetails_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Channel">Channel Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Host.htm" title="Host Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Method.htm" title="Method Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_Options.htm" title="Options Property " tocid="P_Grpc_Core_CallInvocationDetails_2_Options">Options Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller">ResponseMarshaller Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LSTD145846E_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD145846E_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTD145846E_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD145846E_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LSTD145846E_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD145846E_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTD145846E_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD145846E_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_Channel.htm">Channel</a></td><td><div class="summary">
+ Get channel associated with this call.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_Host.htm">Host</a></td><td><div class="summary">
+ Get name of host.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_Method.htm">Method</a></td><td><div class="summary">
+ Gets name of method to be called.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_Options.htm">Options</a></td><td><div class="summary">
+ Gets the call options.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm">RequestMarshaller</a></td><td><div class="summary">
+ Gets marshaller used to serialize requests.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm">ResponseMarshaller</a></td><td><div class="summary">
+ Gets marshaller used to deserialized responses.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallInvocationDetails_2.htm">CallInvocationDetails<span id="LSTD145846E_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD145846E_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTD145846E_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD145846E_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_CallOptions.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_CallOptions.htm
new file mode 100644
index 0000000000..53786c4c48
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_CallOptions.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CallOptions structure, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.CallOptions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_CallOptions" /><meta name="guid" content="Properties_T_Grpc_Core_CallOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallOptions.htm" title="CallOptions Properties" tocid="Properties_T_Grpc_Core_CallOptions">CallOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_CallOptions_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_CallOptions_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_Headers.htm" title="Headers Property " tocid="P_Grpc_Core_CallOptions_Headers">Headers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_PropagationToken.htm" title="PropagationToken Property " tocid="P_Grpc_Core_CallOptions_PropagationToken">PropagationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_CallOptions_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_CallOptions_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_CallOptions.htm">CallOptions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallOptions_CancellationToken.htm">CancellationToken</a></td><td><div class="summary">
+ Token that can be used for cancelling the call.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallOptions_Deadline.htm">Deadline</a></td><td><div class="summary">
+ Call deadline.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallOptions_Headers.htm">Headers</a></td><td><div class="summary">
+ Headers to send at the beginning of the call.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallOptions_PropagationToken.htm">PropagationToken</a></td><td><div class="summary">
+ Token for propagating parent call context.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallOptions_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Write options that will be used for this call.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_CallOptions.htm">CallOptions Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Channel.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Channel.htm
new file mode 100644
index 0000000000..d2b2c776ea
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Channel.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Channel class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.Channel" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_Channel" /><meta name="guid" content="Properties_T_Grpc_Core_Channel" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Channel.htm" title="Channel Properties" tocid="Properties_T_Grpc_Core_Channel">Channel Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_ResolvedTarget.htm" title="ResolvedTarget Property " tocid="P_Grpc_Core_Channel_ResolvedTarget">ResolvedTarget Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_State.htm" title="State Property " tocid="P_Grpc_Core_Channel_State">State Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Channel_Target.htm" title="Target Property " tocid="P_Grpc_Core_Channel_Target">Target Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Channel.htm">Channel</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Channel_ResolvedTarget.htm">ResolvedTarget</a></td><td><div class="summary">Resolved address of the remote endpoint in URI format.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Channel_State.htm">State</a></td><td><div class="summary">
+ Gets current connectivity state of this channel.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Channel_Target.htm">Target</a></td><td><div class="summary">The original target used to create the channel.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Channel.htm">Channel Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ChannelOption.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ChannelOption.htm
new file mode 100644
index 0000000000..a788a1d809
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ChannelOption.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ChannelOption class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.ChannelOption" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_ChannelOption" /><meta name="guid" content="Properties_T_Grpc_Core_ChannelOption" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ChannelOption.htm" title="ChannelOption Properties" tocid="Properties_T_Grpc_Core_ChannelOption">ChannelOption Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_IntValue.htm" title="IntValue Property " tocid="P_Grpc_Core_ChannelOption_IntValue">IntValue Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_Name.htm" title="Name Property " tocid="P_Grpc_Core_ChannelOption_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_StringValue.htm" title="StringValue Property " tocid="P_Grpc_Core_ChannelOption_StringValue">StringValue Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ChannelOption_Type.htm" title="Type Property " tocid="P_Grpc_Core_ChannelOption_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ChannelOption.htm">ChannelOption</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ChannelOption_IntValue.htm">IntValue</a></td><td><div class="summary">
+ Gets the integer value the <span class="code">ChannelOption</span>.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ChannelOption_Name.htm">Name</a></td><td><div class="summary">
+ Gets the name of the <span class="code">ChannelOption</span>.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ChannelOption_StringValue.htm">StringValue</a></td><td><div class="summary">
+ Gets the string value the <span class="code">ChannelOption</span>.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ChannelOption_Type.htm">Type</a></td><td><div class="summary">
+ Gets the type of the <span class="code">ChannelOption</span>.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ChannelOption.htm">ChannelOption Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ClientBase.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ClientBase.htm
new file mode 100644
index 0000000000..eb63eea16b
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ClientBase.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ClientBase Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ClientBase class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.ClientBase" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_ClientBase" /><meta name="guid" content="Properties_T_Grpc_Core_ClientBase" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ClientBase.htm" title="ClientBase Properties" tocid="Properties_T_Grpc_Core_ClientBase">ClientBase Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_Channel.htm" title="Channel Property " tocid="P_Grpc_Core_ClientBase_Channel">Channel Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_HeaderInterceptor.htm" title="HeaderInterceptor Property " tocid="P_Grpc_Core_ClientBase_HeaderInterceptor">HeaderInterceptor Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ClientBase_Host.htm" title="Host Property " tocid="P_Grpc_Core_ClientBase_Host">Host Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ClientBase Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ClientBase.htm">ClientBase</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ClientBase_Channel.htm">Channel</a></td><td><div class="summary">
+ Channel associated with this client.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ClientBase_HeaderInterceptor.htm">HeaderInterceptor</a></td><td><div class="summary">
+ Can be used to register a custom header (request metadata) interceptor.
+ The interceptor is invoked each time a new call on this client is started.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ClientBase_Host.htm">Host</a></td><td><div class="summary">
+ gRPC supports multiple "hosts" being served by a single server.
+ This property can be used to set the target host explicitly.
+ By default, this will be set to <span class="code">null</span> with the meaning
+ "use default host".
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ClientBase.htm">ClientBase Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ContextPropagationOptions.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ContextPropagationOptions.htm
new file mode 100644
index 0000000000..f32cf20469
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ContextPropagationOptions.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ContextPropagationOptions Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ContextPropagationOptions class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.ContextPropagationOptions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_ContextPropagationOptions" /><meta name="guid" content="Properties_T_Grpc_Core_ContextPropagationOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Properties" tocid="Properties_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm" title="IsPropagateCancellation Property " tocid="P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation">IsPropagateCancellation Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm" title="IsPropagateDeadline Property " tocid="P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline">IsPropagateDeadline Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ContextPropagationOptions Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm">IsPropagateCancellation</a></td><td><div class="summary"><span class="code">true</span> if parent call's cancellation token should be propagated to the child call.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm">IsPropagateDeadline</a></td><td><div class="summary"><span class="code">true</span> if parent call's deadline should be propagated to the child call.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ContextPropagationOptions.htm">ContextPropagationOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Credentials.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Credentials.htm
new file mode 100644
index 0000000000..acc2578652
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Credentials.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Credentials Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Credentials class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.Credentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_Credentials" /><meta name="guid" content="Properties_T_Grpc_Core_Credentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Credentials.htm" title="Credentials Properties" tocid="Properties_T_Grpc_Core_Credentials">Credentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Credentials_Insecure.htm" title="Insecure Property " tocid="P_Grpc_Core_Credentials_Insecure">Insecure Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Credentials Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Credentials.htm">Credentials</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="P_Grpc_Core_Credentials_Insecure.htm">Insecure</a></td><td><div class="summary">
+ Returns instance of credential that provides no security and
+ will result in creating an unsecure channel with no encryption whatsoever.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Credentials.htm">Credentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_GrpcEnvironment.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_GrpcEnvironment.htm
new file mode 100644
index 0000000000..438d48f35a
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_GrpcEnvironment.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>GrpcEnvironment Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GrpcEnvironment class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.GrpcEnvironment" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_GrpcEnvironment" /><meta name="guid" content="Properties_T_Grpc_Core_GrpcEnvironment" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Properties" tocid="Properties_T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_GrpcEnvironment_Logger.htm" title="Logger Property " tocid="P_Grpc_Core_GrpcEnvironment_Logger">Logger Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">GrpcEnvironment Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_GrpcEnvironment.htm">GrpcEnvironment</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="P_Grpc_Core_GrpcEnvironment_Logger.htm">Logger</a></td><td><div class="summary">
+ Gets application-wide logger used by gRPC.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_GrpcEnvironment.htm">GrpcEnvironment Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IAsyncStreamReader_1.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IAsyncStreamReader_1.htm
new file mode 100644
index 0000000000..53aa3b5f90
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IAsyncStreamReader_1.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IAsyncStreamReader(T) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IAsyncStreamReader%3CT%3E interface, properties" /><meta name="System.Keywords" content="IAsyncStreamReader(Of T) interface, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.IAsyncStreamReader`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_IAsyncStreamReader_1" /><meta name="guid" content="Properties_T_Grpc_Core_IAsyncStreamReader_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Properties_T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Properties" tocid="Properties_T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Methods" tocid="Methods_T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IAsyncStreamReader<span id="LSTD20F0A63_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD20F0A63_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTD20F0A63_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD20F0A63_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_IAsyncStreamReader_1.htm">IAsyncStreamReader<span id="LSTD20F0A63_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD20F0A63_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTD20F0A63_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD20F0A63_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><span class="nolink">Current</span></td><td> (Inherited from <span class="nolink">IAsyncEnumerator</span><span id="LSTD20F0A63_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD20F0A63_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><a href="T_Grpc_Core_IAsyncStreamReader_1.htm"><span class="typeparameter">T</span></a><span id="LSTD20F0A63_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD20F0A63_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IAsyncStreamReader_1.htm">IAsyncStreamReader<span id="LSTD20F0A63_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD20F0A63_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTD20F0A63_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTD20F0A63_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm
new file mode 100644
index 0000000000..ad71094d4b
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IAsyncStreamWriter(T) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IAsyncStreamWriter%3CT%3E interface, properties" /><meta name="System.Keywords" content="IAsyncStreamWriter(Of T) interface, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.IAsyncStreamWriter`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_IAsyncStreamWriter_1" /><meta name="guid" content="Properties_T_Grpc_Core_IAsyncStreamWriter_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Properties" tocid="Properties_T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IAsyncStreamWriter<span id="LST4B9417F9_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4B9417F9_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST4B9417F9_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4B9417F9_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST4B9417F9_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4B9417F9_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST4B9417F9_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4B9417F9_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Write options that will be used for the next write.
+ If null, default options will be used.
+ Once set, this property maintains its value across subsequent
+ writes.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST4B9417F9_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4B9417F9_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST4B9417F9_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4B9417F9_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IClientStreamWriter_1.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IClientStreamWriter_1.htm
new file mode 100644
index 0000000000..f04ab0d40d
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IClientStreamWriter_1.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IClientStreamWriter(T) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IClientStreamWriter%3CT%3E interface, properties" /><meta name="System.Keywords" content="IClientStreamWriter(Of T) interface, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.IClientStreamWriter`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_IClientStreamWriter_1" /><meta name="guid" content="Properties_T_Grpc_Core_IClientStreamWriter_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Properties_T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Properties" tocid="Properties_T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Methods" tocid="Methods_T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IClientStreamWriter<span id="LST726B2644_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST726B2644_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST726B2644_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST726B2644_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_IClientStreamWriter_1.htm">IClientStreamWriter<span id="LST726B2644_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST726B2644_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST726B2644_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST726B2644_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Write options that will be used for the next write.
+ If null, default options will be used.
+ Once set, this property maintains its value across subsequent
+ writes.
+ </div> (Inherited from <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST726B2644_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST726B2644_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST726B2644_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST726B2644_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IClientStreamWriter_1.htm">IClientStreamWriter<span id="LST726B2644_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST726B2644_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST726B2644_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST726B2644_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IHasWriteOptions.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IHasWriteOptions.htm
new file mode 100644
index 0000000000..fd1f5ca0c2
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IHasWriteOptions.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IHasWriteOptions Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IHasWriteOptions interface, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.IHasWriteOptions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_IHasWriteOptions" /><meta name="guid" content="Properties_T_Grpc_Core_IHasWriteOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Properties" tocid="Properties_T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IHasWriteOptions_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_IHasWriteOptions_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IHasWriteOptions Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_IHasWriteOptions.htm">IHasWriteOptions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IHasWriteOptions_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Gets or sets the write options.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IHasWriteOptions.htm">IHasWriteOptions Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IMethod.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IMethod.htm
new file mode 100644
index 0000000000..efa7de8377
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IMethod.htm
@@ -0,0 +1,12 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IMethod Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IMethod interface, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.IMethod" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_IMethod" /><meta name="guid" content="Properties_T_Grpc_Core_IMethod" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IMethod.htm" title="IMethod Properties" tocid="Properties_T_Grpc_Core_IMethod">IMethod Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_IMethod_FullName">FullName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_Name.htm" title="Name Property " tocid="P_Grpc_Core_IMethod_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_IMethod_ServiceName">ServiceName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_IMethod_Type.htm" title="Type Property " tocid="P_Grpc_Core_IMethod_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IMethod Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_IMethod.htm">IMethod</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IMethod_FullName.htm">FullName</a></td><td><div class="summary">
+ Gets the fully qualified name of the method. On the server side, methods are dispatched
+ based on this name.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IMethod_Name.htm">Name</a></td><td><div class="summary">
+ Gets the unqualified name of the method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IMethod_ServiceName.htm">ServiceName</a></td><td><div class="summary">
+ Gets the name of the service to which this method belongs.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IMethod_Type.htm">Type</a></td><td><div class="summary">
+ Gets the type of the method.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IMethod.htm">IMethod Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IServerStreamWriter_1.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IServerStreamWriter_1.htm
new file mode 100644
index 0000000000..0bebdd5711
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_IServerStreamWriter_1.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IServerStreamWriter(T) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IServerStreamWriter%3CT%3E interface, properties" /><meta name="System.Keywords" content="IServerStreamWriter(Of T) interface, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.IServerStreamWriter`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_IServerStreamWriter_1" /><meta name="guid" content="Properties_T_Grpc_Core_IServerStreamWriter_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="Properties_T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Properties" tocid="Properties_T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Methods" tocid="Methods_T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IServerStreamWriter<span id="LST8B285F68_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B285F68_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST8B285F68_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B285F68_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_IServerStreamWriter_1.htm">IServerStreamWriter<span id="LST8B285F68_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B285F68_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST8B285F68_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B285F68_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Write options that will be used for the next write.
+ If null, default options will be used.
+ Once set, this property maintains its value across subsequent
+ writes.
+ </div> (Inherited from <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST8B285F68_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B285F68_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST8B285F68_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B285F68_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_IServerStreamWriter_1.htm">IServerStreamWriter<span id="LST8B285F68_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B285F68_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST8B285F68_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8B285F68_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Interface</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_KeyCertificatePair.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_KeyCertificatePair.htm
new file mode 100644
index 0000000000..286a0cec9e
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_KeyCertificatePair.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>KeyCertificatePair Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="KeyCertificatePair class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.KeyCertificatePair" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_KeyCertificatePair" /><meta name="guid" content="Properties_T_Grpc_Core_KeyCertificatePair" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Properties" tocid="Properties_T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_KeyCertificatePair_CertificateChain.htm" title="CertificateChain Property " tocid="P_Grpc_Core_KeyCertificatePair_CertificateChain">CertificateChain Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_KeyCertificatePair_PrivateKey.htm" title="PrivateKey Property " tocid="P_Grpc_Core_KeyCertificatePair_PrivateKey">PrivateKey Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">KeyCertificatePair Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_KeyCertificatePair_CertificateChain.htm">CertificateChain</a></td><td><div class="summary">
+ PEM encoded certificate chain.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_KeyCertificatePair_PrivateKey.htm">PrivateKey</a></td><td><div class="summary">
+ PEM encoded private key.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_KeyCertificatePair.htm">KeyCertificatePair Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Marshaller_1.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Marshaller_1.htm
new file mode 100644
index 0000000000..2f8b99b98e
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Marshaller_1.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshaller(T) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Marshaller%3CT%3E structure, properties" /><meta name="System.Keywords" content="Marshaller(Of T) structure, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.Marshaller`1" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_Marshaller_1" /><meta name="guid" content="Properties_T_Grpc_Core_Marshaller_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Properties" tocid="Properties_T_Grpc_Core_Marshaller_1">Marshaller(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Marshaller_1_Deserializer.htm" title="Deserializer Property " tocid="P_Grpc_Core_Marshaller_1_Deserializer">Deserializer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Marshaller_1_Serializer.htm" title="Serializer Property " tocid="P_Grpc_Core_Marshaller_1_Serializer">Serializer Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshaller<span id="LST8E942DF6_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E942DF6_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST8E942DF6_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E942DF6_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Marshaller_1.htm">Marshaller<span id="LST8E942DF6_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E942DF6_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST8E942DF6_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E942DF6_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Marshaller_1_Deserializer.htm">Deserializer</a></td><td><div class="summary">
+ Gets the deserializer function.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Marshaller_1_Serializer.htm">Serializer</a></td><td><div class="summary">
+ Gets the serializer function.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Marshaller_1.htm">Marshaller<span id="LST8E942DF6_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E942DF6_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST8E942DF6_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E942DF6_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Marshallers.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Marshallers.htm
new file mode 100644
index 0000000000..c104a3c2db
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Marshallers.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshallers Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Marshallers class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.Marshallers" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_Marshallers" /><meta name="guid" content="Properties_T_Grpc_Core_Marshallers" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Marshallers.htm" title="Marshallers Properties" tocid="Properties_T_Grpc_Core_Marshallers">Marshallers Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Marshallers_StringMarshaller.htm" title="StringMarshaller Property " tocid="P_Grpc_Core_Marshallers_StringMarshaller">StringMarshaller Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshallers Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Marshallers.htm">Marshallers</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="P_Grpc_Core_Marshallers_StringMarshaller.htm">StringMarshaller</a></td><td><div class="summary">
+ Returns a marshaller for <span class="code">string</span> type. This is useful for testing.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Marshallers.htm">Marshallers Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Metadata.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Metadata.htm
new file mode 100644
index 0000000000..48674e9e0f
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Metadata.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Metadata class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.Metadata" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_Metadata" /><meta name="guid" content="Properties_T_Grpc_Core_Metadata" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata.htm" title="Metadata Properties" tocid="Properties_T_Grpc_Core_Metadata">Metadata Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Count.htm" title="Count Property " tocid="P_Grpc_Core_Metadata_Count">Count Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_IsReadOnly.htm" title="IsReadOnly Property " tocid="P_Grpc_Core_Metadata_IsReadOnly">IsReadOnly Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Item.htm" title="Item Property " tocid="P_Grpc_Core_Metadata_Item">Item Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Metadata.htm">Metadata</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Count.htm">Count</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_IsReadOnly.htm">IsReadOnly</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Item.htm">Item</a></td><td /></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata.htm">Metadata Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Metadata_Entry.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Metadata_Entry.htm
new file mode 100644
index 0000000000..30f20816be
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Metadata_Entry.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Entry Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Entry structure, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.Metadata.Entry" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_Metadata_Entry" /><meta name="guid" content="Properties_T_Grpc_Core_Metadata_Entry" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata_Entry.htm" title="Entry Properties" tocid="Properties_T_Grpc_Core_Metadata_Entry">Entry Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_IsBinary.htm" title="IsBinary Property " tocid="P_Grpc_Core_Metadata_Entry_IsBinary">IsBinary Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_Key.htm" title="Key Property " tocid="P_Grpc_Core_Metadata_Entry_Key">Key Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_Value.htm" title="Value Property " tocid="P_Grpc_Core_Metadata_Entry_Value">Value Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Metadata_Entry_ValueBytes.htm" title="ValueBytes Property " tocid="P_Grpc_Core_Metadata_Entry_ValueBytes">ValueBytes Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Entry Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST99BD1037_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99BD1037_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Entry_IsBinary.htm">IsBinary</a></td><td><div class="summary">
+ Returns <span class="code">true</span> if this entry is a binary-value entry.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Entry_Key.htm">Key</a></td><td><div class="summary">
+ Gets the metadata entry key.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Entry_Value.htm">Value</a></td><td><div class="summary">
+ Gets the string value of this metadata entry.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Entry_ValueBytes.htm">ValueBytes</a></td><td><div class="summary">
+ Gets the binary value of this metadata entry.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Metadata_Entry.htm">Metadata<span id="LST99BD1037_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST99BD1037_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Method_2.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Method_2.htm
new file mode 100644
index 0000000000..776f803598
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Method_2.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Method(TRequest, TResponse) Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E class, properties" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse) class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.Method`2" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_Method_2" /><meta name="guid" content="Properties_T_Grpc_Core_Method_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_FullName.htm" title="FullName Property " tocid="P_Grpc_Core_Method_2_FullName">FullName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Name.htm" title="Name Property " tocid="P_Grpc_Core_Method_2_Name">Name Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_RequestMarshaller.htm" title="RequestMarshaller Property " tocid="P_Grpc_Core_Method_2_RequestMarshaller">RequestMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ResponseMarshaller.htm" title="ResponseMarshaller Property " tocid="P_Grpc_Core_Method_2_ResponseMarshaller">ResponseMarshaller Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_ServiceName.htm" title="ServiceName Property " tocid="P_Grpc_Core_Method_2_ServiceName">ServiceName Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Method_2_Type.htm" title="Type Property " tocid="P_Grpc_Core_Method_2_Type">Type Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Method<span id="LST5F3646C5_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5F3646C5_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST5F3646C5_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5F3646C5_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Method_2.htm">Method<span id="LST5F3646C5_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5F3646C5_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST5F3646C5_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5F3646C5_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a> generic type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_FullName.htm">FullName</a></td><td><div class="summary">
+ Gets the fully qualified name of the method. On the server side, methods are dispatched
+ based on this name.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_Name.htm">Name</a></td><td><div class="summary">
+ Gets the unqualified name of the method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_RequestMarshaller.htm">RequestMarshaller</a></td><td><div class="summary">
+ Gets the marshaller used for request messages.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_ResponseMarshaller.htm">ResponseMarshaller</a></td><td><div class="summary">
+ Gets the marshaller used for response messages.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_ServiceName.htm">ServiceName</a></td><td><div class="summary">
+ Gets the name of the service to which this method belongs.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_Type.htm">Type</a></td><td><div class="summary">
+ Gets the type of the method.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Method_2.htm">Method<span id="LST5F3646C5_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5F3646C5_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST5F3646C5_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5F3646C5_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script> Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_RpcException.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_RpcException.htm
new file mode 100644
index 0000000000..2d40825eef
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_RpcException.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>RpcException Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RpcException class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.RpcException" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_RpcException" /><meta name="guid" content="Properties_T_Grpc_Core_RpcException" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_RpcException.htm" title="RpcException Properties" tocid="Properties_T_Grpc_Core_RpcException">RpcException Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_RpcException_Status.htm" title="Status Property " tocid="P_Grpc_Core_RpcException_Status">Status Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">RpcException Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_RpcException.htm">RpcException</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2wyfbc48" target="_blank">Data</a></td><td><div class="summary">Gets a collection of key/value pairs that provide additional user-defined information about the exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/71tawy4s" target="_blank">HelpLink</a></td><td><div class="summary">Gets or sets a link to the help file associated with this exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/sh5cw61c" target="_blank">HResult</a></td><td><div class="summary">Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/902sca80" target="_blank">InnerException</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a> instance that caused the current exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/9btwf6wk" target="_blank">Message</a></td><td><div class="summary">Gets a message that describes the current exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/85weac5w" target="_blank">Source</a></td><td><div class="summary">Gets or sets the name of the application or the object that causes the error.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dxzhy005" target="_blank">StackTrace</a></td><td><div class="summary">Gets a string representation of the immediate frames on the call stack.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_RpcException_Status.htm">Status</a></td><td><div class="summary">
+ Resulting status of the call.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2wchw354" target="_blank">TargetSite</a></td><td><div class="summary">Gets the method that throws the current exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_RpcException.htm">RpcException Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Server.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Server.htm
new file mode 100644
index 0000000000..38762cc5a8
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Server.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Server class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.Server" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_Server" /><meta name="guid" content="Properties_T_Grpc_Core_Server" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Server.htm" title="Server Properties" tocid="Properties_T_Grpc_Core_Server">Server Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_Ports.htm" title="Ports Property " tocid="P_Grpc_Core_Server_Ports">Ports Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_Services.htm" title="Services Property " tocid="P_Grpc_Core_Server_Services">Services Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Server_ShutdownTask.htm" title="ShutdownTask Property " tocid="P_Grpc_Core_Server_ShutdownTask">ShutdownTask Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Server.htm">Server</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Server_Ports.htm">Ports</a></td><td><div class="summary">
+ Ports on which the server will listen once started. Register a port with this
+ server by adding its definition to this collection.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Server_Services.htm">Services</a></td><td><div class="summary">
+ Services that will be exported by the server once started. Register a service with this
+ server by adding its definition to this collection.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Server_ShutdownTask.htm">ShutdownTask</a></td><td><div class="summary">
+ To allow awaiting termination of the server.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Server.htm">Server Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerCallContext.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerCallContext.htm
new file mode 100644
index 0000000000..4d5d01cccc
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerCallContext.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerCallContext class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.ServerCallContext" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_ServerCallContext" /><meta name="guid" content="Properties_T_Grpc_Core_ServerCallContext" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_CancellationToken.htm" title="CancellationToken Property " tocid="P_Grpc_Core_ServerCallContext_CancellationToken">CancellationToken Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Deadline.htm" title="Deadline Property " tocid="P_Grpc_Core_ServerCallContext_Deadline">Deadline Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerCallContext_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Method.htm" title="Method Property " tocid="P_Grpc_Core_ServerCallContext_Method">Method Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Peer.htm" title="Peer Property " tocid="P_Grpc_Core_ServerCallContext_Peer">Peer Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm" title="RequestHeaders Property " tocid="P_Grpc_Core_ServerCallContext_RequestHeaders">RequestHeaders Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" title="ResponseTrailers Property " tocid="P_Grpc_Core_ServerCallContext_ResponseTrailers">ResponseTrailers Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_Status.htm" title="Status Property " tocid="P_Grpc_Core_ServerCallContext_Status">Status Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCallContext_WriteOptions.htm" title="WriteOptions Property " tocid="P_Grpc_Core_ServerCallContext_WriteOptions">WriteOptions Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_CancellationToken.htm">CancellationToken</a></td><td><div class="summary">Cancellation token signals when call is cancelled.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_Deadline.htm">Deadline</a></td><td><div class="summary">Deadline for this RPC.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_Host.htm">Host</a></td><td><div class="summary">Name of host called in this RPC.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_Method.htm">Method</a></td><td><div class="summary">Name of method called in this RPC.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_Peer.htm">Peer</a></td><td><div class="summary">Address of the remote endpoint in URI format.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm">RequestHeaders</a></td><td><div class="summary">Initial metadata sent by client.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm">ResponseTrailers</a></td><td><div class="summary">Trailers to send back to client after RPC finishes.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_Status.htm">Status</a></td><td><div class="summary"> Status to send back to client after RPC finishes.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Allows setting write options for the following write.
+ For streaming response calls, this property is also exposed as on IServerStreamWriter for convenience.
+ Both properties are backed by the same underlying value.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCallContext.htm">ServerCallContext Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerCredentials.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerCredentials.htm
new file mode 100644
index 0000000000..701aba7ee8
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerCredentials.htm
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCredentials Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerCredentials class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.ServerCredentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_ServerCredentials" /><meta name="guid" content="Properties_T_Grpc_Core_ServerCredentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Properties" tocid="Properties_T_Grpc_Core_ServerCredentials">ServerCredentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerCredentials_Insecure.htm" title="Insecure Property " tocid="P_Grpc_Core_ServerCredentials_Insecure">Insecure Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCredentials Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ServerCredentials.htm">ServerCredentials</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="P_Grpc_Core_ServerCredentials_Insecure.htm">Insecure</a></td><td><div class="summary">
+ Returns instance of credential that provides no security and
+ will result in creating an unsecure server port with no encryption whatsoever.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerCredentials.htm">ServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerPort.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerPort.htm
new file mode 100644
index 0000000000..454a82575e
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_ServerPort.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPort Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerPort class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.ServerPort" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_ServerPort" /><meta name="guid" content="Properties_T_Grpc_Core_ServerPort" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerPort.htm" title="ServerPort Properties" tocid="Properties_T_Grpc_Core_ServerPort">ServerPort Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_BoundPort.htm" title="BoundPort Property " tocid="P_Grpc_Core_ServerPort_BoundPort">BoundPort Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Credentials.htm" title="Credentials Property " tocid="P_Grpc_Core_ServerPort_Credentials">Credentials Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Host.htm" title="Host Property " tocid="P_Grpc_Core_ServerPort_Host">Host Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_ServerPort_Port.htm" title="Port Property " tocid="P_Grpc_Core_ServerPort_Port">Port Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPort Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_ServerPort.htm">ServerPort</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerPort_BoundPort.htm">BoundPort</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerPort_Credentials.htm">Credentials</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerPort_Host.htm">Host</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerPort_Port.htm">Port</a></td><td /></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_ServerPort.htm">ServerPort Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_SslCredentials.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_SslCredentials.htm
new file mode 100644
index 0000000000..b808cf05c4
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_SslCredentials.htm
@@ -0,0 +1,8 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslCredentials Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SslCredentials class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.SslCredentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_SslCredentials" /><meta name="guid" content="Properties_T_Grpc_Core_SslCredentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslCredentials.htm" title="SslCredentials Properties" tocid="Properties_T_Grpc_Core_SslCredentials">SslCredentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslCredentials_KeyCertificatePair.htm" title="KeyCertificatePair Property " tocid="P_Grpc_Core_SslCredentials_KeyCertificatePair">KeyCertificatePair Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslCredentials_RootCertificates.htm" title="RootCertificates Property " tocid="P_Grpc_Core_SslCredentials_RootCertificates">RootCertificates Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslCredentials Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_SslCredentials.htm">SslCredentials</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_SslCredentials_KeyCertificatePair.htm">KeyCertificatePair</a></td><td><div class="summary">
+ Client side key and certificate pair.
+ If null, client will not use key and certificate pair.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_SslCredentials_RootCertificates.htm">RootCertificates</a></td><td><div class="summary">
+ PEM encoding of the server root certificates.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslCredentials.htm">SslCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_SslServerCredentials.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_SslServerCredentials.htm
new file mode 100644
index 0000000000..f879ba0fd4
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_SslServerCredentials.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslServerCredentials Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SslServerCredentials class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.SslServerCredentials" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_SslServerCredentials" /><meta name="guid" content="Properties_T_Grpc_Core_SslServerCredentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Properties" tocid="Properties_T_Grpc_Core_SslServerCredentials">SslServerCredentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm" title="ForceClientAuthentication Property " tocid="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication">ForceClientAuthentication Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm" title="KeyCertificatePairs Property " tocid="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs">KeyCertificatePairs Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_SslServerCredentials_RootCertificates.htm" title="RootCertificates Property " tocid="P_Grpc_Core_SslServerCredentials_RootCertificates">RootCertificates Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslServerCredentials Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm">ForceClientAuthentication</a></td><td><div class="summary">
+ If true, the authenticity of client check will be enforced.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm">KeyCertificatePairs</a></td><td><div class="summary">
+ Key-certificate pairs.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_SslServerCredentials_RootCertificates.htm">RootCertificates</a></td><td><div class="summary">
+ PEM encoded client root certificates.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_SslServerCredentials.htm">SslServerCredentials Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Status.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Status.htm
new file mode 100644
index 0000000000..cb8c929e81
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_Status.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Status Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Status structure, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.Status" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_Status" /><meta name="guid" content="Properties_T_Grpc_Core_Status" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Status.htm" title="Status Properties" tocid="Properties_T_Grpc_Core_Status">Status Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Status_Detail.htm" title="Detail Property " tocid="P_Grpc_Core_Status_Detail">Detail Property </a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_Status_StatusCode.htm" title="StatusCode Property " tocid="P_Grpc_Core_Status_StatusCode">StatusCode Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Status Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_Status.htm">Status</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Status_Detail.htm">Detail</a></td><td><div class="summary">
+ Gets the detail.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Status_StatusCode.htm">StatusCode</a></td><td><div class="summary">
+ Gets the gRPC status code. OK indicates success, all other values indicate an error.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_Status.htm">Status Structure</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/Properties_T_Grpc_Core_WriteOptions.htm b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_WriteOptions.htm
new file mode 100644
index 0000000000..b6e2b08ab0
--- /dev/null
+++ b/doc/ref/csharp/html/html/Properties_T_Grpc_Core_WriteOptions.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>WriteOptions Properties</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteOptions class, properties" /><meta name="Microsoft.Help.Id" content="Properties.T:Grpc.Core.WriteOptions" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="Properties_T_Grpc_Core_WriteOptions" /><meta name="guid" content="Properties_T_Grpc_Core_WriteOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Properties" tocid="Properties_T_Grpc_Core_WriteOptions">WriteOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="P_Grpc_Core_WriteOptions_Flags.htm" title="Flags Property " tocid="P_Grpc_Core_WriteOptions_Flags">Flags Property </a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">WriteOptions Properties</td></tr></table><span class="introStyle"></span><p>The <a href="T_Grpc_Core_WriteOptions.htm">WriteOptions</a> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_WriteOptions_Flags.htm">Flags</a></td><td><div class="summary">
+ Gets the write flags.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID1RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="T_Grpc_Core_WriteOptions.htm">WriteOptions Class</a></div><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/R_Project_Documentation.htm b/doc/ref/csharp/html/html/R_Project_Documentation.htm
new file mode 100644
index 0000000000..1c2487cd40
--- /dev/null
+++ b/doc/ref/csharp/html/html/R_Project_Documentation.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Namespaces</title><meta name="Language" content="en-us" /><meta name="Microsoft.Help.Id" content="R:Project_Documentation" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="unknown" /><meta name="file" content="R_Project_Documentation" /><meta name="guid" content="R_Project_Documentation" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Auth.htm" title="Grpc.Auth" tocid="N_Grpc_Auth">Grpc.Auth</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Namespaces</td></tr></table><span class="introStyle"></span><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Namespaces</span></div><div id="ID0RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th>Namespace</th><th>Description</th></tr><tr><td><a href="N_Grpc_Auth.htm">Grpc.Auth</a></td><td><div class="summary">Provides OAuth2 based authentication for gRPC. <span class="code">Grpc.Auth</span> currently consists of a set of very lightweight wrappers and uses C# <a href="https://www.nuget.org/packages/Google.Apis.Auth/">Google.Apis.Auth</a> library.</div></td></tr><tr><td><a href="N_Grpc_Core.htm">Grpc.Core</a></td><td><div class="summary">Main namespace for gRPC C# functionality. Contains concepts representing both client side and server side gRPC logic.
+
+</div></td></tr><tr><td><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a></td><td><div class="summary">Provides functionality to redirect gRPC logs to application-specified destination.</div></td></tr><tr><td><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a></td><td><div class="summary">Various utilities for gRPC C#.</div></td></tr></table></div></div></div><div id="pageFooter" class="pageFooter"> </div></body><script type="text/javascript">
+<!--
+ var tocNav = document.getElementById("tocNav");
+ var anchor = tocNav.children[0].children[0];
+ Toggle(anchor);
+ tocNav.children[0].className += " current";
+-->
+</script>
+</html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Auth_AuthInterceptors.htm b/doc/ref/csharp/html/html/T_Grpc_Auth_AuthInterceptors.htm
new file mode 100644
index 0000000000..89a0923148
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Auth_AuthInterceptors.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AuthInterceptors Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AuthInterceptors class" /><meta name="System.Keywords" content="Grpc.Auth.AuthInterceptors class" /><meta name="System.Keywords" content="AuthInterceptors class, about AuthInterceptors class" /><meta name="Microsoft.Help.F1" content="Grpc.Auth.AuthInterceptors" /><meta name="Microsoft.Help.Id" content="T:Grpc.Auth.AuthInterceptors" /><meta name="Description" content="Factory methods to create authorization interceptors. Interceptors created can be registered with gRPC client classes (autogenerated client stubs that inherit from )." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Auth" /><meta name="file" content="T_Grpc_Auth_AuthInterceptors" /><meta name="guid" content="T_Grpc_Auth_AuthInterceptors" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Auth.htm" title="Grpc.Auth" tocid="N_Grpc_Auth">Grpc.Auth</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Auth_AuthInterceptors.htm" title="AuthInterceptors Class" tocid="T_Grpc_Auth_AuthInterceptors">AuthInterceptors Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Auth_AuthInterceptors.htm" title="AuthInterceptors Methods" tocid="Methods_T_Grpc_Auth_AuthInterceptors">AuthInterceptors Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AuthInterceptors Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Factory methods to create authorization interceptors. Interceptors created can be registered with gRPC client classes (autogenerated client stubs that
+ inherit from <a href="T_Grpc_Core_ClientBase.htm">ClientBase</a>).
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTCB2648_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCB2648_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Auth<span id="LSTCB2648_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCB2648_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>AuthInterceptors</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Auth.htm">Grpc.Auth</a><br /><strong>Assembly:</strong> Grpc.Auth (in Grpc.Auth.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="identifier">AuthInterceptors</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">AuthInterceptors</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">AuthInterceptors</span> <span class="keyword">abstract</span> <span class="keyword">sealed</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">AuthInterceptors</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">AuthInterceptors</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm">FromAccessToken</a></td><td><div class="summary">
+ Creates OAuth2 interceptor that will use given access token as authorization.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Auth_AuthInterceptors_FromCredential.htm">FromCredential</a></td><td><div class="summary">
+ Creates interceptor that will obtain access token from any credential type that implements
+ <span class="code">ITokenAccess</span>. (e.g. <span class="code">GoogleCredential</span>).
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Auth.htm">Grpc.Auth Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_AsyncClientStreamingCall_2.htm b/doc/ref/csharp/html/html/T_Grpc_Core_AsyncClientStreamingCall_2.htm
new file mode 100644
index 0000000000..ea662d9d73
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_AsyncClientStreamingCall_2.htm
@@ -0,0 +1,33 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncClientStreamingCall(TRequest, TResponse) Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E class" /><meta name="System.Keywords" content="Grpc.Core.AsyncClientStreamingCall%3CTRequest%2C TResponse%3E class" /><meta name="System.Keywords" content="AsyncClientStreamingCall%3CTRequest%2C TResponse%3E class, about AsyncClientStreamingCall%3CTRequest%2C TResponse%3E class" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse) class" /><meta name="System.Keywords" content="Grpc.Core.AsyncClientStreamingCall(Of TRequest%2C TResponse) class" /><meta name="System.Keywords" content="AsyncClientStreamingCall(Of TRequest%2C TResponse) class, about AsyncClientStreamingCall(Of TRequest%2C TResponse) class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncClientStreamingCall`2" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.AsyncClientStreamingCall`2" /><meta name="Description" content="Return type for client streaming calls." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_AsyncClientStreamingCall_2" /><meta name="guid" content="T_Grpc_Core_AsyncClientStreamingCall_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncClientStreamingCall<span id="LST1E8FD936_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1E8FD936_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST1E8FD936_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1E8FD936_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Return type for client streaming calls.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST1E8FD936_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1E8FD936_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST1E8FD936_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1E8FD936_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>AsyncClientStreamingCall<span id="LST1E8FD936_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1E8FD936_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST1E8FD936_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1E8FD936_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">sealed</span> <span class="keyword">class</span> <span class="identifier">AsyncClientStreamingCall</span>&lt;TRequest, TResponse&gt; : <span class="identifier">IDisposable</span>
+</pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">AsyncClientStreamingCall</span>(<span class="keyword">Of</span> TRequest, TResponse)
+ <span class="keyword">Implements</span> <span class="identifier">IDisposable</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">AsyncClientStreamingCall</span> <span class="keyword">sealed</span> : <span class="identifier">IDisposable</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">AsyncClientStreamingCall</span>&lt;'TRequest, 'TResponse&gt; =
+ <span class="keyword">class</span>
+ <span class="keyword">interface</span> <span class="identifier">IDisposable</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Request message type for this call.</dd><dt><span class="parameter">TResponse</span></dt><dd>Response message type for this call.</dd></dl></div><p>The <span class="selflink">AsyncClientStreamingCall<span id="LST1E8FD936_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1E8FD936_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST1E8FD936_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1E8FD936_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm">RequestStream</a></td><td><div class="summary">
+ Async stream to send streaming requests.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm">ResponseAsync</a></td><td><div class="summary">
+ Asynchronous call result.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm">ResponseHeadersAsync</a></td><td><div class="summary">
+ Asynchronous access to response headers.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm">Dispose</a></td><td><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (request stream has been completed and call result has been received), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm">GetAwaiter</a></td><td><div class="summary">
+ Allows awaiting this object directly.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm">GetStatus</a></td><td><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm">GetTrailers</a></td><td><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm b/doc/ref/csharp/html/html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm
new file mode 100644
index 0000000000..f81978d67b
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm
@@ -0,0 +1,31 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncDuplexStreamingCall(TRequest, TResponse) Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E class" /><meta name="System.Keywords" content="Grpc.Core.AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E class" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E class, about AsyncDuplexStreamingCall%3CTRequest%2C TResponse%3E class" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse) class" /><meta name="System.Keywords" content="Grpc.Core.AsyncDuplexStreamingCall(Of TRequest%2C TResponse) class" /><meta name="System.Keywords" content="AsyncDuplexStreamingCall(Of TRequest%2C TResponse) class, about AsyncDuplexStreamingCall(Of TRequest%2C TResponse) class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncDuplexStreamingCall`2" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.AsyncDuplexStreamingCall`2" /><meta name="Description" content="Return type for bidirectional streaming calls." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_AsyncDuplexStreamingCall_2" /><meta name="guid" content="T_Grpc_Core_AsyncDuplexStreamingCall_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncDuplexStreamingCall<span id="LST9B06C801_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B06C801_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST9B06C801_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B06C801_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Return type for bidirectional streaming calls.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST9B06C801_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B06C801_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST9B06C801_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B06C801_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>AsyncDuplexStreamingCall<span id="LST9B06C801_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B06C801_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9B06C801_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B06C801_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">sealed</span> <span class="keyword">class</span> <span class="identifier">AsyncDuplexStreamingCall</span>&lt;TRequest, TResponse&gt; : <span class="identifier">IDisposable</span>
+</pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">AsyncDuplexStreamingCall</span>(<span class="keyword">Of</span> TRequest, TResponse)
+ <span class="keyword">Implements</span> <span class="identifier">IDisposable</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">AsyncDuplexStreamingCall</span> <span class="keyword">sealed</span> : <span class="identifier">IDisposable</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">AsyncDuplexStreamingCall</span>&lt;'TRequest, 'TResponse&gt; =
+ <span class="keyword">class</span>
+ <span class="keyword">interface</span> <span class="identifier">IDisposable</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Request message type for this call.</dd><dt><span class="parameter">TResponse</span></dt><dd>Response message type for this call.</dd></dl></div><p>The <span class="selflink">AsyncDuplexStreamingCall<span id="LST9B06C801_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B06C801_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LST9B06C801_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9B06C801_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm">RequestStream</a></td><td><div class="summary">
+ Async stream to send streaming requests.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm">ResponseHeadersAsync</a></td><td><div class="summary">
+ Asynchronous access to response headers.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm">ResponseStream</a></td><td><div class="summary">
+ Async stream to read streaming responses.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm">Dispose</a></td><td><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (request stream has been completed and response stream has been fully read), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm">GetStatus</a></td><td><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm">GetTrailers</a></td><td><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_AsyncServerStreamingCall_1.htm b/doc/ref/csharp/html/html/T_Grpc_Core_AsyncServerStreamingCall_1.htm
new file mode 100644
index 0000000000..4b2407ca18
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_AsyncServerStreamingCall_1.htm
@@ -0,0 +1,29 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncServerStreamingCall(TResponse) Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncServerStreamingCall%3CTResponse%3E class" /><meta name="System.Keywords" content="Grpc.Core.AsyncServerStreamingCall%3CTResponse%3E class" /><meta name="System.Keywords" content="AsyncServerStreamingCall%3CTResponse%3E class, about AsyncServerStreamingCall%3CTResponse%3E class" /><meta name="System.Keywords" content="AsyncServerStreamingCall(Of TResponse) class" /><meta name="System.Keywords" content="Grpc.Core.AsyncServerStreamingCall(Of TResponse) class" /><meta name="System.Keywords" content="AsyncServerStreamingCall(Of TResponse) class, about AsyncServerStreamingCall(Of TResponse) class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncServerStreamingCall`1" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.AsyncServerStreamingCall`1" /><meta name="Description" content="Return type for server streaming calls." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_AsyncServerStreamingCall_1" /><meta name="guid" content="T_Grpc_Core_AsyncServerStreamingCall_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncServerStreamingCall<span id="LSTC423FE87_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC423FE87_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LSTC423FE87_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC423FE87_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Return type for server streaming calls.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTC423FE87_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC423FE87_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LSTC423FE87_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC423FE87_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>AsyncServerStreamingCall<span id="LSTC423FE87_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC423FE87_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTC423FE87_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC423FE87_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">sealed</span> <span class="keyword">class</span> <span class="identifier">AsyncServerStreamingCall</span>&lt;TResponse&gt; : <span class="identifier">IDisposable</span>
+</pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">AsyncServerStreamingCall</span>(<span class="keyword">Of</span> TResponse)
+ <span class="keyword">Implements</span> <span class="identifier">IDisposable</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">AsyncServerStreamingCall</span> <span class="keyword">sealed</span> : <span class="identifier">IDisposable</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">AsyncServerStreamingCall</span>&lt;'TResponse&gt; =
+ <span class="keyword">class</span>
+ <span class="keyword">interface</span> <span class="identifier">IDisposable</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TResponse</span></dt><dd>Response message type for this call.</dd></dl></div><p>The <span class="selflink">AsyncServerStreamingCall<span id="LSTC423FE87_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC423FE87_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LSTC423FE87_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC423FE87_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm">ResponseHeadersAsync</a></td><td><div class="summary">
+ Asynchronous access to response headers.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm">ResponseStream</a></td><td><div class="summary">
+ Async stream to read streaming responses.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm">Dispose</a></td><td><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (response stream has been fully read), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm">GetStatus</a></td><td><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm">GetTrailers</a></td><td><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_AsyncUnaryCall_1.htm b/doc/ref/csharp/html/html/T_Grpc_Core_AsyncUnaryCall_1.htm
new file mode 100644
index 0000000000..e370a9e037
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_AsyncUnaryCall_1.htm
@@ -0,0 +1,31 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncUnaryCall(TResponse) Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTResponse%3E class" /><meta name="System.Keywords" content="Grpc.Core.AsyncUnaryCall%3CTResponse%3E class" /><meta name="System.Keywords" content="AsyncUnaryCall%3CTResponse%3E class, about AsyncUnaryCall%3CTResponse%3E class" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TResponse) class" /><meta name="System.Keywords" content="Grpc.Core.AsyncUnaryCall(Of TResponse) class" /><meta name="System.Keywords" content="AsyncUnaryCall(Of TResponse) class, about AsyncUnaryCall(Of TResponse) class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.AsyncUnaryCall`1" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.AsyncUnaryCall`1" /><meta name="Description" content="Return type for single request - single response call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_AsyncUnaryCall_1" /><meta name="guid" content="T_Grpc_Core_AsyncUnaryCall_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Properties" tocid="Properties_T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Methods" tocid="Methods_T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncUnaryCall<span id="LST2ECA825B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2ECA825B_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TResponse</span><span id="LST2ECA825B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2ECA825B_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Return type for single request - single response call.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST2ECA825B_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2ECA825B_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST2ECA825B_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2ECA825B_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>AsyncUnaryCall<span id="LST2ECA825B_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2ECA825B_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST2ECA825B_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2ECA825B_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">sealed</span> <span class="keyword">class</span> <span class="identifier">AsyncUnaryCall</span>&lt;TResponse&gt; : <span class="identifier">IDisposable</span>
+</pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">AsyncUnaryCall</span>(<span class="keyword">Of</span> TResponse)
+ <span class="keyword">Implements</span> <span class="identifier">IDisposable</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">AsyncUnaryCall</span> <span class="keyword">sealed</span> : <span class="identifier">IDisposable</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">AsyncUnaryCall</span>&lt;'TResponse&gt; =
+ <span class="keyword">class</span>
+ <span class="keyword">interface</span> <span class="identifier">IDisposable</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TResponse</span></dt><dd>Response message type for this call.</dd></dl></div><p>The <span class="selflink">AsyncUnaryCall<span id="LST2ECA825B_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2ECA825B_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TResponse<span id="LST2ECA825B_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2ECA825B_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm">ResponseAsync</a></td><td><div class="summary">
+ Asynchronous call result.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm">ResponseHeadersAsync</a></td><td><div class="summary">
+ Asynchronous access to response headers.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm">Dispose</a></td><td><div class="summary">
+ Provides means to cleanup after the call.
+ If the call has already finished normally (request stream has been completed and call result has been received), doesn't do anything.
+ Otherwise, requests cancellation of the call which should terminate all pending async operations associated with the call.
+ As a result, all resources being used by the call should be released eventually.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm">GetAwaiter</a></td><td><div class="summary">
+ Allows awaiting this object directly.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm">GetStatus</a></td><td><div class="summary">
+ Gets the call status if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm">GetTrailers</a></td><td><div class="summary">
+ Gets the call trailing metadata if the call has already finished.
+ Throws InvalidOperationException otherwise.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_CallInvocationDetails_2.htm b/doc/ref/csharp/html/html/T_Grpc_Core_CallInvocationDetails_2.htm
new file mode 100644
index 0000000000..bc7ecf9ed0
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_CallInvocationDetails_2.htm
@@ -0,0 +1,33 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallInvocationDetails(TRequest, TResponse) Structure</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E structure" /><meta name="System.Keywords" content="Grpc.Core.CallInvocationDetails%3CTRequest%2C TResponse%3E structure" /><meta name="System.Keywords" content="CallInvocationDetails%3CTRequest%2C TResponse%3E structure, about CallInvocationDetails%3CTRequest%2C TResponse%3E structure" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse) structure" /><meta name="System.Keywords" content="Grpc.Core.CallInvocationDetails(Of TRequest%2C TResponse) structure" /><meta name="System.Keywords" content="CallInvocationDetails(Of TRequest%2C TResponse) structure, about CallInvocationDetails(Of TRequest%2C TResponse) structure" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallInvocationDetails`2" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.CallInvocationDetails`2" /><meta name="Description" content="Details about a client-side call to be invoked." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_CallInvocationDetails_2" /><meta name="guid" content="T_Grpc_Core_CallInvocationDetails_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm" title="CallInvocationDetails(TRequest, TResponse) Constructor " tocid="Overload_Grpc_Core_CallInvocationDetails_2__ctor">CallInvocationDetails(TRequest, TResponse) Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallInvocationDetails<span id="LSTC2463791_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTC2463791_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Structure</td></tr></table><span class="introStyle"></span><div class="summary">
+ Details about a client-side call to be invoked.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">struct</span> <span class="identifier">CallInvocationDetails</span>&lt;TRequest, TResponse&gt;
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Structure</span> <span class="identifier">CallInvocationDetails</span>(<span class="keyword">Of</span> TRequest, TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">public</span> <span class="keyword">value class</span> <span class="identifier">CallInvocationDetails</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">CallInvocationDetails</span>&lt;'TRequest, 'TResponse&gt; = <span class="keyword">struct</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Request message type for the call.</dd><dt><span class="parameter">TResponse</span></dt><dd>Response message type for the call.</dd></dl></div><p>The <span class="selflink">CallInvocationDetails<span id="LSTC2463791_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC2463791_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallInvocationDetails_2__ctor.htm">CallInvocationDetails<span id="LSTC2463791_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC2463791_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script>(Channel, Method<span id="LSTC2463791_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTC2463791_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, CallOptions)</a></td><td><div class="summary">
+ Initializes a new instance of the <span class="selflink">CallInvocationDetails<span id="LSTC2463791_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_8?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC2463791_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_9?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> struct.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm">CallInvocationDetails<span id="LSTC2463791_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_10?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC2463791_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_11?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script>(Channel, Method<span id="LSTC2463791_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_12?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LSTC2463791_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_13?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, String, CallOptions)</a></td><td><div class="summary">
+ Initializes a new instance of the <span class="selflink">CallInvocationDetails<span id="LSTC2463791_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_14?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC2463791_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_15?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> struct.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm">CallInvocationDetails<span id="LSTC2463791_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_16?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC2463791_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_17?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script>(Channel, String, String, Marshaller<span id="LSTC2463791_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_18?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest<span id="LSTC2463791_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_19?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, Marshaller<span id="LSTC2463791_20"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_20?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TResponse<span id="LSTC2463791_21"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_21?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, CallOptions)</a></td><td><div class="summary">
+ Initializes a new instance of the <span class="selflink">CallInvocationDetails<span id="LSTC2463791_22"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_22?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC2463791_23"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_23?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> struct.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_Channel.htm">Channel</a></td><td><div class="summary">
+ Get channel associated with this call.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_Host.htm">Host</a></td><td><div class="summary">
+ Get name of host.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_Method.htm">Method</a></td><td><div class="summary">
+ Gets name of method to be called.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_Options.htm">Options</a></td><td><div class="summary">
+ Gets the call options.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm">RequestMarshaller</a></td><td><div class="summary">
+ Gets marshaller used to serialize requests.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm">ResponseMarshaller</a></td><td><div class="summary">
+ Gets marshaller used to deserialized responses.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2dts52z7" target="_blank">Equals</a></td><td><div class="summary">Indicates whether this instance and a specified object are equal.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/y3509fc2" target="_blank">GetHashCode</a></td><td><div class="summary">Returns the hash code for this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/wb77sz3h" target="_blank">ToString</a></td><td><div class="summary">Returns the fully qualified type name of this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm">WithOptions</a></td><td><div class="summary">
+ Returns new instance of <span class="selflink">CallInvocationDetails<span id="LSTC2463791_24"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_24?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTC2463791_25"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTC2463791_25?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> with
+ <span class="code">Options</span> set to the value provided. Values of all other fields are preserved.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_CallOptions.htm b/doc/ref/csharp/html/html/T_Grpc_Core_CallOptions.htm
new file mode 100644
index 0000000000..3829d0ddab
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_CallOptions.htm
@@ -0,0 +1,31 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CallOptions Structure</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CallOptions structure" /><meta name="System.Keywords" content="Grpc.Core.CallOptions structure" /><meta name="System.Keywords" content="CallOptions structure, about CallOptions structure" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CallOptions" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.CallOptions" /><meta name="Description" content="Options for calls made by client." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_CallOptions" /><meta name="guid" content="T_Grpc_Core_CallOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_CallOptions__ctor.htm" title="CallOptions Constructor " tocid="M_Grpc_Core_CallOptions__ctor">CallOptions Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_CallOptions.htm" title="CallOptions Properties" tocid="Properties_T_Grpc_Core_CallOptions">CallOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_CallOptions.htm" title="CallOptions Methods" tocid="Methods_T_Grpc_Core_CallOptions">CallOptions Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CallOptions Structure</td></tr></table><span class="introStyle"></span><div class="summary">
+ Options for calls made by client.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">struct</span> <span class="identifier">CallOptions</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Structure</span> <span class="identifier">CallOptions</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">value class</span> <span class="identifier">CallOptions</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">CallOptions</span> = <span class="keyword">struct</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><p>The <span class="selflink">CallOptions</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallOptions__ctor.htm">CallOptions</a></td><td><div class="summary">
+ Creates a new instance of <span class="code">CallOptions</span> struct.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallOptions_CancellationToken.htm">CancellationToken</a></td><td><div class="summary">
+ Token that can be used for cancelling the call.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallOptions_Deadline.htm">Deadline</a></td><td><div class="summary">
+ Call deadline.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallOptions_Headers.htm">Headers</a></td><td><div class="summary">
+ Headers to send at the beginning of the call.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallOptions_PropagationToken.htm">PropagationToken</a></td><td><div class="summary">
+ Token for propagating parent call context.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_CallOptions_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Write options that will be used for this call.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2dts52z7" target="_blank">Equals</a></td><td><div class="summary">Indicates whether this instance and a specified object are equal.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/y3509fc2" target="_blank">GetHashCode</a></td><td><div class="summary">Returns the hash code for this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/wb77sz3h" target="_blank">ToString</a></td><td><div class="summary">Returns the fully qualified type name of this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallOptions_WithCancellationToken.htm">WithCancellationToken</a></td><td><div class="summary">
+ Returns new instance of <span class="selflink">CallOptions</span> with
+ <span class="code">CancellationToken</span> set to the value provided. Values of all other fields are preserved.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallOptions_WithDeadline.htm">WithDeadline</a></td><td><div class="summary">
+ Returns new instance of <span class="selflink">CallOptions</span> with
+ <span class="code">Deadline</span> set to the value provided. Values of all other fields are preserved.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_CallOptions_WithHeaders.htm">WithHeaders</a></td><td><div class="summary">
+ Returns new instance of <span class="selflink">CallOptions</span> with
+ <span class="code">Headers</span> set to the value provided. Values of all other fields are preserved.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Calls.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Calls.htm
new file mode 100644
index 0000000000..ba5465dbd0
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Calls.htm
@@ -0,0 +1,24 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Calls Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Calls class" /><meta name="System.Keywords" content="Grpc.Core.Calls class" /><meta name="System.Keywords" content="Calls class, about Calls class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Calls" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Calls" /><meta name="Description" content="Helper methods for generated clients to make RPC calls. Most users will use this class only indirectly and will be making calls using client object generated from protocol buffer definition files." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Calls" /><meta name="guid" content="T_Grpc_Core_Calls" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Calls.htm" title="Calls Methods" tocid="Methods_T_Grpc_Core_Calls">Calls Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Calls Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Helper methods for generated clients to make RPC calls.
+ Most users will use this class only indirectly and will be
+ making calls using client object generated from protocol
+ buffer definition files.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST92E3202A_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST92E3202A_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Calls</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="identifier">Calls</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">Calls</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">Calls</span> <span class="keyword">abstract</span> <span class="keyword">sealed</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">Calls</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">Calls</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm">AsyncClientStreamingCall<span id="LST92E3202A_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST92E3202A_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Invokes a client streaming call asynchronously.
+ In client streaming scenario, client sends a stream of requests and server responds with a single response.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm">AsyncDuplexStreamingCall<span id="LST92E3202A_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST92E3202A_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Invokes a duplex streaming call asynchronously.
+ In duplex streaming scenario, client sends a stream of requests and server responds with a stream of responses.
+ The response stream is completely independent and both side can be sending messages at the same time.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm">AsyncServerStreamingCall<span id="LST92E3202A_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST92E3202A_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Invokes a server streaming call asynchronously.
+ In server streaming scenario, client sends on request and server responds with a stream of responses.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Calls_AsyncUnaryCall__2.htm">AsyncUnaryCall<span id="LST92E3202A_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST92E3202A_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Invokes a simple remote call asynchronously.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Calls_BlockingUnaryCall__2.htm">BlockingUnaryCall<span id="LST92E3202A_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_10?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST92E3202A_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92E3202A_11?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Invokes a simple remote call in a blocking fashion.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Channel.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Channel.htm
new file mode 100644
index 0000000000..0d4fe96397
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Channel.htm
@@ -0,0 +1,31 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Channel Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Channel class" /><meta name="System.Keywords" content="Grpc.Core.Channel class" /><meta name="System.Keywords" content="Channel class, about Channel class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Channel" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Channel" /><meta name="Description" content="Represents a gRPC channel. Channels are an abstraction of long-lived connections to remote servers. More client objects can reuse the same channel." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Channel" /><meta name="guid" content="T_Grpc_Core_Channel" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Channel__ctor.htm" title="Channel Constructor " tocid="Overload_Grpc_Core_Channel__ctor">Channel Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Channel.htm" title="Channel Properties" tocid="Properties_T_Grpc_Core_Channel">Channel Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Channel.htm" title="Channel Methods" tocid="Methods_T_Grpc_Core_Channel">Channel Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Channel Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Represents a gRPC channel. Channels are an abstraction of long-lived connections to remote servers.
+ 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.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTFA44D63C_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFA44D63C_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LSTFA44D63C_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFA44D63C_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Channel</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Channel</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">Channel</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">Channel</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">Channel</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">Channel</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Channel__ctor.htm">Channel(String, Credentials, IEnumerable<span id="LSTFA44D63C_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFA44D63C_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>ChannelOption<span id="LSTFA44D63C_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFA44D63C_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Creates a channel that connects to a specific host.
+ Port will default to 80 for an unsecure channel and to 443 for a secure channel.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Channel__ctor_1.htm">Channel(String, Int32, Credentials, IEnumerable<span id="LSTFA44D63C_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFA44D63C_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>ChannelOption<span id="LSTFA44D63C_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFA44D63C_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Creates a channel that connects to a specific host and port.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Channel_ResolvedTarget.htm">ResolvedTarget</a></td><td><div class="summary">Resolved address of the remote endpoint in URI format.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Channel_State.htm">State</a></td><td><div class="summary">
+ Gets current connectivity state of this channel.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Channel_Target.htm">Target</a></td><td><div class="summary">The original target used to create the channel.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Channel_ConnectAsync.htm">ConnectAsync</a></td><td><div class="summary">
+ Allows explicitly requesting channel to connect without starting an RPC.
+ Returned task completes once state Ready was seen. If the deadline is reached,
+ or channel enters the FatalFailure state, the task is cancelled.
+ There is no need to call this explicitly unless your use case requires that.
+ Starting an RPC on a new channel will request connection implicitly.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Channel_ShutdownAsync.htm">ShutdownAsync</a></td><td><div class="summary">
+ Waits until there are no more active calls for this channel and then cleans up
+ resources used by this channel.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Channel_WaitForStateChangedAsync.htm">WaitForStateChangedAsync</a></td><td><div class="summary">
+ Returned tasks completes once channel state has become different from
+ given lastObservedState.
+ If deadline is reached or and error occurs, returned task is cancelled.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ChannelOption.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ChannelOption.htm
new file mode 100644
index 0000000000..eddd74e934
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ChannelOption.htm
@@ -0,0 +1,23 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ChannelOption class" /><meta name="System.Keywords" content="Grpc.Core.ChannelOption class" /><meta name="System.Keywords" content="ChannelOption class, about ChannelOption class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ChannelOption" /><meta name="Description" content="Channel option specified when creating a channel. Corresponds to grpc_channel_args from grpc/grpc.h." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ChannelOption" /><meta name="guid" content="T_Grpc_Core_ChannelOption" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_ChannelOption__ctor.htm" title="ChannelOption Constructor " tocid="Overload_Grpc_Core_ChannelOption__ctor">ChannelOption Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ChannelOption.htm" title="ChannelOption Properties" tocid="Properties_T_Grpc_Core_ChannelOption">ChannelOption Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ChannelOption.htm" title="ChannelOption Methods" tocid="Methods_T_Grpc_Core_ChannelOption">ChannelOption Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Channel option specified when creating a channel.
+ Corresponds to grpc_channel_args from grpc/grpc.h.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST94C316D3_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST94C316D3_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST94C316D3_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST94C316D3_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ChannelOption</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">sealed</span> <span class="keyword">class</span> <span class="identifier">ChannelOption</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">ChannelOption</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ChannelOption</span> <span class="keyword">sealed</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">ChannelOption</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ChannelOption</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ChannelOption__ctor.htm">ChannelOption(String, Int32)</a></td><td><div class="summary">
+ Creates a channel option with an integer value.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ChannelOption__ctor_1.htm">ChannelOption(String, String)</a></td><td><div class="summary">
+ Creates a channel option with a string value.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ChannelOption_IntValue.htm">IntValue</a></td><td><div class="summary">
+ Gets the integer value the <span class="code">ChannelOption</span>.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ChannelOption_Name.htm">Name</a></td><td><div class="summary">
+ Gets the name of the <span class="code">ChannelOption</span>.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ChannelOption_StringValue.htm">StringValue</a></td><td><div class="summary">
+ Gets the string value the <span class="code">ChannelOption</span>.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ChannelOption_Type.htm">Type</a></td><td><div class="summary">
+ Gets the type of the <span class="code">ChannelOption</span>.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ChannelOption_OptionType.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ChannelOption_OptionType.htm
new file mode 100644
index 0000000000..0953710b29
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ChannelOption_OptionType.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOption.OptionType Enumeration</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ChannelOption.OptionType enumeration" /><meta name="System.Keywords" content="Grpc.Core.ChannelOption.OptionType enumeration" /><meta name="System.Keywords" content="Integer enumeration member" /><meta name="System.Keywords" content="String enumeration member" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.OptionType" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.OptionType.Integer" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOption.OptionType.String" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ChannelOption.OptionType" /><meta name="Description" content="Type of ChannelOption." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ChannelOption_OptionType" /><meta name="guid" content="T_Grpc_Core_ChannelOption_OptionType" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOption<span id="LST47F86D4_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST47F86D4_0?cpp=::|nu=.");</script>OptionType Enumeration</td></tr></table><span class="introStyle"></span><div class="summary">
+ Type of <span class="code">ChannelOption</span>.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">enum</span> <span class="identifier">OptionType</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Enumeration</span> <span class="identifier">OptionType</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">enum class</span> <span class="identifier">OptionType</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">OptionType</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div id="enumerationSection"><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Members</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Member name</th><th>Value</th><th>Description</th></tr><tr><td /><td target="F:Grpc.Core.ChannelOption.OptionType.Integer"><span class="selflink">Integer</span></td><td>0</td><td>
+ Channel option with integer value.
+ </td></tr><tr><td /><td target="F:Grpc.Core.ChannelOption.OptionType.String"><span class="selflink">String</span></td><td>1</td><td>
+ Channel option with string value.
+ </td></tr></table></div></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID3RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ChannelOptions.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ChannelOptions.htm
new file mode 100644
index 0000000000..bd1f0db02c
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ChannelOptions.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelOptions Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ChannelOptions class" /><meta name="System.Keywords" content="Grpc.Core.ChannelOptions class" /><meta name="System.Keywords" content="ChannelOptions class, about ChannelOptions class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelOptions" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ChannelOptions" /><meta name="Description" content="Defines names of supported channel options." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ChannelOptions" /><meta name="guid" content="T_Grpc_Core_ChannelOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Fields" tocid="Fields_T_Grpc_Core_ChannelOptions">ChannelOptions Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelOptions Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Defines names of supported channel options.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST63118B5E_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST63118B5E_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST63118B5E_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST63118B5E_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ChannelOptions</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="identifier">ChannelOptions</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">ChannelOptions</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ChannelOptions</span> <span class="keyword">abstract</span> <span class="keyword">sealed</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">ChannelOptions</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ChannelOptions</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_Census.htm">Census</a></td><td><div class="summary">Enable census for tracing and stats collection</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_DefaultAuthority.htm">DefaultAuthority</a></td><td><div class="summary">Default authority for calls.</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm">Http2InitialSequenceNumber</a></td><td><div class="summary">Initial sequence number for http2 transports</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm">MaxConcurrentStreams</a></td><td><div class="summary">Maximum number of concurrent incoming streams to allow on a http2 connection</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_MaxMessageLength.htm">MaxMessageLength</a></td><td><div class="summary">Maximum message length that the channel can receive</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm">PrimaryUserAgentString</a></td><td><div class="summary">Primary user agent: goes at the start of the user-agent metadata</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm">SecondaryUserAgentString</a></td><td><div class="summary">Secondary user agent: goes at the end of the user-agent metadata</div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm">SslTargetNameOverride</a></td><td><div class="summary">Override SSL target check. Only to be used for testing.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ChannelState.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ChannelState.htm
new file mode 100644
index 0000000000..da05bfba64
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ChannelState.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ChannelState Enumeration</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ChannelState enumeration" /><meta name="System.Keywords" content="Grpc.Core.ChannelState enumeration" /><meta name="System.Keywords" content="Idle enumeration member" /><meta name="System.Keywords" content="Connecting enumeration member" /><meta name="System.Keywords" content="Ready enumeration member" /><meta name="System.Keywords" content="TransientFailure enumeration member" /><meta name="System.Keywords" content="FatalFailure enumeration member" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelState" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelState.Idle" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelState.Connecting" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelState.Ready" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelState.TransientFailure" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ChannelState.FatalFailure" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ChannelState" /><meta name="Description" content="Connectivity state of a channel. Based on grpc_connectivity_state from grpc/grpc.h" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ChannelState" /><meta name="guid" content="T_Grpc_Core_ChannelState" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ChannelState Enumeration</td></tr></table><span class="introStyle"></span><div class="summary">
+ Connectivity state of a channel.
+ Based on grpc_connectivity_state from grpc/grpc.h
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">enum</span> <span class="identifier">ChannelState</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Enumeration</span> <span class="identifier">ChannelState</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">enum class</span> <span class="identifier">ChannelState</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ChannelState</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div id="enumerationSection"><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Members</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Member name</th><th>Value</th><th>Description</th></tr><tr><td /><td target="F:Grpc.Core.ChannelState.Idle"><span class="selflink">Idle</span></td><td>0</td><td>
+ Channel is idle
+ </td></tr><tr><td /><td target="F:Grpc.Core.ChannelState.Connecting"><span class="selflink">Connecting</span></td><td>1</td><td>
+ Channel is connecting
+ </td></tr><tr><td /><td target="F:Grpc.Core.ChannelState.Ready"><span class="selflink">Ready</span></td><td>2</td><td>
+ Channel is ready for work
+ </td></tr><tr><td /><td target="F:Grpc.Core.ChannelState.TransientFailure"><span class="selflink">TransientFailure</span></td><td>3</td><td>
+ Channel has seen a failure but expects to recover
+ </td></tr><tr><td /><td target="F:Grpc.Core.ChannelState.FatalFailure"><span class="selflink">FatalFailure</span></td><td>4</td><td>
+ Channel has seen a failure that it cannot recover from
+ </td></tr></table></div></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID3RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ClientBase.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ClientBase.htm
new file mode 100644
index 0000000000..98b64764a3
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ClientBase.htm
@@ -0,0 +1,24 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ClientBase Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ClientBase class" /><meta name="System.Keywords" content="Grpc.Core.ClientBase class" /><meta name="System.Keywords" content="ClientBase class, about ClientBase class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientBase" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ClientBase" /><meta name="Description" content="Base class for client-side stubs." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ClientBase" /><meta name="guid" content="T_Grpc_Core_ClientBase" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ClientBase__ctor.htm" title="ClientBase Constructor " tocid="M_Grpc_Core_ClientBase__ctor">ClientBase Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ClientBase.htm" title="ClientBase Properties" tocid="Properties_T_Grpc_Core_ClientBase">ClientBase Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ClientBase.htm" title="ClientBase Methods" tocid="Methods_T_Grpc_Core_ClientBase">ClientBase Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ClientBase Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Base class for client-side stubs.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST325B90DF_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST325B90DF_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST325B90DF_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST325B90DF_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ClientBase</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">class</span> <span class="identifier">ClientBase</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">MustInherit</span> <span class="keyword">Class</span> <span class="identifier">ClientBase</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ClientBase</span> <span class="keyword">abstract</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">ClientBase</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ClientBase</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ClientBase__ctor.htm">ClientBase</a></td><td><div class="summary">
+ Initializes a new instance of <span class="code">ClientBase</span> class.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ClientBase_Channel.htm">Channel</a></td><td><div class="summary">
+ Channel associated with this client.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ClientBase_HeaderInterceptor.htm">HeaderInterceptor</a></td><td><div class="summary">
+ Can be used to register a custom header (request metadata) interceptor.
+ The interceptor is invoked each time a new call on this client is started.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ClientBase_Host.htm">Host</a></td><td><div class="summary">
+ gRPC supports multiple "hosts" being served by a single server.
+ This property can be used to set the target host explicitly.
+ By default, this will be set to <span class="code">null</span> with the meaning
+ "use default host".
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="protected;declared;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="M_Grpc_Core_ClientBase_CreateCall__2.htm">CreateCall<span id="LST325B90DF_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST325B90DF_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST325B90DF_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST325B90DF_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Creates a new call to given method.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ClientStreamingServerMethod_2.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ClientStreamingServerMethod_2.htm
new file mode 100644
index 0000000000..d2073102cf
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ClientStreamingServerMethod_2.htm
@@ -0,0 +1,21 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ClientStreamingServerMethod(TRequest, TResponse) Delegate</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ClientStreamingServerMethod%3CTRequest%2C TResponse%3E delegate" /><meta name="System.Keywords" content="Grpc.Core.ClientStreamingServerMethod%3CTRequest%2C TResponse%3E delegate" /><meta name="System.Keywords" content="ClientStreamingServerMethod(Of TRequest%2C TResponse) delegate" /><meta name="System.Keywords" content="Grpc.Core.ClientStreamingServerMethod(Of TRequest%2C TResponse) delegate" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ClientStreamingServerMethod`2" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ClientStreamingServerMethod`2" /><meta name="Description" content="Server-side handler for client streaming call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ClientStreamingServerMethod_2" /><meta name="guid" content="T_Grpc_Core_ClientStreamingServerMethod_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ClientStreamingServerMethod<span id="LST97FDF94E_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97FDF94E_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST97FDF94E_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97FDF94E_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Delegate</td></tr></table><span class="introStyle"></span><div class="summary">
+ Server-side handler for client streaming call.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">delegate</span> <span class="identifier">Task</span>&lt;TResponse&gt; <span class="identifier">ClientStreamingServerMethod</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">IAsyncStreamReader</span>&lt;TRequest&gt; <span class="parameter">requestStream</span>,
+ <span class="identifier">ServerCallContext</span> <span class="parameter">context</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Delegate</span> <span class="keyword">Function</span> <span class="identifier">ClientStreamingServerMethod</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">requestStream</span> <span class="keyword">As</span> <span class="identifier">IAsyncStreamReader</span>(<span class="keyword">Of</span> TRequest),
+ <span class="parameter">context</span> <span class="keyword">As</span> <span class="identifier">ServerCallContext</span>
+) <span class="keyword">As</span> <span class="identifier">Task</span>(<span class="keyword">Of</span> TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="keyword">public</span> <span class="keyword">delegate</span> <span class="identifier">Task</span>&lt;TResponse&gt;^ <span class="identifier">ClientStreamingServerMethod</span>(
+ <span class="identifier">IAsyncStreamReader</span>&lt;TRequest&gt;^ <span class="parameter">requestStream</span>,
+ <span class="identifier">ServerCallContext</span>^ <span class="parameter">context</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ClientStreamingServerMethod</span> =
+ <span class="keyword">delegate</span> <span class="keyword">of</span>
+ <span class="parameter">requestStream</span> : <span class="identifier">IAsyncStreamReader</span>&lt;'TRequest&gt; *
+ <span class="parameter">context</span> : <span class="identifier">ServerCallContext</span> <span class="keyword">-&gt;</span> <span class="identifier">Task</span>&lt;'TResponse&gt;</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">requestStream</span></dt><dd>Type: <a href="T_Grpc_Core_IAsyncStreamReader_1.htm">Grpc.Core<span id="LST97FDF94E_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97FDF94E_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IAsyncStreamReader</a><span id="LST97FDF94E_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97FDF94E_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span><span id="LST97FDF94E_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97FDF94E_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /></dd><dt><span class="parameter">context</span></dt><dd>Type: <a href="T_Grpc_Core_ServerCallContext.htm">Grpc.Core<span id="LST97FDF94E_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97FDF94E_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerCallContext</a><br /></dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Request message type for this method.</dd><dt><span class="parameter">TResponse</span></dt><dd>Response message type for this method.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd321424" target="_blank">Task</a><span id="LST97FDF94E_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97FDF94E_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST97FDF94E_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST97FDF94E_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_CompressionLevel.htm b/doc/ref/csharp/html/html/T_Grpc_Core_CompressionLevel.htm
new file mode 100644
index 0000000000..f70286751c
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_CompressionLevel.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CompressionLevel Enumeration</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="CompressionLevel enumeration" /><meta name="System.Keywords" content="Grpc.Core.CompressionLevel enumeration" /><meta name="System.Keywords" content="None enumeration member" /><meta name="System.Keywords" content="Low enumeration member" /><meta name="System.Keywords" content="Medium enumeration member" /><meta name="System.Keywords" content="High enumeration member" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CompressionLevel" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CompressionLevel.None" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CompressionLevel.Low" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CompressionLevel.Medium" /><meta name="Microsoft.Help.F1" content="Grpc.Core.CompressionLevel.High" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.CompressionLevel" /><meta name="Description" content="Compression level based on grpc_compression_level from grpc/compression.h" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_CompressionLevel" /><meta name="guid" content="T_Grpc_Core_CompressionLevel" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">CompressionLevel Enumeration</td></tr></table><span class="introStyle"></span><div class="summary">
+ Compression level based on grpc_compression_level from grpc/compression.h
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">enum</span> <span class="identifier">CompressionLevel</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Enumeration</span> <span class="identifier">CompressionLevel</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">enum class</span> <span class="identifier">CompressionLevel</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">CompressionLevel</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div id="enumerationSection"><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Members</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Member name</th><th>Value</th><th>Description</th></tr><tr><td /><td target="F:Grpc.Core.CompressionLevel.None"><span class="selflink">None</span></td><td>0</td><td>
+ No compression.
+ </td></tr><tr><td /><td target="F:Grpc.Core.CompressionLevel.Low"><span class="selflink">Low</span></td><td>1</td><td>
+ Low compression.
+ </td></tr><tr><td /><td target="F:Grpc.Core.CompressionLevel.Medium"><span class="selflink">Medium</span></td><td>2</td><td>
+ Medium compression.
+ </td></tr><tr><td /><td target="F:Grpc.Core.CompressionLevel.High"><span class="selflink">High</span></td><td>3</td><td>
+ High compression.
+ </td></tr></table></div></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID3RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ContextPropagationOptions.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ContextPropagationOptions.htm
new file mode 100644
index 0000000000..73d262063c
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ContextPropagationOptions.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ContextPropagationOptions Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ContextPropagationOptions class" /><meta name="System.Keywords" content="Grpc.Core.ContextPropagationOptions class" /><meta name="System.Keywords" content="ContextPropagationOptions class, about ContextPropagationOptions class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ContextPropagationOptions" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ContextPropagationOptions" /><meta name="Description" content="Options for ." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ContextPropagationOptions" /><meta name="guid" content="T_Grpc_Core_ContextPropagationOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ContextPropagationOptions__ctor.htm" title="ContextPropagationOptions Constructor " tocid="M_Grpc_Core_ContextPropagationOptions__ctor">ContextPropagationOptions Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Properties" tocid="Properties_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Methods" tocid="Methods_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Fields" tocid="Fields_T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ContextPropagationOptions Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Options for <a href="T_Grpc_Core_ContextPropagationToken.htm">ContextPropagationToken</a>.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST261623D8_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST261623D8_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST261623D8_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST261623D8_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ContextPropagationOptions</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">ContextPropagationOptions</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">ContextPropagationOptions</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ContextPropagationOptions</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ContextPropagationOptions</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ContextPropagationOptions</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ContextPropagationOptions__ctor.htm">ContextPropagationOptions</a></td><td><div class="summary">
+ Creates new context propagation options.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm">IsPropagateCancellation</a></td><td><div class="summary"><span class="code">true</span> if parent call's cancellation token should be propagated to the child call.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm">IsPropagateDeadline</a></td><td><div class="summary"><span class="code">true</span> if parent call's deadline should be propagated to the child call.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID6RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ContextPropagationOptions_Default.htm">Default</a></td><td><div class="summary">
+ The context propagation options that will be used by default.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID7RB')" onkeypress="SectionExpandCollapse_CheckKey('ID7RB', event)" tabindex="0"><img id="ID7RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID7RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ContextPropagationToken.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ContextPropagationToken.htm
new file mode 100644
index 0000000000..64ee49df36
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ContextPropagationToken.htm
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ContextPropagationToken Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ContextPropagationToken class" /><meta name="System.Keywords" content="Grpc.Core.ContextPropagationToken class" /><meta name="System.Keywords" content="ContextPropagationToken class, about ContextPropagationToken class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ContextPropagationToken" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ContextPropagationToken" /><meta name="Description" content="Token for propagating context of server side handlers to child calls. In situations when a backend is making calls to another backend, it makes sense to propagate properties like deadline and cancellation token of the server call to the child call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ContextPropagationToken" /><meta name="guid" content="T_Grpc_Core_ContextPropagationToken" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Methods" tocid="Methods_T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ContextPropagationToken Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Token for propagating context of server side handlers to child calls.
+ In situations when a backend is making calls to another backend,
+ it makes sense to propagate properties like deadline and cancellation
+ token of the server call to the child call.
+ The gRPC native layer provides some other contexts (like tracing context) that
+ are not accessible to explicitly C# layer, but this token still allows propagating them.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST3775DBD1_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3775DBD1_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST3775DBD1_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3775DBD1_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ContextPropagationToken</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">ContextPropagationToken</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">ContextPropagationToken</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ContextPropagationToken</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ContextPropagationToken</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ContextPropagationToken</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Credentials.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Credentials.htm
new file mode 100644
index 0000000000..b3da8eea78
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Credentials.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Credentials Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Credentials class" /><meta name="System.Keywords" content="Grpc.Core.Credentials class" /><meta name="System.Keywords" content="Credentials class, about Credentials class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Credentials" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Credentials" /><meta name="Description" content="Client-side credentials. Used for creation of a secure channel." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Credentials" /><meta name="guid" content="T_Grpc_Core_Credentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Credentials__ctor.htm" title="Credentials Constructor " tocid="M_Grpc_Core_Credentials__ctor">Credentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Credentials.htm" title="Credentials Properties" tocid="Properties_T_Grpc_Core_Credentials">Credentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_Credentials.htm" title="Credentials Methods" tocid="Methods_T_Grpc_Core_Credentials">Credentials Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Credentials Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Client-side credentials. Used for creation of a secure channel.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST2220AA03_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2220AA03_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST2220AA03_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2220AA03_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Credentials</span><br />    <a href="T_Grpc_Core_SslCredentials.htm">Grpc.Core<span id="LST2220AA03_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST2220AA03_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>SslCredentials</a><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">class</span> <span class="identifier">Credentials</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">MustInherit</span> <span class="keyword">Class</span> <span class="identifier">Credentials</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">Credentials</span> <span class="keyword">abstract</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">Credentials</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">Credentials</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="protected;declared;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="M_Grpc_Core_Credentials__ctor.htm">Credentials</a></td><td><div class="summary">Initializes a new instance of the <span class="selflink">Credentials</span> class</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="P_Grpc_Core_Credentials_Insecure.htm">Insecure</a></td><td><div class="summary">
+ Returns instance of credential that provides no security and
+ will result in creating an unsecure channel with no encryption whatsoever.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm b/doc/ref/csharp/html/html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm
new file mode 100644
index 0000000000..c5783a7416
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm
@@ -0,0 +1,25 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>DuplexStreamingServerMethod(TRequest, TResponse) Delegate</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="DuplexStreamingServerMethod%3CTRequest%2C TResponse%3E delegate" /><meta name="System.Keywords" content="Grpc.Core.DuplexStreamingServerMethod%3CTRequest%2C TResponse%3E delegate" /><meta name="System.Keywords" content="DuplexStreamingServerMethod(Of TRequest%2C TResponse) delegate" /><meta name="System.Keywords" content="Grpc.Core.DuplexStreamingServerMethod(Of TRequest%2C TResponse) delegate" /><meta name="Microsoft.Help.F1" content="Grpc.Core.DuplexStreamingServerMethod`2" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.DuplexStreamingServerMethod`2" /><meta name="Description" content="Server-side handler for bidi streaming call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_DuplexStreamingServerMethod_2" /><meta name="guid" content="T_Grpc_Core_DuplexStreamingServerMethod_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">DuplexStreamingServerMethod<span id="LST23CCAC57_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST23CCAC57_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST23CCAC57_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST23CCAC57_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Delegate</td></tr></table><span class="introStyle"></span><div class="summary">
+ Server-side handler for bidi streaming call.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">delegate</span> <span class="identifier">Task</span> <span class="identifier">DuplexStreamingServerMethod</span>&lt;TRequest, TResponse&gt;(
+ <span class="identifier">IAsyncStreamReader</span>&lt;TRequest&gt; <span class="parameter">requestStream</span>,
+ <span class="identifier">IServerStreamWriter</span>&lt;TResponse&gt; <span class="parameter">responseStream</span>,
+ <span class="identifier">ServerCallContext</span> <span class="parameter">context</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Delegate</span> <span class="keyword">Function</span> <span class="identifier">DuplexStreamingServerMethod</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">requestStream</span> <span class="keyword">As</span> <span class="identifier">IAsyncStreamReader</span>(<span class="keyword">Of</span> TRequest),
+ <span class="parameter">responseStream</span> <span class="keyword">As</span> <span class="identifier">IServerStreamWriter</span>(<span class="keyword">Of</span> TResponse),
+ <span class="parameter">context</span> <span class="keyword">As</span> <span class="identifier">ServerCallContext</span>
+) <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="keyword">public</span> <span class="keyword">delegate</span> <span class="identifier">Task</span>^ <span class="identifier">DuplexStreamingServerMethod</span>(
+ <span class="identifier">IAsyncStreamReader</span>&lt;TRequest&gt;^ <span class="parameter">requestStream</span>,
+ <span class="identifier">IServerStreamWriter</span>&lt;TResponse&gt;^ <span class="parameter">responseStream</span>,
+ <span class="identifier">ServerCallContext</span>^ <span class="parameter">context</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">DuplexStreamingServerMethod</span> =
+ <span class="keyword">delegate</span> <span class="keyword">of</span>
+ <span class="parameter">requestStream</span> : <span class="identifier">IAsyncStreamReader</span>&lt;'TRequest&gt; *
+ <span class="parameter">responseStream</span> : <span class="identifier">IServerStreamWriter</span>&lt;'TResponse&gt; *
+ <span class="parameter">context</span> : <span class="identifier">ServerCallContext</span> <span class="keyword">-&gt;</span> <span class="identifier">Task</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">requestStream</span></dt><dd>Type: <a href="T_Grpc_Core_IAsyncStreamReader_1.htm">Grpc.Core<span id="LST23CCAC57_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST23CCAC57_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IAsyncStreamReader</a><span id="LST23CCAC57_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST23CCAC57_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TRequest</span></span><span id="LST23CCAC57_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST23CCAC57_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /></dd><dt><span class="parameter">responseStream</span></dt><dd>Type: <a href="T_Grpc_Core_IServerStreamWriter_1.htm">Grpc.Core<span id="LST23CCAC57_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST23CCAC57_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IServerStreamWriter</a><span id="LST23CCAC57_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST23CCAC57_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST23CCAC57_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST23CCAC57_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /></dd><dt><span class="parameter">context</span></dt><dd>Type: <a href="T_Grpc_Core_ServerCallContext.htm">Grpc.Core<span id="LST23CCAC57_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST23CCAC57_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerCallContext</a><br /></dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Request message type for this method.</dd><dt><span class="parameter">TResponse</span></dt><dd>Response message type for this method.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_GrpcEnvironment.htm b/doc/ref/csharp/html/html/T_Grpc_Core_GrpcEnvironment.htm
new file mode 100644
index 0000000000..ac67b12fc6
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_GrpcEnvironment.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>GrpcEnvironment Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="GrpcEnvironment class" /><meta name="System.Keywords" content="Grpc.Core.GrpcEnvironment class" /><meta name="System.Keywords" content="GrpcEnvironment class, about GrpcEnvironment class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.GrpcEnvironment" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.GrpcEnvironment" /><meta name="Description" content="Encapsulates initialization and shutdown of gRPC library." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_GrpcEnvironment" /><meta name="guid" content="T_Grpc_Core_GrpcEnvironment" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Properties" tocid="Properties_T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Methods" tocid="Methods_T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">GrpcEnvironment Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Encapsulates initialization and shutdown of gRPC library.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST975C6702_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST975C6702_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST975C6702_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST975C6702_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>GrpcEnvironment</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">GrpcEnvironment</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">GrpcEnvironment</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">GrpcEnvironment</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">GrpcEnvironment</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">GrpcEnvironment</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="P_Grpc_Core_GrpcEnvironment_Logger.htm">Logger</a></td><td><div class="summary">
+ Gets application-wide logger used by gRPC.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_GrpcEnvironment_SetLogger.htm">SetLogger</a></td><td><div class="summary">
+ Sets the application-wide logger that should be used by gRPC.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_HeaderInterceptor.htm b/doc/ref/csharp/html/html/T_Grpc_Core_HeaderInterceptor.htm
new file mode 100644
index 0000000000..d2bc5c9600
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_HeaderInterceptor.htm
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>HeaderInterceptor Delegate</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="HeaderInterceptor delegate" /><meta name="System.Keywords" content="Grpc.Core.HeaderInterceptor delegate" /><meta name="Microsoft.Help.F1" content="Grpc.Core.HeaderInterceptor" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.HeaderInterceptor" /><meta name="Description" content="Interceptor for call headers." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_HeaderInterceptor" /><meta name="guid" content="T_Grpc_Core_HeaderInterceptor" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">HeaderInterceptor Delegate</td></tr></table><span class="introStyle"></span><div class="summary">
+ Interceptor for call headers.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">delegate</span> <span class="keyword">void</span> <span class="identifier">HeaderInterceptor</span>(
+ <span class="identifier">IMethod</span> <span class="parameter">method</span>,
+ <span class="identifier">string</span> <span class="parameter">authUri</span>,
+ <span class="identifier">Metadata</span> <span class="parameter">metadata</span>
+)</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Delegate</span> <span class="keyword">Sub</span> <span class="identifier">HeaderInterceptor</span> (
+ <span class="parameter">method</span> <span class="keyword">As</span> <span class="identifier">IMethod</span>,
+ <span class="parameter">authUri</span> <span class="keyword">As</span> <span class="identifier">String</span>,
+ <span class="parameter">metadata</span> <span class="keyword">As</span> <span class="identifier">Metadata</span>
+)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">delegate</span> <span class="keyword">void</span> <span class="identifier">HeaderInterceptor</span>(
+ <span class="identifier">IMethod</span>^ <span class="parameter">method</span>,
+ <span class="identifier">String</span>^ <span class="parameter">authUri</span>,
+ <span class="identifier">Metadata</span>^ <span class="parameter">metadata</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">HeaderInterceptor</span> =
+ <span class="keyword">delegate</span> <span class="keyword">of</span>
+ <span class="parameter">method</span> : <span class="identifier">IMethod</span> *
+ <span class="parameter">authUri</span> : <span class="identifier">string</span> *
+ <span class="parameter">metadata</span> : <span class="identifier">Metadata</span> <span class="keyword">-&gt;</span> <span class="keyword">unit</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">method</span></dt><dd>Type: <a href="T_Grpc_Core_IMethod.htm">Grpc.Core<span id="LST5065428B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5065428B_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IMethod</a><br /></dd><dt><span class="parameter">authUri</span></dt><dd>Type: <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">System<span id="LST5065428B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5065428B_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>String</a><br /></dd><dt><span class="parameter">metadata</span></dt><dd>Type: <a href="T_Grpc_Core_Metadata.htm">Grpc.Core<span id="LST5065428B_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST5065428B_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata</a><br /></dd></dl></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_IAsyncStreamReader_1.htm b/doc/ref/csharp/html/html/T_Grpc_Core_IAsyncStreamReader_1.htm
new file mode 100644
index 0000000000..07ebcd902e
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_IAsyncStreamReader_1.htm
@@ -0,0 +1,22 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IAsyncStreamReader(T) Interface</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IAsyncStreamReader%3CT%3E interface" /><meta name="System.Keywords" content="Grpc.Core.IAsyncStreamReader%3CT%3E interface" /><meta name="System.Keywords" content="IAsyncStreamReader%3CT%3E interface, about IAsyncStreamReader%3CT%3E interface" /><meta name="System.Keywords" content="IAsyncStreamReader(Of T) interface" /><meta name="System.Keywords" content="Grpc.Core.IAsyncStreamReader(Of T) interface" /><meta name="System.Keywords" content="IAsyncStreamReader(Of T) interface, about IAsyncStreamReader(Of T) interface" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IAsyncStreamReader`1" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.IAsyncStreamReader`1" /><meta name="Description" content="A stream of messages to be read." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_IAsyncStreamReader_1" /><meta name="guid" content="T_Grpc_Core_IAsyncStreamReader_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Properties_T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Properties" tocid="Properties_T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Methods" tocid="Methods_T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IAsyncStreamReader<span id="LST18B58304_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST18B58304_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Interface</td></tr></table><span class="introStyle"></span><div class="summary">
+ A stream of messages to be read.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="identifier">IAsyncStreamReader</span>&lt;T&gt; : <span class="identifier">IAsyncEnumerator</span>&lt;T&gt;,
+ <span class="identifier">IDisposable</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Interface</span> <span class="identifier">IAsyncStreamReader</span>(<span class="keyword">Of</span> T)
+ <span class="keyword">Inherits</span> <span class="identifier">IAsyncEnumerator</span>(<span class="keyword">Of</span> T), <span class="identifier">IDisposable</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">public</span> <span class="keyword">interface class</span> <span class="identifier">IAsyncStreamReader</span> : <span class="identifier">IAsyncEnumerator</span>&lt;T&gt;,
+ <span class="identifier">IDisposable</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">IAsyncStreamReader</span>&lt;'T&gt; =
+ <span class="keyword">interface</span>
+ <span class="keyword">interface</span> <span class="identifier">IAsyncEnumerator</span>&lt;'T&gt;
+ <span class="keyword">interface</span> <span class="identifier">IDisposable</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd>The message type.</dd></dl></div><p>The <span class="selflink">IAsyncStreamReader<span id="LST18B58304_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST18B58304_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><span class="nolink">Current</span></td><td> (Inherited from <span class="nolink">IAsyncEnumerator</span><span id="LST18B58304_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LST18B58304_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/es4s3w1d" target="_blank">Dispose</a></td><td><div class="summary">Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aax125c9" target="_blank">IDisposable</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><span class="nolink">MoveNext</span></td><td> (Inherited from <span class="nolink">IAsyncEnumerator</span><span id="LST18B58304_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">T</span></span><span id="LST18B58304_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Extension Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubextension.gif" alt="Public Extension Method" title="Public Extension Method" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm">ForEachAsync<span id="LST18B58304_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST18B58304_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Reads the entire stream and executes an async action for each element.
+ </div> (Defined by <a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubextension.gif" alt="Public Extension Method" title="Public Extension Method" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm">ToListAsync<span id="LST18B58304_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_10?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST18B58304_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST18B58304_11?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Reads the entire stream and creates a list containing all the elements read.
+ </div> (Defined by <a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_IAsyncStreamWriter_1.htm b/doc/ref/csharp/html/html/T_Grpc_Core_IAsyncStreamWriter_1.htm
new file mode 100644
index 0000000000..c60aa5eae4
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_IAsyncStreamWriter_1.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IAsyncStreamWriter(T) Interface</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IAsyncStreamWriter%3CT%3E interface" /><meta name="System.Keywords" content="Grpc.Core.IAsyncStreamWriter%3CT%3E interface" /><meta name="System.Keywords" content="IAsyncStreamWriter%3CT%3E interface, about IAsyncStreamWriter%3CT%3E interface" /><meta name="System.Keywords" content="IAsyncStreamWriter(Of T) interface" /><meta name="System.Keywords" content="Grpc.Core.IAsyncStreamWriter(Of T) interface" /><meta name="System.Keywords" content="IAsyncStreamWriter(Of T) interface, about IAsyncStreamWriter(Of T) interface" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IAsyncStreamWriter`1" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.IAsyncStreamWriter`1" /><meta name="Description" content="A writable stream of messages." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_IAsyncStreamWriter_1" /><meta name="guid" content="T_Grpc_Core_IAsyncStreamWriter_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Properties" tocid="Properties_T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Methods" tocid="Methods_T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IAsyncStreamWriter<span id="LST39EBAC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39EBAC_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST39EBAC_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39EBAC_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Interface</td></tr></table><span class="introStyle"></span><div class="summary">
+ A writable stream of messages.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="identifier">IAsyncStreamWriter</span>&lt;T&gt;
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Interface</span> <span class="identifier">IAsyncStreamWriter</span>(<span class="keyword">Of</span> T)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">public</span> <span class="keyword">interface class</span> <span class="identifier">IAsyncStreamWriter</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">IAsyncStreamWriter</span>&lt;'T&gt; = <span class="keyword">interface</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd>The message type.</dd></dl></div><p>The <span class="selflink">IAsyncStreamWriter<span id="LST39EBAC_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39EBAC_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST39EBAC_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST39EBAC_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Write options that will be used for the next write.
+ If null, default options will be used.
+ Once set, this property maintains its value across subsequent
+ writes.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm">WriteAsync</a></td><td><div class="summary">
+ Writes a single asynchronously. Only one write can be pending at a time.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_IClientStreamWriter_1.htm b/doc/ref/csharp/html/html/T_Grpc_Core_IClientStreamWriter_1.htm
new file mode 100644
index 0000000000..a5e3b47483
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_IClientStreamWriter_1.htm
@@ -0,0 +1,27 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IClientStreamWriter(T) Interface</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IClientStreamWriter%3CT%3E interface" /><meta name="System.Keywords" content="Grpc.Core.IClientStreamWriter%3CT%3E interface" /><meta name="System.Keywords" content="IClientStreamWriter%3CT%3E interface, about IClientStreamWriter%3CT%3E interface" /><meta name="System.Keywords" content="IClientStreamWriter(Of T) interface" /><meta name="System.Keywords" content="Grpc.Core.IClientStreamWriter(Of T) interface" /><meta name="System.Keywords" content="IClientStreamWriter(Of T) interface, about IClientStreamWriter(Of T) interface" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IClientStreamWriter`1" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.IClientStreamWriter`1" /><meta name="Description" content="Client-side writable stream of messages with Close capability." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_IClientStreamWriter_1" /><meta name="guid" content="T_Grpc_Core_IClientStreamWriter_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Properties_T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Properties" tocid="Properties_T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Methods" tocid="Methods_T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IClientStreamWriter<span id="LSTCA452815_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA452815_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTCA452815_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA452815_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Interface</td></tr></table><span class="introStyle"></span><div class="summary">
+ Client-side writable stream of messages with Close capability.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="identifier">IClientStreamWriter</span>&lt;T&gt; : <span class="identifier">IAsyncStreamWriter</span>&lt;T&gt;
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Interface</span> <span class="identifier">IClientStreamWriter</span>(<span class="keyword">Of</span> T)
+ <span class="keyword">Inherits</span> <span class="identifier">IAsyncStreamWriter</span>(<span class="keyword">Of</span> T)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">public</span> <span class="keyword">interface class</span> <span class="identifier">IClientStreamWriter</span> : <span class="identifier">IAsyncStreamWriter</span>&lt;T&gt;</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">IClientStreamWriter</span>&lt;'T&gt; =
+ <span class="keyword">interface</span>
+ <span class="keyword">interface</span> <span class="identifier">IAsyncStreamWriter</span>&lt;'T&gt;
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd>The message type.</dd></dl></div><p>The <span class="selflink">IClientStreamWriter<span id="LSTCA452815_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA452815_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTCA452815_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA452815_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Write options that will be used for the next write.
+ If null, default options will be used.
+ Once set, this property maintains its value across subsequent
+ writes.
+ </div> (Inherited from <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LSTCA452815_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA452815_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTCA452815_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA452815_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm">CompleteAsync</a></td><td><div class="summary">
+ Completes/closes the stream. Can only be called once there is no pending write. No writes should follow calling this.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm">WriteAsync</a></td><td><div class="summary">
+ Writes a single asynchronously. Only one write can be pending at a time.
+ </div> (Inherited from <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LSTCA452815_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA452815_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTCA452815_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA452815_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Extension Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubextension.gif" alt="Public Extension Method" title="Public Extension Method" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm">WriteAllAsync<span id="LSTCA452815_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA452815_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LSTCA452815_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCA452815_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ Completes the stream afterwards unless close = false.
+ </div> (Defined by <a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_IHasWriteOptions.htm b/doc/ref/csharp/html/html/T_Grpc_Core_IHasWriteOptions.htm
new file mode 100644
index 0000000000..1a6a4f7697
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_IHasWriteOptions.htm
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IHasWriteOptions Interface</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IHasWriteOptions interface" /><meta name="System.Keywords" content="Grpc.Core.IHasWriteOptions interface" /><meta name="System.Keywords" content="IHasWriteOptions interface, about IHasWriteOptions interface" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IHasWriteOptions" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.IHasWriteOptions" /><meta name="Description" content="Allows sharing write options between ServerCallContext and other objects." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_IHasWriteOptions" /><meta name="guid" content="T_Grpc_Core_IHasWriteOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Properties" tocid="Properties_T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Properties</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IHasWriteOptions Interface</td></tr></table><span class="introStyle"></span><div class="summary">
+ Allows sharing write options between ServerCallContext and other objects.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="identifier">IHasWriteOptions</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Interface</span> <span class="identifier">IHasWriteOptions</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">interface class</span> <span class="identifier">IHasWriteOptions</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">IHasWriteOptions</span> = <span class="keyword">interface</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><p>The <span class="selflink">IHasWriteOptions</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IHasWriteOptions_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Gets or sets the write options.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID3RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_IMethod.htm b/doc/ref/csharp/html/html/T_Grpc_Core_IMethod.htm
new file mode 100644
index 0000000000..c76e049dce
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_IMethod.htm
@@ -0,0 +1,14 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IMethod Interface</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IMethod interface" /><meta name="System.Keywords" content="Grpc.Core.IMethod interface" /><meta name="System.Keywords" content="IMethod interface, about IMethod interface" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IMethod" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.IMethod" /><meta name="Description" content="A non-generic representation of a remote method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_IMethod" /><meta name="guid" content="T_Grpc_Core_IMethod" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_IMethod.htm" title="IMethod Properties" tocid="Properties_T_Grpc_Core_IMethod">IMethod Properties</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IMethod Interface</td></tr></table><span class="introStyle"></span><div class="summary">
+ A non-generic representation of a remote method.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="identifier">IMethod</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Interface</span> <span class="identifier">IMethod</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">interface class</span> <span class="identifier">IMethod</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">IMethod</span> = <span class="keyword">interface</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><p>The <span class="selflink">IMethod</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IMethod_FullName.htm">FullName</a></td><td><div class="summary">
+ Gets the fully qualified name of the method. On the server side, methods are dispatched
+ based on this name.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IMethod_Name.htm">Name</a></td><td><div class="summary">
+ Gets the unqualified name of the method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IMethod_ServiceName.htm">ServiceName</a></td><td><div class="summary">
+ Gets the name of the service to which this method belongs.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IMethod_Type.htm">Type</a></td><td><div class="summary">
+ Gets the type of the method.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID3RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_IServerStreamWriter_1.htm b/doc/ref/csharp/html/html/T_Grpc_Core_IServerStreamWriter_1.htm
new file mode 100644
index 0000000000..c4a194bcbf
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_IServerStreamWriter_1.htm
@@ -0,0 +1,24 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IServerStreamWriter(T) Interface</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="IServerStreamWriter%3CT%3E interface" /><meta name="System.Keywords" content="Grpc.Core.IServerStreamWriter%3CT%3E interface" /><meta name="System.Keywords" content="IServerStreamWriter%3CT%3E interface, about IServerStreamWriter%3CT%3E interface" /><meta name="System.Keywords" content="IServerStreamWriter(Of T) interface" /><meta name="System.Keywords" content="Grpc.Core.IServerStreamWriter(Of T) interface" /><meta name="System.Keywords" content="IServerStreamWriter(Of T) interface, about IServerStreamWriter(Of T) interface" /><meta name="Microsoft.Help.F1" content="Grpc.Core.IServerStreamWriter`1" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.IServerStreamWriter`1" /><meta name="Description" content="A writable stream of messages that is used in server-side handlers." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_IServerStreamWriter_1" /><meta name="guid" content="T_Grpc_Core_IServerStreamWriter_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Properties_T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Properties" tocid="Properties_T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Methods" tocid="Methods_T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">IServerStreamWriter<span id="LST4FC9CC99_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FC9CC99_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LST4FC9CC99_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FC9CC99_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Interface</td></tr></table><span class="introStyle"></span><div class="summary">
+ A writable stream of messages that is used in server-side handlers.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="identifier">IServerStreamWriter</span>&lt;T&gt; : <span class="identifier">IAsyncStreamWriter</span>&lt;T&gt;
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Interface</span> <span class="identifier">IServerStreamWriter</span>(<span class="keyword">Of</span> T)
+ <span class="keyword">Inherits</span> <span class="identifier">IAsyncStreamWriter</span>(<span class="keyword">Of</span> T)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">public</span> <span class="keyword">interface class</span> <span class="identifier">IServerStreamWriter</span> : <span class="identifier">IAsyncStreamWriter</span>&lt;T&gt;</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">IServerStreamWriter</span>&lt;'T&gt; =
+ <span class="keyword">interface</span>
+ <span class="keyword">interface</span> <span class="identifier">IAsyncStreamWriter</span>&lt;'T&gt;
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "T:Grpc.Core.IServerStreamWriter`1"]</p></dd></dl></div><p>The <span class="selflink">IServerStreamWriter<span id="LST4FC9CC99_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FC9CC99_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST4FC9CC99_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FC9CC99_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Write options that will be used for the next write.
+ If null, default options will be used.
+ Once set, this property maintains its value across subsequent
+ writes.
+ </div> (Inherited from <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST4FC9CC99_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FC9CC99_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST4FC9CC99_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FC9CC99_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm">WriteAsync</a></td><td><div class="summary">
+ Writes a single asynchronously. Only one write can be pending at a time.
+ </div> (Inherited from <a href="T_Grpc_Core_IAsyncStreamWriter_1.htm">IAsyncStreamWriter<span id="LST4FC9CC99_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FC9CC99_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LST4FC9CC99_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FC9CC99_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Extension Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubextension.gif" alt="Public Extension Method" title="Public Extension Method" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm">WriteAllAsync<span id="LST4FC9CC99_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FC9CC99_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST4FC9CC99_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FC9CC99_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ </div> (Defined by <a href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm">AsyncStreamExtensions</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_KeyCertificatePair.htm b/doc/ref/csharp/html/html/T_Grpc_Core_KeyCertificatePair.htm
new file mode 100644
index 0000000000..9cd008f7f1
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_KeyCertificatePair.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>KeyCertificatePair Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="KeyCertificatePair class" /><meta name="System.Keywords" content="Grpc.Core.KeyCertificatePair class" /><meta name="System.Keywords" content="KeyCertificatePair class, about KeyCertificatePair class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.KeyCertificatePair" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.KeyCertificatePair" /><meta name="Description" content="Key certificate pair (in PEM encoding)." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_KeyCertificatePair" /><meta name="guid" content="T_Grpc_Core_KeyCertificatePair" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_KeyCertificatePair__ctor.htm" title="KeyCertificatePair Constructor " tocid="M_Grpc_Core_KeyCertificatePair__ctor">KeyCertificatePair Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Properties" tocid="Properties_T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Methods" tocid="Methods_T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">KeyCertificatePair Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Key certificate pair (in PEM encoding).
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTDF403743_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDF403743_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LSTDF403743_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDF403743_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>KeyCertificatePair</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">sealed</span> <span class="keyword">class</span> <span class="identifier">KeyCertificatePair</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">KeyCertificatePair</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">KeyCertificatePair</span> <span class="keyword">sealed</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">KeyCertificatePair</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">KeyCertificatePair</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_KeyCertificatePair__ctor.htm">KeyCertificatePair</a></td><td><div class="summary">
+ Creates a new certificate chain - private key pair.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_KeyCertificatePair_CertificateChain.htm">CertificateChain</a></td><td><div class="summary">
+ PEM encoded certificate chain.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_KeyCertificatePair_PrivateKey.htm">PrivateKey</a></td><td><div class="summary">
+ PEM encoded private key.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Logging_ConsoleLogger.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Logging_ConsoleLogger.htm
new file mode 100644
index 0000000000..469d5dba42
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Logging_ConsoleLogger.htm
@@ -0,0 +1,11 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ConsoleLogger Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ConsoleLogger class" /><meta name="System.Keywords" content="Grpc.Core.Logging.ConsoleLogger class" /><meta name="System.Keywords" content="ConsoleLogger class, about ConsoleLogger class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ConsoleLogger" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Logging.ConsoleLogger" /><meta name="Description" content="Logger that logs to System.Console." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="T_Grpc_Core_Logging_ConsoleLogger" /><meta name="guid" content="T_Grpc_Core_Logging_ConsoleLogger" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Class" tocid="T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Logging_ConsoleLogger__ctor.htm" title="ConsoleLogger Constructor " tocid="M_Grpc_Core_Logging_ConsoleLogger__ctor">ConsoleLogger Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" title="ConsoleLogger Methods" tocid="Methods_T_Grpc_Core_Logging_ConsoleLogger">ConsoleLogger Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ConsoleLogger Class</td></tr></table><span class="introStyle"></span><div class="summary">Logger that logs to System.Console.</div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST72F258DD_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core.Logging<span id="LST72F258DD_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ConsoleLogger</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">ConsoleLogger</span> : <span class="identifier">ILogger</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">ConsoleLogger</span>
+ <span class="keyword">Implements</span> <span class="identifier">ILogger</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ConsoleLogger</span> : <span class="identifier">ILogger</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ConsoleLogger</span> =
+ <span class="keyword">class</span>
+ <span class="keyword">interface</span> <span class="identifier">ILogger</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ConsoleLogger</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger__ctor.htm">ConsoleLogger</a></td><td><div class="summary">Creates a console logger not associated to any specific type.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Debug.htm">Debug</a></td><td><div class="summary">Logs a message with severity Debug.</div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm">Error(String, <span id="LST72F258DD_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_2?cpp=array&lt;");</script>Object<span id="LST72F258DD_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_3?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Error.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Error.htm">Error(Exception, String, <span id="LST72F258DD_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_4?cpp=array&lt;");</script>Object<span id="LST72F258DD_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_5?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Error.</div></td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm">ForType<span id="LST72F258DD_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST72F258DD_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Returns a logger associated with the specified type.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Info.htm">Info</a></td><td><div class="summary">Logs a message with severity Info.</div></td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm">Warning(String, <span id="LST72F258DD_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_8?cpp=array&lt;");</script>Object<span id="LST72F258DD_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_9?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Warning.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ConsoleLogger_Warning.htm">Warning(Exception, String, <span id="LST72F258DD_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_10?cpp=array&lt;");</script>Object<span id="LST72F258DD_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST72F258DD_11?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Warning.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Logging_ILogger.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Logging_ILogger.htm
new file mode 100644
index 0000000000..16971f8dda
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Logging_ILogger.htm
@@ -0,0 +1,3 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ILogger Interface</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ILogger interface" /><meta name="System.Keywords" content="Grpc.Core.Logging.ILogger interface" /><meta name="System.Keywords" content="ILogger interface, about ILogger interface" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Logging.ILogger" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Logging.ILogger" /><meta name="Description" content="For logging messages." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Logging" /><meta name="file" content="T_Grpc_Core_Logging_ILogger" /><meta name="guid" content="T_Grpc_Core_Logging_ILogger" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Logging.htm" title="Grpc.Core.Logging" tocid="N_Grpc_Core_Logging">Grpc.Core.Logging</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Logging_ILogger.htm" title="ILogger Interface" tocid="T_Grpc_Core_Logging_ILogger">ILogger Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Logging_ILogger.htm" title="ILogger Methods" tocid="Methods_T_Grpc_Core_Logging_ILogger">ILogger Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ILogger Interface</td></tr></table><span class="introStyle"></span><div class="summary">For logging messages.</div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">interface</span> <span class="identifier">ILogger</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Interface</span> <span class="identifier">ILogger</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">interface class</span> <span class="identifier">ILogger</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ILogger</span> = <span class="keyword">interface</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><p>The <span class="selflink">ILogger</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Debug.htm">Debug</a></td><td><div class="summary">Logs a message with severity Debug.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Error_1.htm">Error(String, <span id="LST7965D647_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7965D647_0?cpp=array&lt;");</script>Object<span id="LST7965D647_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7965D647_1?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Error.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Error.htm">Error(Exception, String, <span id="LST7965D647_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7965D647_2?cpp=array&lt;");</script>Object<span id="LST7965D647_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7965D647_3?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Error.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_ForType__1.htm">ForType<span id="LST7965D647_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7965D647_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST7965D647_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7965D647_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">Returns a logger associated with the specified type.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Info.htm">Info</a></td><td><div class="summary">Logs a message with severity Info.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Warning_1.htm">Warning(String, <span id="LST7965D647_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7965D647_6?cpp=array&lt;");</script>Object<span id="LST7965D647_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7965D647_7?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message with severity Warning.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Logging_ILogger_Warning.htm">Warning(Exception, String, <span id="LST7965D647_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7965D647_8?cpp=array&lt;");</script>Object<span id="LST7965D647_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST7965D647_9?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">Logs a message and an associated exception with severity Warning.</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID3RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core_Logging.htm">Grpc.Core.Logging Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Marshaller_1.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Marshaller_1.htm
new file mode 100644
index 0000000000..20aaf66d94
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Marshaller_1.htm
@@ -0,0 +1,18 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshaller(T) Structure</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Marshaller%3CT%3E structure" /><meta name="System.Keywords" content="Grpc.Core.Marshaller%3CT%3E structure" /><meta name="System.Keywords" content="Marshaller%3CT%3E structure, about Marshaller%3CT%3E structure" /><meta name="System.Keywords" content="Marshaller(Of T) structure" /><meta name="System.Keywords" content="Grpc.Core.Marshaller(Of T) structure" /><meta name="System.Keywords" content="Marshaller(Of T) structure, about Marshaller(Of T) structure" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshaller`1" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Marshaller`1" /><meta name="Description" content="Encapsulates the logic for serializing and deserializing messages." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Marshaller_1" /><meta name="guid" content="T_Grpc_Core_Marshaller_1" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Marshaller_1__ctor.htm" title="Marshaller(T) Constructor " tocid="M_Grpc_Core_Marshaller_1__ctor">Marshaller(T) Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Properties" tocid="Properties_T_Grpc_Core_Marshaller_1">Marshaller(T) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Methods" tocid="Methods_T_Grpc_Core_Marshaller_1">Marshaller(T) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshaller<span id="LSTEAB4093D_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEAB4093D_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">T</span><span id="LSTEAB4093D_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEAB4093D_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Structure</td></tr></table><span class="introStyle"></span><div class="summary">
+ Encapsulates the logic for serializing and deserializing messages.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">struct</span> <span class="identifier">Marshaller</span>&lt;T&gt;
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Structure</span> <span class="identifier">Marshaller</span>(<span class="keyword">Of</span> T)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> T&gt;
+<span class="keyword">public</span> <span class="keyword">value class</span> <span class="identifier">Marshaller</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">Marshaller</span>&lt;'T&gt; = <span class="keyword">struct</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">T</span></dt><dd><p style="color: #dc143c; font-size: 8.5pt; font-weight: bold;">[Missing &lt;typeparam name="T"/&gt; documentation for "T:Grpc.Core.Marshaller`1"]</p></dd></dl></div><p>The <span class="selflink">Marshaller<span id="LSTEAB4093D_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEAB4093D_2?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTEAB4093D_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEAB4093D_3?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Marshaller_1__ctor.htm">Marshaller<span id="LSTEAB4093D_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEAB4093D_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>T<span id="LSTEAB4093D_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTEAB4093D_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Initializes a new marshaller.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Marshaller_1_Deserializer.htm">Deserializer</a></td><td><div class="summary">
+ Gets the deserializer function.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Marshaller_1_Serializer.htm">Serializer</a></td><td><div class="summary">
+ Gets the serializer function.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2dts52z7" target="_blank">Equals</a></td><td><div class="summary">Indicates whether this instance and a specified object are equal.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/y3509fc2" target="_blank">GetHashCode</a></td><td><div class="summary">Returns the hash code for this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/wb77sz3h" target="_blank">ToString</a></td><td><div class="summary">Returns the fully qualified type name of this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Marshallers.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Marshallers.htm
new file mode 100644
index 0000000000..b79baad914
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Marshallers.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Marshallers Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Marshallers class" /><meta name="System.Keywords" content="Grpc.Core.Marshallers class" /><meta name="System.Keywords" content="Marshallers class, about Marshallers class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Marshallers" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Marshallers" /><meta name="Description" content="Utilities for creating marshallers." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Marshallers" /><meta name="guid" content="T_Grpc_Core_Marshallers" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Marshallers.htm" title="Marshallers Properties" tocid="Properties_T_Grpc_Core_Marshallers">Marshallers Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Marshallers.htm" title="Marshallers Methods" tocid="Methods_T_Grpc_Core_Marshallers">Marshallers Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Marshallers Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Utilities for creating marshallers.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST1C687B3B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1C687B3B_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST1C687B3B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1C687B3B_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Marshallers</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="identifier">Marshallers</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">Marshallers</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">Marshallers</span> <span class="keyword">abstract</span> <span class="keyword">sealed</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">Marshallers</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">Marshallers</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="P_Grpc_Core_Marshallers_StringMarshaller.htm">StringMarshaller</a></td><td><div class="summary">
+ Returns a marshaller for <span class="code">string</span> type. This is useful for testing.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Marshallers_Create__1.htm">Create<span id="LST1C687B3B_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1C687B3B_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST1C687B3B_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST1C687B3B_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Creates a marshaller from specified serializer and deserializer.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Metadata.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Metadata.htm
new file mode 100644
index 0000000000..d457046129
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Metadata.htm
@@ -0,0 +1,29 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Metadata class" /><meta name="System.Keywords" content="Grpc.Core.Metadata class" /><meta name="System.Keywords" content="Metadata class, about Metadata class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Metadata" /><meta name="Description" content="A collection of metadata entries that can be exchanged during a call. gRPC supports these types of metadata: Request headersare sent by the client at the beginning of a remote call before any request messages are sent." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Metadata" /><meta name="guid" content="T_Grpc_Core_Metadata" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Metadata__ctor.htm" title="Metadata Constructor " tocid="M_Grpc_Core_Metadata__ctor">Metadata Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata.htm" title="Metadata Properties" tocid="Properties_T_Grpc_Core_Metadata">Metadata Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata.htm" title="Metadata Methods" tocid="Methods_T_Grpc_Core_Metadata">Metadata Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_Metadata.htm" title="Metadata Fields" tocid="Fields_T_Grpc_Core_Metadata">Metadata Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ A collection of metadata entries that can be exchanged during a call.
+ gRPC supports these types of metadata:
+ <ul><li><strong>Request headers</strong> - are sent by the client at the beginning of a remote call before any request messages are sent.</li><li><strong>Response headers</strong> - are sent by the server at the beginning of a remote call handler before any response messages are sent.</li><li><strong>Response trailers</strong> - are sent by the server at the end of a remote call along with resulting call status.</li></ul></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST821E84B4_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST821E84B4_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Metadata</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">sealed</span> <span class="keyword">class</span> <span class="identifier">Metadata</span> : <span class="identifier">IList</span>&lt;<span class="identifier">Metadata<span id="LST821E84B4_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;,
+ <span class="identifier">ICollection</span>&lt;<span class="identifier">Metadata<span id="LST821E84B4_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;, <span class="identifier">IEnumerable</span>&lt;<span class="identifier">Metadata<span id="LST821E84B4_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;, <span class="identifier">IEnumerable</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">Metadata</span>
+ <span class="keyword">Implements</span> <span class="identifier">IList</span>(<span class="keyword">Of</span> <span class="identifier">Metadata<span id="LST821E84B4_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>), <span class="identifier">ICollection</span>(<span class="keyword">Of</span> <span class="identifier">Metadata<span id="LST821E84B4_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>),
+ <span class="identifier">IEnumerable</span>(<span class="keyword">Of</span> <span class="identifier">Metadata<span id="LST821E84B4_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>), <span class="identifier">IEnumerable</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">Metadata</span> <span class="keyword">sealed</span> : <span class="identifier">IList</span>&lt;<span class="identifier">Metadata<span id="LST821E84B4_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;,
+ <span class="identifier">ICollection</span>&lt;<span class="identifier">Metadata<span id="LST821E84B4_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;, <span class="identifier">IEnumerable</span>&lt;<span class="identifier">Metadata<span id="LST821E84B4_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_10?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;, <span class="identifier">IEnumerable</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">Metadata</span> =
+ <span class="keyword">class</span>
+ <span class="keyword">interface</span> <span class="identifier">IList</span>&lt;<span class="identifier">Metadata<span id="LST821E84B4_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_11?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;
+ <span class="keyword">interface</span> <span class="identifier">ICollection</span>&lt;<span class="identifier">Metadata<span id="LST821E84B4_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_12?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;
+ <span class="keyword">interface</span> <span class="identifier">IEnumerable</span>&lt;<span class="identifier">Metadata<span id="LST821E84B4_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_13?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>&gt;
+ <span class="keyword">interface</span> <span class="identifier">IEnumerable</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">Metadata</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata__ctor.htm">Metadata</a></td><td><div class="summary">
+ Initializes a new instance of <span class="code">Metadata</span>.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Count.htm">Count</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_IsReadOnly.htm">IsReadOnly</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Item.htm">Item</a></td><td /></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Add.htm">Add(Metadata<span id="LST821E84B4_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_14?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry)</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Add_1.htm">Add(String, <span id="LST821E84B4_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_15?cpp=array&lt;");</script>Byte<span id="LST821E84B4_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST821E84B4_16?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Add_2.htm">Add(String, String)</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Clear.htm">Clear</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Contains.htm">Contains</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_CopyTo.htm">CopyTo</a></td><td /></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_GetEnumerator.htm">GetEnumerator</a></td><td /></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_IndexOf.htm">IndexOf</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Insert.htm">Insert</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Remove.htm">Remove</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_RemoveAt.htm">RemoveAt</a></td><td /></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID6RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm">BinaryHeaderSuffix</a></td><td><div class="summary">
+ All binary headers should have this suffix.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_Metadata_Empty.htm">Empty</a></td><td><div class="summary">
+ An read-only instance of metadata containing no entries.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID7RB')" onkeypress="SectionExpandCollapse_CheckKey('ID7RB', event)" tabindex="0"><img id="ID7RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID7RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Metadata_Entry.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Metadata_Entry.htm
new file mode 100644
index 0000000000..b7e276ca2e
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Metadata_Entry.htm
@@ -0,0 +1,24 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Metadata.Entry Structure</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Metadata.Entry structure" /><meta name="System.Keywords" content="Grpc.Core.Metadata.Entry structure" /><meta name="System.Keywords" content="Metadata.Entry structure, about Metadata.Entry structure" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Metadata.Entry" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Metadata.Entry" /><meta name="Description" content="Metadata entry" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Metadata_Entry" /><meta name="guid" content="T_Grpc_Core_Metadata_Entry" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_Metadata_Entry__ctor.htm" title="Entry Constructor " tocid="Overload_Grpc_Core_Metadata_Entry__ctor">Entry Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Metadata_Entry.htm" title="Entry Properties" tocid="Properties_T_Grpc_Core_Metadata_Entry">Entry Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Metadata_Entry.htm" title="Entry Methods" tocid="Methods_T_Grpc_Core_Metadata_Entry">Entry Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Metadata<span id="LST8E39C28A_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_0?cpp=::|nu=.");</script>Entry Structure</td></tr></table><span class="introStyle"></span><div class="summary">
+ Metadata entry
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">struct</span> <span class="identifier">Entry</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Structure</span> <span class="identifier">Entry</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">value class</span> <span class="identifier">Entry</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">Entry</span> = <span class="keyword">struct</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><p>The <span class="selflink">Metadata<span id="LST8E39C28A_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Entry__ctor.htm">Metadata<span id="LST8E39C28A_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry(String, <span id="LST8E39C28A_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_3?cpp=array&lt;");</script>Byte<span id="LST8E39C28A_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_4?cpp=&gt;|cs=[]|vb=()|nu=[]|fs=[]");</script>)</a></td><td><div class="summary">
+ Initializes a new instance of the <span class="selflink">Metadata<span id="LST8E39C28A_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> struct with a binary value.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Entry__ctor_1.htm">Metadata<span id="LST8E39C28A_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_6?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry(String, String)</a></td><td><div class="summary">
+ Initializes a new instance of the <span class="selflink">Metadata<span id="LST8E39C28A_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_7?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span> struct holding an ASCII value.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Entry_IsBinary.htm">IsBinary</a></td><td><div class="summary">
+ Returns <span class="code">true</span> if this entry is a binary-value entry.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Entry_Key.htm">Key</a></td><td><div class="summary">
+ Gets the metadata entry key.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Entry_Value.htm">Value</a></td><td><div class="summary">
+ Gets the string value of this metadata entry.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Metadata_Entry_ValueBytes.htm">ValueBytes</a></td><td><div class="summary">
+ Gets the binary value of this metadata entry.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2dts52z7" target="_blank">Equals</a></td><td><div class="summary">Indicates whether this instance and a specified object are equal.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/y3509fc2" target="_blank">GetHashCode</a></td><td><div class="summary">Returns the hash code for this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Metadata_Entry_ToString.htm">ToString</a></td><td><div class="summary">
+ Returns a <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a> that represents the current <span class="selflink">Metadata<span id="LST8E39C28A_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_8?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Entry</span>.
+ </div> (Overrides <a href="http://msdn2.microsoft.com/en-us/library/wb77sz3h" target="_blank">ValueType<span id="LST8E39C28A_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_9?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ToString<span id="LST8E39C28A_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST8E39C28A_10?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_MethodType.htm b/doc/ref/csharp/html/html/T_Grpc_Core_MethodType.htm
new file mode 100644
index 0000000000..264622b1b6
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_MethodType.htm
@@ -0,0 +1,5 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>MethodType Enumeration</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="MethodType enumeration" /><meta name="System.Keywords" content="Grpc.Core.MethodType enumeration" /><meta name="System.Keywords" content="Unary enumeration member" /><meta name="System.Keywords" content="ClientStreaming enumeration member" /><meta name="System.Keywords" content="ServerStreaming enumeration member" /><meta name="System.Keywords" content="DuplexStreaming enumeration member" /><meta name="Microsoft.Help.F1" content="Grpc.Core.MethodType" /><meta name="Microsoft.Help.F1" content="Grpc.Core.MethodType.Unary" /><meta name="Microsoft.Help.F1" content="Grpc.Core.MethodType.ClientStreaming" /><meta name="Microsoft.Help.F1" content="Grpc.Core.MethodType.ServerStreaming" /><meta name="Microsoft.Help.F1" content="Grpc.Core.MethodType.DuplexStreaming" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.MethodType" /><meta name="Description" content="Method types supported by gRPC." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_MethodType" /><meta name="guid" content="T_Grpc_Core_MethodType" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">MethodType Enumeration</td></tr></table><span class="introStyle"></span><div class="summary">
+ Method types supported by gRPC.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">enum</span> <span class="identifier">MethodType</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Enumeration</span> <span class="identifier">MethodType</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">enum class</span> <span class="identifier">MethodType</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">MethodType</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div id="enumerationSection"><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Members</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Member name</th><th>Value</th><th>Description</th></tr><tr><td /><td target="F:Grpc.Core.MethodType.Unary"><span class="selflink">Unary</span></td><td>0</td><td>Single request sent from client, single response received from server.</td></tr><tr><td /><td target="F:Grpc.Core.MethodType.ClientStreaming"><span class="selflink">ClientStreaming</span></td><td>1</td><td>Stream of request sent from client, single response received from server.</td></tr><tr><td /><td target="F:Grpc.Core.MethodType.ServerStreaming"><span class="selflink">ServerStreaming</span></td><td>2</td><td>Single request sent from client, stream of responses received from server.</td></tr><tr><td /><td target="F:Grpc.Core.MethodType.DuplexStreaming"><span class="selflink">DuplexStreaming</span></td><td>3</td><td>Both server and client can stream arbitrary number of requests and responses simultaneously.</td></tr></table></div></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID3RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Method_2.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Method_2.htm
new file mode 100644
index 0000000000..054329f4bb
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Method_2.htm
@@ -0,0 +1,30 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Method(TRequest, TResponse) Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E class" /><meta name="System.Keywords" content="Grpc.Core.Method%3CTRequest%2C TResponse%3E class" /><meta name="System.Keywords" content="Method%3CTRequest%2C TResponse%3E class, about Method%3CTRequest%2C TResponse%3E class" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse) class" /><meta name="System.Keywords" content="Grpc.Core.Method(Of TRequest%2C TResponse) class" /><meta name="System.Keywords" content="Method(Of TRequest%2C TResponse) class, about Method(Of TRequest%2C TResponse) class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Method`2" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Method`2" /><meta name="Description" content="A description of a remote method." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Method_2" /><meta name="guid" content="T_Grpc_Core_Method_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Method_2__ctor.htm" title="Method(TRequest, TResponse) Constructor " tocid="M_Grpc_Core_Method_2__ctor">Method(TRequest, TResponse) Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Properties" tocid="Properties_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Methods" tocid="Methods_T_Grpc_Core_Method_2">Method(TRequest, TResponse) Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Method<span id="LSTE51AEB66_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE51AEB66_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTE51AEB66_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE51AEB66_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ A description of a remote method.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTE51AEB66_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE51AEB66_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LSTE51AEB66_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE51AEB66_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Method<span id="LSTE51AEB66_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE51AEB66_4?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTE51AEB66_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE51AEB66_5?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Method</span>&lt;TRequest, TResponse&gt; : <span class="identifier">IMethod</span>
+</pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">Method</span>(<span class="keyword">Of</span> TRequest, TResponse)
+ <span class="keyword">Implements</span> <span class="identifier">IMethod</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">Method</span> : <span class="identifier">IMethod</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">Method</span>&lt;'TRequest, 'TResponse&gt; =
+ <span class="keyword">class</span>
+ <span class="keyword">interface</span> <span class="identifier">IMethod</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Request message type for this method.</dd><dt><span class="parameter">TResponse</span></dt><dd>Response message type for this method.</dd></dl></div><p>The <span class="selflink">Method<span id="LSTE51AEB66_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE51AEB66_6?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTE51AEB66_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE51AEB66_7?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Method_2__ctor.htm">Method<span id="LSTE51AEB66_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE51AEB66_8?cs=&lt;|vb=(Of |cpp=&lt;|nu=(|fs=&lt;'");</script>TRequest, TResponse<span id="LSTE51AEB66_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE51AEB66_9?cs=&gt;|vb=)|cpp=&gt;|nu=)|fs=&gt;");</script></a></td><td><div class="summary">
+ Initializes a new instance of the <span class="code">Method</span> class.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_FullName.htm">FullName</a></td><td><div class="summary">
+ Gets the fully qualified name of the method. On the server side, methods are dispatched
+ based on this name.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_Name.htm">Name</a></td><td><div class="summary">
+ Gets the unqualified name of the method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_RequestMarshaller.htm">RequestMarshaller</a></td><td><div class="summary">
+ Gets the marshaller used for request messages.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_ResponseMarshaller.htm">ResponseMarshaller</a></td><td><div class="summary">
+ Gets the marshaller used for response messages.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_ServiceName.htm">ServiceName</a></td><td><div class="summary">
+ Gets the name of the service to which this method belongs.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Method_2_Type.htm">Type</a></td><td><div class="summary">
+ Gets the type of the method.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_RpcException.htm b/doc/ref/csharp/html/html/T_Grpc_Core_RpcException.htm
new file mode 100644
index 0000000000..497c69ddbc
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_RpcException.htm
@@ -0,0 +1,21 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>RpcException Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="RpcException class" /><meta name="System.Keywords" content="Grpc.Core.RpcException class" /><meta name="System.Keywords" content="RpcException class, about RpcException class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.RpcException" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.RpcException" /><meta name="Description" content="Thrown when remote procedure call fails. Every RpcException is associated with a resulting of the call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_RpcException" /><meta name="guid" content="T_Grpc_Core_RpcException" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_RpcException__ctor.htm" title="RpcException Constructor " tocid="Overload_Grpc_Core_RpcException__ctor">RpcException Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_RpcException.htm" title="RpcException Properties" tocid="Properties_T_Grpc_Core_RpcException">RpcException Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_RpcException.htm" title="RpcException Methods" tocid="Methods_T_Grpc_Core_RpcException">RpcException Methods</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Events_T_Grpc_Core_RpcException.htm" title="RpcException Events" tocid="Events_T_Grpc_Core_RpcException">RpcException Events</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">RpcException Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Thrown when remote procedure call fails. Every <span class="code">RpcException</span> is associated with a resulting <a href="P_Grpc_Core_RpcException_Status.htm">Status</a> of the call.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST4FAB4D45_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FAB4D45_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">System<span id="LST4FAB4D45_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FAB4D45_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Exception</a><br />    <span class="selflink">Grpc.Core<span id="LST4FAB4D45_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4FAB4D45_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>RpcException</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">RpcException</span> : <span class="identifier">Exception</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">RpcException</span>
+ <span class="keyword">Inherits</span> <span class="identifier">Exception</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">RpcException</span> : <span class="keyword">public</span> <span class="identifier">Exception</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">RpcException</span> =
+ <span class="keyword">class</span>
+ <span class="keyword">inherit</span> <span class="identifier">Exception</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">RpcException</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_RpcException__ctor.htm">RpcException(Status)</a></td><td><div class="summary">
+ Creates a new <span class="code">RpcException</span> associated with given status.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_RpcException__ctor_1.htm">RpcException(Status, String)</a></td><td><div class="summary">
+ Creates a new <span class="code">RpcException</span> associated with given status and message.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2wyfbc48" target="_blank">Data</a></td><td><div class="summary">Gets a collection of key/value pairs that provide additional user-defined information about the exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/71tawy4s" target="_blank">HelpLink</a></td><td><div class="summary">Gets or sets a link to the help file associated with this exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/sh5cw61c" target="_blank">HResult</a></td><td><div class="summary">Gets or sets HRESULT, a coded numerical value that is assigned to a specific exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/902sca80" target="_blank">InnerException</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a> instance that caused the current exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/9btwf6wk" target="_blank">Message</a></td><td><div class="summary">Gets a message that describes the current exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/85weac5w" target="_blank">Source</a></td><td><div class="summary">Gets or sets the name of the application or the object that causes the error.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dxzhy005" target="_blank">StackTrace</a></td><td><div class="summary">Gets a string representation of the immediate frames on the call stack.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_RpcException_Status.htm">Status</a></td><td><div class="summary">
+ Resulting status of the call.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2wchw354" target="_blank">TargetSite</a></td><td><div class="summary">Gets the method that throws the current exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/49kcee3b" target="_blank">GetBaseException</a></td><td><div class="summary">When overridden in a derived class, returns the <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a> that is the root cause of one or more subsequent exceptions.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/fwb1489e" target="_blank">GetObjectData</a></td><td><div class="summary">When overridden in a derived class, sets the <a href="http://msdn2.microsoft.com/en-us/library/a9b6042e" target="_blank">SerializationInfo</a> with information about the exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/44zb316t" target="_blank">GetType</a></td><td><div class="summary">Gets the runtime type of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/es4y6f7e" target="_blank">ToString</a></td><td><div class="summary">Creates and returns a string representation of the current exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Events</span></div><div id="ID6RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protevent.gif" alt="Protected event" title="Protected event" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/ee332915" target="_blank">SerializeObjectState</a></td><td><div class="summary">Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/c18k6c59" target="_blank">Exception</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID7RB')" onkeypress="SectionExpandCollapse_CheckKey('ID7RB', event)" tabindex="0"><img id="ID7RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID7RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Server.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Server.htm
new file mode 100644
index 0000000000..a32eeceb24
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Server.htm
@@ -0,0 +1,28 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Server class" /><meta name="System.Keywords" content="Grpc.Core.Server class" /><meta name="System.Keywords" content="Server class, about Server class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Server" /><meta name="Description" content="gRPC server. A single server can server arbitrary number of services and can listen on more than one ports." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Server" /><meta name="guid" content="T_Grpc_Core_Server" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Server__ctor.htm" title="Server Constructor " tocid="M_Grpc_Core_Server__ctor">Server Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Server.htm" title="Server Properties" tocid="Properties_T_Grpc_Core_Server">Server Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server.htm" title="Server Methods" tocid="Methods_T_Grpc_Core_Server">Server Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ gRPC server. A single server can server arbitrary number of services and can listen on more than one ports.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST9A9C4CF6_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9A9C4CF6_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST9A9C4CF6_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST9A9C4CF6_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Server</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Server</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">Server</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">Server</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">Server</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">Server</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server__ctor.htm">Server</a></td><td><div class="summary">
+ Create a new server.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Server_Ports.htm">Ports</a></td><td><div class="summary">
+ Ports on which the server will listen once started. Register a port with this
+ server by adding its definition to this collection.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Server_Services.htm">Services</a></td><td><div class="summary">
+ Services that will be exported by the server once started. Register a service with this
+ server by adding its definition to this collection.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Server_ShutdownTask.htm">ShutdownTask</a></td><td><div class="summary">
+ To allow awaiting termination of the server.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_KillAsync.htm">KillAsync</a></td><td><div class="summary">
+ Requests server shutdown while cancelling all the in-progress calls.
+ The returned task finishes when shutdown procedure is complete.
+ </div></td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ShutdownAsync.htm">ShutdownAsync</a></td><td><div class="summary">
+ Requests server shutdown and when there are no more calls being serviced,
+ cleans up used resources. The returned task finishes when shutdown procedure
+ is complete.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_Start.htm">Start</a></td><td><div class="summary">
+ Starts the server.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ServerCallContext.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ServerCallContext.htm
new file mode 100644
index 0000000000..0e0c4b4aed
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ServerCallContext.htm
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCallContext Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerCallContext class" /><meta name="System.Keywords" content="Grpc.Core.ServerCallContext class" /><meta name="System.Keywords" content="ServerCallContext class, about ServerCallContext class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCallContext" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ServerCallContext" /><meta name="Description" content="Context for a server-side call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ServerCallContext" /><meta name="guid" content="T_Grpc_Core_ServerCallContext" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Properties" tocid="Properties_T_Grpc_Core_ServerCallContext">ServerCallContext Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Methods" tocid="Methods_T_Grpc_Core_ServerCallContext">ServerCallContext Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCallContext Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Context for a server-side call.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST4688C34B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4688C34B_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST4688C34B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST4688C34B_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerCallContext</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">ServerCallContext</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">ServerCallContext</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ServerCallContext</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ServerCallContext</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ServerCallContext</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_CancellationToken.htm">CancellationToken</a></td><td><div class="summary">Cancellation token signals when call is cancelled.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_Deadline.htm">Deadline</a></td><td><div class="summary">Deadline for this RPC.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_Host.htm">Host</a></td><td><div class="summary">Name of host called in this RPC.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_Method.htm">Method</a></td><td><div class="summary">Name of method called in this RPC.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_Peer.htm">Peer</a></td><td><div class="summary">Address of the remote endpoint in URI format.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_RequestHeaders.htm">RequestHeaders</a></td><td><div class="summary">Initial metadata sent by client.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_ResponseTrailers.htm">ResponseTrailers</a></td><td><div class="summary">Trailers to send back to client after RPC finishes.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_Status.htm">Status</a></td><td><div class="summary"> Status to send back to client after RPC finishes.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerCallContext_WriteOptions.htm">WriteOptions</a></td><td><div class="summary">
+ Allows setting write options for the following write.
+ For streaming response calls, this property is also exposed as on IServerStreamWriter for convenience.
+ Both properties are backed by the same underlying value.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm">CreatePropagationToken</a></td><td><div class="summary">
+ Creates a propagation token to be used to propagate call context to a child call.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm">WriteResponseHeadersAsync</a></td><td><div class="summary">
+ Asynchronously sends response headers for the current call to the client. This method may only be invoked once for each call and needs to be invoked
+ before any response messages are written. Writing the first response message implicitly sends empty response headers if <span class="code">WriteResponseHeadersAsync</span> haven't
+ been called yet.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ServerCredentials.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ServerCredentials.htm
new file mode 100644
index 0000000000..dab5f27320
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ServerCredentials.htm
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerCredentials Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerCredentials class" /><meta name="System.Keywords" content="Grpc.Core.ServerCredentials class" /><meta name="System.Keywords" content="ServerCredentials class, about ServerCredentials class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerCredentials" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ServerCredentials" /><meta name="Description" content="Server side credentials." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ServerCredentials" /><meta name="guid" content="T_Grpc_Core_ServerCredentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerCredentials__ctor.htm" title="ServerCredentials Constructor " tocid="M_Grpc_Core_ServerCredentials__ctor">ServerCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Properties" tocid="Properties_T_Grpc_Core_ServerCredentials">ServerCredentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Methods" tocid="Methods_T_Grpc_Core_ServerCredentials">ServerCredentials Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerCredentials Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Server side credentials.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTE6D34D84_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE6D34D84_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LSTE6D34D84_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE6D34D84_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerCredentials</span><br />    <a href="T_Grpc_Core_SslServerCredentials.htm">Grpc.Core<span id="LSTE6D34D84_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE6D34D84_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>SslServerCredentials</a><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">abstract</span> <span class="keyword">class</span> <span class="identifier">ServerCredentials</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">MustInherit</span> <span class="keyword">Class</span> <span class="identifier">ServerCredentials</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ServerCredentials</span> <span class="keyword">abstract</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">ServerCredentials</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ServerCredentials</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="protected;declared;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="M_Grpc_Core_ServerCredentials__ctor.htm">ServerCredentials</a></td><td><div class="summary">Initializes a new instance of the <span class="selflink">ServerCredentials</span> class</div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="P_Grpc_Core_ServerCredentials_Insecure.htm">Insecure</a></td><td><div class="summary">
+ Returns instance of credential that provides no security and
+ will result in creating an unsecure server port with no encryption whatsoever.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ServerPort.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ServerPort.htm
new file mode 100644
index 0000000000..21ddace1d0
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ServerPort.htm
@@ -0,0 +1,16 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerPort Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerPort class" /><meta name="System.Keywords" content="Grpc.Core.ServerPort class" /><meta name="System.Keywords" content="ServerPort class, about ServerPort class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerPort" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ServerPort" /><meta name="Description" content="A port exposed by a server." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ServerPort" /><meta name="guid" content="T_Grpc_Core_ServerPort" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerPort__ctor.htm" title="ServerPort Constructor " tocid="M_Grpc_Core_ServerPort__ctor">ServerPort Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_ServerPort.htm" title="ServerPort Properties" tocid="Properties_T_Grpc_Core_ServerPort">ServerPort Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_ServerPort.htm" title="ServerPort Methods" tocid="Methods_T_Grpc_Core_ServerPort">ServerPort Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_ServerPort.htm" title="ServerPort Fields" tocid="Fields_T_Grpc_Core_ServerPort">ServerPort Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerPort Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ A port exposed by a server.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTDA23567B_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDA23567B_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LSTDA23567B_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTDA23567B_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPort</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">ServerPort</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">ServerPort</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ServerPort</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ServerPort</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ServerPort</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerPort__ctor.htm">ServerPort</a></td><td><div class="summary">
+ Creates a new port on which server should listen.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerPort_BoundPort.htm">BoundPort</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerPort_Credentials.htm">Credentials</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerPort_Host.htm">Host</a></td><td /></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_ServerPort_Port.htm">Port</a></td><td /></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID6RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_ServerPort_PickUnused.htm">PickUnused</a></td><td><div class="summary">
+ Pass this value as port to have the server choose an unused listening port for you.
+ Ports added to a server will contain the bound port in their <a href="P_Grpc_Core_ServerPort_BoundPort.htm">BoundPort</a> property.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID7RB')" onkeypress="SectionExpandCollapse_CheckKey('ID7RB', event)" tabindex="0"><img id="ID7RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID7RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ServerServiceDefinition.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ServerServiceDefinition.htm
new file mode 100644
index 0000000000..a673de01d1
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ServerServiceDefinition.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerServiceDefinition Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerServiceDefinition class" /><meta name="System.Keywords" content="Grpc.Core.ServerServiceDefinition class" /><meta name="System.Keywords" content="ServerServiceDefinition class, about ServerServiceDefinition class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerServiceDefinition" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ServerServiceDefinition" /><meta name="Description" content="Mapping of method names to server call handlers. Normally, the ServerServiceDefinition objects will be created by the BindService factory method that is part of the autogenerated code for a protocol buffers service definition." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ServerServiceDefinition" /><meta name="guid" content="T_Grpc_Core_ServerServiceDefinition" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerServiceDefinition Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Mapping of method names to server call handlers.
+ Normally, the <span class="code">ServerServiceDefinition</span> objects will be created by the <span class="code">BindService</span> factory method
+ that is part of the autogenerated code for a protocol buffers service definition.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTCBD91EBC_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCBD91EBC_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LSTCBD91EBC_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTCBD91EBC_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerServiceDefinition</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">ServerServiceDefinition</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">ServerServiceDefinition</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ServerServiceDefinition</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ServerServiceDefinition</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ServerServiceDefinition</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm">CreateBuilder</a></td><td><div class="summary">
+ Creates a new builder object for <span class="code">ServerServiceDefinition</span>.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ServerServiceDefinition_Builder.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ServerServiceDefinition_Builder.htm
new file mode 100644
index 0000000000..442df368ef
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ServerServiceDefinition_Builder.htm
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerServiceDefinition.Builder Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerServiceDefinition.Builder class" /><meta name="System.Keywords" content="Grpc.Core.ServerServiceDefinition.Builder class" /><meta name="System.Keywords" content="ServerServiceDefinition.Builder class, about ServerServiceDefinition.Builder class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerServiceDefinition.Builder" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ServerServiceDefinition.Builder" /><meta name="Description" content="Builder class for ." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ServerServiceDefinition_Builder" /><meta name="guid" content="T_Grpc_Core_ServerServiceDefinition_Builder" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm" title="ServerServiceDefinition.Builder Constructor " tocid="M_Grpc_Core_ServerServiceDefinition_Builder__ctor">ServerServiceDefinition.Builder Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="Builder Methods" tocid="Methods_T_Grpc_Core_ServerServiceDefinition_Builder">Builder Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerServiceDefinition<span id="LST77F651CD_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_0?cpp=::|nu=.");</script>Builder Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Builder class for <a href="T_Grpc_Core_ServerServiceDefinition.htm">ServerServiceDefinition</a>.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST77F651CD_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST77F651CD_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerServiceDefinition<span id="LST77F651CD_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Builder</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">Builder</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">Builder</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">Builder</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">ServerServiceDefinition<span id="LST77F651CD_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm">ServerServiceDefinition<span id="LST77F651CD_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Builder</a></td><td><div class="summary">
+ Creates a new instance of builder.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm">AddMethod<span id="LST77F651CD_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LST77F651CD_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, ClientStreamingServerMethod<span id="LST77F651CD_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_10?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_11?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a client streaming method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm">AddMethod<span id="LST77F651CD_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_12?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_13?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LST77F651CD_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_14?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_15?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, DuplexStreamingServerMethod<span id="LST77F651CD_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_16?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_17?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a bidirectional streaming method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm">AddMethod<span id="LST77F651CD_18"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_18?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_19"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_19?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LST77F651CD_20"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_20?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_21"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_21?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, ServerStreamingServerMethod<span id="LST77F651CD_22"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_22?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_23"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_23?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a server streaming method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm">AddMethod<span id="LST77F651CD_24"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_24?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_25"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_25?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(Method<span id="LST77F651CD_26"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_26?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_27"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_27?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, UnaryServerMethod<span id="LST77F651CD_28"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_28?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>TRequest, TResponse<span id="LST77F651CD_29"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST77F651CD_29?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Adds a definitions for a single request - single response method.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm">Build</a></td><td><div class="summary">
+ Creates an immutable <span class="code">ServerServiceDefinition</span> from this builder.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID5RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_ServerStreamingServerMethod_2.htm b/doc/ref/csharp/html/html/T_Grpc_Core_ServerStreamingServerMethod_2.htm
new file mode 100644
index 0000000000..cf02bb4f6b
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_ServerStreamingServerMethod_2.htm
@@ -0,0 +1,25 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>ServerStreamingServerMethod(TRequest, TResponse) Delegate</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="ServerStreamingServerMethod%3CTRequest%2C TResponse%3E delegate" /><meta name="System.Keywords" content="Grpc.Core.ServerStreamingServerMethod%3CTRequest%2C TResponse%3E delegate" /><meta name="System.Keywords" content="ServerStreamingServerMethod(Of TRequest%2C TResponse) delegate" /><meta name="System.Keywords" content="Grpc.Core.ServerStreamingServerMethod(Of TRequest%2C TResponse) delegate" /><meta name="Microsoft.Help.F1" content="Grpc.Core.ServerStreamingServerMethod`2" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.ServerStreamingServerMethod`2" /><meta name="Description" content="Server-side handler for server streaming call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_ServerStreamingServerMethod_2" /><meta name="guid" content="T_Grpc_Core_ServerStreamingServerMethod_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">ServerStreamingServerMethod<span id="LSTFFA58EA2_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFFA58EA2_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LSTFFA58EA2_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFFA58EA2_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Delegate</td></tr></table><span class="introStyle"></span><div class="summary">
+ Server-side handler for server streaming call.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">delegate</span> <span class="identifier">Task</span> <span class="identifier">ServerStreamingServerMethod</span>&lt;TRequest, TResponse&gt;(
+ TRequest <span class="parameter">request</span>,
+ <span class="identifier">IServerStreamWriter</span>&lt;TResponse&gt; <span class="parameter">responseStream</span>,
+ <span class="identifier">ServerCallContext</span> <span class="parameter">context</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Delegate</span> <span class="keyword">Function</span> <span class="identifier">ServerStreamingServerMethod</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">request</span> <span class="keyword">As</span> TRequest,
+ <span class="parameter">responseStream</span> <span class="keyword">As</span> <span class="identifier">IServerStreamWriter</span>(<span class="keyword">Of</span> TResponse),
+ <span class="parameter">context</span> <span class="keyword">As</span> <span class="identifier">ServerCallContext</span>
+) <span class="keyword">As</span> <span class="identifier">Task</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="keyword">public</span> <span class="keyword">delegate</span> <span class="identifier">Task</span>^ <span class="identifier">ServerStreamingServerMethod</span>(
+ TRequest <span class="parameter">request</span>,
+ <span class="identifier">IServerStreamWriter</span>&lt;TResponse&gt;^ <span class="parameter">responseStream</span>,
+ <span class="identifier">ServerCallContext</span>^ <span class="parameter">context</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ServerStreamingServerMethod</span> =
+ <span class="keyword">delegate</span> <span class="keyword">of</span>
+ <span class="parameter">request</span> : 'TRequest *
+ <span class="parameter">responseStream</span> : <span class="identifier">IServerStreamWriter</span>&lt;'TResponse&gt; *
+ <span class="parameter">context</span> : <span class="identifier">ServerCallContext</span> <span class="keyword">-&gt;</span> <span class="identifier">Task</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">request</span></dt><dd>Type: <span class="selflink"><span class="typeparameter">TRequest</span></span><br /></dd><dt><span class="parameter">responseStream</span></dt><dd>Type: <a href="T_Grpc_Core_IServerStreamWriter_1.htm">Grpc.Core<span id="LSTFFA58EA2_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFFA58EA2_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>IServerStreamWriter</a><span id="LSTFFA58EA2_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFFA58EA2_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LSTFFA58EA2_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFFA58EA2_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script><br /></dd><dt><span class="parameter">context</span></dt><dd>Type: <a href="T_Grpc_Core_ServerCallContext.htm">Grpc.Core<span id="LSTFFA58EA2_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTFFA58EA2_5?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerCallContext</a><br /></dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Request message type for this method.</dd><dt><span class="parameter">TResponse</span></dt><dd>Response message type for this method.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd235678" target="_blank">Task</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Server_ServerPortCollection.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Server_ServerPortCollection.htm
new file mode 100644
index 0000000000..08ab135f4d
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Server_ServerPortCollection.htm
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.ServerPortCollection Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Server.ServerPortCollection class" /><meta name="System.Keywords" content="Grpc.Core.Server.ServerPortCollection class" /><meta name="System.Keywords" content="Server.ServerPortCollection class, about Server.ServerPortCollection class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.ServerPortCollection" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Server.ServerPortCollection" /><meta name="Description" content="Collection of server ports." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Server_ServerPortCollection" /><meta name="guid" content="T_Grpc_Core_Server_ServerPortCollection" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server_ServerPortCollection.htm" title="ServerPortCollection Methods" tocid="Methods_T_Grpc_Core_Server_ServerPortCollection">ServerPortCollection Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LST92C92938_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92C92938_0?cpp=::|nu=.");</script>ServerPortCollection Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Collection of server ports.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST92C92938_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92C92938_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST92C92938_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92C92938_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Server<span id="LST92C92938_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92C92938_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">ServerPortCollection</span> : <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ServerPort</span>&gt;,
+ <span class="identifier">IEnumerable</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">ServerPortCollection</span>
+ <span class="keyword">Implements</span> <span class="identifier">IEnumerable</span>(<span class="keyword">Of</span> <span class="identifier">ServerPort</span>), <span class="identifier">IEnumerable</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ServerPortCollection</span> : <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ServerPort</span>^&gt;,
+ <span class="identifier">IEnumerable</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ServerPortCollection</span> =
+ <span class="keyword">class</span>
+ <span class="keyword">interface</span> <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ServerPort</span>&gt;
+ <span class="keyword">interface</span> <span class="identifier">IEnumerable</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">Server<span id="LST92C92938_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST92C92938_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerPortCollection</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServerPortCollection_Add.htm">Add(ServerPort)</a></td><td><div class="summary">
+ Adds a new port on which server should listen.
+ Only call this before Start().
+ <h4 class="subHeading">Return Value</h4>Type: <br />The port on which server will be listening.</div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServerPortCollection_Add_1.htm">Add(String, Int32, ServerCredentials)</a></td><td><div class="summary">
+ Adds a new port on which server should listen.
+ <h4 class="subHeading">Return Value</h4>Type: <br />The port on which server will be listening.</div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm">GetEnumerator</a></td><td><div class="summary">
+ Gets enumerator for this collection.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm
new file mode 100644
index 0000000000..054b16bc4d
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Server.ServiceDefinitionCollection Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Server.ServiceDefinitionCollection class" /><meta name="System.Keywords" content="Grpc.Core.Server.ServiceDefinitionCollection class" /><meta name="System.Keywords" content="Server.ServiceDefinitionCollection class, about Server.ServiceDefinitionCollection class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Server.ServiceDefinitionCollection" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Server.ServiceDefinitionCollection" /><meta name="Description" content="Collection of service definitions." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Server_ServiceDefinitionCollection" /><meta name="guid" content="T_Grpc_Core_Server_ServiceDefinitionCollection" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="ServiceDefinitionCollection Methods" tocid="Methods_T_Grpc_Core_Server_ServiceDefinitionCollection">ServiceDefinitionCollection Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Server<span id="LST571DE916_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST571DE916_0?cpp=::|nu=.");</script>ServiceDefinitionCollection Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Collection of service definitions.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST571DE916_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST571DE916_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST571DE916_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST571DE916_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Server<span id="LST571DE916_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST571DE916_3?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">ServiceDefinitionCollection</span> : <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ServerServiceDefinition</span>&gt;,
+ <span class="identifier">IEnumerable</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">ServiceDefinitionCollection</span>
+ <span class="keyword">Implements</span> <span class="identifier">IEnumerable</span>(<span class="keyword">Of</span> <span class="identifier">ServerServiceDefinition</span>), <span class="identifier">IEnumerable</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">ServiceDefinitionCollection</span> : <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ServerServiceDefinition</span>^&gt;,
+ <span class="identifier">IEnumerable</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">ServiceDefinitionCollection</span> =
+ <span class="keyword">class</span>
+ <span class="keyword">interface</span> <span class="identifier">IEnumerable</span>&lt;<span class="identifier">ServerServiceDefinition</span>&gt;
+ <span class="keyword">interface</span> <span class="identifier">IEnumerable</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">Server<span id="LST571DE916_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST571DE916_4?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServiceDefinitionCollection</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm">Add</a></td><td><div class="summary">
+ Adds a service definition to the server. This is how you register
+ handlers for a service with the server. Only call this before Start().
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm">GetEnumerator</a></td><td><div class="summary">
+ Gets enumerator for this collection.
+ </div></td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_SslCredentials.htm b/doc/ref/csharp/html/html/T_Grpc_Core_SslCredentials.htm
new file mode 100644
index 0000000000..84580d7864
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_SslCredentials.htm
@@ -0,0 +1,28 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslCredentials Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SslCredentials class" /><meta name="System.Keywords" content="Grpc.Core.SslCredentials class" /><meta name="System.Keywords" content="SslCredentials class, about SslCredentials class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslCredentials" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.SslCredentials" /><meta name="Description" content="Client-side SSL credentials." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_SslCredentials" /><meta name="guid" content="T_Grpc_Core_SslCredentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslCredentials__ctor.htm" title="SslCredentials Constructor " tocid="Overload_Grpc_Core_SslCredentials__ctor">SslCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslCredentials.htm" title="SslCredentials Properties" tocid="Properties_T_Grpc_Core_SslCredentials">SslCredentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_SslCredentials.htm" title="SslCredentials Methods" tocid="Methods_T_Grpc_Core_SslCredentials">SslCredentials Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslCredentials Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Client-side SSL credentials.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTBE8D4B43_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBE8D4B43_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <a href="T_Grpc_Core_Credentials.htm">Grpc.Core<span id="LSTBE8D4B43_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBE8D4B43_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Credentials</a><br />    <span class="selflink">Grpc.Core<span id="LSTBE8D4B43_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBE8D4B43_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>SslCredentials</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">sealed</span> <span class="keyword">class</span> <span class="identifier">SslCredentials</span> : <span class="identifier">Credentials</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">SslCredentials</span>
+ <span class="keyword">Inherits</span> <span class="identifier">Credentials</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">SslCredentials</span> <span class="keyword">sealed</span> : <span class="keyword">public</span> <span class="identifier">Credentials</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">SslCredentials</span> =
+ <span class="keyword">class</span>
+ <span class="keyword">inherit</span> <span class="identifier">Credentials</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">SslCredentials</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_SslCredentials__ctor.htm">SslCredentials<span id="LSTBE8D4B43_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTBE8D4B43_3?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a></td><td><div class="summary">
+ Creates client-side SSL credentials loaded from
+ disk file pointed to by the GRPC_DEFAULT_SSL_ROOTS_FILE_PATH environment variable.
+ If that fails, gets the roots certificates from a well known place on disk.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_SslCredentials__ctor_1.htm">SslCredentials(String)</a></td><td><div class="summary">
+ Creates client-side SSL credentials from
+ a string containing PEM encoded root certificates.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_SslCredentials__ctor_2.htm">SslCredentials(String, KeyCertificatePair)</a></td><td><div class="summary">
+ Creates client-side SSL credentials.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_SslCredentials_KeyCertificatePair.htm">KeyCertificatePair</a></td><td><div class="summary">
+ Client side key and certificate pair.
+ If null, client will not use key and certificate pair.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_SslCredentials_RootCertificates.htm">RootCertificates</a></td><td><div class="summary">
+ PEM encoding of the server root certificates.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_SslServerCredentials.htm b/doc/ref/csharp/html/html/T_Grpc_Core_SslServerCredentials.htm
new file mode 100644
index 0000000000..641f2b7a53
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_SslServerCredentials.htm
@@ -0,0 +1,25 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>SslServerCredentials Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="SslServerCredentials class" /><meta name="System.Keywords" content="Grpc.Core.SslServerCredentials class" /><meta name="System.Keywords" content="SslServerCredentials class, about SslServerCredentials class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.SslServerCredentials" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.SslServerCredentials" /><meta name="Description" content="Server-side SSL credentials." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_SslServerCredentials" /><meta name="guid" content="T_Grpc_Core_SslServerCredentials" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Overload_Grpc_Core_SslServerCredentials__ctor.htm" title="SslServerCredentials Constructor " tocid="Overload_Grpc_Core_SslServerCredentials__ctor">SslServerCredentials Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Properties" tocid="Properties_T_Grpc_Core_SslServerCredentials">SslServerCredentials Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Methods" tocid="Methods_T_Grpc_Core_SslServerCredentials">SslServerCredentials Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">SslServerCredentials Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Server-side SSL credentials.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTA4AAD890_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA4AAD890_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <a href="T_Grpc_Core_ServerCredentials.htm">Grpc.Core<span id="LSTA4AAD890_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA4AAD890_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerCredentials</a><br />    <span class="selflink">Grpc.Core<span id="LSTA4AAD890_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA4AAD890_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>SslServerCredentials</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">SslServerCredentials</span> : <span class="identifier">ServerCredentials</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">SslServerCredentials</span>
+ <span class="keyword">Inherits</span> <span class="identifier">ServerCredentials</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">SslServerCredentials</span> : <span class="keyword">public</span> <span class="identifier">ServerCredentials</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">SslServerCredentials</span> =
+ <span class="keyword">class</span>
+ <span class="keyword">inherit</span> <span class="identifier">ServerCredentials</span>
+ <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">SslServerCredentials</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_SslServerCredentials__ctor.htm">SslServerCredentials(IEnumerable<span id="LSTA4AAD890_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA4AAD890_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>KeyCertificatePair<span id="LSTA4AAD890_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA4AAD890_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Creates server-side SSL credentials.
+ This constructor should be use if you do not wish to autheticate client
+ using client root certificates.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_SslServerCredentials__ctor_1.htm">SslServerCredentials(IEnumerable<span id="LSTA4AAD890_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA4AAD890_5?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>KeyCertificatePair<span id="LSTA4AAD890_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTA4AAD890_6?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, String, Boolean)</a></td><td><div class="summary">
+ Creates server-side SSL credentials.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm">ForceClientAuthentication</a></td><td><div class="summary">
+ If true, the authenticity of client check will be enforced.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm">KeyCertificatePairs</a></td><td><div class="summary">
+ Key-certificate pairs.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_SslServerCredentials_RootCertificates.htm">RootCertificates</a></td><td><div class="summary">
+ PEM encoded client root certificates.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Status.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Status.htm
new file mode 100644
index 0000000000..7f2848d4ca
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Status.htm
@@ -0,0 +1,24 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Status Structure</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Status structure" /><meta name="System.Keywords" content="Grpc.Core.Status structure" /><meta name="System.Keywords" content="Status structure, about Status structure" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Status" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Status" /><meta name="Description" content="Represents RPC result, which consists of and an optional detail string." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_Status" /><meta name="guid" content="T_Grpc_Core_Status" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_Status__ctor.htm" title="Status Constructor " tocid="M_Grpc_Core_Status__ctor">Status Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_Status.htm" title="Status Properties" tocid="Properties_T_Grpc_Core_Status">Status Properties</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Status.htm" title="Status Methods" tocid="Methods_T_Grpc_Core_Status">Status Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_Status.htm" title="Status Fields" tocid="Fields_T_Grpc_Core_Status">Status Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Status Structure</td></tr></table><span class="introStyle"></span><div class="summary">
+ Represents RPC result, which consists of <a href="P_Grpc_Core_Status_StatusCode.htm">StatusCode</a> and an optional detail string.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">struct</span> <span class="identifier">Status</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Structure</span> <span class="identifier">Status</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">value class</span> <span class="identifier">Status</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">Status</span> = <span class="keyword">struct</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><p>The <span class="selflink">Status</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Status__ctor.htm">Status</a></td><td><div class="summary">
+ Creates a new instance of <span class="code">Status</span>.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Status_Detail.htm">Detail</a></td><td><div class="summary">
+ Gets the detail.
+ </div></td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_Status_StatusCode.htm">StatusCode</a></td><td><div class="summary">
+ Gets the gRPC status code. OK indicates success, all other values indicate an error.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/2dts52z7" target="_blank">Equals</a></td><td><div class="summary">Indicates whether this instance and a specified object are equal.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/y3509fc2" target="_blank">GetHashCode</a></td><td><div class="summary">Returns the hash code for this instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/aey3s293" target="_blank">ValueType</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_Status_ToString.htm">ToString</a></td><td><div class="summary">
+ Returns a <a href="http://msdn2.microsoft.com/en-us/library/s1wwdcbf" target="_blank">String</a> that represents the current <span class="selflink">Status</span>.
+ </div> (Overrides <a href="http://msdn2.microsoft.com/en-us/library/wb77sz3h" target="_blank">ValueType<span id="LSTF8554F0F_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF8554F0F_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ToString<span id="LSTF8554F0F_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTF8554F0F_1?cs=()|vb=|cpp=()|nu=()|fs=()");</script></a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_Status_DefaultCancelled.htm">DefaultCancelled</a></td><td><div class="summary">
+ Default result of a cancelled RPC. StatusCode=Cancelled, empty details message.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_Status_DefaultSuccess.htm">DefaultSuccess</a></td><td><div class="summary">
+ Default result of a successful RPC. StatusCode=OK, empty details message.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID6RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_StatusCode.htm b/doc/ref/csharp/html/html/T_Grpc_Core_StatusCode.htm
new file mode 100644
index 0000000000..a160be54e8
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_StatusCode.htm
@@ -0,0 +1,52 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>StatusCode Enumeration</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="StatusCode enumeration" /><meta name="System.Keywords" content="Grpc.Core.StatusCode enumeration" /><meta name="System.Keywords" content="OK enumeration member" /><meta name="System.Keywords" content="Cancelled enumeration member" /><meta name="System.Keywords" content="Unknown enumeration member" /><meta name="System.Keywords" content="InvalidArgument enumeration member" /><meta name="System.Keywords" content="DeadlineExceeded enumeration member" /><meta name="System.Keywords" content="NotFound enumeration member" /><meta name="System.Keywords" content="AlreadyExists enumeration member" /><meta name="System.Keywords" content="PermissionDenied enumeration member" /><meta name="System.Keywords" content="Unauthenticated enumeration member" /><meta name="System.Keywords" content="ResourceExhausted enumeration member" /><meta name="System.Keywords" content="FailedPrecondition enumeration member" /><meta name="System.Keywords" content="Aborted enumeration member" /><meta name="System.Keywords" content="OutOfRange enumeration member" /><meta name="System.Keywords" content="Unimplemented enumeration member" /><meta name="System.Keywords" content="Internal enumeration member" /><meta name="System.Keywords" content="Unavailable enumeration member" /><meta name="System.Keywords" content="DataLoss enumeration member" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.OK" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.Cancelled" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.Unknown" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.InvalidArgument" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.DeadlineExceeded" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.NotFound" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.AlreadyExists" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.PermissionDenied" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.Unauthenticated" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.ResourceExhausted" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.FailedPrecondition" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.Aborted" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.OutOfRange" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.Unimplemented" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.Internal" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.Unavailable" /><meta name="Microsoft.Help.F1" content="Grpc.Core.StatusCode.DataLoss" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.StatusCode" /><meta name="Description" content="Result of a remote procedure call. Based on grpc_status_code from grpc/status.h" /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_StatusCode" /><meta name="guid" content="T_Grpc_Core_StatusCode" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">StatusCode Enumeration</td></tr></table><span class="introStyle"></span><div class="summary">
+ Result of a remote procedure call.
+ Based on grpc_status_code from grpc/status.h
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">enum</span> <span class="identifier">StatusCode</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Enumeration</span> <span class="identifier">StatusCode</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">enum class</span> <span class="identifier">StatusCode</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">StatusCode</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div id="enumerationSection"><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Members</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Member name</th><th>Value</th><th>Description</th></tr><tr><td /><td target="F:Grpc.Core.StatusCode.OK"><span class="selflink">OK</span></td><td>0</td><td>Not an error; returned on success.</td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.Cancelled"><span class="selflink">Cancelled</span></td><td>1</td><td>The operation was cancelled (typically by the caller).</td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.Unknown"><span class="selflink">Unknown</span></td><td>2</td><td>
+ Unknown error. An example of where this error may be returned is
+ if a Status value received from another address space belongs to
+ an error-space that is not known in this address space. Also
+ errors raised by APIs that do not return enough error information
+ may be converted to this error.
+ </td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.InvalidArgument"><span class="selflink">InvalidArgument</span></td><td>3</td><td>
+ Client specified an invalid argument. Note that this differs
+ from FAILED_PRECONDITION. INVALID_ARGUMENT indicates arguments
+ that are problematic regardless of the state of the system
+ (e.g., a malformed file name).
+ </td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.DeadlineExceeded"><span class="selflink">DeadlineExceeded</span></td><td>4</td><td>
+ Deadline expired before operation could complete. For operations
+ that change the state of the system, this error may be returned
+ even if the operation has completed successfully. For example, a
+ successful response from a server could have been delayed long
+ enough for the deadline to expire.
+ </td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.NotFound"><span class="selflink">NotFound</span></td><td>5</td><td>Some requested entity (e.g., file or directory) was not found.</td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.AlreadyExists"><span class="selflink">AlreadyExists</span></td><td>6</td><td>Some entity that we attempted to create (e.g., file or directory) already exists.</td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.PermissionDenied"><span class="selflink">PermissionDenied</span></td><td>7</td><td>
+ The caller does not have permission to execute the specified
+ operation. PERMISSION_DENIED must not be used for rejections
+ caused by exhausting some resource (use RESOURCE_EXHAUSTED
+ instead for those errors). PERMISSION_DENIED must not be
+ used if the caller can not be identified (use UNAUTHENTICATED
+ instead for those errors).
+ </td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.Unauthenticated"><span class="selflink">Unauthenticated</span></td><td>16</td><td>The request does not have valid authentication credentials for the operation.</td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.ResourceExhausted"><span class="selflink">ResourceExhausted</span></td><td>8</td><td>
+ Some resource has been exhausted, perhaps a per-user quota, or
+ perhaps the entire file system is out of space.
+ </td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.FailedPrecondition"><span class="selflink">FailedPrecondition</span></td><td>9</td><td>
+ Operation was rejected because the system is not in a state
+ required for the operation's execution. For example, directory
+ to be deleted may be non-empty, an rmdir operation is applied to
+ a non-directory, etc.
+ </td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.Aborted"><span class="selflink">Aborted</span></td><td>10</td><td>
+ The operation was aborted, typically due to a concurrency issue
+ like sequencer check failures, transaction aborts, etc.
+ </td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.OutOfRange"><span class="selflink">OutOfRange</span></td><td>11</td><td>
+ Operation was attempted past the valid range. E.g., seeking or
+ reading past end of file.
+ </td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.Unimplemented"><span class="selflink">Unimplemented</span></td><td>12</td><td>Operation is not implemented or not supported/enabled in this service.</td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.Internal"><span class="selflink">Internal</span></td><td>13</td><td>
+ Internal errors. Means some invariants expected by underlying
+ system has been broken. If you see one of these errors,
+ something is very broken.
+ </td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.Unavailable"><span class="selflink">Unavailable</span></td><td>14</td><td>
+ The service is currently unavailable. This is a most likely a
+ transient condition and may be corrected by retrying with
+ a backoff.
+ </td></tr><tr><td /><td target="F:Grpc.Core.StatusCode.DataLoss"><span class="selflink">DataLoss</span></td><td>15</td><td>Unrecoverable data loss or corruption.</td></tr></table></div></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID3RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_UnaryServerMethod_2.htm b/doc/ref/csharp/html/html/T_Grpc_Core_UnaryServerMethod_2.htm
new file mode 100644
index 0000000000..f0a32a3015
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_UnaryServerMethod_2.htm
@@ -0,0 +1,21 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>UnaryServerMethod(TRequest, TResponse) Delegate</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="UnaryServerMethod%3CTRequest%2C TResponse%3E delegate" /><meta name="System.Keywords" content="Grpc.Core.UnaryServerMethod%3CTRequest%2C TResponse%3E delegate" /><meta name="System.Keywords" content="UnaryServerMethod(Of TRequest%2C TResponse) delegate" /><meta name="System.Keywords" content="Grpc.Core.UnaryServerMethod(Of TRequest%2C TResponse) delegate" /><meta name="Microsoft.Help.F1" content="Grpc.Core.UnaryServerMethod`2" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.UnaryServerMethod`2" /><meta name="Description" content="Server-side handler for unary call." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_UnaryServerMethod_2" /><meta name="guid" content="T_Grpc_Core_UnaryServerMethod_2" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">UnaryServerMethod<span id="LST52BDE5F0_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST52BDE5F0_0?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="typeparameter">TRequest</span>, <span class="typeparameter">TResponse</span><span id="LST52BDE5F0_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST52BDE5F0_1?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script> Delegate</td></tr></table><span class="introStyle"></span><div class="summary">
+ Server-side handler for unary call.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">delegate</span> <span class="identifier">Task</span>&lt;TResponse&gt; <span class="identifier">UnaryServerMethod</span>&lt;TRequest, TResponse&gt;(
+ TRequest <span class="parameter">request</span>,
+ <span class="identifier">ServerCallContext</span> <span class="parameter">context</span>
+)
+<span class="keyword">where</span> TRequest : <span class="keyword">class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">class</span>
+</pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Delegate</span> <span class="keyword">Function</span> <span class="identifier">UnaryServerMethod</span>(<span class="keyword">Of</span> TRequest <span class="keyword">As</span> <span class="keyword">Class</span>, TResponse <span class="keyword">As</span> <span class="keyword">Class</span>) (
+ <span class="parameter">request</span> <span class="keyword">As</span> TRequest,
+ <span class="parameter">context</span> <span class="keyword">As</span> <span class="identifier">ServerCallContext</span>
+) <span class="keyword">As</span> <span class="identifier">Task</span>(<span class="keyword">Of</span> TResponse)</pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">generic</span>&lt;<span class="keyword">typename</span> TRequest, <span class="keyword">typename</span> TResponse&gt;
+<span class="keyword">where</span> TRequest : <span class="keyword">ref class</span>
+<span class="keyword">where</span> TResponse : <span class="keyword">ref class</span>
+<span class="keyword">public</span> <span class="keyword">delegate</span> <span class="identifier">Task</span>&lt;TResponse&gt;^ <span class="identifier">UnaryServerMethod</span>(
+ TRequest <span class="parameter">request</span>,
+ <span class="identifier">ServerCallContext</span>^ <span class="parameter">context</span>
+)</pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">UnaryServerMethod</span> =
+ <span class="keyword">delegate</span> <span class="keyword">of</span>
+ <span class="parameter">request</span> : 'TRequest *
+ <span class="parameter">context</span> : <span class="identifier">ServerCallContext</span> <span class="keyword">-&gt;</span> <span class="identifier">Task</span>&lt;'TResponse&gt;</pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script><h4 class="subHeading">Parameters</h4><dl><dt><span class="parameter">request</span></dt><dd>Type: <span class="selflink"><span class="typeparameter">TRequest</span></span><br /></dd><dt><span class="parameter">context</span></dt><dd>Type: <a href="T_Grpc_Core_ServerCallContext.htm">Grpc.Core<span id="LST52BDE5F0_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST52BDE5F0_2?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>ServerCallContext</a><br /></dd></dl><h4 class="subHeading">Type Parameters</h4><dl><dt><span class="parameter">TRequest</span></dt><dd>Request message type for this method.</dd><dt><span class="parameter">TResponse</span></dt><dd>Response message type for this method.</dd></dl><h4 class="subHeading">Return Value</h4>Type: <a href="http://msdn2.microsoft.com/en-us/library/dd321424" target="_blank">Task</a><span id="LST52BDE5F0_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST52BDE5F0_3?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script><span class="selflink"><span class="typeparameter">TResponse</span></span><span id="LST52BDE5F0_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST52BDE5F0_4?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID2RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm
new file mode 100644
index 0000000000..52ddee0058
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>AsyncStreamExtensions Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="AsyncStreamExtensions class" /><meta name="System.Keywords" content="Grpc.Core.Utils.AsyncStreamExtensions class" /><meta name="System.Keywords" content="AsyncStreamExtensions class, about AsyncStreamExtensions class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.AsyncStreamExtensions" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Utils.AsyncStreamExtensions" /><meta name="Description" content="Extension methods that simplify work with gRPC streaming calls." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="T_Grpc_Core_Utils_AsyncStreamExtensions" /><meta name="guid" content="T_Grpc_Core_Utils_AsyncStreamExtensions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Class" tocid="T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm" title="AsyncStreamExtensions Methods" tocid="Methods_T_Grpc_Core_Utils_AsyncStreamExtensions">AsyncStreamExtensions Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">AsyncStreamExtensions Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Extension methods that simplify work with gRPC streaming calls.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST61118D82_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core.Utils<span id="LST61118D82_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>AsyncStreamExtensions</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="identifier">AsyncStreamExtensions</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">&lt;<span class="identifier">ExtensionAttribute</span>&gt;
+<span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">AsyncStreamExtensions</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[<span class="identifier">ExtensionAttribute</span>]
+<span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">AsyncStreamExtensions</span> <span class="keyword">abstract</span> <span class="keyword">sealed</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+[&lt;<span class="identifier">ExtensionAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">AsyncStreamExtensions</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">AsyncStreamExtensions</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm">ForEachAsync<span id="LST61118D82_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST61118D82_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Reads the entire stream and executes an async action for each element.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm">ToListAsync<span id="LST61118D82_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST61118D82_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script></a></td><td><div class="summary">
+ Reads the entire stream and creates a list containing all the elements read.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm">WriteAllAsync<span id="LST61118D82_6"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_6?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST61118D82_7"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_7?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(IServerStreamWriter<span id="LST61118D82_8"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_8?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST61118D82_9"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_9?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, IEnumerable<span id="LST61118D82_10"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_10?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST61118D82_11"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_11?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>)</a></td><td><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm">WriteAllAsync<span id="LST61118D82_12"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_12?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST61118D82_13"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_13?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(IClientStreamWriter<span id="LST61118D82_14"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_14?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST61118D82_15"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_15?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, IEnumerable<span id="LST61118D82_16"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_16?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST61118D82_17"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST61118D82_17?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>, Boolean)</a></td><td><div class="summary">
+ Writes all elements from given enumerable to the stream.
+ Completes the stream afterwards unless close = false.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Utils_BenchmarkUtil.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Utils_BenchmarkUtil.htm
new file mode 100644
index 0000000000..b05566cedf
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Utils_BenchmarkUtil.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>BenchmarkUtil Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="BenchmarkUtil class" /><meta name="System.Keywords" content="Grpc.Core.Utils.BenchmarkUtil class" /><meta name="System.Keywords" content="BenchmarkUtil class, about BenchmarkUtil class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.BenchmarkUtil" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Utils.BenchmarkUtil" /><meta name="Description" content="Utility methods to run microbenchmarks." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="T_Grpc_Core_Utils_BenchmarkUtil" /><meta name="guid" content="T_Grpc_Core_Utils_BenchmarkUtil" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_BenchmarkUtil.htm" title="BenchmarkUtil Class" tocid="T_Grpc_Core_Utils_BenchmarkUtil">BenchmarkUtil Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm" title="BenchmarkUtil Methods" tocid="Methods_T_Grpc_Core_Utils_BenchmarkUtil">BenchmarkUtil Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">BenchmarkUtil Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Utility methods to run microbenchmarks.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST522BADE5_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST522BADE5_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core.Utils<span id="LST522BADE5_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST522BADE5_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>BenchmarkUtil</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="identifier">BenchmarkUtil</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">BenchmarkUtil</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">BenchmarkUtil</span> <span class="keyword">abstract</span> <span class="keyword">sealed</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">BenchmarkUtil</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">BenchmarkUtil</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm">RunBenchmark</a></td><td><div class="summary">
+ Runs a simple benchmark preceded by warmup phase.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_Utils_Preconditions.htm b/doc/ref/csharp/html/html/T_Grpc_Core_Utils_Preconditions.htm
new file mode 100644
index 0000000000..0c41403431
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_Utils_Preconditions.htm
@@ -0,0 +1,19 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Preconditions Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="Preconditions class" /><meta name="System.Keywords" content="Grpc.Core.Utils.Preconditions class" /><meta name="System.Keywords" content="Preconditions class, about Preconditions class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.Utils.Preconditions" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.Utils.Preconditions" /><meta name="Description" content="Utility methods to simplify checking preconditions in the code." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core.Utils" /><meta name="file" content="T_Grpc_Core_Utils_Preconditions" /><meta name="guid" content="T_Grpc_Core_Utils_Preconditions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core_Utils.htm" title="Grpc.Core.Utils" tocid="N_Grpc_Core_Utils">Grpc.Core.Utils</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Class" tocid="T_Grpc_Core_Utils_Preconditions">Preconditions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Methods_T_Grpc_Core_Utils_Preconditions.htm" title="Preconditions Methods" tocid="Methods_T_Grpc_Core_Utils_Preconditions">Preconditions Methods</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">Preconditions Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Utility methods to simplify checking preconditions in the code.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST13927049_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13927049_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core.Utils<span id="LST13927049_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13927049_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Preconditions</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="identifier">Preconditions</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">Preconditions</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">Preconditions</span> <span class="keyword">abstract</span> <span class="keyword">sealed</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">Preconditions</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckArgument.htm">CheckArgument(Boolean)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/3w1b3114" target="_blank">ArgumentException</a> if condition is false.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm">CheckArgument(Boolean, String)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/3w1b3114" target="_blank">ArgumentException</a> with given message if condition is false.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm">CheckNotNull<span id="LST13927049_2"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13927049_2?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST13927049_3"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13927049_3?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(T)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/27426hcy" target="_blank">ArgumentNullException</a> if reference is null.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm">CheckNotNull<span id="LST13927049_4"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13927049_4?cs=&lt;|vb=(Of |cpp=&lt;|fs=&lt;'|nu=(");</script>T<span id="LST13927049_5"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST13927049_5?cs=&gt;|vb=)|cpp=&gt;|fs=&gt;|nu=)");</script>(T, String)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/27426hcy" target="_blank">ArgumentNullException</a> if reference is null.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckState.htm">CheckState(Boolean)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/2asft85a" target="_blank">InvalidOperationException</a> if condition is false.
+ </div></td></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="M_Grpc_Core_Utils_Preconditions_CheckState_1.htm">CheckState(Boolean, String)</a></td><td><div class="summary">
+ Throws <a href="http://msdn2.microsoft.com/en-us/library/2asft85a" target="_blank">InvalidOperationException</a> with given message if condition is false.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core_Utils.htm">Grpc.Core.Utils Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_VersionInfo.htm b/doc/ref/csharp/html/html/T_Grpc_Core_VersionInfo.htm
new file mode 100644
index 0000000000..a53a4185ab
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_VersionInfo.htm
@@ -0,0 +1,9 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>VersionInfo Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="VersionInfo class" /><meta name="System.Keywords" content="Grpc.Core.VersionInfo class" /><meta name="System.Keywords" content="VersionInfo class, about VersionInfo class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.VersionInfo" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.VersionInfo" /><meta name="Description" content="Provides info about current version of gRPC." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_VersionInfo" /><meta name="guid" content="T_Grpc_Core_VersionInfo" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_VersionInfo.htm" title="VersionInfo Fields" tocid="Fields_T_Grpc_Core_VersionInfo">VersionInfo Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">VersionInfo Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Provides info about current version of gRPC.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LST3FF00A03_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3FF00A03_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LST3FF00A03_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LST3FF00A03_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>VersionInfo</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> <span class="identifier">VersionInfo</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">NotInheritable</span> <span class="keyword">Class</span> <span class="identifier">VersionInfo</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">VersionInfo</span> <span class="keyword">abstract</span> <span class="keyword">sealed</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">AbstractClassAttribute</span>&gt;]
+[&lt;<span class="identifier">SealedAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">VersionInfo</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">VersionInfo</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_VersionInfo_CurrentVersion.htm">CurrentVersion</a></td><td><div class="summary">
+ Current version of gRPC
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID4RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_WriteFlags.htm b/doc/ref/csharp/html/html/T_Grpc_Core_WriteFlags.htm
new file mode 100644
index 0000000000..ddd3eed654
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_WriteFlags.htm
@@ -0,0 +1,15 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>WriteFlags Enumeration</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteFlags enumeration" /><meta name="System.Keywords" content="Grpc.Core.WriteFlags enumeration" /><meta name="System.Keywords" content="BufferHint enumeration member" /><meta name="System.Keywords" content="NoCompress enumeration member" /><meta name="Microsoft.Help.F1" content="Grpc.Core.WriteFlags" /><meta name="Microsoft.Help.F1" content="Grpc.Core.WriteFlags.BufferHint" /><meta name="Microsoft.Help.F1" content="Grpc.Core.WriteFlags.NoCompress" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.WriteFlags" /><meta name="Description" content="Flags for write operations." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_WriteFlags" /><meta name="guid" content="T_Grpc_Core_WriteFlags" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel1" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncClientStreamingCall_2.htm" title="AsyncClientStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncClientStreamingCall_2">AsyncClientStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" tocid="T_Grpc_Core_AsyncDuplexStreamingCall_2">AsyncDuplexStreamingCall(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncServerStreamingCall_1.htm" title="AsyncServerStreamingCall(TResponse) Class" tocid="T_Grpc_Core_AsyncServerStreamingCall_1">AsyncServerStreamingCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_AsyncUnaryCall_1.htm" title="AsyncUnaryCall(TResponse) Class" tocid="T_Grpc_Core_AsyncUnaryCall_1">AsyncUnaryCall(TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallInvocationDetails_2.htm" title="CallInvocationDetails(TRequest, TResponse) Structure" tocid="T_Grpc_Core_CallInvocationDetails_2">CallInvocationDetails(TRequest, TResponse) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_CallOptions.htm" title="CallOptions Structure" tocid="T_Grpc_Core_CallOptions">CallOptions Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Calls.htm" title="Calls Class" tocid="T_Grpc_Core_Calls">Calls Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Channel.htm" title="Channel Class" tocid="T_Grpc_Core_Channel">Channel Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOption.htm" title="ChannelOption Class" tocid="T_Grpc_Core_ChannelOption">ChannelOption Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelOption_OptionType.htm" title="ChannelOption.OptionType Enumeration" tocid="T_Grpc_Core_ChannelOption_OptionType">ChannelOption.OptionType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ChannelOptions.htm" title="ChannelOptions Class" tocid="T_Grpc_Core_ChannelOptions">ChannelOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ChannelState.htm" title="ChannelState Enumeration" tocid="T_Grpc_Core_ChannelState">ChannelState Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ClientBase.htm" title="ClientBase Class" tocid="T_Grpc_Core_ClientBase">ClientBase Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ClientStreamingServerMethod_2.htm" title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ClientStreamingServerMethod_2">ClientStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_CompressionLevel.htm" title="CompressionLevel Enumeration" tocid="T_Grpc_Core_CompressionLevel">CompressionLevel Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationOptions.htm" title="ContextPropagationOptions Class" tocid="T_Grpc_Core_ContextPropagationOptions">ContextPropagationOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ContextPropagationToken.htm" title="ContextPropagationToken Class" tocid="T_Grpc_Core_ContextPropagationToken">ContextPropagationToken Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Credentials.htm" title="Credentials Class" tocid="T_Grpc_Core_Credentials">Credentials Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_DuplexStreamingServerMethod_2.htm" title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_DuplexStreamingServerMethod_2">DuplexStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_GrpcEnvironment.htm" title="GrpcEnvironment Class" tocid="T_Grpc_Core_GrpcEnvironment">GrpcEnvironment Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_HeaderInterceptor.htm" title="HeaderInterceptor Delegate" tocid="T_Grpc_Core_HeaderInterceptor">HeaderInterceptor Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamReader_1.htm" title="IAsyncStreamReader(T) Interface" tocid="T_Grpc_Core_IAsyncStreamReader_1">IAsyncStreamReader(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IAsyncStreamWriter_1.htm" title="IAsyncStreamWriter(T) Interface" tocid="T_Grpc_Core_IAsyncStreamWriter_1">IAsyncStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IClientStreamWriter_1.htm" title="IClientStreamWriter(T) Interface" tocid="T_Grpc_Core_IClientStreamWriter_1">IClientStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IHasWriteOptions.htm" title="IHasWriteOptions Interface" tocid="T_Grpc_Core_IHasWriteOptions">IHasWriteOptions Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IMethod.htm" title="IMethod Interface" tocid="T_Grpc_Core_IMethod">IMethod Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_IServerStreamWriter_1.htm" title="IServerStreamWriter(T) Interface" tocid="T_Grpc_Core_IServerStreamWriter_1">IServerStreamWriter(T) Interface</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_KeyCertificatePair.htm" title="KeyCertificatePair Class" tocid="T_Grpc_Core_KeyCertificatePair">KeyCertificatePair Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshaller_1.htm" title="Marshaller(T) Structure" tocid="T_Grpc_Core_Marshaller_1">Marshaller(T) Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Marshallers.htm" title="Marshallers Class" tocid="T_Grpc_Core_Marshallers">Marshallers Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata.htm" title="Metadata Class" tocid="T_Grpc_Core_Metadata">Metadata Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Metadata_Entry.htm" title="Metadata.Entry Structure" tocid="T_Grpc_Core_Metadata_Entry">Metadata.Entry Structure</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Method_2.htm" title="Method(TRequest, TResponse) Class" tocid="T_Grpc_Core_Method_2">Method(TRequest, TResponse) Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_MethodType.htm" title="MethodType Enumeration" tocid="T_Grpc_Core_MethodType">MethodType Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_RpcException.htm" title="RpcException Class" tocid="T_Grpc_Core_RpcException">RpcException Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server.htm" title="Server Class" tocid="T_Grpc_Core_Server">Server Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServerPortCollection.htm" title="Server.ServerPortCollection Class" tocid="T_Grpc_Core_Server_ServerPortCollection">Server.ServerPortCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Server_ServiceDefinitionCollection.htm" title="Server.ServiceDefinitionCollection Class" tocid="T_Grpc_Core_Server_ServiceDefinitionCollection">Server.ServiceDefinitionCollection Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCallContext.htm" title="ServerCallContext Class" tocid="T_Grpc_Core_ServerCallContext">ServerCallContext Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerCredentials.htm" title="ServerCredentials Class" tocid="T_Grpc_Core_ServerCredentials">ServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerPort.htm" title="ServerPort Class" tocid="T_Grpc_Core_ServerPort">ServerPort Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition.htm" title="ServerServiceDefinition Class" tocid="T_Grpc_Core_ServerServiceDefinition">ServerServiceDefinition Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_ServerServiceDefinition_Builder.htm" title="ServerServiceDefinition.Builder Class" tocid="T_Grpc_Core_ServerServiceDefinition_Builder">ServerServiceDefinition.Builder Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_ServerStreamingServerMethod_2.htm" title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_ServerStreamingServerMethod_2">ServerStreamingServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslCredentials.htm" title="SslCredentials Class" tocid="T_Grpc_Core_SslCredentials">SslCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_SslServerCredentials.htm" title="SslServerCredentials Class" tocid="T_Grpc_Core_SslServerCredentials">SslServerCredentials Class</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_Status.htm" title="Status Structure" tocid="T_Grpc_Core_Status">Status Structure</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_StatusCode.htm" title="StatusCode Enumeration" tocid="T_Grpc_Core_StatusCode">StatusCode Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_UnaryServerMethod_2.htm" title="UnaryServerMethod(TRequest, TResponse) Delegate" tocid="T_Grpc_Core_UnaryServerMethod_2">UnaryServerMethod(TRequest, TResponse) Delegate</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_VersionInfo.htm" title="VersionInfo Class" tocid="T_Grpc_Core_VersionInfo">VersionInfo Class</a></div><div class="toclevel2 current" data-toclevel="2"><a data-tochassubtree="false" href="T_Grpc_Core_WriteFlags.htm" title="WriteFlags Enumeration" tocid="T_Grpc_Core_WriteFlags">WriteFlags Enumeration</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">WriteFlags Enumeration</td></tr></table><span class="introStyle"></span><div class="summary">
+ Flags for write operations.
+ </div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID1RB')" onkeypress="SectionExpandCollapse_CheckKey('ID1RB', event)" tabindex="0"><img id="ID1RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID1RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID0EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cs','1','4');return false;">C#</a></div><div id="ID0EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','vb','2','4');return false;">VB</a></div><div id="ID0EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','cpp','3','4');return false;">C++</a></div><div id="ID0EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID0EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID0EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID0EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID0EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve">[<span class="identifier">FlagsAttribute</span>]
+<span class="keyword">public</span> <span class="keyword">enum</span> <span class="identifier">WriteFlags</span></pre></div><div id="ID0EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">&lt;<span class="identifier">FlagsAttribute</span>&gt;
+<span class="keyword">Public</span> <span class="keyword">Enumeration</span> <span class="identifier">WriteFlags</span></pre></div><div id="ID0EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[<span class="identifier">FlagsAttribute</span>]
+<span class="keyword">public</span> <span class="keyword">enum class</span> <span class="identifier">WriteFlags</span></pre></div><div id="ID0EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve">[&lt;<span class="identifier">FlagsAttribute</span>&gt;]
+<span class="keyword">type</span> <span class="identifier">WriteFlags</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID0EDCA");</script></div><div id="enumerationSection"><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Members</span></div><div id="ID2RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Member name</th><th>Value</th><th>Description</th></tr><tr><td /><td target="F:Grpc.Core.WriteFlags.BufferHint"><span class="selflink">BufferHint</span></td><td>1</td><td>
+ Hint that the write may be buffered and need not go out on the wire immediately.
+ gRPC is free to buffer the message until the next non-buffered
+ write, or until write stream completion, but it need not buffer completely or at all.
+ </td></tr><tr><td /><td target="F:Grpc.Core.WriteFlags.NoCompress"><span class="selflink">NoCompress</span></td><td>2</td><td>
+ Force compression to be disabled for a particular write.
+ </td></tr></table></div></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID3RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/html/T_Grpc_Core_WriteOptions.htm b/doc/ref/csharp/html/html/T_Grpc_Core_WriteOptions.htm
new file mode 100644
index 0000000000..94460aa93b
--- /dev/null
+++ b/doc/ref/csharp/html/html/T_Grpc_Core_WriteOptions.htm
@@ -0,0 +1,17 @@
+<html><head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><link rel="shortcut icon" href="../icons/favicon.ico" /><link rel="stylesheet" type="text/css" href="../styles/branding.css" /><link rel="stylesheet" type="text/css" href="../styles/branding-en-US.css" /><script type="text/javascript" src="../scripts/branding.js"> </script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>WriteOptions Class</title><meta name="Language" content="en-us" /><meta name="System.Keywords" content="WriteOptions class" /><meta name="System.Keywords" content="Grpc.Core.WriteOptions class" /><meta name="System.Keywords" content="WriteOptions class, about WriteOptions class" /><meta name="Microsoft.Help.F1" content="Grpc.Core.WriteOptions" /><meta name="Microsoft.Help.Id" content="T:Grpc.Core.WriteOptions" /><meta name="Description" content="Options for write operations." /><meta name="Microsoft.Help.ContentType" content="Reference" /><meta name="BrandingAware" content="true" /><meta name="container" content="Grpc.Core" /><meta name="file" content="T_Grpc_Core_WriteOptions" /><meta name="guid" content="T_Grpc_Core_WriteOptions" /><link rel="stylesheet" type="text/css" href="../styles/branding-Website.css" /><script type="text/javascript" src="../scripts/jquery-1.11.0.min.js"></script><script type="text/javascript" src="../scripts/branding-Website.js"></script></head><body onload="OnLoad('cs')"><input type="hidden" id="userDataCache" class="userDataStyle" /><div class="pageHeader" id="PageHeader">gRPC C#<form id="SearchForm" method="get" action="#" onsubmit="javascript:TransferToSearchPage(); return false;"><input id="SearchTextBox" type="text" maxlength="200" /><button id="SearchButton" type="submit"></button></form></div><div class="pageBody"><div class="leftNav" id="leftNav"><div id="tocNav"><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="gRPC C#" tocid="roottoc">gRPC C#</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="R_Project_Documentation.htm" title="Namespaces" tocid="R_Project_Documentation">Namespaces</a></div><div class="toclevel0" data-toclevel="0"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="N_Grpc_Core.htm" title="Grpc.Core" tocid="N_Grpc_Core">Grpc.Core</a></div><div class="toclevel1 current" data-toclevel="1" data-childrenloaded="true"><a class="tocExpanded" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="T_Grpc_Core_WriteOptions.htm" title="WriteOptions Class" tocid="T_Grpc_Core_WriteOptions">WriteOptions Class</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="M_Grpc_Core_WriteOptions__ctor.htm" title="WriteOptions Constructor " tocid="M_Grpc_Core_WriteOptions__ctor">WriteOptions Constructor </a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Properties_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Properties" tocid="Properties_T_Grpc_Core_WriteOptions">WriteOptions Properties</a></div><div class="toclevel2" data-toclevel="2"><a data-tochassubtree="false" href="Methods_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Methods" tocid="Methods_T_Grpc_Core_WriteOptions">WriteOptions Methods</a></div><div class="toclevel2" data-toclevel="2"><a class="tocCollapsed" onclick="javascript: Toggle(this);" href="#!" /><a data-tochassubtree="true" href="Fields_T_Grpc_Core_WriteOptions.htm" title="WriteOptions Fields" tocid="Fields_T_Grpc_Core_WriteOptions">WriteOptions Fields</a></div></div><div id="tocResizableEW" onmousedown="OnMouseDown(event);"></div><div id="TocResize" class="tocResize"><img id="ResizeImageIncrease" src="../icons/TocOpen.gif" onclick="OnIncreaseToc()" alt="Click or drag to resize" title="Click or drag to resize" /><img id="ResizeImageReset" src="../icons/TocClose.gif" style="display:none" onclick="OnResetToc()" alt="Click or drag to resize" title="Click or drag to resize" /></div></div><div class="topicContent" id="TopicContent"><table class="titleTable"><tr><td class="titleColumn">WriteOptions Class</td></tr></table><span class="introStyle"></span><div class="summary">
+ Options for write operations.
+ </div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID0RB')" onkeypress="SectionExpandCollapse_CheckKey('ID0RB', event)" tabindex="0"><img id="ID0RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Inheritance Hierarchy</span></div><div id="ID0RBSection" class="collapsibleSection"><a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">System<span id="LSTE5597B5E_0"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE5597B5E_0?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>Object</a><br />  <span class="selflink">Grpc.Core<span id="LSTE5597B5E_1"></span><script type="text/javascript">AddLanguageSpecificTextSet("LSTE5597B5E_1?cs=.|vb=.|cpp=::|nu=.|fs=.");</script>WriteOptions</span><br /></div><p> </p><strong>Namespace:</strong> <a href="N_Grpc_Core.htm">Grpc.Core</a><br /><strong>Assembly:</strong> Grpc.Core (in Grpc.Core.dll) Version: 0.6.1.0<div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID2RB')" onkeypress="SectionExpandCollapse_CheckKey('ID2RB', event)" tabindex="0"><img id="ID2RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Syntax</span></div><div id="ID2RBSection" class="collapsibleSection"><div class="codeSnippetContainer"><div class="codeSnippetContainerTabs"><div id="ID1EDCA_tab1" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cs','1','4');return false;">C#</a></div><div id="ID1EDCA_tab2" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','vb','2','4');return false;">VB</a></div><div id="ID1EDCA_tab3" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','cpp','3','4');return false;">C++</a></div><div id="ID1EDCA_tab4" class="codeSnippetContainerTab"><a href="#" onclick="javascript:ChangeTab('ID1EDCA','fs','4','4');return false;">F#</a></div></div><div class="codeSnippetContainerCodeContainer"><div class="codeSnippetToolBar"><div class="codeSnippetToolBarText"><a id="ID1EDCA_copyCode" href="#" onclick="javascript:CopyToClipboard('ID1EDCA');return false;" title="Copy">Copy</a></div></div><div id="ID1EDCA_code_Div1" class="codeSnippetContainerCode" style="display: block"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">WriteOptions</span></pre></div><div id="ID1EDCA_code_Div2" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">Public</span> <span class="keyword">Class</span> <span class="identifier">WriteOptions</span></pre></div><div id="ID1EDCA_code_Div3" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">public</span> <span class="keyword">ref class</span> <span class="identifier">WriteOptions</span></pre></div><div id="ID1EDCA_code_Div4" class="codeSnippetContainerCode" style="display: none"><pre xml:space="preserve"><span class="keyword">type</span> <span class="identifier">WriteOptions</span> = <span class="keyword">class</span> <span class="keyword">end</span></pre></div></div></div><script type="text/javascript">AddLanguageTabSet("ID1EDCA");</script></div><p>The <span class="selflink">WriteOptions</span> type exposes the following members.</p><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID3RB')" onkeypress="SectionExpandCollapse_CheckKey('ID3RB', event)" tabindex="0"><img id="ID3RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Constructors</span></div><div id="ID3RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="M_Grpc_Core_WriteOptions__ctor.htm">WriteOptions</a></td><td><div class="summary">
+ Initializes a new instance of <span class="code">WriteOptions</span> class.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID4RB')" onkeypress="SectionExpandCollapse_CheckKey('ID4RB', event)" tabindex="0"><img id="ID4RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Properties</span></div><div id="ID4RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;declared;notNetfw;"><td><img src="../icons/pubproperty.gif" alt="Public property" title="Public property" /></td><td><a href="P_Grpc_Core_WriteOptions_Flags.htm">Flags</a></td><td><div class="summary">
+ Gets the write flags.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID5RB')" onkeypress="SectionExpandCollapse_CheckKey('ID5RB', event)" tabindex="0"><img id="ID5RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Methods</span></div><div id="ID5RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/bsc2ak47" target="_blank">Equals</a></td><td><div class="summary">Determines whether the specified object is equal to the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/4k87zsw7" target="_blank">Finalize</a></td><td><div class="summary">Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/zdee4b3y" target="_blank">GetHashCode</a></td><td><div class="summary">Serves as the default hash function. </div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/dfwy45w9" target="_blank">GetType</a></td><td><div class="summary">Gets the <a href="http://msdn2.microsoft.com/en-us/library/42892f65" target="_blank">Type</a> of the current instance.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="protected;inherited;notNetfw;"><td><img src="../icons/protmethod.gif" alt="Protected method" title="Protected method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/57ctke0a" target="_blank">MemberwiseClone</a></td><td><div class="summary">Creates a shallow copy of the current <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr><tr data="public;inherited;notNetfw;"><td><img src="../icons/pubmethod.gif" alt="Public method" title="Public method" /></td><td><a href="http://msdn2.microsoft.com/en-us/library/7bxwbwt2" target="_blank">ToString</a></td><td><div class="summary">Returns a string that represents the current object.</div> (Inherited from <a href="http://msdn2.microsoft.com/en-us/library/e5kfa45b" target="_blank">Object</a>.)</td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID6RB')" onkeypress="SectionExpandCollapse_CheckKey('ID6RB', event)" tabindex="0"><img id="ID6RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />Fields</span></div><div id="ID6RBSection" class="collapsibleSection"><table id="memberList" class="members"><tr><th class="iconColumn">
+  
+ </th><th>Name</th><th>Description</th></tr><tr data="public;static;declared;notNetfw;"><td><img src="../icons/pubfield.gif" alt="Public field" title="Public field" /><img src="../icons/static.gif" alt="Static member" title="Static member" /></td><td><a href="F_Grpc_Core_WriteOptions_Default.htm">Default</a></td><td><div class="summary">
+ Default write options.
+ </div></td></tr></table><a href="#PageHeader">Top</a></div><div class="collapsibleAreaRegion" id="seeAlsoSection"><span class="collapsibleRegionTitle" onclick="SectionExpandCollapse('ID7RB')" onkeypress="SectionExpandCollapse_CheckKey('ID7RB', event)" tabindex="0"><img id="ID7RBToggle" class="collapseToggle" src="../icons/SectionExpanded.png" />See Also</span></div><div id="ID7RBSection" class="collapsibleSection"><h4 class="subHeading">Reference</h4><div class="seeAlsoStyle"><a href="N_Grpc_Core.htm">Grpc.Core Namespace</a></div></div></div></div><div id="pageFooter" class="pageFooter"> </div></body></html> \ No newline at end of file
diff --git a/doc/ref/csharp/html/icons/AlertCaution.png b/doc/ref/csharp/html/icons/AlertCaution.png
new file mode 100644
index 0000000000..78f246f047
--- /dev/null
+++ b/doc/ref/csharp/html/icons/AlertCaution.png
Binary files differ
diff --git a/doc/ref/csharp/html/icons/AlertNote.png b/doc/ref/csharp/html/icons/AlertNote.png
new file mode 100644
index 0000000000..0ab92b66aa
--- /dev/null
+++ b/doc/ref/csharp/html/icons/AlertNote.png
Binary files differ
diff --git a/doc/ref/csharp/html/icons/AlertSecurity.png b/doc/ref/csharp/html/icons/AlertSecurity.png
new file mode 100644
index 0000000000..d40fcefc44
--- /dev/null
+++ b/doc/ref/csharp/html/icons/AlertSecurity.png
Binary files differ
diff --git a/doc/ref/csharp/html/icons/CFW.gif b/doc/ref/csharp/html/icons/CFW.gif
new file mode 100644
index 0000000000..cbcabf1b2d
--- /dev/null
+++ b/doc/ref/csharp/html/icons/CFW.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/CodeExample.png b/doc/ref/csharp/html/icons/CodeExample.png
new file mode 100644
index 0000000000..a3b9fba4cc
--- /dev/null
+++ b/doc/ref/csharp/html/icons/CodeExample.png
Binary files differ
diff --git a/doc/ref/csharp/html/icons/Search.png b/doc/ref/csharp/html/icons/Search.png
new file mode 100644
index 0000000000..42165b6d64
--- /dev/null
+++ b/doc/ref/csharp/html/icons/Search.png
Binary files differ
diff --git a/doc/ref/csharp/html/icons/SectionCollapsed.png b/doc/ref/csharp/html/icons/SectionCollapsed.png
new file mode 100644
index 0000000000..8ded1ebc6b
--- /dev/null
+++ b/doc/ref/csharp/html/icons/SectionCollapsed.png
Binary files differ
diff --git a/doc/ref/csharp/html/icons/SectionExpanded.png b/doc/ref/csharp/html/icons/SectionExpanded.png
new file mode 100644
index 0000000000..b693921cc9
--- /dev/null
+++ b/doc/ref/csharp/html/icons/SectionExpanded.png
Binary files differ
diff --git a/doc/ref/csharp/html/icons/TocClose.gif b/doc/ref/csharp/html/icons/TocClose.gif
new file mode 100644
index 0000000000..e6d7b5edcc
--- /dev/null
+++ b/doc/ref/csharp/html/icons/TocClose.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/TocCollapsed.gif b/doc/ref/csharp/html/icons/TocCollapsed.gif
new file mode 100644
index 0000000000..108d492386
--- /dev/null
+++ b/doc/ref/csharp/html/icons/TocCollapsed.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/TocExpanded.gif b/doc/ref/csharp/html/icons/TocExpanded.gif
new file mode 100644
index 0000000000..f774d9bb65
--- /dev/null
+++ b/doc/ref/csharp/html/icons/TocExpanded.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/TocOpen.gif b/doc/ref/csharp/html/icons/TocOpen.gif
new file mode 100644
index 0000000000..4992a98a2b
--- /dev/null
+++ b/doc/ref/csharp/html/icons/TocOpen.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/favicon.ico b/doc/ref/csharp/html/icons/favicon.ico
new file mode 100644
index 0000000000..2b9963f814
--- /dev/null
+++ b/doc/ref/csharp/html/icons/favicon.ico
Binary files differ
diff --git a/doc/ref/csharp/html/icons/privclass.gif b/doc/ref/csharp/html/icons/privclass.gif
new file mode 100644
index 0000000000..0939694ce0
--- /dev/null
+++ b/doc/ref/csharp/html/icons/privclass.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/privdelegate.gif b/doc/ref/csharp/html/icons/privdelegate.gif
new file mode 100644
index 0000000000..d3aa8a65ef
--- /dev/null
+++ b/doc/ref/csharp/html/icons/privdelegate.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/privenumeration.gif b/doc/ref/csharp/html/icons/privenumeration.gif
new file mode 100644
index 0000000000..47f387ec2b
--- /dev/null
+++ b/doc/ref/csharp/html/icons/privenumeration.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/privevent.gif b/doc/ref/csharp/html/icons/privevent.gif
new file mode 100644
index 0000000000..30db46df76
--- /dev/null
+++ b/doc/ref/csharp/html/icons/privevent.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/privextension.gif b/doc/ref/csharp/html/icons/privextension.gif
new file mode 100644
index 0000000000..51dd267f0f
--- /dev/null
+++ b/doc/ref/csharp/html/icons/privextension.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/privfield.gif b/doc/ref/csharp/html/icons/privfield.gif
new file mode 100644
index 0000000000..cbf70f7a3f
--- /dev/null
+++ b/doc/ref/csharp/html/icons/privfield.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/privinterface.gif b/doc/ref/csharp/html/icons/privinterface.gif
new file mode 100644
index 0000000000..f3b7950adc
--- /dev/null
+++ b/doc/ref/csharp/html/icons/privinterface.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/privmethod.gif b/doc/ref/csharp/html/icons/privmethod.gif
new file mode 100644
index 0000000000..71f8822642
--- /dev/null
+++ b/doc/ref/csharp/html/icons/privmethod.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/privproperty.gif b/doc/ref/csharp/html/icons/privproperty.gif
new file mode 100644
index 0000000000..b1e8074654
--- /dev/null
+++ b/doc/ref/csharp/html/icons/privproperty.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/privstructure.gif b/doc/ref/csharp/html/icons/privstructure.gif
new file mode 100644
index 0000000000..ed6d1ef68f
--- /dev/null
+++ b/doc/ref/csharp/html/icons/privstructure.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protclass.gif b/doc/ref/csharp/html/icons/protclass.gif
new file mode 100644
index 0000000000..0f9294292a
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protclass.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protdelegate.gif b/doc/ref/csharp/html/icons/protdelegate.gif
new file mode 100644
index 0000000000..b209f2d816
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protdelegate.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protenumeration.gif b/doc/ref/csharp/html/icons/protenumeration.gif
new file mode 100644
index 0000000000..cc96bb6359
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protenumeration.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protevent.gif b/doc/ref/csharp/html/icons/protevent.gif
new file mode 100644
index 0000000000..0e510b272c
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protevent.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protextension.gif b/doc/ref/csharp/html/icons/protextension.gif
new file mode 100644
index 0000000000..dcd07f5e1a
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protextension.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protfield.gif b/doc/ref/csharp/html/icons/protfield.gif
new file mode 100644
index 0000000000..9ae6833e08
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protfield.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protinterface.gif b/doc/ref/csharp/html/icons/protinterface.gif
new file mode 100644
index 0000000000..a1b96d2c6a
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protinterface.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protmethod.gif b/doc/ref/csharp/html/icons/protmethod.gif
new file mode 100644
index 0000000000..2bc9468734
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protmethod.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protoperator.gif b/doc/ref/csharp/html/icons/protoperator.gif
new file mode 100644
index 0000000000..2cb75ab8b0
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protoperator.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protproperty.gif b/doc/ref/csharp/html/icons/protproperty.gif
new file mode 100644
index 0000000000..55473d16e1
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protproperty.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/protstructure.gif b/doc/ref/csharp/html/icons/protstructure.gif
new file mode 100644
index 0000000000..af356a1db0
--- /dev/null
+++ b/doc/ref/csharp/html/icons/protstructure.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/pubclass.gif b/doc/ref/csharp/html/icons/pubclass.gif
new file mode 100644
index 0000000000..1a968ab633
--- /dev/null
+++ b/doc/ref/csharp/html/icons/pubclass.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/pubdelegate.gif b/doc/ref/csharp/html/icons/pubdelegate.gif
new file mode 100644
index 0000000000..0a43eb261a
--- /dev/null
+++ b/doc/ref/csharp/html/icons/pubdelegate.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/pubenumeration.gif b/doc/ref/csharp/html/icons/pubenumeration.gif
new file mode 100644
index 0000000000..46888adef9
--- /dev/null
+++ b/doc/ref/csharp/html/icons/pubenumeration.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/pubevent.gif b/doc/ref/csharp/html/icons/pubevent.gif
new file mode 100644
index 0000000000..b9226da8b4
--- /dev/null
+++ b/doc/ref/csharp/html/icons/pubevent.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/pubextension.gif b/doc/ref/csharp/html/icons/pubextension.gif
new file mode 100644
index 0000000000..6262d1cca8
--- /dev/null
+++ b/doc/ref/csharp/html/icons/pubextension.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/pubfield.gif b/doc/ref/csharp/html/icons/pubfield.gif
new file mode 100644
index 0000000000..5aed17576f
--- /dev/null
+++ b/doc/ref/csharp/html/icons/pubfield.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/pubinterface.gif b/doc/ref/csharp/html/icons/pubinterface.gif
new file mode 100644
index 0000000000..c38a4c46a9
--- /dev/null
+++ b/doc/ref/csharp/html/icons/pubinterface.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/pubmethod.gif b/doc/ref/csharp/html/icons/pubmethod.gif
new file mode 100644
index 0000000000..2c72988f50
--- /dev/null
+++ b/doc/ref/csharp/html/icons/pubmethod.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/puboperator.gif b/doc/ref/csharp/html/icons/puboperator.gif
new file mode 100644
index 0000000000..0ebe10a7ec
--- /dev/null
+++ b/doc/ref/csharp/html/icons/puboperator.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/pubproperty.gif b/doc/ref/csharp/html/icons/pubproperty.gif
new file mode 100644
index 0000000000..dfad7b4300
--- /dev/null
+++ b/doc/ref/csharp/html/icons/pubproperty.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/pubstructure.gif b/doc/ref/csharp/html/icons/pubstructure.gif
new file mode 100644
index 0000000000..1344416abc
--- /dev/null
+++ b/doc/ref/csharp/html/icons/pubstructure.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/slMobile.gif b/doc/ref/csharp/html/icons/slMobile.gif
new file mode 100644
index 0000000000..5edc31f94c
--- /dev/null
+++ b/doc/ref/csharp/html/icons/slMobile.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/static.gif b/doc/ref/csharp/html/icons/static.gif
new file mode 100644
index 0000000000..33723a92be
--- /dev/null
+++ b/doc/ref/csharp/html/icons/static.gif
Binary files differ
diff --git a/doc/ref/csharp/html/icons/xna.gif b/doc/ref/csharp/html/icons/xna.gif
new file mode 100644
index 0000000000..9e6a9d4bd9
--- /dev/null
+++ b/doc/ref/csharp/html/icons/xna.gif
Binary files differ
diff --git a/doc/ref/csharp/html/index.html b/doc/ref/csharp/html/index.html
new file mode 100644
index 0000000000..c7d36cc3c3
--- /dev/null
+++ b/doc/ref/csharp/html/index.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en-US">
+<head>
+ <meta charset="UTF-8">
+ <meta http-equiv="refresh" content="1;url=html/R_Project_Documentation.htm">
+ <script type="text/javascript">
+ window.location.replace("html/R_Project_Documentation.htm")
+ </script>
+ <title>gRPC C# - Redirect</title>
+</head>
+<body>
+ <p>If you are not redirected automatically, follow this link to the <a href="html/R_Project_Documentation.htm">default topic</a>.</p>
+</body>
+</html>
diff --git a/doc/ref/csharp/html/scripts/branding-Website.js b/doc/ref/csharp/html/scripts/branding-Website.js
new file mode 100644
index 0000000000..06ab9808cc
--- /dev/null
+++ b/doc/ref/csharp/html/scripts/branding-Website.js
@@ -0,0 +1,624 @@
+//===============================================================================================================
+// System : Sandcastle Help File Builder
+// File : branding-Website.js
+// Author : Eric Woodruff (Eric@EWoodruff.us)
+// Updated : 03/04/2015
+// Note : Copyright 2014-2015, Eric Woodruff, All rights reserved
+// Portions Copyright 2014 Sam Harwell, All rights reserved
+//
+// This file contains the methods necessary to implement the lightweight TOC and search functionality.
+//
+// This code is published under the Microsoft Public License (Ms-PL). A copy of the license should be
+// distributed with the code. It can also be found at the project website: https://GitHub.com/EWSoftware/SHFB. This
+// notice, the author's name, and all copyright notices must remain intact in all applications, documentation,
+// and source files.
+//
+// Date Who Comments
+// ==============================================================================================================
+// 05/04/2014 EFW Created the code based on a combination of the lightweight TOC code from Sam Harwell and
+// the existing search code from SHFB.
+//===============================================================================================================
+
+// Width of the TOC
+var tocWidth;
+
+// Search method (0 = To be determined, 1 = ASPX, 2 = PHP, anything else = client-side script
+var searchMethod = 0;
+
+// Table of contents script
+
+// Initialize the TOC by restoring its width from the cookie if present
+function InitializeToc()
+{
+ tocWidth = parseInt(GetCookie("TocWidth", "280"));
+ ResizeToc();
+ $(window).resize(SetNavHeight)
+}
+
+function SetNavHeight()
+{
+ $leftNav = $("#leftNav")
+ $topicContent = $("#TopicContent")
+ leftNavPadding = $leftNav.outerHeight() - $leftNav.height()
+ contentPadding = $topicContent.outerHeight() - $topicContent.height()
+ // want outer height of left navigation div to match outer height of content
+ leftNavHeight = $topicContent.outerHeight() - leftNavPadding
+ $leftNav.css("min-height", leftNavHeight + "px")
+}
+
+// Increase the TOC width
+function OnIncreaseToc()
+{
+ if(tocWidth < 1)
+ tocWidth = 280;
+ else
+ tocWidth += 100;
+
+ if(tocWidth > 680)
+ tocWidth = 0;
+
+ ResizeToc();
+ SetCookie("TocWidth", tocWidth);
+}
+
+// Reset the TOC to its default width
+function OnResetToc()
+{
+ tocWidth = 0;
+
+ ResizeToc();
+ SetCookie("TocWidth", tocWidth);
+}
+
+// Resize the TOC width
+function ResizeToc()
+{
+ var toc = document.getElementById("leftNav");
+
+ if(toc)
+ {
+ // Set TOC width
+ toc.style.width = tocWidth + "px";
+
+ var leftNavPadding = 10;
+
+ document.getElementById("TopicContent").style.marginLeft = (tocWidth + leftNavPadding) + "px";
+
+ // Position images
+ document.getElementById("TocResize").style.left = (tocWidth + leftNavPadding) + "px";
+
+ // Hide/show increase TOC width image
+ document.getElementById("ResizeImageIncrease").style.display = (tocWidth >= 680) ? "none" : "";
+
+ // Hide/show reset TOC width image
+ document.getElementById("ResizeImageReset").style.display = (tocWidth < 680) ? "none" : "";
+ }
+
+ SetNavHeight()
+}
+
+// Toggle a TOC entry between its collapsed and expanded state
+function Toggle(item)
+{
+ var isExpanded = $(item).hasClass("tocExpanded");
+
+ $(item).toggleClass("tocExpanded tocCollapsed");
+
+ if(isExpanded)
+ {
+ Collapse($(item).parent());
+ }
+ else
+ {
+ var childrenLoaded = $(item).parent().attr("data-childrenloaded");
+
+ if(childrenLoaded)
+ {
+ Expand($(item).parent());
+ }
+ else
+ {
+ var tocid = $(item).next().attr("tocid");
+
+ $.ajax({
+ url: "../toc/" + tocid + ".xml",
+ async: true,
+ dataType: "xml",
+ success: function(data)
+ {
+ BuildChildren($(item).parent(), data);
+ }
+ });
+ }
+ }
+}
+
+// HTML encode a value for use on the page
+function HtmlEncode(value)
+{
+ // Create an in-memory div, set it's inner text (which jQuery automatically encodes) then grab the encoded
+ // contents back out. The div never exists on the page.
+ return $('<div/>').text(value).html();
+}
+
+// Build the child entries of a TOC entry
+function BuildChildren(tocDiv, data)
+{
+ var childLevel = +tocDiv.attr("data-toclevel") + 1;
+ var childTocLevel = childLevel >= 10 ? 10 : childLevel;
+ var elements = data.getElementsByTagName("HelpTOCNode");
+
+ var isRoot = true;
+
+ if(data.getElementsByTagName("HelpTOC").length == 0)
+ {
+ // The first node is the root node of this group, don't show it again
+ isRoot = false;
+ }
+
+ for(var i = elements.length - 1; i > 0 || (isRoot && i == 0); i--)
+ {
+ var childHRef, childId = elements[i].getAttribute("Url");
+
+ if(childId != null && childId.length > 5)
+ {
+ // The Url attribute has the form "html/{childId}.htm"
+ childHRef = childId.substring(5, childId.length);
+ childId = childId.substring(5, childId.lastIndexOf("."));
+ }
+ else
+ {
+ // The Id attribute is in raw form. There is no URL (empty container node). In this case, we'll
+ // just ignore it and go nowhere. It's a rare case that isn't worth trying to get the first child.
+ // Instead, we'll just expand the node (see below).
+ childHRef = "#";
+ childId = elements[i].getAttribute("Id");
+ }
+
+ var existingItem = null;
+
+ tocDiv.nextAll().each(function()
+ {
+ if(!existingItem && $(this).children().last("a").attr("tocid") == childId)
+ {
+ existingItem = $(this);
+ }
+ });
+
+ if(existingItem != null)
+ {
+ // First move the children of the existing item
+ var existingChildLevel = +existingItem.attr("data-toclevel");
+ var doneMoving = false;
+ var inserter = tocDiv;
+
+ existingItem.nextAll().each(function()
+ {
+ if(!doneMoving && +$(this).attr("data-toclevel") > existingChildLevel)
+ {
+ inserter.after($(this));
+ inserter = $(this);
+ $(this).attr("data-toclevel", +$(this).attr("data-toclevel") + childLevel - existingChildLevel);
+
+ if($(this).hasClass("current"))
+ $(this).attr("class", "toclevel" + (+$(this).attr("data-toclevel") + " current"));
+ else
+ $(this).attr("class", "toclevel" + (+$(this).attr("data-toclevel")));
+ }
+ else
+ {
+ doneMoving = true;
+ }
+ });
+
+ // Now move the existing item itself
+ tocDiv.after(existingItem);
+ existingItem.attr("data-toclevel", childLevel);
+ existingItem.attr("class", "toclevel" + childLevel);
+ }
+ else
+ {
+ var hasChildren = elements[i].getAttribute("HasChildren");
+ var childTitle = HtmlEncode(elements[i].getAttribute("Title"));
+ var expander = "";
+
+ if(hasChildren)
+ expander = "<a class=\"tocCollapsed\" onclick=\"javascript: Toggle(this);\" href=\"#!\"></a>";
+
+ var text = "<div class=\"toclevel" + childTocLevel + "\" data-toclevel=\"" + childLevel + "\">" +
+ expander + "<a data-tochassubtree=\"" + hasChildren + "\" href=\"" + childHRef + "\" title=\"" +
+ childTitle + "\" tocid=\"" + childId + "\"" +
+ (childHRef == "#" ? " onclick=\"javascript: Toggle(this.previousSibling);\"" : "") + ">" +
+ childTitle + "</a></div>";
+
+ tocDiv.after(text);
+ }
+ }
+
+ tocDiv.attr("data-childrenloaded", true);
+}
+
+// Collapse a TOC entry
+function Collapse(tocDiv)
+{
+ // Hide all the TOC elements after item, until we reach one with a data-toclevel less than or equal to the
+ // current item's value.
+ var tocLevel = +tocDiv.attr("data-toclevel");
+ var done = false;
+
+ tocDiv.nextAll().each(function()
+ {
+ if(!done && +$(this).attr("data-toclevel") > tocLevel)
+ {
+ $(this).hide();
+ }
+ else
+ {
+ done = true;
+ }
+ });
+}
+
+// Expand a TOC entry
+function Expand(tocDiv)
+{
+ // Show all the TOC elements after item, until we reach one with a data-toclevel less than or equal to the
+ // current item's value
+ var tocLevel = +tocDiv.attr("data-toclevel");
+ var done = false;
+
+ tocDiv.nextAll().each(function()
+ {
+ if(done)
+ {
+ return;
+ }
+
+ var childTocLevel = +$(this).attr("data-toclevel");
+
+ if(childTocLevel == tocLevel + 1)
+ {
+ $(this).show();
+
+ if($(this).children("a").first().hasClass("tocExpanded"))
+ {
+ Expand($(this));
+ }
+ }
+ else if(childTocLevel > tocLevel + 1)
+ {
+ // Ignore this node, handled by recursive calls
+ }
+ else
+ {
+ done = true;
+ }
+ });
+}
+
+// This is called to prepare for dragging the sizer div
+function OnMouseDown(event)
+{
+ document.addEventListener("mousemove", OnMouseMove, true);
+ document.addEventListener("mouseup", OnMouseUp, true);
+ event.preventDefault();
+}
+
+// Resize the TOC as the sizer is dragged
+function OnMouseMove(event)
+{
+ tocWidth = (event.clientX > 700) ? 700 : (event.clientX < 100) ? 100 : event.clientX;
+
+ ResizeToc();
+}
+
+// Finish the drag operation when the mouse button is released
+function OnMouseUp(event)
+{
+ document.removeEventListener("mousemove", OnMouseMove, true);
+ document.removeEventListener("mouseup", OnMouseUp, true);
+
+ SetCookie("TocWidth", tocWidth);
+}
+
+// Search functions
+
+// Transfer to the search page from a topic
+function TransferToSearchPage()
+{
+ var searchText = document.getElementById("SearchTextBox").value.trim();
+
+ if(searchText.length != 0)
+ document.location.replace(encodeURI("../search.html?SearchText=" + searchText));
+}
+
+// Initiate a search when the search page loads
+function OnSearchPageLoad()
+{
+ var queryString = decodeURI(document.location.search);
+
+ if(queryString != "")
+ {
+ var idx, options = queryString.split(/[\?\=\&]/);
+
+ for(idx = 0; idx < options.length; idx++)
+ if(options[idx] == "SearchText" && idx + 1 < options.length)
+ {
+ document.getElementById("txtSearchText").value = options[idx + 1];
+ PerformSearch();
+ break;
+ }
+ }
+}
+
+// Perform a search using the best available method
+function PerformSearch()
+{
+ var searchText = document.getElementById("txtSearchText").value;
+ var sortByTitle = document.getElementById("chkSortByTitle").checked;
+ var searchResults = document.getElementById("searchResults");
+
+ if(searchText.length == 0)
+ {
+ searchResults.innerHTML = "<strong>Nothing found</strong>";
+ return;
+ }
+
+ searchResults.innerHTML = "Searching...";
+
+ // Determine the search method if not done already. The ASPX and PHP searches are more efficient as they
+ // run asynchronously server-side. If they can't be used, it defaults to the client-side script below which
+ // will work but has to download the index files. For large help sites, this can be inefficient.
+ if(searchMethod == 0)
+ searchMethod = DetermineSearchMethod();
+
+ if(searchMethod == 1)
+ {
+ $.ajax({
+ type: "GET",
+ url: encodeURI("SearchHelp.aspx?Keywords=" + searchText + "&SortByTitle=" + sortByTitle),
+ success: function(html)
+ {
+ searchResults.innerHTML = html;
+ }
+ });
+
+ return;
+ }
+
+ if(searchMethod == 2)
+ {
+ $.ajax({
+ type: "GET",
+ url: encodeURI("SearchHelp.php?Keywords=" + searchText + "&SortByTitle=" + sortByTitle),
+ success: function(html)
+ {
+ searchResults.innerHTML = html;
+ }
+ });
+
+ return;
+ }
+
+ // Parse the keywords
+ var keywords = ParseKeywords(searchText);
+
+ // Get the list of files. We'll be getting multiple files so we need to do this synchronously.
+ var fileList = [];
+
+ $.ajax({
+ type: "GET",
+ url: "fti/FTI_Files.json",
+ dataType: "json",
+ async: false,
+ success: function(data)
+ {
+ $.each(data, function(key, val)
+ {
+ fileList[key] = val;
+ });
+ }
+ });
+
+ var letters = [];
+ var wordDictionary = {};
+ var wordNotFound = false;
+
+ // Load the keyword files for each keyword starting letter
+ for(var idx = 0; idx < keywords.length && !wordNotFound; idx++)
+ {
+ var letter = keywords[idx].substring(0, 1);
+
+ if($.inArray(letter, letters) == -1)
+ {
+ letters.push(letter);
+
+ $.ajax({
+ type: "GET",
+ url: "fti/FTI_" + letter.charCodeAt(0) + ".json",
+ dataType: "json",
+ async: false,
+ success: function(data)
+ {
+ var wordCount = 0;
+
+ $.each(data, function(key, val)
+ {
+ wordDictionary[key] = val;
+ wordCount++;
+ });
+
+ if(wordCount == 0)
+ wordNotFound = true;
+ }
+ });
+ }
+ }
+
+ if(wordNotFound)
+ searchResults.innerHTML = "<strong>Nothing found</strong>";
+ else
+ searchResults.innerHTML = SearchForKeywords(keywords, fileList, wordDictionary, sortByTitle);
+}
+
+// Determine the search method by seeing if the ASPX or PHP search pages are present and working
+function DetermineSearchMethod()
+{
+ var method = 3;
+
+ try
+ {
+ $.ajax({
+ type: "GET",
+ url: "SearchHelp.aspx",
+ async: false,
+ success: function(html)
+ {
+ if(html.substring(0, 8) == "<strong>")
+ method = 1;
+ }
+ });
+
+ if(method == 3)
+ $.ajax({
+ type: "GET",
+ url: "SearchHelp.php",
+ async: false,
+ success: function(html)
+ {
+ if(html.substring(0, 8) == "<strong>")
+ method = 2;
+ }
+ });
+ }
+ catch(e)
+ {
+ }
+
+ return method;
+}
+
+// Split the search text up into keywords
+function ParseKeywords(keywords)
+{
+ var keywordList = [];
+ var checkWord;
+ var words = keywords.split(/\W+/);
+
+ for(var idx = 0; idx < words.length; idx++)
+ {
+ checkWord = words[idx].toLowerCase();
+
+ if(checkWord.length > 2)
+ {
+ var charCode = checkWord.charCodeAt(0);
+
+ if((charCode < 48 || charCode > 57) && $.inArray(checkWord, keywordList) == -1)
+ keywordList.push(checkWord);
+ }
+ }
+
+ return keywordList;
+}
+
+// Search for keywords and generate a block of HTML containing the results
+function SearchForKeywords(keywords, fileInfo, wordDictionary, sortByTitle)
+{
+ var matches = [], matchingFileIndices = [], rankings = [];
+ var isFirst = true;
+
+ for(var idx = 0; idx < keywords.length; idx++)
+ {
+ var word = keywords[idx];
+ var occurrences = wordDictionary[word];
+
+ // All keywords must be found
+ if(occurrences == null)
+ return "<strong>Nothing found</strong>";
+
+ matches[word] = occurrences;
+ var occurrenceIndices = [];
+
+ // Get a list of the file indices for this match. These are 64-bit numbers but JavaScript only does
+ // bit shifts on 32-bit values so we divide by 2^16 to get the same effect as ">> 16" and use floor()
+ // to truncate the result.
+ for(var ind in occurrences)
+ occurrenceIndices.push(Math.floor(occurrences[ind] / Math.pow(2, 16)));
+
+ if(isFirst)
+ {
+ isFirst = false;
+
+ for(var matchInd in occurrenceIndices)
+ matchingFileIndices.push(occurrenceIndices[matchInd]);
+ }
+ else
+ {
+ // After the first match, remove files that do not appear for all found keywords
+ for(var checkIdx = 0; checkIdx < matchingFileIndices.length; checkIdx++)
+ if($.inArray(matchingFileIndices[checkIdx], occurrenceIndices) == -1)
+ {
+ matchingFileIndices.splice(checkIdx, 1);
+ checkIdx--;
+ }
+ }
+ }
+
+ if(matchingFileIndices.length == 0)
+ return "<strong>Nothing found</strong>";
+
+ // Rank the files based on the number of times the words occurs
+ for(var fileIdx = 0; fileIdx < matchingFileIndices.length; fileIdx++)
+ {
+ // Split out the title, filename, and word count
+ var matchingIdx = matchingFileIndices[fileIdx];
+ var fileIndex = fileInfo[matchingIdx].split(/\0/);
+
+ var title = fileIndex[0];
+ var filename = fileIndex[1];
+ var wordCount = parseInt(fileIndex[2]);
+ var matchCount = 0;
+
+ for(var idx = 0; idx < keywords.length; idx++)
+ {
+ occurrences = matches[keywords[idx]];
+
+ for(var ind in occurrences)
+ {
+ var entry = occurrences[ind];
+
+ // These are 64-bit numbers but JavaScript only does bit shifts on 32-bit values so we divide
+ // by 2^16 to get the same effect as ">> 16" and use floor() to truncate the result.
+ if(Math.floor(entry / Math.pow(2, 16)) == matchingIdx)
+ matchCount += (entry & 0xFFFF);
+ }
+ }
+
+ rankings.push({ Filename: filename, PageTitle: title, Rank: matchCount * 1000 / wordCount });
+
+ if(rankings.length > 99)
+ break;
+ }
+
+ rankings.sort(function(x, y)
+ {
+ if(!sortByTitle)
+ return y.Rank - x.Rank;
+
+ return x.PageTitle.localeCompare(y.PageTitle);
+ });
+
+ // Format and return the results
+ var content = "<ol>";
+
+ for(var r in rankings)
+ content += "<li><a href=\"" + rankings[r].Filename + "\" target=\"_blank\">" +
+ rankings[r].PageTitle + "</a></li>";
+
+ content += "</ol>";
+
+ if(rankings.length < matchingFileIndices.length)
+ content += "<p>Omitted " + (matchingFileIndices.length - rankings.length) + " more results</p>";
+
+ return content;
+}
diff --git a/doc/ref/csharp/html/scripts/branding.js b/doc/ref/csharp/html/scripts/branding.js
new file mode 100644
index 0000000000..9be90f3d47
--- /dev/null
+++ b/doc/ref/csharp/html/scripts/branding.js
@@ -0,0 +1,528 @@
+//===============================================================================================================
+// System : Sandcastle Help File Builder
+// File : branding.js
+// Author : Eric Woodruff (Eric@EWoodruff.us)
+// Updated : 05/15/2014
+// Note : Copyright 2014, Eric Woodruff, All rights reserved
+// Portions Copyright 2010-2014 Microsoft, All rights reserved
+//
+// This file contains the methods necessary to implement the language filtering, collapsible section, and
+// copy to clipboard options.
+//
+// This code is published under the Microsoft Public License (Ms-PL). A copy of the license should be
+// distributed with the code. It can also be found at the project website: https://GitHub.com/EWSoftware/SHFB. This
+// notice, the author's name, and all copyright notices must remain intact in all applications, documentation,
+// and source files.
+//
+// Date Who Comments
+// ==============================================================================================================
+// 05/04/2014 EFW Created the code based on the MS Help Viewer script
+//===============================================================================================================
+
+// The IDs of all code snippet sets on the same page are stored so that we can keep them in synch when a tab is
+// selected.
+var allTabSetIds = new Array();
+
+// The IDs of language-specific text (LST) spans are used as dictionary keys so that we can get access to the
+// spans and update them when the user changes to a different language tab. The values of the dictionary
+// objects are pipe separated language-specific attributes (lang1=value|lang2=value|lang3=value). The language
+// ID can be specific (cs, vb, cpp, etc.) or may be a neutral entry (nu) which specifies text common to multiple
+// languages. If a language is not present and there is no neutral entry, the span is hidden for all languages
+// to which it does not apply.
+var allLSTSetIds = new Object();
+
+// Help 1 persistence support. This code must appear inline.
+var isHelp1;
+
+var curLoc = document.location + ".";
+
+if(curLoc.indexOf("mk:@MSITStore") == 0)
+{
+ isHelp1 = true;
+ curLoc = "ms-its:" + curLoc.substring(14, curLoc.length - 1);
+ document.location.replace(curLoc);
+}
+else
+ if(curLoc.indexOf("ms-its:") == 0)
+ isHelp1 = true;
+ else
+ isHelp1 = false;
+
+// The OnLoad method
+function OnLoad(defaultLanguage)
+{
+ var defLang;
+
+ if(typeof (defaultLanguage) == "undefined" || defaultLanguage == null || defaultLanguage == "")
+ defLang = "vb";
+ else
+ defLang = defaultLanguage;
+
+ // In MS Help Viewer, the transform the topic is ran through can move the footer. Move it back where it
+ // belongs if necessary.
+ try
+ {
+ var footer = document.getElementById("pageFooter")
+
+ if(footer)
+ {
+ var footerParent = document.body;
+
+ if(footer.parentElement != footerParent)
+ {
+ footer.parentElement.removeChild(footer);
+ footerParent.appendChild(footer);
+ }
+ }
+ }
+ catch(e)
+ {
+ }
+
+ var language = GetCookie("CodeSnippetContainerLanguage", defLang);
+
+ // If LST exists on the page, set the LST to show the user selected programming language
+ UpdateLST(language);
+
+ // If code snippet groups exist, set the current language for them
+ if(allTabSetIds.length > 0)
+ {
+ var i = 0;
+
+ while(i < allTabSetIds.length)
+ {
+ var tabCount = 1;
+
+ // The tab count may vary so find the last one in this set
+ while(document.getElementById(allTabSetIds[i] + "_tab" + tabCount) != null)
+ tabCount++;
+
+ tabCount--;
+
+ // If not grouped, skip it
+ if(tabCount < 2)
+ {
+ // Disable the Copy Code link if in Chrome
+ if(navigator.userAgent.toLowerCase().indexOf("chrome") != -1)
+ document.getElementById(allTabSetIds[i] + "_copyCode").style.display = "none";
+ }
+ else
+ SetCurrentLanguage(allTabSetIds[i], language, tabCount);
+
+ i++;
+ }
+ }
+
+ InitializeToc();
+}
+
+// This is just a place holder. The website script implements this function to initialize it's in-page TOC pane
+function InitializeToc()
+{
+}
+
+// This function executes in the OnLoad event and ChangeTab action on code snippets. The function parameter
+// is the user chosen programming language. This function iterates through the "allLSTSetIds" dictionary object
+// to update the node value of the LST span tag per the user's chosen programming language.
+function UpdateLST(language)
+{
+ for(var lstMember in allLSTSetIds)
+ {
+ var devLangSpan = document.getElementById(lstMember);
+
+ if(devLangSpan != null)
+ {
+ // There may be a carriage return before the LST span in the content so the replace function below
+ // is used to trim the whitespace at the end of the previous node of the current LST node.
+ if(devLangSpan.previousSibling != null && devLangSpan.previousSibling.nodeValue != null)
+ devLangSpan.previousSibling.nodeValue = devLangSpan.previousSibling.nodeValue.replace(/\s+$/, "");
+
+ var langs = allLSTSetIds[lstMember].split("|");
+ var k = 0;
+ var keyValue;
+
+ while(k < langs.length)
+ {
+ keyValue = langs[k].split("=");
+
+ if(keyValue[0] == language)
+ {
+ devLangSpan.innerHTML = keyValue[1];
+
+ // Help 1 and MS Help Viewer workaround. Add a space if the following text element starts
+ // with a space to prevent things running together.
+ if(devLangSpan.parentNode != null && devLangSpan.parentNode.nextSibling != null)
+ {
+ if (devLangSpan.parentNode.nextSibling.nodeValue != null &&
+ !devLangSpan.parentNode.nextSibling.nodeValue.substring(0, 1).match(/[.,);:!/?]/))
+ {
+ devLangSpan.innerHTML = keyValue[1] + " ";
+ }
+ }
+ break;
+ }
+
+ k++;
+ }
+
+ // If not found, default to the neutral language. If there is no neutral language entry, clear the
+ // content to hide it.
+ if(k >= langs.length)
+ {
+ if(language != "nu")
+ {
+ k = 0;
+
+ while(k < langs.length)
+ {
+ keyValue = langs[k].split("=");
+
+ if(keyValue[0] == "nu")
+ {
+ devLangSpan.innerHTML = keyValue[1];
+
+ // Help 1 and MS Help Viewer workaround. Add a space if the following text element
+ // starts with a space to prevent things running together.
+ if(devLangSpan.parentNode != null && devLangSpan.parentNode.nextSibling != null)
+ {
+ if(devLangSpan.parentNode.nextSibling.nodeValue != null &&
+ !devLangSpan.parentNode.nextSibling.nodeValue.substring(0, 1).match(/[.,);:!/?]/))
+ {
+ devLangSpan.innerHTML = keyValue[1] + " ";
+ }
+ }
+ break;
+ }
+
+ k++;
+ }
+ }
+
+ if(k >= langs.length)
+ devLangSpan.innerHTML = "";
+ }
+ }
+ }
+}
+
+// Get the specified cookie. If not found, return the specified default value.
+function GetCookie(cookieName, defaultValue)
+{
+ if(isHelp1)
+ {
+ try
+ {
+ var globals = Help1Globals;
+
+ var value = globals.Load(cookieName);
+
+ if(value == null)
+ value = defaultValue;
+
+ return value;
+ }
+ catch(e)
+ {
+ return defaultValue;
+ }
+ }
+
+ var cookie = document.cookie.split("; ");
+
+ for(var i = 0; i < cookie.length; i++)
+ {
+ var crumb = cookie[i].split("=");
+
+ if(cookieName == crumb[0])
+ return unescape(crumb[1])
+ }
+
+ return defaultValue;
+}
+
+// Set the specified cookie to the specified value
+function SetCookie(name, value)
+{
+ if(isHelp1)
+ {
+ try
+ {
+ var globals = Help1Globals;
+
+ globals.Save(name, value);
+ }
+ catch(e)
+ {
+ }
+
+ return;
+ }
+
+ var today = new Date();
+
+ today.setTime(today.getTime());
+
+ // Set the expiration time to be 60 days from now (in milliseconds)
+ var expires_date = new Date(today.getTime() + (60 * 1000 * 60 * 60 * 24));
+
+ document.cookie = name + "=" + escape(value) + ";expires=" + expires_date.toGMTString() + ";path=/";
+}
+
+// Add a language-specific text ID
+function AddLanguageSpecificTextSet(lstId)
+{
+ var keyValue = lstId.split("?")
+
+ allLSTSetIds[keyValue[0]] = keyValue[1];
+}
+
+// Add a language tab set ID
+function AddLanguageTabSet(tabSetId)
+{
+ allTabSetIds.push(tabSetId);
+}
+
+// Switch the active tab for all of other code snippets
+function ChangeTab(tabSetId, language, snippetIdx, snippetCount)
+{
+ SetCookie("CodeSnippetContainerLanguage", language);
+
+ SetActiveTab(tabSetId, snippetIdx, snippetCount);
+
+ // If LST exists on the page, set the LST to show the user selected programming language
+ UpdateLST(language);
+
+ var i = 0;
+
+ while(i < allTabSetIds.length)
+ {
+ // We just care about other snippets
+ if(allTabSetIds[i] != tabSetId)
+ {
+ // Other tab sets may not have the same number of tabs
+ var tabCount = 1;
+
+ while(document.getElementById(allTabSetIds[i] + "_tab" + tabCount) != null)
+ tabCount++;
+
+ tabCount--;
+
+ // If not grouped, skip it
+ if(tabCount > 1)
+ SetCurrentLanguage(allTabSetIds[i], language, tabCount);
+ }
+
+ i++;
+ }
+}
+
+// Sets the current language in the specified tab set
+function SetCurrentLanguage(tabSetId, language, tabCount)
+{
+ var tabIndex = 1;
+
+ while(tabIndex <= tabCount)
+ {
+ var tabTemp = document.getElementById(tabSetId + "_tab" + tabIndex);
+
+ if(tabTemp != null && tabTemp.innerHTML.indexOf("'" + language + "'") != -1)
+ break;
+
+ tabIndex++;
+ }
+
+ if(tabIndex > tabCount)
+ {
+ // Select the first non-disabled tab
+ tabIndex = 1;
+
+ if(document.getElementById(tabSetId + "_tab1").className == "codeSnippetContainerTabPhantom")
+ {
+ tabIndex++;
+
+ while(tabIndex <= tabCount)
+ {
+ var tab = document.getElementById(tabSetId + "_tab" + tabIndex);
+
+ if(tab.className != "codeSnippetContainerTabPhantom")
+ {
+ tab.className = "codeSnippetContainerTabActive";
+ document.getElementById(tabSetId + "_code_Div" + j).style.display = "block";
+ break;
+ }
+
+ tabIndex++;
+ }
+ }
+ }
+
+ SetActiveTab(tabSetId, tabIndex, tabCount);
+}
+
+// Set the active tab within a tab set
+function SetActiveTab(tabSetId, tabIndex, tabCount)
+{
+ var i = 1;
+
+ while(i <= tabCount)
+ {
+ var tabTemp = document.getElementById(tabSetId + "_tab" + i);
+
+ if(tabTemp.className == "codeSnippetContainerTabActive")
+ tabTemp.className = "codeSnippetContainerTab";
+ else
+ if(tabTemp.className == "codeSnippetContainerTabPhantom")
+ tabTemp.style.display = "none";
+
+ var codeTemp = document.getElementById(tabSetId + "_code_Div" + i);
+
+ if(codeTemp.style.display != "none")
+ codeTemp.style.display = "none";
+
+ i++;
+ }
+
+ // Phantom tabs are shown or hidden as needed
+ if(document.getElementById(tabSetId + "_tab" + tabIndex).className != "codeSnippetContainerTabPhantom")
+ document.getElementById(tabSetId + "_tab" + tabIndex).className = "codeSnippetContainerTabActive";
+ else
+ document.getElementById(tabSetId + "_tab" + tabIndex).style.display = "block";
+
+ document.getElementById(tabSetId + "_code_Div" + tabIndex).style.display = "block";
+
+ // Show copy code button if not in Chrome
+ if(navigator.userAgent.toLowerCase().indexOf("chrome") == -1)
+ document.getElementById(tabSetId + "_copyCode").style.display = "inline";
+ else
+ document.getElementById(tabSetId + "_copyCode").style.display = "none";
+}
+
+// Copy the code from the active tab of the given tab set to the clipboard
+function CopyToClipboard(tabSetId)
+{
+ var tabTemp, contentId;
+ var i = 1;
+
+ do
+ {
+ contentId = tabSetId + "_code_Div" + i;
+ tabTemp = document.getElementById(contentId);
+
+ if(tabTemp != null && tabTemp.style.display != "none")
+ break;
+
+ i++;
+
+ } while(tabTemp != null);
+
+ if(tabTemp == null)
+ return;
+
+ if(window.clipboardData)
+ {
+ try
+ {
+ window.clipboardData.setData("Text", document.getElementById(contentId).innerText);
+ }
+ catch(e)
+ {
+ alert("Permission denied. Enable copying to the clipboard.");
+ }
+ }
+ else if(window.netscape)
+ {
+ try
+ {
+ netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+
+ var clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(
+ Components.interfaces.nsIClipboard);
+
+ if(!clip)
+ return;
+
+ var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(
+ Components.interfaces.nsITransferable);
+
+ if(!trans)
+ return;
+
+ trans.addDataFlavor("text/unicode");
+
+ var str = new Object();
+ var len = new Object();
+ var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(
+ Components.interfaces.nsISupportsString);
+
+ var copytext = document.getElementById(contentId).textContent;
+
+ str.data = copytext;
+ trans.setTransferData("text/unicode", str, copytext.length * 2);
+
+ var clipid = Components.interfaces.nsIClipboard;
+
+ clip.setData(trans, null, clipid.kGlobalClipboard);
+ }
+ catch(e)
+ {
+ alert("Permission denied. Enter \"about:config\" in the address bar and double-click the \"signed.applets.codebase_principal_support\" setting to enable copying to the clipboard.");
+ }
+ }
+}
+
+// Expand or collapse a section
+function SectionExpandCollapse(togglePrefix)
+{
+ var image = document.getElementById(togglePrefix + "Toggle");
+ var section = document.getElementById(togglePrefix + "Section");
+
+ if(image != null && section != null)
+ if(section.style.display == "")
+ {
+ image.src = image.src.replace("SectionExpanded.png", "SectionCollapsed.png");
+ section.style.display = "none";
+ }
+ else
+ {
+ image.src = image.src.replace("SectionCollapsed.png", "SectionExpanded.png");
+ section.style.display = "";
+ }
+}
+
+// Expand or collapse a section when it has the focus and Enter is hit
+function SectionExpandCollapse_CheckKey(togglePrefix, eventArgs)
+{
+ if(eventArgs.keyCode == 13)
+ SectionExpandCollapse(togglePrefix);
+}
+
+// Help 1 persistence object. This requires a hidden input element on the page with a class of "userDataStyle"
+// defined in the style sheet that implements the user data binary behavior:
+// <input type="hidden" id="userDataCache" class="userDataStyle" />
+var Help1Globals =
+{
+ UserDataCache: function()
+ {
+ var userData = document.getElementById("userDataCache");
+
+ return userData;
+ },
+
+ Load: function(key)
+ {
+ var userData = this.UserDataCache();
+
+ userData.load("userDataSettings");
+
+ var value = userData.getAttribute(key);
+
+ return value;
+ },
+
+ Save: function(key, value)
+ {
+ var userData = this.UserDataCache();
+ userData.setAttribute(key, value);
+ userData.save("userDataSettings");
+ }
+};
diff --git a/doc/ref/csharp/html/scripts/jquery-1.11.0.min.js b/doc/ref/csharp/html/scripts/jquery-1.11.0.min.js
new file mode 100644
index 0000000000..73f33fb3aa
--- /dev/null
+++ b/doc/ref/csharp/html/scripts/jquery-1.11.0.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f
+}}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML=" <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)
+},a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
diff --git a/doc/ref/csharp/html/search.html b/doc/ref/csharp/html/search.html
new file mode 100644
index 0000000000..296a4d29da
--- /dev/null
+++ b/doc/ref/csharp/html/search.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>gRPC C# - Search</title>
+ <link rel="stylesheet" type="text/css" href="styles/branding.css" />
+ <link rel="stylesheet" type="text/css" href="styles/branding-Website.css" />
+ <script type="text/javascript" src="scripts/jquery-1.11.0.min.js"></script>
+ <script type="text/javascript" src="scripts/branding.js"></script>
+ <script type="text/javascript" src="scripts/branding-Website.js"></script>
+</head>
+<body onload="OnSearchPageLoad();">
+ <div class="pageHeader" id="PageHeader">
+ gRPC C# - Search
+ </div>
+ <div class="pageBody">
+ <div class="searchContainer">
+ <div style="float: left;">
+ <form id="SearchForm" method="get" action="#" onsubmit="javascript:PerformSearch(); return false;">
+ <input id="txtSearchText" type="text" maxlength="200" />
+ <button id="HeaderSearchButton" type="submit" class="header-search-button">
+ </button>
+ </form>
+ </div>
+ &nbsp;&nbsp;<input type="checkbox" id="chkSortByTitle" onclick="javascript:PerformSearch();" />
+ Sort by title
+ <br />
+ <br />
+ <div id="searchResults">
+ </div>
+ <p>
+ <a href="html/R_Project_Documentation.htm">Back</a></p>
+ </div>
+ </div>
+</body>
+</html>
diff --git a/doc/ref/csharp/html/styles/branding-Help1.css b/doc/ref/csharp/html/styles/branding-Help1.css
new file mode 100644
index 0000000000..8f7ba25a3b
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-Help1.css
@@ -0,0 +1,40 @@
+/* Define the userData cache persistence mechanism for Help 1 files */
+.userDataStyle {
+ behavior: url(#default#userdata);
+}
+
+/* Style adjustments for Help 1 */
+.pageBody {
+ padding-top: 0px 20px 0px 0px;
+}
+
+table {
+ width: 95%;
+ padding-right: 20px;
+}
+
+table.members {
+ width: 95%;
+ padding-right: 20px;
+}
+
+th p {
+ padding-bottom: 0px;
+}
+
+td p {
+ padding-bottom: 5px;
+}
+
+.codeSnippetContainerTabs {
+ top: 1px;
+}
+
+.codeSnippetToolBarText {
+ top: -13px;
+}
+
+.codeSnippetContainerTabSingle {
+ padding: 2px 15px 0px 15px;
+ height: 22px;
+}
diff --git a/doc/ref/csharp/html/styles/branding-HelpViewer.css b/doc/ref/csharp/html/styles/branding-HelpViewer.css
new file mode 100644
index 0000000000..951621be66
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-HelpViewer.css
@@ -0,0 +1,48 @@
+/* Style adjustments for Help Viewer */
+.pageBody {
+ padding-top: 0px 20px 0px 0px;
+}
+
+table {
+ width: 95%;
+ padding-right: 20px;
+}
+
+table.members {
+ width: 95%;
+ padding-right: 20px;
+}
+
+th p {
+ padding-bottom: 0px;
+}
+
+td p {
+ padding-bottom: 5px;
+}
+
+.codeSnippetContainerTabs {
+ top: 1px;
+}
+
+.codeSnippetToolBarText {
+ top: -13px;
+}
+
+.codeSnippetContainerTabSingle {
+ padding: 2px 15px 0px 15px;
+ height: 22px;
+}
+
+.codeSnippetContainerTab a:visited {
+ color: #000000;
+}
+
+.codeSnippetContainerTabActive a:visited {
+ color: #000000;
+}
+
+span.keyword {
+ color: #0000ff;
+ font-weight: normal;
+}
diff --git a/doc/ref/csharp/html/styles/branding-Website.css b/doc/ref/csharp/html/styles/branding-Website.css
new file mode 100644
index 0000000000..d39e08c771
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-Website.css
@@ -0,0 +1,156 @@
+/* Style adjustments for websites */
+.pageBody {
+ padding: 0px 20px 0px 0px;
+}
+.topicContent {
+ margin-left: 280px;
+}
+
+/* Lightweight TOC */
+.tocCollapsed {
+ background: url('../icons/TocCollapsed.gif') no-repeat scroll center;
+ width: 17px;
+ height: 20px;
+ overflow: hidden;
+}
+.tocExpanded {
+ background: url('../icons/TocExpanded.gif') no-repeat scroll center;
+ width: 17px;
+ height: 20px;
+ overflow: hidden;
+}
+.tocResize {
+ position: absolute;
+ top: 90px;
+ left: 300px;
+ width: 5px;
+ height: 20px;
+ padding-right: 5px;
+}
+.tocResize img {
+ border: none;
+ cursor: pointer;
+}
+div#leftNav {
+ float: left;
+ margin: 0px -1px 0 0;
+ width: 280px;
+ min-height: 10px;
+ position: relative;
+ border-right: 1px solid #b6b6b6;
+ padding-left: 10px;
+ padding-top: 15px;
+}
+div#tocNav {
+ font-family: 'Segoe UI' ,Verdana,Arial;
+ overflow-x: hidden;
+ line-height: normal;
+ margin: -20px 0 0 -4px;
+}
+div#tocNav > div {
+ overflow-x: hidden;
+ white-space: normal;
+ width: auto;
+ margin-bottom: 5px;
+}
+div#leftNav a, div#leftNav a:link, div#leftNav a:visited {
+ color: #1364c4;
+ text-decoration: none;
+}
+div#leftNav a:hover {
+ color: #3390b1;
+}
+div#tocNav > div > a, div#tocNav > div > a:link, div#tocNav > div > a:visited {
+ display: block;
+ margin-left: 18px;
+ overflow: hidden;
+}
+div#tocNav > div.current > a, div#tocNav > div.current > a:link, div#tocNav > div.current > a:visited {
+ color: #000;
+ font-weight: bold;
+ text-decoration: none;
+}
+div#tocNav > div > a.tocExpanded, div#tocNav > div > a.tocCollapsed {
+ float: left;
+ display: inline-block;
+ margin-left: 0;
+ vertical-align: top;
+}
+div#tocResizableEW {
+ cursor: e-resize;
+ width: 15px;
+ top: 0;
+ height: 100%;
+ position: absolute;
+ display: block;
+ font-size: 0.5px;
+ right: -7px;
+}
+.toclevel0:first-child {
+ margin-top: 16px;
+}
+div#tocNav > div.toclevel1 {
+ padding-left: 17px;
+}
+div#tocNav > div.toclevel2 {
+ padding-left: 34px;
+}
+div#tocNav > div.toclevel3 {
+ padding-left: 51px;
+}
+div#tocNav > div.toclevel4 {
+ padding-left: 68px;
+}
+div#tocNav > div.toclevel5 {
+ padding-left: 85px;
+}
+div#tocNav > div.toclevel6 {
+ padding-left: 102px;
+}
+div#tocNav > div.toclevel7 {
+ padding-left: 119px;
+}
+div#tocNav > div.toclevel8 {
+ padding-left: 136px;
+}
+div#tocNav > div.toclevel9 {
+ padding-left: 153px;
+}
+div#tocNav > div.toclevel10 {
+ padding-left: 170px;
+}
+
+/* Search form */
+form#SearchForm {
+ float: right;
+ background-color: #eee;
+ width: 280px;
+}
+form#SearchForm input {
+ background-color: #eee;
+ border: 0;
+ height: 22px;
+ width: 230px;
+ color: #3b3b3b;
+ display: inline-block;
+ margin: 1px 0 0 0;
+ padding: 1px 4px 1px 10px;
+}
+form#SearchForm button {
+ background: url('../icons/Search.png') no-repeat scroll center;
+ background-color: #eee;
+ float: right;
+ border: 0;
+ margin: 3px 2px 0 0;
+ cursor: pointer;
+ color: #3b3b3b;
+ width: 19px;
+ height: 18px;
+ overflow: hidden;
+}
+.searchContainer {
+ width: 700px;
+ margin-top: 50px;
+ margin-left: auto;
+ margin-right: auto;
+}
diff --git a/doc/ref/csharp/html/styles/branding-cs-CZ.css b/doc/ref/csharp/html/styles/branding-cs-CZ.css
new file mode 100644
index 0000000000..f38de74970
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-cs-CZ.css
@@ -0,0 +1,3 @@
+/* Start CS-CZ locale-specific CSS */
+
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-de-DE.css b/doc/ref/csharp/html/styles/branding-de-DE.css
new file mode 100644
index 0000000000..4cf80badda
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-de-DE.css
@@ -0,0 +1,3 @@
+/* Start DE-DE locale-specific CSS */
+
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-en-US.css b/doc/ref/csharp/html/styles/branding-en-US.css
new file mode 100644
index 0000000000..248cbe5a2a
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-en-US.css
@@ -0,0 +1,3 @@
+/* Start EN-US locale-specific CSS */
+
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-es-ES.css b/doc/ref/csharp/html/styles/branding-es-ES.css
new file mode 100644
index 0000000000..4a7ebbd68d
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-es-ES.css
@@ -0,0 +1,3 @@
+/* Start ES-ES locale-specific CSS */
+
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-fr-FR.css b/doc/ref/csharp/html/styles/branding-fr-FR.css
new file mode 100644
index 0000000000..d924dec965
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-fr-FR.css
@@ -0,0 +1,3 @@
+/* Start FR-FR locale-specific CSS */
+
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-it-IT.css b/doc/ref/csharp/html/styles/branding-it-IT.css
new file mode 100644
index 0000000000..36c6b224fb
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-it-IT.css
@@ -0,0 +1,3 @@
+/* Start IT-IT locale-specific CSS */
+
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-ja-JP.css b/doc/ref/csharp/html/styles/branding-ja-JP.css
new file mode 100644
index 0000000000..403aa6ddf8
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-ja-JP.css
@@ -0,0 +1,18 @@
+/* Start JA-JP locale-specific CSS */
+body
+{
+ font-family: Segoe UI, Verdana, Arial, MS Pゴシック;
+}
+pre
+{
+ font-family: Consolas, Courier, monospace, MS ゴシック;
+}
+span.tt
+{
+ font-family: Consolas, Courier, monospace, MS ゴシック;
+}
+span.code
+{
+ font-family: Consolas, Courier, monospace, MS ゴシック;
+}
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-ko-KR.css b/doc/ref/csharp/html/styles/branding-ko-KR.css
new file mode 100644
index 0000000000..2b46e923ef
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-ko-KR.css
@@ -0,0 +1,19 @@
+/* Start KO-KR locale-specific CSS */
+body
+{
+ font-family: Malgun Gothic, Segoe UI, Verdana, Arial;
+ font-size: 0.75em; /*9pt*/
+}
+pre
+{
+ font-family: Consolas, Courier, monospace, 돋움체;
+}
+span.tt
+{
+ font-family: Consolas, Courier, monospace, 돋움체;
+}
+span.code
+{
+ font-family: Consolas, Courier, monospace, 돋움체;
+}
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-pl-PL.css b/doc/ref/csharp/html/styles/branding-pl-PL.css
new file mode 100644
index 0000000000..19e981032d
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-pl-PL.css
@@ -0,0 +1,3 @@
+/* Start PL-PL locale-specific CSS */
+
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-pt-BR.css b/doc/ref/csharp/html/styles/branding-pt-BR.css
new file mode 100644
index 0000000000..a0683b0ef2
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-pt-BR.css
@@ -0,0 +1,3 @@
+/* Start PT-BR locale-specific CSS */
+
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-ru-RU.css b/doc/ref/csharp/html/styles/branding-ru-RU.css
new file mode 100644
index 0000000000..c31f83a44b
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-ru-RU.css
@@ -0,0 +1,3 @@
+/* Start RU-RU locale-specific CSS */
+
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-tr-TR.css b/doc/ref/csharp/html/styles/branding-tr-TR.css
new file mode 100644
index 0000000000..81ca462ef7
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-tr-TR.css
@@ -0,0 +1,3 @@
+/* Start TR-TR locale-specific CSS */
+
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-zh-CN.css b/doc/ref/csharp/html/styles/branding-zh-CN.css
new file mode 100644
index 0000000000..cf79e7cd00
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-zh-CN.css
@@ -0,0 +1,18 @@
+/* Start ZH-CN locale-specific CSS */
+body
+{
+ font-family: MS YaHei, Simsun, Segoe UI, Verdana, Arial;
+}
+pre
+{
+ font-family: Consolas, Courier, monospace, 新宋体;
+}
+span.tt
+{
+ font-family: Consolas, Courier, monospace, 新宋体;
+}
+span.code
+{
+ font-family: Consolas, Courier, monospace, 新宋体;
+}
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding-zh-TW.css b/doc/ref/csharp/html/styles/branding-zh-TW.css
new file mode 100644
index 0000000000..eab654f8c5
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding-zh-TW.css
@@ -0,0 +1,18 @@
+/* Start ZH-TW locale-specific CSS */
+body
+{
+ font-family: MS JhengHei, MingLiU, Segoe UI, Verdana, Arial;
+}
+pre
+{
+ font-family: Consolas, Courier, monospace, 細明體;
+}
+span.tt
+{
+ font-family: Consolas, Courier, monospace, 細明體;
+}
+span.code
+{
+ font-family: Consolas, Courier, monospace, 細明體;
+}
+/* End locale-specific CSS */
diff --git a/doc/ref/csharp/html/styles/branding.css b/doc/ref/csharp/html/styles/branding.css
new file mode 100644
index 0000000000..7afa70b315
--- /dev/null
+++ b/doc/ref/csharp/html/styles/branding.css
@@ -0,0 +1,561 @@
+/* General styles */
+body {
+ font-family: 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif;
+ font-size: 15px;
+ padding: 0;
+ margin: 0;
+ margin-left: auto;
+ margin-right: auto;
+ color: #000;
+}
+h1 {
+ font-family: 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif;
+ font-size: 2.5em;
+ font-weight: normal;
+ margin-top: 0;
+ color: #000;
+}
+h2, h3 {
+ font-family: 'Segoe UI Semibold' , 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif;
+ font-weight: normal;
+ margin: 0;
+ padding-bottom: 5px;
+ padding-top: 5px;
+ color: #000;
+}
+h2 {
+ font-size: 1.769em;
+}
+h3 {
+ font-size: 1.231em;
+}
+h4, .subHeading {
+ font-family: 'Segoe UI Semibold' , 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif;
+ font-size: 1.077em;
+ font-weight: normal;
+ margin: 0;
+ color: #000;
+}
+.subHeading {
+ margin-top: 5px;
+}
+h5, h6 {
+ font-family: 'Segoe UI Semibold' , 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif;
+ font-size: 1em;
+ font-weight: normal;
+ line-height: 130%;
+ margin: 0;
+ color: #000;
+}
+a, a:link {
+ text-decoration: none;
+ color: #1364c4;
+}
+a:visited, a:active {
+ text-decoration: none;
+ color: #03697a;
+}
+a:hover {
+ text-decoration: none;
+ color: #3390b1;
+}
+img {
+ border: 0;
+}
+p {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-bottom: 15px;
+ line-height: 18px;
+}
+q {
+ font-style: italic;
+}
+blockquote {
+ margin-top: 0px;
+}
+table {
+ border-collapse: collapse;
+ padding: 0;
+ margin-bottom: 15px;
+ font-size: 15px;
+ width: 100%;
+}
+td, th {
+ border-bottom: 1px solid #dbdbdb;
+ margin: 10px;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ padding-right: 8px;
+ padding-left: 8px;
+}
+th {
+ background-color: #ededed;
+ color: #636363;
+ text-align: left;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+td {
+ color: #2a2a2a;
+ vertical-align: top;
+}
+table p:last-child {
+ padding-bottom: 0;
+}
+table.members {
+ width: 100%;
+}
+table.members td {
+ min-width: 72px;
+}
+table.members img {
+ padding-right: 5px;
+}
+div.alert img {
+ padding-right: 5px;
+}
+ol {
+ margin-top: 0px;
+ margin-bottom: 10px;
+}
+ol ol {
+ list-style-type: lower-alpha;
+}
+ol ol ol {
+ list-style-type: lower-roman;
+}
+ul {
+ margin-top: 0px;
+ margin-bottom: 10px;
+}
+.noBullet {
+ list-style-type: none;
+ padding-left: 20px;
+}
+ul ul {
+ list-style-type: circle;
+}
+ul ul ul {
+ list-style-type: square;
+}
+dt {
+ font-weight: 600;
+}
+pre {
+ font-family: Consolas, Courier, monospace;
+ overflow: hidden;
+}
+.pageHeader {
+ font-family: 'Segoe UI' , Tahoma, Helvetica, Sans-Serif;
+ background-color: #333333;
+ color: #d0d0d0;
+ padding: 5px 10px;
+ vertical-align: middle;
+ height: 25px;
+}
+.pageBody {
+ padding: 0px;
+}
+.topicContent {
+ padding: 10px 10px 15px 10px;
+ overflow: visible;
+ border-left: 1px solid #bbb;
+}
+.pageFooter {
+ clear: both;
+ border-top: solid 1px #bbb;
+ padding: 10px;
+}
+.feedbackLink {
+}
+.iconColumn {
+ width: 100px;
+}
+.seeAlsoStyle {
+}
+table.titleTable td {
+ padding-top: 0px;
+ border-width: 0px;
+}
+td.titleColumn {
+ font-family: 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif;
+ font-size: 2.5em;
+ font-weight: normal;
+ margin-top: 0px;
+ padding-left: 0px;
+ color: #000;
+ vertical-align: middle;
+}
+td.logoColumn {
+ padding-left: 0px;
+ padding-right: 10px;
+ vertical-align: middle;
+ width: 1px;
+}
+td.logoColumnAbove {
+ padding: 0px 10px 0px 0px;
+ vertical-align: middle;
+}
+span.selflink {
+ color: #000066;
+}
+div.preliminary {
+ margin-top: 1em;
+ margin-bottom: 1em;
+ font-weight: bold;
+ color: #333333;
+}
+div.caption {
+ font-weight: bold;
+ font-size: 1em; /*12pt*/
+ color: #003399;
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+.procedureSubHeading {
+ font-size: 1.1em; /*13.5pt*/
+ font-weight: bold;
+}
+.summary {
+}
+
+/* Collapsible region styles */
+.collapsibleAreaRegion {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+.collapseToggle {
+ padding-right: 5px;
+}
+.collapsibleRegionTitle {
+ font-family: 'Segoe UI Semibold' , 'Segoe UI' , 'Lucida Grande' , Verdana, Arial, Helvetica, sans-serif !important;
+ font-style: normal !important;
+ font-size: 1.769em;
+ margin-top: 9px;
+ margin-bottom: 19px;
+ padding-top: 20px;
+ padding-bottom: 5px;
+ cursor: pointer;
+}
+.collapsibleSection {
+ padding: 0 0 0 20px;
+}
+
+/* Syntax and code snippet styles */
+.codeSnippetContainer {
+ min-width: 260px;
+ margin-top: 10px;
+}
+.codeSnippetContainerTabs {
+ height: 23px;
+ vertical-align: middle;
+ position: relative;
+ z-index: 1;
+}
+.codeSnippetContainerTab {
+ padding: 0px 15px;
+ width: auto;
+ height: 22px;
+ color: #2a2a2a;
+ font-family: "Segoe UI" , "Lucida Grande" , Verdana, Arial, Helvetica, sans-serif !important;
+ font-size: 12px;
+ font-style: normal !important;
+ vertical-align: baseline;
+ float: left;
+}
+.codeSnippetContainerTabActive {
+ background: #f8f8f8;
+ padding: 0px 15px;
+ width: auto;
+ height: 22px;
+ color: #000000;
+ font-family: "Segoe UI" , "Lucida Grande" , Verdana, Arial, Helvetica, sans-serif !important;
+ font-size: 12px;
+ font-style: normal !important;
+ vertical-align: baseline;
+ border-top-color: #939393;
+ border-right-color: #939393;
+ border-left-color: #939393;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-left-width: 1px;
+ border-top-style: solid;
+ border-right-style: solid;
+ border-left-style: solid;
+ float: left;
+}
+.codeSnippetContainerTabPhantom {
+ background: #f8f8f8;
+ padding: 0px 15px;
+ width: auto;
+ height: 22px;
+ color: #000000;
+ font-family: "Segoe UI" , "Lucida Grande" , Verdana, Arial, Helvetica, sans-serif !important;
+ font-size: 12px;
+ font-style: normal !important;
+ vertical-align: baseline;
+ border-top-color: #939393;
+ border-right-color: #939393;
+ border-left-color: #939393;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-left-width: 1px;
+ border-top-style: solid;
+ border-right-style: solid;
+ border-left-style: solid;
+ float: left;
+ display: none;
+}
+.codeSnippetContainerTabSingle {
+ background: #f8f8f8;
+ padding: 2px 15px 0px 15px;
+ width: auto;
+ height: 20px;
+ color: #000000;
+ font-family: "Segoe UI" , "Lucida Grande" , Verdana, Arial, Helvetica, sans-serif !important;
+ font-size: 12px;
+ font-weight: bold;
+ font-style: normal !important;
+ vertical-align: baseline;
+ border-top-color: #939393;
+ border-right-color: #939393;
+ border-left-color: #939393;
+ border-top-width: 1px;
+ border-right-width: 1px;
+ border-left-width: 1px;
+ border-top-style: solid;
+ border-right-style: solid;
+ border-left-style: solid;
+ float: left;
+}
+.codeSnippetContainerTab a {
+ top: 2px;
+ color: #000000;
+ font-weight: bold;
+ text-decoration: none;
+ position: relative;
+}
+.codeSnippetContainerTab a:link {
+ color: #000000;
+}
+.codeSnippetContainerTab a:hover {
+ color: #136460;
+}
+.codeSnippetContainerTabActive a {
+ top: 2px;
+ color: #000000;
+ font-weight: bold;
+ text-decoration: none;
+ position: relative;
+ cursor: default;
+}
+.codeSnippetContainerTabActive a:link {
+ color: #000000;
+}
+.codeSnippetContainerTabActive a:hover {
+ color: #000000;
+}
+.codeSnippetContainerTabPhantom a {
+ top: 2px;
+ color: #000000;
+ font-weight: bold;
+ text-decoration: none;
+ position: relative;
+ cursor: default;
+}
+.codeSnippetContainerTabPhantom a:link {
+ color: #000000;
+}
+.codeSnippetContainerCodeContainer {
+ border: 1px solid #939393;
+ top: -1px;
+ margin-bottom: 12px;
+ position: relative;
+}
+.codeSnippetToolBar {
+ width: auto;
+ height: auto;
+}
+.codeSnippetToolBarText {
+ top: -8px;
+ width: auto;
+ height: 0px;
+ padding-right: 0px;
+ padding-left: 0px;
+ vertical-align: top;
+ float: right;
+ position: relative;
+}
+.codeSnippetToolBarText a {
+ color: #1364c4;
+ text-decoration: none;
+ padding-left: 8px;
+ padding-right: 8px;
+ font-family: "Segoe UI" , "Lucida Grande" , Verdana, Arial, Helvetica, sans-serif !important;
+ font-size: 10px;
+ font-style: normal !important;
+ text-decoration: none;
+ margin-right: 10px;
+ margin-left: 0px;
+ background-color: #ffffff;
+}
+.codeSnippetToolBarText a:link {
+ color: #1364c4;
+}
+.codeSnippetContainerCode {
+ margin: 0px;
+ padding: 10px;
+ width: auto;
+}
+.codeSnippetContainerCode div {
+ margin: 0px;
+ padding: 0px;
+}
+.codeSnippetContainerCode pre {
+ margin: 0px;
+ padding: 5px;
+ overflow: auto;
+ font-family: Consolas, Courier, monospace !important;
+ font-style: normal;
+ font-weight: normal;
+ -ms-word-wrap: normal;
+}
+.codeSnippetContainerCode .keyword {
+ color: #0000ff;
+ font-weight: normal;
+}
+
+/* Keyword and phrase styles */
+span.code, span.command {
+ font-family: Consolas, Courier, monospace;
+ color: #000066;
+}
+span.ui {
+ font-weight: bold;
+}
+span.math {
+ font-style: italic;
+}
+span.input {
+ font-weight: bold;
+}
+span.term {
+ font-style: italic;
+}
+span.label {
+ font-weight: bold;
+}
+span.foreignPhrase, span.phrase {
+ font-style: italic;
+}
+span.placeholder {
+ font-style: italic;
+}
+span.typeparameter {
+ font-style: italic;
+}
+span.identifier {
+}
+span.keyword {
+ font-weight: bold;
+}
+span.parameter {
+ font-style: italic;
+}
+dt span.parameter {
+ font-weight: normal;
+}
+span.literal, span.literalValue {
+ color: #cc0000;
+}
+span.comment {
+ color: #006633;
+}
+span.introStyle {
+ color: #a9a9a9;
+}
+span.nolink {
+ font-weight: bold;
+}
+
+/* Auto-outline styles */
+ul.autoOutline {
+}
+li.outlineSectionEntry {
+}
+div.outlineSectionEntrySummary {
+}
+
+/* Media styles */
+div.mediaNear {
+ text-align: left;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+div.mediaFar {
+ text-align: right;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+div.mediaCenter {
+ text-align: center;
+ margin-top: 1em;
+ margin-bottom: 1em;
+}
+span.captionLead {
+ font-weight: bold;
+ margin-right: .5em;
+}
+span.media img {
+ vertical-align: top;
+}
+
+/* Glossary styles */
+div.glossaryDiv {
+}
+div.glossaryLetterBar {
+}
+hr.glossaryRule {
+}
+h3.glossaryGroupHeading {
+ color: #808080;
+}
+div.glossaryGroup {
+}
+dl.glossaryGroupList {
+ margin: 0;
+ color: Black;
+}
+dt.glossaryEntry {
+ margin-left: 2em;
+}
+dd.glossaryEntry {
+ margin-left: 2em;
+ margin-bottom: 2em;
+}
+div.relatedEntry {
+ margin-bottom: 4px;
+}
+
+/* Bibliography styles */
+div.bibliographStyle {
+ padding-top: 5px;
+}
+span.bibliographyNumber {
+}
+span.bibliographyAuthor {
+ font-weight: bold;
+}
+span.bibliographyTitle {
+ font-style: italic;
+}
+span.bibliographyPublisher {
+}
+sup.citation a:link a:visited a:active {
+ text-decoration: none;
+}
+
+/* Placeholder for the Help 1 user data style class */
+.userDataStyle {
+}
diff --git a/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ChannelOptions.xml b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ChannelOptions.xml
new file mode 100644
index 0000000000..3270d758a1
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ChannelOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ChannelOptions Fields" Url="html/Fields_T_Grpc_Core_ChannelOptions.htm"><HelpTOCNode Title="Census Field" Url="html/F_Grpc_Core_ChannelOptions_Census.htm" /><HelpTOCNode Title="DefaultAuthority Field" Url="html/F_Grpc_Core_ChannelOptions_DefaultAuthority.htm" /><HelpTOCNode Title="Http2InitialSequenceNumber Field" Url="html/F_Grpc_Core_ChannelOptions_Http2InitialSequenceNumber.htm" /><HelpTOCNode Title="MaxConcurrentStreams Field" Url="html/F_Grpc_Core_ChannelOptions_MaxConcurrentStreams.htm" /><HelpTOCNode Title="MaxMessageLength Field" Url="html/F_Grpc_Core_ChannelOptions_MaxMessageLength.htm" /><HelpTOCNode Title="PrimaryUserAgentString Field" Url="html/F_Grpc_Core_ChannelOptions_PrimaryUserAgentString.htm" /><HelpTOCNode Title="SecondaryUserAgentString Field" Url="html/F_Grpc_Core_ChannelOptions_SecondaryUserAgentString.htm" /><HelpTOCNode Title="SslTargetNameOverride Field" Url="html/F_Grpc_Core_ChannelOptions_SslTargetNameOverride.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ContextPropagationOptions.xml b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ContextPropagationOptions.xml
new file mode 100644
index 0000000000..2c4430b029
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ContextPropagationOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ContextPropagationOptions Fields" Url="html/Fields_T_Grpc_Core_ContextPropagationOptions.htm"><HelpTOCNode Title="Default Field" Url="html/F_Grpc_Core_ContextPropagationOptions_Default.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_Metadata.xml b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_Metadata.xml
new file mode 100644
index 0000000000..286d4082d3
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_Metadata.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Metadata Fields" Url="html/Fields_T_Grpc_Core_Metadata.htm"><HelpTOCNode Title="BinaryHeaderSuffix Field" Url="html/F_Grpc_Core_Metadata_BinaryHeaderSuffix.htm" /><HelpTOCNode Title="Empty Field" Url="html/F_Grpc_Core_Metadata_Empty.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ServerPort.xml b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ServerPort.xml
new file mode 100644
index 0000000000..7c5391eca6
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_ServerPort.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerPort Fields" Url="html/Fields_T_Grpc_Core_ServerPort.htm"><HelpTOCNode Title="PickUnused Field" Url="html/F_Grpc_Core_ServerPort_PickUnused.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_Status.xml b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_Status.xml
new file mode 100644
index 0000000000..6757777b9f
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_Status.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Status Fields" Url="html/Fields_T_Grpc_Core_Status.htm"><HelpTOCNode Title="DefaultCancelled Field" Url="html/F_Grpc_Core_Status_DefaultCancelled.htm" /><HelpTOCNode Title="DefaultSuccess Field" Url="html/F_Grpc_Core_Status_DefaultSuccess.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_VersionInfo.xml b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_VersionInfo.xml
new file mode 100644
index 0000000000..1962206e76
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_VersionInfo.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="VersionInfo Fields" Url="html/Fields_T_Grpc_Core_VersionInfo.htm"><HelpTOCNode Title="CurrentVersion Field" Url="html/F_Grpc_Core_VersionInfo_CurrentVersion.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_WriteOptions.xml b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_WriteOptions.xml
new file mode 100644
index 0000000000..21fb6dde0a
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Fields_T_Grpc_Core_WriteOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="WriteOptions Fields" Url="html/Fields_T_Grpc_Core_WriteOptions.htm"><HelpTOCNode Title="Default Field" Url="html/F_Grpc_Core_WriteOptions_Default.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Auth_AuthInterceptors.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Auth_AuthInterceptors.xml
new file mode 100644
index 0000000000..acf36a906c
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Auth_AuthInterceptors.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AuthInterceptors Methods" Url="html/Methods_T_Grpc_Auth_AuthInterceptors.htm"><HelpTOCNode Title="FromAccessToken Method " Url="html/M_Grpc_Auth_AuthInterceptors_FromAccessToken.htm" /><HelpTOCNode Title="FromCredential Method " Url="html/M_Grpc_Auth_AuthInterceptors_FromCredential.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.xml
new file mode 100644
index 0000000000..22aa4b27f3
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncClientStreamingCall(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm"><HelpTOCNode Title="Dispose Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_Dispose.htm" /><HelpTOCNode Title="GetAwaiter Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetAwaiter.htm" /><HelpTOCNode Title="GetStatus Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetStatus.htm" /><HelpTOCNode Title="GetTrailers Method " Url="html/M_Grpc_Core_AsyncClientStreamingCall_2_GetTrailers.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.xml
new file mode 100644
index 0000000000..1cb7ed0256
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncDuplexStreamingCall(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm"><HelpTOCNode Title="Dispose Method " Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_Dispose.htm" /><HelpTOCNode Title="GetStatus Method " Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetStatus.htm" /><HelpTOCNode Title="GetTrailers Method " Url="html/M_Grpc_Core_AsyncDuplexStreamingCall_2_GetTrailers.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.xml
new file mode 100644
index 0000000000..77cea2d896
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncServerStreamingCall(TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm"><HelpTOCNode Title="Dispose Method " Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_Dispose.htm" /><HelpTOCNode Title="GetStatus Method " Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_GetStatus.htm" /><HelpTOCNode Title="GetTrailers Method " Url="html/M_Grpc_Core_AsyncServerStreamingCall_1_GetTrailers.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncUnaryCall_1.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncUnaryCall_1.xml
new file mode 100644
index 0000000000..577502e6a0
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_AsyncUnaryCall_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncUnaryCall(TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncUnaryCall_1.htm"><HelpTOCNode Title="Dispose Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_Dispose.htm" /><HelpTOCNode Title="GetAwaiter Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetAwaiter.htm" /><HelpTOCNode Title="GetStatus Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetStatus.htm" /><HelpTOCNode Title="GetTrailers Method " Url="html/M_Grpc_Core_AsyncUnaryCall_1_GetTrailers.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_CallInvocationDetails_2.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_CallInvocationDetails_2.xml
new file mode 100644
index 0000000000..954f9fadb3
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_CallInvocationDetails_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_CallInvocationDetails_2.htm"><HelpTOCNode Title="WithOptions Method " Url="html/M_Grpc_Core_CallInvocationDetails_2_WithOptions.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_CallOptions.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_CallOptions.xml
new file mode 100644
index 0000000000..728aebd0ad
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_CallOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="CallOptions Methods" Url="html/Methods_T_Grpc_Core_CallOptions.htm"><HelpTOCNode Title="WithCancellationToken Method " Url="html/M_Grpc_Core_CallOptions_WithCancellationToken.htm" /><HelpTOCNode Title="WithDeadline Method " Url="html/M_Grpc_Core_CallOptions_WithDeadline.htm" /><HelpTOCNode Title="WithHeaders Method " Url="html/M_Grpc_Core_CallOptions_WithHeaders.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Calls.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Calls.xml
new file mode 100644
index 0000000000..15004efc43
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Calls.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Calls Methods" Url="html/Methods_T_Grpc_Core_Calls.htm"><HelpTOCNode Title="AsyncClientStreamingCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_Calls_AsyncClientStreamingCall__2.htm" /><HelpTOCNode Title="AsyncDuplexStreamingCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_Calls_AsyncDuplexStreamingCall__2.htm" /><HelpTOCNode Title="AsyncServerStreamingCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_Calls_AsyncServerStreamingCall__2.htm" /><HelpTOCNode Title="AsyncUnaryCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_Calls_AsyncUnaryCall__2.htm" /><HelpTOCNode Title="BlockingUnaryCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_Calls_BlockingUnaryCall__2.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Channel.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Channel.xml
new file mode 100644
index 0000000000..82a1d9c7a0
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Channel.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Channel Methods" Url="html/Methods_T_Grpc_Core_Channel.htm"><HelpTOCNode Title="ConnectAsync Method " Url="html/M_Grpc_Core_Channel_ConnectAsync.htm" /><HelpTOCNode Title="ShutdownAsync Method " Url="html/M_Grpc_Core_Channel_ShutdownAsync.htm" /><HelpTOCNode Title="WaitForStateChangedAsync Method " Url="html/M_Grpc_Core_Channel_WaitForStateChangedAsync.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ClientBase.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ClientBase.xml
new file mode 100644
index 0000000000..a2f2d35c98
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ClientBase.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ClientBase Methods" Url="html/Methods_T_Grpc_Core_ClientBase.htm"><HelpTOCNode Title="CreateCall(TRequest, TResponse) Method " Url="html/M_Grpc_Core_ClientBase_CreateCall__2.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_GrpcEnvironment.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_GrpcEnvironment.xml
new file mode 100644
index 0000000000..2035e72200
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_GrpcEnvironment.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="GrpcEnvironment Methods" Url="html/Methods_T_Grpc_Core_GrpcEnvironment.htm"><HelpTOCNode Title="SetLogger Method " Url="html/M_Grpc_Core_GrpcEnvironment_SetLogger.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_IAsyncStreamWriter_1.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_IAsyncStreamWriter_1.xml
new file mode 100644
index 0000000000..fa63f659de
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_IAsyncStreamWriter_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IAsyncStreamWriter(T) Methods" Url="html/Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm"><HelpTOCNode Title="WriteAsync Method " Url="html/M_Grpc_Core_IAsyncStreamWriter_1_WriteAsync.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_IClientStreamWriter_1.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_IClientStreamWriter_1.xml
new file mode 100644
index 0000000000..2d1cda8c2e
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_IClientStreamWriter_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IClientStreamWriter(T) Methods" Url="html/Methods_T_Grpc_Core_IClientStreamWriter_1.htm"><HelpTOCNode Title="CompleteAsync Method " Url="html/M_Grpc_Core_IClientStreamWriter_1_CompleteAsync.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Logging_ConsoleLogger.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Logging_ConsoleLogger.xml
new file mode 100644
index 0000000000..e43c4157ba
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Logging_ConsoleLogger.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ConsoleLogger Methods" Url="html/Methods_T_Grpc_Core_Logging_ConsoleLogger.htm"><HelpTOCNode Title="Debug Method " Url="html/M_Grpc_Core_Logging_ConsoleLogger_Debug.htm" /><HelpTOCNode Title="Error Method " Url="html/Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm" HasChildren="true" /><HelpTOCNode Title="ForType(T) Method " Url="html/M_Grpc_Core_Logging_ConsoleLogger_ForType__1.htm" /><HelpTOCNode Title="Info Method " Url="html/M_Grpc_Core_Logging_ConsoleLogger_Info.htm" /><HelpTOCNode Title="Warning Method " Url="html/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Logging_ILogger.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Logging_ILogger.xml
new file mode 100644
index 0000000000..0b32dd3e9d
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Logging_ILogger.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ILogger Methods" Url="html/Methods_T_Grpc_Core_Logging_ILogger.htm"><HelpTOCNode Title="Debug Method " Url="html/M_Grpc_Core_Logging_ILogger_Debug.htm" /><HelpTOCNode Title="Error Method " Url="html/Overload_Grpc_Core_Logging_ILogger_Error.htm" HasChildren="true" /><HelpTOCNode Title="ForType(T) Method " Url="html/M_Grpc_Core_Logging_ILogger_ForType__1.htm" /><HelpTOCNode Title="Info Method " Url="html/M_Grpc_Core_Logging_ILogger_Info.htm" /><HelpTOCNode Title="Warning Method " Url="html/Overload_Grpc_Core_Logging_ILogger_Warning.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Marshallers.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Marshallers.xml
new file mode 100644
index 0000000000..8256f81f19
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Marshallers.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Marshallers Methods" Url="html/Methods_T_Grpc_Core_Marshallers.htm"><HelpTOCNode Title="Create(T) Method " Url="html/M_Grpc_Core_Marshallers_Create__1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Metadata.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Metadata.xml
new file mode 100644
index 0000000000..5332983a9b
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Metadata.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Metadata Methods" Url="html/Methods_T_Grpc_Core_Metadata.htm"><HelpTOCNode Title="Add Method " Url="html/Overload_Grpc_Core_Metadata_Add.htm" HasChildren="true" /><HelpTOCNode Title="Clear Method " Url="html/M_Grpc_Core_Metadata_Clear.htm" /><HelpTOCNode Title="Contains Method " Url="html/M_Grpc_Core_Metadata_Contains.htm" /><HelpTOCNode Title="CopyTo Method " Url="html/M_Grpc_Core_Metadata_CopyTo.htm" /><HelpTOCNode Title="GetEnumerator Method " Url="html/M_Grpc_Core_Metadata_GetEnumerator.htm" /><HelpTOCNode Title="IndexOf Method " Url="html/M_Grpc_Core_Metadata_IndexOf.htm" /><HelpTOCNode Title="Insert Method " Url="html/M_Grpc_Core_Metadata_Insert.htm" /><HelpTOCNode Title="Remove Method " Url="html/M_Grpc_Core_Metadata_Remove.htm" /><HelpTOCNode Title="RemoveAt Method " Url="html/M_Grpc_Core_Metadata_RemoveAt.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Metadata_Entry.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Metadata_Entry.xml
new file mode 100644
index 0000000000..906d34512c
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Metadata_Entry.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Entry Methods" Url="html/Methods_T_Grpc_Core_Metadata_Entry.htm"><HelpTOCNode Title="ToString Method " Url="html/M_Grpc_Core_Metadata_Entry_ToString.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server.xml
new file mode 100644
index 0000000000..98413ca066
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Server Methods" Url="html/Methods_T_Grpc_Core_Server.htm"><HelpTOCNode Title="KillAsync Method " Url="html/M_Grpc_Core_Server_KillAsync.htm" /><HelpTOCNode Title="ShutdownAsync Method " Url="html/M_Grpc_Core_Server_ShutdownAsync.htm" /><HelpTOCNode Title="Start Method " Url="html/M_Grpc_Core_Server_Start.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerCallContext.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerCallContext.xml
new file mode 100644
index 0000000000..0c49a01fcf
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerCallContext.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerCallContext Methods" Url="html/Methods_T_Grpc_Core_ServerCallContext.htm"><HelpTOCNode Title="CreatePropagationToken Method " Url="html/M_Grpc_Core_ServerCallContext_CreatePropagationToken.htm" /><HelpTOCNode Title="WriteResponseHeadersAsync Method " Url="html/M_Grpc_Core_ServerCallContext_WriteResponseHeadersAsync.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerServiceDefinition.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerServiceDefinition.xml
new file mode 100644
index 0000000000..96e06c8217
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerServiceDefinition.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerServiceDefinition Methods" Url="html/Methods_T_Grpc_Core_ServerServiceDefinition.htm"><HelpTOCNode Title="CreateBuilder Method " Url="html/M_Grpc_Core_ServerServiceDefinition_CreateBuilder.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.xml
new file mode 100644
index 0000000000..7c1e09d746
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Builder Methods" Url="html/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm"><HelpTOCNode Title="AddMethod Method " Url="html/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm" HasChildren="true" /><HelpTOCNode Title="Build Method " Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_Build.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server_ServerPortCollection.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server_ServerPortCollection.xml
new file mode 100644
index 0000000000..ae1470ea80
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server_ServerPortCollection.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerPortCollection Methods" Url="html/Methods_T_Grpc_Core_Server_ServerPortCollection.htm"><HelpTOCNode Title="Add Method " Url="html/Overload_Grpc_Core_Server_ServerPortCollection_Add.htm" HasChildren="true" /><HelpTOCNode Title="GetEnumerator Method " Url="html/M_Grpc_Core_Server_ServerPortCollection_GetEnumerator.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.xml
new file mode 100644
index 0000000000..ac1bbdb8b9
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServiceDefinitionCollection Methods" Url="html/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm"><HelpTOCNode Title="Add Method " Url="html/M_Grpc_Core_Server_ServiceDefinitionCollection_Add.htm" /><HelpTOCNode Title="GetEnumerator Method " Url="html/M_Grpc_Core_Server_ServiceDefinitionCollection_GetEnumerator.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Status.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Status.xml
new file mode 100644
index 0000000000..b3f16eb9ce
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Status.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Status Methods" Url="html/Methods_T_Grpc_Core_Status.htm"><HelpTOCNode Title="ToString Method " Url="html/M_Grpc_Core_Status_ToString.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.xml
new file mode 100644
index 0000000000..d667d519ff
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncStreamExtensions Methods" Url="html/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm"><HelpTOCNode Title="ForEachAsync(T) Method " Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ForEachAsync__1.htm" /><HelpTOCNode Title="ToListAsync(T) Method " Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_ToListAsync__1.htm" /><HelpTOCNode Title="WriteAllAsync Method " Url="html/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_BenchmarkUtil.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_BenchmarkUtil.xml
new file mode 100644
index 0000000000..ca4c3a5be5
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_BenchmarkUtil.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="BenchmarkUtil Methods" Url="html/Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm"><HelpTOCNode Title="RunBenchmark Method " Url="html/M_Grpc_Core_Utils_BenchmarkUtil_RunBenchmark.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_Preconditions.xml b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_Preconditions.xml
new file mode 100644
index 0000000000..7770ff8019
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Methods_T_Grpc_Core_Utils_Preconditions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Preconditions Methods" Url="html/Methods_T_Grpc_Core_Utils_Preconditions.htm"><HelpTOCNode Title="CheckArgument Method " Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm" HasChildren="true" /><HelpTOCNode Title="CheckNotNull Method " Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm" HasChildren="true" /><HelpTOCNode Title="CheckState Method " Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckState.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/N_Grpc_Auth.xml b/doc/ref/csharp/html/toc/N_Grpc_Auth.xml
new file mode 100644
index 0000000000..c38c9e88bb
--- /dev/null
+++ b/doc/ref/csharp/html/toc/N_Grpc_Auth.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Grpc.Auth" Url="html/N_Grpc_Auth.htm"><HelpTOCNode Title="AuthInterceptors Class" Url="html/T_Grpc_Auth_AuthInterceptors.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/N_Grpc_Core.xml b/doc/ref/csharp/html/toc/N_Grpc_Core.xml
new file mode 100644
index 0000000000..bf8cd54b21
--- /dev/null
+++ b/doc/ref/csharp/html/toc/N_Grpc_Core.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Grpc.Core" Url="html/N_Grpc_Core.htm"><HelpTOCNode Title="AsyncClientStreamingCall(TRequest, TResponse) Class" Url="html/T_Grpc_Core_AsyncClientStreamingCall_2.htm" HasChildren="true" /><HelpTOCNode Title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" Url="html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" HasChildren="true" /><HelpTOCNode Title="AsyncServerStreamingCall(TResponse) Class" Url="html/T_Grpc_Core_AsyncServerStreamingCall_1.htm" HasChildren="true" /><HelpTOCNode Title="AsyncUnaryCall(TResponse) Class" Url="html/T_Grpc_Core_AsyncUnaryCall_1.htm" HasChildren="true" /><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Structure" Url="html/T_Grpc_Core_CallInvocationDetails_2.htm" HasChildren="true" /><HelpTOCNode Title="CallOptions Structure" Url="html/T_Grpc_Core_CallOptions.htm" HasChildren="true" /><HelpTOCNode Title="Calls Class" Url="html/T_Grpc_Core_Calls.htm" HasChildren="true" /><HelpTOCNode Title="Channel Class" Url="html/T_Grpc_Core_Channel.htm" HasChildren="true" /><HelpTOCNode Title="ChannelOption Class" Url="html/T_Grpc_Core_ChannelOption.htm" HasChildren="true" /><HelpTOCNode Title="ChannelOption.OptionType Enumeration" Url="html/T_Grpc_Core_ChannelOption_OptionType.htm" /><HelpTOCNode Title="ChannelOptions Class" Url="html/T_Grpc_Core_ChannelOptions.htm" HasChildren="true" /><HelpTOCNode Title="ChannelState Enumeration" Url="html/T_Grpc_Core_ChannelState.htm" /><HelpTOCNode Title="ClientBase Class" Url="html/T_Grpc_Core_ClientBase.htm" HasChildren="true" /><HelpTOCNode Title="ClientStreamingServerMethod(TRequest, TResponse) Delegate" Url="html/T_Grpc_Core_ClientStreamingServerMethod_2.htm" /><HelpTOCNode Title="CompressionLevel Enumeration" Url="html/T_Grpc_Core_CompressionLevel.htm" /><HelpTOCNode Title="ContextPropagationOptions Class" Url="html/T_Grpc_Core_ContextPropagationOptions.htm" HasChildren="true" /><HelpTOCNode Title="ContextPropagationToken Class" Url="html/T_Grpc_Core_ContextPropagationToken.htm" HasChildren="true" /><HelpTOCNode Title="Credentials Class" Url="html/T_Grpc_Core_Credentials.htm" HasChildren="true" /><HelpTOCNode Title="DuplexStreamingServerMethod(TRequest, TResponse) Delegate" Url="html/T_Grpc_Core_DuplexStreamingServerMethod_2.htm" /><HelpTOCNode Title="GrpcEnvironment Class" Url="html/T_Grpc_Core_GrpcEnvironment.htm" HasChildren="true" /><HelpTOCNode Title="HeaderInterceptor Delegate" Url="html/T_Grpc_Core_HeaderInterceptor.htm" /><HelpTOCNode Title="IAsyncStreamReader(T) Interface" Url="html/T_Grpc_Core_IAsyncStreamReader_1.htm" HasChildren="true" /><HelpTOCNode Title="IAsyncStreamWriter(T) Interface" Url="html/T_Grpc_Core_IAsyncStreamWriter_1.htm" HasChildren="true" /><HelpTOCNode Title="IClientStreamWriter(T) Interface" Url="html/T_Grpc_Core_IClientStreamWriter_1.htm" HasChildren="true" /><HelpTOCNode Title="IHasWriteOptions Interface" Url="html/T_Grpc_Core_IHasWriteOptions.htm" HasChildren="true" /><HelpTOCNode Title="IMethod Interface" Url="html/T_Grpc_Core_IMethod.htm" HasChildren="true" /><HelpTOCNode Title="IServerStreamWriter(T) Interface" Url="html/T_Grpc_Core_IServerStreamWriter_1.htm" HasChildren="true" /><HelpTOCNode Title="KeyCertificatePair Class" Url="html/T_Grpc_Core_KeyCertificatePair.htm" HasChildren="true" /><HelpTOCNode Title="Marshaller(T) Structure" Url="html/T_Grpc_Core_Marshaller_1.htm" HasChildren="true" /><HelpTOCNode Title="Marshallers Class" Url="html/T_Grpc_Core_Marshallers.htm" HasChildren="true" /><HelpTOCNode Title="Metadata Class" Url="html/T_Grpc_Core_Metadata.htm" HasChildren="true" /><HelpTOCNode Title="Metadata.Entry Structure" Url="html/T_Grpc_Core_Metadata_Entry.htm" HasChildren="true" /><HelpTOCNode Title="Method(TRequest, TResponse) Class" Url="html/T_Grpc_Core_Method_2.htm" HasChildren="true" /><HelpTOCNode Title="MethodType Enumeration" Url="html/T_Grpc_Core_MethodType.htm" /><HelpTOCNode Title="RpcException Class" Url="html/T_Grpc_Core_RpcException.htm" HasChildren="true" /><HelpTOCNode Title="Server Class" Url="html/T_Grpc_Core_Server.htm" HasChildren="true" /><HelpTOCNode Title="Server.ServerPortCollection Class" Url="html/T_Grpc_Core_Server_ServerPortCollection.htm" HasChildren="true" /><HelpTOCNode Title="Server.ServiceDefinitionCollection Class" Url="html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm" HasChildren="true" /><HelpTOCNode Title="ServerCallContext Class" Url="html/T_Grpc_Core_ServerCallContext.htm" HasChildren="true" /><HelpTOCNode Title="ServerCredentials Class" Url="html/T_Grpc_Core_ServerCredentials.htm" HasChildren="true" /><HelpTOCNode Title="ServerPort Class" Url="html/T_Grpc_Core_ServerPort.htm" HasChildren="true" /><HelpTOCNode Title="ServerServiceDefinition Class" Url="html/T_Grpc_Core_ServerServiceDefinition.htm" HasChildren="true" /><HelpTOCNode Title="ServerServiceDefinition.Builder Class" Url="html/T_Grpc_Core_ServerServiceDefinition_Builder.htm" HasChildren="true" /><HelpTOCNode Title="ServerStreamingServerMethod(TRequest, TResponse) Delegate" Url="html/T_Grpc_Core_ServerStreamingServerMethod_2.htm" /><HelpTOCNode Title="SslCredentials Class" Url="html/T_Grpc_Core_SslCredentials.htm" HasChildren="true" /><HelpTOCNode Title="SslServerCredentials Class" Url="html/T_Grpc_Core_SslServerCredentials.htm" HasChildren="true" /><HelpTOCNode Title="Status Structure" Url="html/T_Grpc_Core_Status.htm" HasChildren="true" /><HelpTOCNode Title="StatusCode Enumeration" Url="html/T_Grpc_Core_StatusCode.htm" /><HelpTOCNode Title="UnaryServerMethod(TRequest, TResponse) Delegate" Url="html/T_Grpc_Core_UnaryServerMethod_2.htm" /><HelpTOCNode Title="VersionInfo Class" Url="html/T_Grpc_Core_VersionInfo.htm" HasChildren="true" /><HelpTOCNode Title="WriteFlags Enumeration" Url="html/T_Grpc_Core_WriteFlags.htm" /><HelpTOCNode Title="WriteOptions Class" Url="html/T_Grpc_Core_WriteOptions.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/N_Grpc_Core_Logging.xml b/doc/ref/csharp/html/toc/N_Grpc_Core_Logging.xml
new file mode 100644
index 0000000000..714ea70204
--- /dev/null
+++ b/doc/ref/csharp/html/toc/N_Grpc_Core_Logging.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Grpc.Core.Logging" Url="html/N_Grpc_Core_Logging.htm"><HelpTOCNode Title="ConsoleLogger Class" Url="html/T_Grpc_Core_Logging_ConsoleLogger.htm" HasChildren="true" /><HelpTOCNode Title="ILogger Interface" Url="html/T_Grpc_Core_Logging_ILogger.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/N_Grpc_Core_Utils.xml b/doc/ref/csharp/html/toc/N_Grpc_Core_Utils.xml
new file mode 100644
index 0000000000..0380ca3af6
--- /dev/null
+++ b/doc/ref/csharp/html/toc/N_Grpc_Core_Utils.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Grpc.Core.Utils" Url="html/N_Grpc_Core_Utils.htm"><HelpTOCNode Title="AsyncStreamExtensions Class" Url="html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm" HasChildren="true" /><HelpTOCNode Title="BenchmarkUtil Class" Url="html/T_Grpc_Core_Utils_BenchmarkUtil.htm" HasChildren="true" /><HelpTOCNode Title="Preconditions Class" Url="html/T_Grpc_Core_Utils_Preconditions.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_CallInvocationDetails_2__ctor.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_CallInvocationDetails_2__ctor.xml
new file mode 100644
index 0000000000..14136c8343
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_CallInvocationDetails_2__ctor.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Constructor " Url="html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm"><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), CallOptions)" Url="html/M_Grpc_Core_CallInvocationDetails_2__ctor.htm" /><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, Method(TRequest, TResponse), String, CallOptions)" Url="html/M_Grpc_Core_CallInvocationDetails_2__ctor_1.htm" /><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Constructor (Channel, String, String, Marshaller(TRequest), Marshaller(TResponse), CallOptions)" Url="html/M_Grpc_Core_CallInvocationDetails_2__ctor_2.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_ChannelOption__ctor.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_ChannelOption__ctor.xml
new file mode 100644
index 0000000000..2dca1f5a6e
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_ChannelOption__ctor.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ChannelOption Constructor " Url="html/Overload_Grpc_Core_ChannelOption__ctor.htm"><HelpTOCNode Title="ChannelOption Constructor (String, Int32)" Url="html/M_Grpc_Core_ChannelOption__ctor.htm" /><HelpTOCNode Title="ChannelOption Constructor (String, String)" Url="html/M_Grpc_Core_ChannelOption__ctor_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Channel__ctor.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Channel__ctor.xml
new file mode 100644
index 0000000000..1b954cd4f7
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Channel__ctor.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Channel Constructor " Url="html/Overload_Grpc_Core_Channel__ctor.htm"><HelpTOCNode Title="Channel Constructor (String, Credentials, IEnumerable(ChannelOption))" Url="html/M_Grpc_Core_Channel__ctor.htm" /><HelpTOCNode Title="Channel Constructor (String, Int32, Credentials, IEnumerable(ChannelOption))" Url="html/M_Grpc_Core_Channel__ctor_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ConsoleLogger_Error.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ConsoleLogger_Error.xml
new file mode 100644
index 0000000000..7dcdd7f7e1
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ConsoleLogger_Error.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Error Method " Url="html/Overload_Grpc_Core_Logging_ConsoleLogger_Error.htm"><HelpTOCNode Title="Error Method (String, Object[])" Url="html/M_Grpc_Core_Logging_ConsoleLogger_Error_1.htm" /><HelpTOCNode Title="Error Method (Exception, String, Object[])" Url="html/M_Grpc_Core_Logging_ConsoleLogger_Error.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.xml
new file mode 100644
index 0000000000..ab90f1c0dc
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Warning Method " Url="html/Overload_Grpc_Core_Logging_ConsoleLogger_Warning.htm"><HelpTOCNode Title="Warning Method (String, Object[])" Url="html/M_Grpc_Core_Logging_ConsoleLogger_Warning_1.htm" /><HelpTOCNode Title="Warning Method (Exception, String, Object[])" Url="html/M_Grpc_Core_Logging_ConsoleLogger_Warning.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ILogger_Error.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ILogger_Error.xml
new file mode 100644
index 0000000000..dd47a40c1e
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ILogger_Error.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Error Method " Url="html/Overload_Grpc_Core_Logging_ILogger_Error.htm"><HelpTOCNode Title="Error Method (String, Object[])" Url="html/M_Grpc_Core_Logging_ILogger_Error_1.htm" /><HelpTOCNode Title="Error Method (Exception, String, Object[])" Url="html/M_Grpc_Core_Logging_ILogger_Error.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ILogger_Warning.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ILogger_Warning.xml
new file mode 100644
index 0000000000..b6b2ccc721
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Logging_ILogger_Warning.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Warning Method " Url="html/Overload_Grpc_Core_Logging_ILogger_Warning.htm"><HelpTOCNode Title="Warning Method (String, Object[])" Url="html/M_Grpc_Core_Logging_ILogger_Warning_1.htm" /><HelpTOCNode Title="Warning Method (Exception, String, Object[])" Url="html/M_Grpc_Core_Logging_ILogger_Warning.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Metadata_Add.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Metadata_Add.xml
new file mode 100644
index 0000000000..7ad9ece2b8
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Metadata_Add.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Add Method " Url="html/Overload_Grpc_Core_Metadata_Add.htm"><HelpTOCNode Title="Add Method (Metadata.Entry)" Url="html/M_Grpc_Core_Metadata_Add.htm" /><HelpTOCNode Title="Add Method (String, Byte[])" Url="html/M_Grpc_Core_Metadata_Add_1.htm" /><HelpTOCNode Title="Add Method (String, String)" Url="html/M_Grpc_Core_Metadata_Add_2.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Metadata_Entry__ctor.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Metadata_Entry__ctor.xml
new file mode 100644
index 0000000000..0bb3ab2d92
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Metadata_Entry__ctor.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Entry Constructor " Url="html/Overload_Grpc_Core_Metadata_Entry__ctor.htm"><HelpTOCNode Title="Metadata.Entry Constructor (String, Byte[])" Url="html/M_Grpc_Core_Metadata_Entry__ctor.htm" /><HelpTOCNode Title="Metadata.Entry Constructor (String, String)" Url="html/M_Grpc_Core_Metadata_Entry__ctor_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_RpcException__ctor.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_RpcException__ctor.xml
new file mode 100644
index 0000000000..011031f2fb
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_RpcException__ctor.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="RpcException Constructor " Url="html/Overload_Grpc_Core_RpcException__ctor.htm"><HelpTOCNode Title="RpcException Constructor (Status)" Url="html/M_Grpc_Core_RpcException__ctor.htm" /><HelpTOCNode Title="RpcException Constructor (Status, String)" Url="html/M_Grpc_Core_RpcException__ctor_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.xml
new file mode 100644
index 0000000000..172e33a44b
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AddMethod Method " Url="html/Overload_Grpc_Core_ServerServiceDefinition_Builder_AddMethod.htm"><HelpTOCNode Title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ClientStreamingServerMethod(TRequest, TResponse))" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2.htm" /><HelpTOCNode Title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), DuplexStreamingServerMethod(TRequest, TResponse))" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_1.htm" /><HelpTOCNode Title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), ServerStreamingServerMethod(TRequest, TResponse))" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_2.htm" /><HelpTOCNode Title="AddMethod(TRequest, TResponse) Method (Method(TRequest, TResponse), UnaryServerMethod(TRequest, TResponse))" Url="html/M_Grpc_Core_ServerServiceDefinition_Builder_AddMethod__2_3.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Server_ServerPortCollection_Add.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Server_ServerPortCollection_Add.xml
new file mode 100644
index 0000000000..01f69d8a2b
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Server_ServerPortCollection_Add.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Add Method " Url="html/Overload_Grpc_Core_Server_ServerPortCollection_Add.htm"><HelpTOCNode Title="Add Method (ServerPort)" Url="html/M_Grpc_Core_Server_ServerPortCollection_Add.htm" /><HelpTOCNode Title="Add Method (String, Int32, ServerCredentials)" Url="html/M_Grpc_Core_Server_ServerPortCollection_Add_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_SslCredentials__ctor.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_SslCredentials__ctor.xml
new file mode 100644
index 0000000000..db12484687
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_SslCredentials__ctor.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="SslCredentials Constructor " Url="html/Overload_Grpc_Core_SslCredentials__ctor.htm"><HelpTOCNode Title="SslCredentials Constructor " Url="html/M_Grpc_Core_SslCredentials__ctor.htm" /><HelpTOCNode Title="SslCredentials Constructor (String)" Url="html/M_Grpc_Core_SslCredentials__ctor_1.htm" /><HelpTOCNode Title="SslCredentials Constructor (String, KeyCertificatePair)" Url="html/M_Grpc_Core_SslCredentials__ctor_2.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_SslServerCredentials__ctor.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_SslServerCredentials__ctor.xml
new file mode 100644
index 0000000000..74ef238258
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_SslServerCredentials__ctor.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="SslServerCredentials Constructor " Url="html/Overload_Grpc_Core_SslServerCredentials__ctor.htm"><HelpTOCNode Title="SslServerCredentials Constructor (IEnumerable(KeyCertificatePair))" Url="html/M_Grpc_Core_SslServerCredentials__ctor.htm" /><HelpTOCNode Title="SslServerCredentials Constructor (IEnumerable(KeyCertificatePair), String, Boolean)" Url="html/M_Grpc_Core_SslServerCredentials__ctor_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.xml
new file mode 100644
index 0000000000..19ff88af8d
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="WriteAllAsync Method " Url="html/Overload_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync.htm"><HelpTOCNode Title="WriteAllAsync(T) Method (IServerStreamWriter(T), IEnumerable(T))" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1_1.htm" /><HelpTOCNode Title="WriteAllAsync(T) Method (IClientStreamWriter(T), IEnumerable(T), Boolean)" Url="html/M_Grpc_Core_Utils_AsyncStreamExtensions_WriteAllAsync__1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.xml
new file mode 100644
index 0000000000..c92e748cfc
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="CheckArgument Method " Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckArgument.htm"><HelpTOCNode Title="CheckArgument Method (Boolean)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckArgument.htm" /><HelpTOCNode Title="CheckArgument Method (Boolean, String)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckArgument_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.xml
new file mode 100644
index 0000000000..c70fd8a4a2
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="CheckNotNull Method " Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckNotNull.htm"><HelpTOCNode Title="CheckNotNull(T) Method (T)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1.htm" /><HelpTOCNode Title="CheckNotNull(T) Method (T, String)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckNotNull__1_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckState.xml b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckState.xml
new file mode 100644
index 0000000000..6aa498a170
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Overload_Grpc_Core_Utils_Preconditions_CheckState.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="CheckState Method " Url="html/Overload_Grpc_Core_Utils_Preconditions_CheckState.htm"><HelpTOCNode Title="CheckState Method (Boolean)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckState.htm" /><HelpTOCNode Title="CheckState Method (Boolean, String)" Url="html/M_Grpc_Core_Utils_Preconditions_CheckState_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.xml
new file mode 100644
index 0000000000..f0b84999df
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncClientStreamingCall(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm"><HelpTOCNode Title="RequestStream Property " Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_RequestStream.htm" /><HelpTOCNode Title="ResponseAsync Property " Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseAsync.htm" /><HelpTOCNode Title="ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncClientStreamingCall_2_ResponseHeadersAsync.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.xml
new file mode 100644
index 0000000000..bcbd985aed
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncDuplexStreamingCall(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm"><HelpTOCNode Title="RequestStream Property " Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_RequestStream.htm" /><HelpTOCNode Title="ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseHeadersAsync.htm" /><HelpTOCNode Title="ResponseStream Property " Url="html/P_Grpc_Core_AsyncDuplexStreamingCall_2_ResponseStream.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.xml
new file mode 100644
index 0000000000..13a9c18f37
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncServerStreamingCall(TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm"><HelpTOCNode Title="ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseHeadersAsync.htm" /><HelpTOCNode Title="ResponseStream Property " Url="html/P_Grpc_Core_AsyncServerStreamingCall_1_ResponseStream.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncUnaryCall_1.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncUnaryCall_1.xml
new file mode 100644
index 0000000000..f7aacbd9eb
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_AsyncUnaryCall_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncUnaryCall(TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncUnaryCall_1.htm"><HelpTOCNode Title="ResponseAsync Property " Url="html/P_Grpc_Core_AsyncUnaryCall_1_ResponseAsync.htm" /><HelpTOCNode Title="ResponseHeadersAsync Property " Url="html/P_Grpc_Core_AsyncUnaryCall_1_ResponseHeadersAsync.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_CallInvocationDetails_2.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_CallInvocationDetails_2.xml
new file mode 100644
index 0000000000..39900b479f
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_CallInvocationDetails_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_CallInvocationDetails_2.htm"><HelpTOCNode Title="Channel Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Channel.htm" /><HelpTOCNode Title="Host Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Host.htm" /><HelpTOCNode Title="Method Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Method.htm" /><HelpTOCNode Title="Options Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_Options.htm" /><HelpTOCNode Title="RequestMarshaller Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_RequestMarshaller.htm" /><HelpTOCNode Title="ResponseMarshaller Property " Url="html/P_Grpc_Core_CallInvocationDetails_2_ResponseMarshaller.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_CallOptions.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_CallOptions.xml
new file mode 100644
index 0000000000..13d5746aa5
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_CallOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="CallOptions Properties" Url="html/Properties_T_Grpc_Core_CallOptions.htm"><HelpTOCNode Title="CancellationToken Property " Url="html/P_Grpc_Core_CallOptions_CancellationToken.htm" /><HelpTOCNode Title="Deadline Property " Url="html/P_Grpc_Core_CallOptions_Deadline.htm" /><HelpTOCNode Title="Headers Property " Url="html/P_Grpc_Core_CallOptions_Headers.htm" /><HelpTOCNode Title="PropagationToken Property " Url="html/P_Grpc_Core_CallOptions_PropagationToken.htm" /><HelpTOCNode Title="WriteOptions Property " Url="html/P_Grpc_Core_CallOptions_WriteOptions.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Channel.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Channel.xml
new file mode 100644
index 0000000000..3ccb9f7d5f
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Channel.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Channel Properties" Url="html/Properties_T_Grpc_Core_Channel.htm"><HelpTOCNode Title="ResolvedTarget Property " Url="html/P_Grpc_Core_Channel_ResolvedTarget.htm" /><HelpTOCNode Title="State Property " Url="html/P_Grpc_Core_Channel_State.htm" /><HelpTOCNode Title="Target Property " Url="html/P_Grpc_Core_Channel_Target.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ChannelOption.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ChannelOption.xml
new file mode 100644
index 0000000000..f5035d4b08
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ChannelOption.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ChannelOption Properties" Url="html/Properties_T_Grpc_Core_ChannelOption.htm"><HelpTOCNode Title="IntValue Property " Url="html/P_Grpc_Core_ChannelOption_IntValue.htm" /><HelpTOCNode Title="Name Property " Url="html/P_Grpc_Core_ChannelOption_Name.htm" /><HelpTOCNode Title="StringValue Property " Url="html/P_Grpc_Core_ChannelOption_StringValue.htm" /><HelpTOCNode Title="Type Property " Url="html/P_Grpc_Core_ChannelOption_Type.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ClientBase.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ClientBase.xml
new file mode 100644
index 0000000000..278b6d2dc7
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ClientBase.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ClientBase Properties" Url="html/Properties_T_Grpc_Core_ClientBase.htm"><HelpTOCNode Title="Channel Property " Url="html/P_Grpc_Core_ClientBase_Channel.htm" /><HelpTOCNode Title="HeaderInterceptor Property " Url="html/P_Grpc_Core_ClientBase_HeaderInterceptor.htm" /><HelpTOCNode Title="Host Property " Url="html/P_Grpc_Core_ClientBase_Host.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ContextPropagationOptions.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ContextPropagationOptions.xml
new file mode 100644
index 0000000000..f1c74ec514
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ContextPropagationOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ContextPropagationOptions Properties" Url="html/Properties_T_Grpc_Core_ContextPropagationOptions.htm"><HelpTOCNode Title="IsPropagateCancellation Property " Url="html/P_Grpc_Core_ContextPropagationOptions_IsPropagateCancellation.htm" /><HelpTOCNode Title="IsPropagateDeadline Property " Url="html/P_Grpc_Core_ContextPropagationOptions_IsPropagateDeadline.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Credentials.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Credentials.xml
new file mode 100644
index 0000000000..df6433582b
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Credentials.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Credentials Properties" Url="html/Properties_T_Grpc_Core_Credentials.htm"><HelpTOCNode Title="Insecure Property " Url="html/P_Grpc_Core_Credentials_Insecure.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_GrpcEnvironment.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_GrpcEnvironment.xml
new file mode 100644
index 0000000000..f817e180bb
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_GrpcEnvironment.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="GrpcEnvironment Properties" Url="html/Properties_T_Grpc_Core_GrpcEnvironment.htm"><HelpTOCNode Title="Logger Property " Url="html/P_Grpc_Core_GrpcEnvironment_Logger.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IAsyncStreamWriter_1.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IAsyncStreamWriter_1.xml
new file mode 100644
index 0000000000..6ef46a43fd
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IAsyncStreamWriter_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IAsyncStreamWriter(T) Properties" Url="html/Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm"><HelpTOCNode Title="WriteOptions Property " Url="html/P_Grpc_Core_IAsyncStreamWriter_1_WriteOptions.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IHasWriteOptions.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IHasWriteOptions.xml
new file mode 100644
index 0000000000..b80fa3a04c
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IHasWriteOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IHasWriteOptions Properties" Url="html/Properties_T_Grpc_Core_IHasWriteOptions.htm"><HelpTOCNode Title="WriteOptions Property " Url="html/P_Grpc_Core_IHasWriteOptions_WriteOptions.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IMethod.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IMethod.xml
new file mode 100644
index 0000000000..e51b6128a3
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_IMethod.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IMethod Properties" Url="html/Properties_T_Grpc_Core_IMethod.htm"><HelpTOCNode Title="FullName Property " Url="html/P_Grpc_Core_IMethod_FullName.htm" /><HelpTOCNode Title="Name Property " Url="html/P_Grpc_Core_IMethod_Name.htm" /><HelpTOCNode Title="ServiceName Property " Url="html/P_Grpc_Core_IMethod_ServiceName.htm" /><HelpTOCNode Title="Type Property " Url="html/P_Grpc_Core_IMethod_Type.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_KeyCertificatePair.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_KeyCertificatePair.xml
new file mode 100644
index 0000000000..597f979731
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_KeyCertificatePair.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="KeyCertificatePair Properties" Url="html/Properties_T_Grpc_Core_KeyCertificatePair.htm"><HelpTOCNode Title="CertificateChain Property " Url="html/P_Grpc_Core_KeyCertificatePair_CertificateChain.htm" /><HelpTOCNode Title="PrivateKey Property " Url="html/P_Grpc_Core_KeyCertificatePair_PrivateKey.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Marshaller_1.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Marshaller_1.xml
new file mode 100644
index 0000000000..5523dadcbe
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Marshaller_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Marshaller(T) Properties" Url="html/Properties_T_Grpc_Core_Marshaller_1.htm"><HelpTOCNode Title="Deserializer Property " Url="html/P_Grpc_Core_Marshaller_1_Deserializer.htm" /><HelpTOCNode Title="Serializer Property " Url="html/P_Grpc_Core_Marshaller_1_Serializer.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Marshallers.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Marshallers.xml
new file mode 100644
index 0000000000..996f6e7010
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Marshallers.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Marshallers Properties" Url="html/Properties_T_Grpc_Core_Marshallers.htm"><HelpTOCNode Title="StringMarshaller Property " Url="html/P_Grpc_Core_Marshallers_StringMarshaller.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Metadata.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Metadata.xml
new file mode 100644
index 0000000000..ddafcbeef7
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Metadata.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Metadata Properties" Url="html/Properties_T_Grpc_Core_Metadata.htm"><HelpTOCNode Title="Count Property " Url="html/P_Grpc_Core_Metadata_Count.htm" /><HelpTOCNode Title="IsReadOnly Property " Url="html/P_Grpc_Core_Metadata_IsReadOnly.htm" /><HelpTOCNode Title="Item Property " Url="html/P_Grpc_Core_Metadata_Item.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Metadata_Entry.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Metadata_Entry.xml
new file mode 100644
index 0000000000..6259d4a1cf
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Metadata_Entry.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Entry Properties" Url="html/Properties_T_Grpc_Core_Metadata_Entry.htm"><HelpTOCNode Title="IsBinary Property " Url="html/P_Grpc_Core_Metadata_Entry_IsBinary.htm" /><HelpTOCNode Title="Key Property " Url="html/P_Grpc_Core_Metadata_Entry_Key.htm" /><HelpTOCNode Title="Value Property " Url="html/P_Grpc_Core_Metadata_Entry_Value.htm" /><HelpTOCNode Title="ValueBytes Property " Url="html/P_Grpc_Core_Metadata_Entry_ValueBytes.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Method_2.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Method_2.xml
new file mode 100644
index 0000000000..8159031392
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Method_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Method(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_Method_2.htm"><HelpTOCNode Title="FullName Property " Url="html/P_Grpc_Core_Method_2_FullName.htm" /><HelpTOCNode Title="Name Property " Url="html/P_Grpc_Core_Method_2_Name.htm" /><HelpTOCNode Title="RequestMarshaller Property " Url="html/P_Grpc_Core_Method_2_RequestMarshaller.htm" /><HelpTOCNode Title="ResponseMarshaller Property " Url="html/P_Grpc_Core_Method_2_ResponseMarshaller.htm" /><HelpTOCNode Title="ServiceName Property " Url="html/P_Grpc_Core_Method_2_ServiceName.htm" /><HelpTOCNode Title="Type Property " Url="html/P_Grpc_Core_Method_2_Type.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_RpcException.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_RpcException.xml
new file mode 100644
index 0000000000..5c154e6deb
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_RpcException.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="RpcException Properties" Url="html/Properties_T_Grpc_Core_RpcException.htm"><HelpTOCNode Title="Status Property " Url="html/P_Grpc_Core_RpcException_Status.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Server.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Server.xml
new file mode 100644
index 0000000000..6088ffd72d
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Server.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Server Properties" Url="html/Properties_T_Grpc_Core_Server.htm"><HelpTOCNode Title="Ports Property " Url="html/P_Grpc_Core_Server_Ports.htm" /><HelpTOCNode Title="Services Property " Url="html/P_Grpc_Core_Server_Services.htm" /><HelpTOCNode Title="ShutdownTask Property " Url="html/P_Grpc_Core_Server_ShutdownTask.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerCallContext.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerCallContext.xml
new file mode 100644
index 0000000000..4c22ae168b
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerCallContext.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerCallContext Properties" Url="html/Properties_T_Grpc_Core_ServerCallContext.htm"><HelpTOCNode Title="CancellationToken Property " Url="html/P_Grpc_Core_ServerCallContext_CancellationToken.htm" /><HelpTOCNode Title="Deadline Property " Url="html/P_Grpc_Core_ServerCallContext_Deadline.htm" /><HelpTOCNode Title="Host Property " Url="html/P_Grpc_Core_ServerCallContext_Host.htm" /><HelpTOCNode Title="Method Property " Url="html/P_Grpc_Core_ServerCallContext_Method.htm" /><HelpTOCNode Title="Peer Property " Url="html/P_Grpc_Core_ServerCallContext_Peer.htm" /><HelpTOCNode Title="RequestHeaders Property " Url="html/P_Grpc_Core_ServerCallContext_RequestHeaders.htm" /><HelpTOCNode Title="ResponseTrailers Property " Url="html/P_Grpc_Core_ServerCallContext_ResponseTrailers.htm" /><HelpTOCNode Title="Status Property " Url="html/P_Grpc_Core_ServerCallContext_Status.htm" /><HelpTOCNode Title="WriteOptions Property " Url="html/P_Grpc_Core_ServerCallContext_WriteOptions.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerCredentials.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerCredentials.xml
new file mode 100644
index 0000000000..9fc1b103c1
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerCredentials.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerCredentials Properties" Url="html/Properties_T_Grpc_Core_ServerCredentials.htm"><HelpTOCNode Title="Insecure Property " Url="html/P_Grpc_Core_ServerCredentials_Insecure.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerPort.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerPort.xml
new file mode 100644
index 0000000000..0613dc659a
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_ServerPort.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerPort Properties" Url="html/Properties_T_Grpc_Core_ServerPort.htm"><HelpTOCNode Title="BoundPort Property " Url="html/P_Grpc_Core_ServerPort_BoundPort.htm" /><HelpTOCNode Title="Credentials Property " Url="html/P_Grpc_Core_ServerPort_Credentials.htm" /><HelpTOCNode Title="Host Property " Url="html/P_Grpc_Core_ServerPort_Host.htm" /><HelpTOCNode Title="Port Property " Url="html/P_Grpc_Core_ServerPort_Port.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_SslCredentials.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_SslCredentials.xml
new file mode 100644
index 0000000000..b789111c5a
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_SslCredentials.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="SslCredentials Properties" Url="html/Properties_T_Grpc_Core_SslCredentials.htm"><HelpTOCNode Title="KeyCertificatePair Property " Url="html/P_Grpc_Core_SslCredentials_KeyCertificatePair.htm" /><HelpTOCNode Title="RootCertificates Property " Url="html/P_Grpc_Core_SslCredentials_RootCertificates.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_SslServerCredentials.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_SslServerCredentials.xml
new file mode 100644
index 0000000000..35284d68fc
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_SslServerCredentials.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="SslServerCredentials Properties" Url="html/Properties_T_Grpc_Core_SslServerCredentials.htm"><HelpTOCNode Title="ForceClientAuthentication Property " Url="html/P_Grpc_Core_SslServerCredentials_ForceClientAuthentication.htm" /><HelpTOCNode Title="KeyCertificatePairs Property " Url="html/P_Grpc_Core_SslServerCredentials_KeyCertificatePairs.htm" /><HelpTOCNode Title="RootCertificates Property " Url="html/P_Grpc_Core_SslServerCredentials_RootCertificates.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Status.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Status.xml
new file mode 100644
index 0000000000..030c8d044a
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_Status.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Status Properties" Url="html/Properties_T_Grpc_Core_Status.htm"><HelpTOCNode Title="Detail Property " Url="html/P_Grpc_Core_Status_Detail.htm" /><HelpTOCNode Title="StatusCode Property " Url="html/P_Grpc_Core_Status_StatusCode.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_WriteOptions.xml b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_WriteOptions.xml
new file mode 100644
index 0000000000..922857669d
--- /dev/null
+++ b/doc/ref/csharp/html/toc/Properties_T_Grpc_Core_WriteOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="WriteOptions Properties" Url="html/Properties_T_Grpc_Core_WriteOptions.htm"><HelpTOCNode Title="Flags Property " Url="html/P_Grpc_Core_WriteOptions_Flags.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/R_Project_Documentation.xml b/doc/ref/csharp/html/toc/R_Project_Documentation.xml
new file mode 100644
index 0000000000..e8895fc2f0
--- /dev/null
+++ b/doc/ref/csharp/html/toc/R_Project_Documentation.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Namespaces" Url="html/R_Project_Documentation.htm"><HelpTOCNode Title="Grpc.Auth" Url="html/N_Grpc_Auth.htm" HasChildren="true" /><HelpTOCNode Title="Grpc.Core" Url="html/N_Grpc_Core.htm" HasChildren="true" /><HelpTOCNode Title="Grpc.Core.Logging" Url="html/N_Grpc_Core_Logging.htm" HasChildren="true" /><HelpTOCNode Title="Grpc.Core.Utils" Url="html/N_Grpc_Core_Utils.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Auth_AuthInterceptors.xml b/doc/ref/csharp/html/toc/T_Grpc_Auth_AuthInterceptors.xml
new file mode 100644
index 0000000000..2e934b724a
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Auth_AuthInterceptors.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AuthInterceptors Class" Url="html/T_Grpc_Auth_AuthInterceptors.htm"><HelpTOCNode Title="AuthInterceptors Methods" Url="html/Methods_T_Grpc_Auth_AuthInterceptors.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncClientStreamingCall_2.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncClientStreamingCall_2.xml
new file mode 100644
index 0000000000..19a77d8a7e
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncClientStreamingCall_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncClientStreamingCall(TRequest, TResponse) Class" Url="html/T_Grpc_Core_AsyncClientStreamingCall_2.htm"><HelpTOCNode Title="AsyncClientStreamingCall(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncClientStreamingCall_2.htm" HasChildren="true" /><HelpTOCNode Title="AsyncClientStreamingCall(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncClientStreamingCall_2.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncDuplexStreamingCall_2.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncDuplexStreamingCall_2.xml
new file mode 100644
index 0000000000..7fc7215862
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncDuplexStreamingCall_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncDuplexStreamingCall(TRequest, TResponse) Class" Url="html/T_Grpc_Core_AsyncDuplexStreamingCall_2.htm"><HelpTOCNode Title="AsyncDuplexStreamingCall(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" HasChildren="true" /><HelpTOCNode Title="AsyncDuplexStreamingCall(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncDuplexStreamingCall_2.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncServerStreamingCall_1.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncServerStreamingCall_1.xml
new file mode 100644
index 0000000000..ef66bf5b86
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncServerStreamingCall_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncServerStreamingCall(TResponse) Class" Url="html/T_Grpc_Core_AsyncServerStreamingCall_1.htm"><HelpTOCNode Title="AsyncServerStreamingCall(TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncServerStreamingCall_1.htm" HasChildren="true" /><HelpTOCNode Title="AsyncServerStreamingCall(TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncServerStreamingCall_1.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncUnaryCall_1.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncUnaryCall_1.xml
new file mode 100644
index 0000000000..23b4b52b7f
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_AsyncUnaryCall_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncUnaryCall(TResponse) Class" Url="html/T_Grpc_Core_AsyncUnaryCall_1.htm"><HelpTOCNode Title="AsyncUnaryCall(TResponse) Properties" Url="html/Properties_T_Grpc_Core_AsyncUnaryCall_1.htm" HasChildren="true" /><HelpTOCNode Title="AsyncUnaryCall(TResponse) Methods" Url="html/Methods_T_Grpc_Core_AsyncUnaryCall_1.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_CallInvocationDetails_2.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_CallInvocationDetails_2.xml
new file mode 100644
index 0000000000..58b3de4887
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_CallInvocationDetails_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Structure" Url="html/T_Grpc_Core_CallInvocationDetails_2.htm"><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Constructor " Url="html/Overload_Grpc_Core_CallInvocationDetails_2__ctor.htm" HasChildren="true" /><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_CallInvocationDetails_2.htm" HasChildren="true" /><HelpTOCNode Title="CallInvocationDetails(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_CallInvocationDetails_2.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_CallOptions.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_CallOptions.xml
new file mode 100644
index 0000000000..37363c4d4a
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_CallOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="CallOptions Structure" Url="html/T_Grpc_Core_CallOptions.htm"><HelpTOCNode Title="CallOptions Constructor " Url="html/M_Grpc_Core_CallOptions__ctor.htm" /><HelpTOCNode Title="CallOptions Properties" Url="html/Properties_T_Grpc_Core_CallOptions.htm" HasChildren="true" /><HelpTOCNode Title="CallOptions Methods" Url="html/Methods_T_Grpc_Core_CallOptions.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Calls.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Calls.xml
new file mode 100644
index 0000000000..a311abaf98
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Calls.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Calls Class" Url="html/T_Grpc_Core_Calls.htm"><HelpTOCNode Title="Calls Methods" Url="html/Methods_T_Grpc_Core_Calls.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Channel.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Channel.xml
new file mode 100644
index 0000000000..6b1861dced
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Channel.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Channel Class" Url="html/T_Grpc_Core_Channel.htm"><HelpTOCNode Title="Channel Constructor " Url="html/Overload_Grpc_Core_Channel__ctor.htm" HasChildren="true" /><HelpTOCNode Title="Channel Properties" Url="html/Properties_T_Grpc_Core_Channel.htm" HasChildren="true" /><HelpTOCNode Title="Channel Methods" Url="html/Methods_T_Grpc_Core_Channel.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_ChannelOption.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_ChannelOption.xml
new file mode 100644
index 0000000000..5d862e65a0
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_ChannelOption.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ChannelOption Class" Url="html/T_Grpc_Core_ChannelOption.htm"><HelpTOCNode Title="ChannelOption Constructor " Url="html/Overload_Grpc_Core_ChannelOption__ctor.htm" HasChildren="true" /><HelpTOCNode Title="ChannelOption Properties" Url="html/Properties_T_Grpc_Core_ChannelOption.htm" HasChildren="true" /><HelpTOCNode Title="ChannelOption Methods" Url="html/Methods_T_Grpc_Core_ChannelOption.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_ChannelOptions.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_ChannelOptions.xml
new file mode 100644
index 0000000000..691797e6cf
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_ChannelOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ChannelOptions Class" Url="html/T_Grpc_Core_ChannelOptions.htm"><HelpTOCNode Title="ChannelOptions Fields" Url="html/Fields_T_Grpc_Core_ChannelOptions.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_ClientBase.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_ClientBase.xml
new file mode 100644
index 0000000000..349238f4ca
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_ClientBase.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ClientBase Class" Url="html/T_Grpc_Core_ClientBase.htm"><HelpTOCNode Title="ClientBase Constructor " Url="html/M_Grpc_Core_ClientBase__ctor.htm" /><HelpTOCNode Title="ClientBase Properties" Url="html/Properties_T_Grpc_Core_ClientBase.htm" HasChildren="true" /><HelpTOCNode Title="ClientBase Methods" Url="html/Methods_T_Grpc_Core_ClientBase.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_ContextPropagationOptions.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_ContextPropagationOptions.xml
new file mode 100644
index 0000000000..6405e3d2f2
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_ContextPropagationOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ContextPropagationOptions Class" Url="html/T_Grpc_Core_ContextPropagationOptions.htm"><HelpTOCNode Title="ContextPropagationOptions Constructor " Url="html/M_Grpc_Core_ContextPropagationOptions__ctor.htm" /><HelpTOCNode Title="ContextPropagationOptions Properties" Url="html/Properties_T_Grpc_Core_ContextPropagationOptions.htm" HasChildren="true" /><HelpTOCNode Title="ContextPropagationOptions Methods" Url="html/Methods_T_Grpc_Core_ContextPropagationOptions.htm" /><HelpTOCNode Title="ContextPropagationOptions Fields" Url="html/Fields_T_Grpc_Core_ContextPropagationOptions.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_ContextPropagationToken.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_ContextPropagationToken.xml
new file mode 100644
index 0000000000..9425beff5f
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_ContextPropagationToken.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ContextPropagationToken Class" Url="html/T_Grpc_Core_ContextPropagationToken.htm"><HelpTOCNode Title="ContextPropagationToken Methods" Url="html/Methods_T_Grpc_Core_ContextPropagationToken.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Credentials.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Credentials.xml
new file mode 100644
index 0000000000..bbac8193ba
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Credentials.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Credentials Class" Url="html/T_Grpc_Core_Credentials.htm"><HelpTOCNode Title="Credentials Constructor " Url="html/M_Grpc_Core_Credentials__ctor.htm" /><HelpTOCNode Title="Credentials Properties" Url="html/Properties_T_Grpc_Core_Credentials.htm" HasChildren="true" /><HelpTOCNode Title="Credentials Methods" Url="html/Methods_T_Grpc_Core_Credentials.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_GrpcEnvironment.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_GrpcEnvironment.xml
new file mode 100644
index 0000000000..bbd474189b
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_GrpcEnvironment.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="GrpcEnvironment Class" Url="html/T_Grpc_Core_GrpcEnvironment.htm"><HelpTOCNode Title="GrpcEnvironment Properties" Url="html/Properties_T_Grpc_Core_GrpcEnvironment.htm" HasChildren="true" /><HelpTOCNode Title="GrpcEnvironment Methods" Url="html/Methods_T_Grpc_Core_GrpcEnvironment.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_IAsyncStreamReader_1.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_IAsyncStreamReader_1.xml
new file mode 100644
index 0000000000..b055c910a6
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_IAsyncStreamReader_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IAsyncStreamReader(T) Interface" Url="html/T_Grpc_Core_IAsyncStreamReader_1.htm"><HelpTOCNode Title="IAsyncStreamReader(T) Properties" Url="html/Properties_T_Grpc_Core_IAsyncStreamReader_1.htm" /><HelpTOCNode Title="IAsyncStreamReader(T) Methods" Url="html/Methods_T_Grpc_Core_IAsyncStreamReader_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_IAsyncStreamWriter_1.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_IAsyncStreamWriter_1.xml
new file mode 100644
index 0000000000..a9b94b5e9a
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_IAsyncStreamWriter_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IAsyncStreamWriter(T) Interface" Url="html/T_Grpc_Core_IAsyncStreamWriter_1.htm"><HelpTOCNode Title="IAsyncStreamWriter(T) Properties" Url="html/Properties_T_Grpc_Core_IAsyncStreamWriter_1.htm" HasChildren="true" /><HelpTOCNode Title="IAsyncStreamWriter(T) Methods" Url="html/Methods_T_Grpc_Core_IAsyncStreamWriter_1.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_IClientStreamWriter_1.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_IClientStreamWriter_1.xml
new file mode 100644
index 0000000000..fda5e1d490
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_IClientStreamWriter_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IClientStreamWriter(T) Interface" Url="html/T_Grpc_Core_IClientStreamWriter_1.htm"><HelpTOCNode Title="IClientStreamWriter(T) Properties" Url="html/Properties_T_Grpc_Core_IClientStreamWriter_1.htm" /><HelpTOCNode Title="IClientStreamWriter(T) Methods" Url="html/Methods_T_Grpc_Core_IClientStreamWriter_1.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_IHasWriteOptions.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_IHasWriteOptions.xml
new file mode 100644
index 0000000000..b5cdd29aaa
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_IHasWriteOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IHasWriteOptions Interface" Url="html/T_Grpc_Core_IHasWriteOptions.htm"><HelpTOCNode Title="IHasWriteOptions Properties" Url="html/Properties_T_Grpc_Core_IHasWriteOptions.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_IMethod.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_IMethod.xml
new file mode 100644
index 0000000000..81f2616049
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_IMethod.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IMethod Interface" Url="html/T_Grpc_Core_IMethod.htm"><HelpTOCNode Title="IMethod Properties" Url="html/Properties_T_Grpc_Core_IMethod.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_IServerStreamWriter_1.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_IServerStreamWriter_1.xml
new file mode 100644
index 0000000000..ecd55220fd
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_IServerStreamWriter_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="IServerStreamWriter(T) Interface" Url="html/T_Grpc_Core_IServerStreamWriter_1.htm"><HelpTOCNode Title="IServerStreamWriter(T) Properties" Url="html/Properties_T_Grpc_Core_IServerStreamWriter_1.htm" /><HelpTOCNode Title="IServerStreamWriter(T) Methods" Url="html/Methods_T_Grpc_Core_IServerStreamWriter_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_KeyCertificatePair.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_KeyCertificatePair.xml
new file mode 100644
index 0000000000..3bc56c00af
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_KeyCertificatePair.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="KeyCertificatePair Class" Url="html/T_Grpc_Core_KeyCertificatePair.htm"><HelpTOCNode Title="KeyCertificatePair Constructor " Url="html/M_Grpc_Core_KeyCertificatePair__ctor.htm" /><HelpTOCNode Title="KeyCertificatePair Properties" Url="html/Properties_T_Grpc_Core_KeyCertificatePair.htm" HasChildren="true" /><HelpTOCNode Title="KeyCertificatePair Methods" Url="html/Methods_T_Grpc_Core_KeyCertificatePair.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Logging_ConsoleLogger.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Logging_ConsoleLogger.xml
new file mode 100644
index 0000000000..18b5fb4340
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Logging_ConsoleLogger.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ConsoleLogger Class" Url="html/T_Grpc_Core_Logging_ConsoleLogger.htm"><HelpTOCNode Title="ConsoleLogger Constructor " Url="html/M_Grpc_Core_Logging_ConsoleLogger__ctor.htm" /><HelpTOCNode Title="ConsoleLogger Methods" Url="html/Methods_T_Grpc_Core_Logging_ConsoleLogger.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Logging_ILogger.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Logging_ILogger.xml
new file mode 100644
index 0000000000..f49a352d99
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Logging_ILogger.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ILogger Interface" Url="html/T_Grpc_Core_Logging_ILogger.htm"><HelpTOCNode Title="ILogger Methods" Url="html/Methods_T_Grpc_Core_Logging_ILogger.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Marshaller_1.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Marshaller_1.xml
new file mode 100644
index 0000000000..7a41e05188
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Marshaller_1.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Marshaller(T) Structure" Url="html/T_Grpc_Core_Marshaller_1.htm"><HelpTOCNode Title="Marshaller(T) Constructor " Url="html/M_Grpc_Core_Marshaller_1__ctor.htm" /><HelpTOCNode Title="Marshaller(T) Properties" Url="html/Properties_T_Grpc_Core_Marshaller_1.htm" HasChildren="true" /><HelpTOCNode Title="Marshaller(T) Methods" Url="html/Methods_T_Grpc_Core_Marshaller_1.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Marshallers.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Marshallers.xml
new file mode 100644
index 0000000000..e6cb53d987
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Marshallers.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Marshallers Class" Url="html/T_Grpc_Core_Marshallers.htm"><HelpTOCNode Title="Marshallers Properties" Url="html/Properties_T_Grpc_Core_Marshallers.htm" HasChildren="true" /><HelpTOCNode Title="Marshallers Methods" Url="html/Methods_T_Grpc_Core_Marshallers.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Metadata.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Metadata.xml
new file mode 100644
index 0000000000..c1fa355265
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Metadata.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Metadata Class" Url="html/T_Grpc_Core_Metadata.htm"><HelpTOCNode Title="Metadata Constructor " Url="html/M_Grpc_Core_Metadata__ctor.htm" /><HelpTOCNode Title="Metadata Properties" Url="html/Properties_T_Grpc_Core_Metadata.htm" HasChildren="true" /><HelpTOCNode Title="Metadata Methods" Url="html/Methods_T_Grpc_Core_Metadata.htm" HasChildren="true" /><HelpTOCNode Title="Metadata Fields" Url="html/Fields_T_Grpc_Core_Metadata.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Metadata_Entry.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Metadata_Entry.xml
new file mode 100644
index 0000000000..e3b05189aa
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Metadata_Entry.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Metadata.Entry Structure" Url="html/T_Grpc_Core_Metadata_Entry.htm"><HelpTOCNode Title="Entry Constructor " Url="html/Overload_Grpc_Core_Metadata_Entry__ctor.htm" HasChildren="true" /><HelpTOCNode Title="Entry Properties" Url="html/Properties_T_Grpc_Core_Metadata_Entry.htm" HasChildren="true" /><HelpTOCNode Title="Entry Methods" Url="html/Methods_T_Grpc_Core_Metadata_Entry.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Method_2.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Method_2.xml
new file mode 100644
index 0000000000..2e4329d5ff
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Method_2.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Method(TRequest, TResponse) Class" Url="html/T_Grpc_Core_Method_2.htm"><HelpTOCNode Title="Method(TRequest, TResponse) Constructor " Url="html/M_Grpc_Core_Method_2__ctor.htm" /><HelpTOCNode Title="Method(TRequest, TResponse) Properties" Url="html/Properties_T_Grpc_Core_Method_2.htm" HasChildren="true" /><HelpTOCNode Title="Method(TRequest, TResponse) Methods" Url="html/Methods_T_Grpc_Core_Method_2.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_RpcException.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_RpcException.xml
new file mode 100644
index 0000000000..d97a369043
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_RpcException.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="RpcException Class" Url="html/T_Grpc_Core_RpcException.htm"><HelpTOCNode Title="RpcException Constructor " Url="html/Overload_Grpc_Core_RpcException__ctor.htm" HasChildren="true" /><HelpTOCNode Title="RpcException Properties" Url="html/Properties_T_Grpc_Core_RpcException.htm" HasChildren="true" /><HelpTOCNode Title="RpcException Methods" Url="html/Methods_T_Grpc_Core_RpcException.htm" /><HelpTOCNode Title="RpcException Events" Url="html/Events_T_Grpc_Core_RpcException.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Server.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Server.xml
new file mode 100644
index 0000000000..78e807def0
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Server.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Server Class" Url="html/T_Grpc_Core_Server.htm"><HelpTOCNode Title="Server Constructor " Url="html/M_Grpc_Core_Server__ctor.htm" /><HelpTOCNode Title="Server Properties" Url="html/Properties_T_Grpc_Core_Server.htm" HasChildren="true" /><HelpTOCNode Title="Server Methods" Url="html/Methods_T_Grpc_Core_Server.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_ServerCallContext.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_ServerCallContext.xml
new file mode 100644
index 0000000000..96856689c4
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_ServerCallContext.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerCallContext Class" Url="html/T_Grpc_Core_ServerCallContext.htm"><HelpTOCNode Title="ServerCallContext Properties" Url="html/Properties_T_Grpc_Core_ServerCallContext.htm" HasChildren="true" /><HelpTOCNode Title="ServerCallContext Methods" Url="html/Methods_T_Grpc_Core_ServerCallContext.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_ServerCredentials.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_ServerCredentials.xml
new file mode 100644
index 0000000000..b7d878f586
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_ServerCredentials.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerCredentials Class" Url="html/T_Grpc_Core_ServerCredentials.htm"><HelpTOCNode Title="ServerCredentials Constructor " Url="html/M_Grpc_Core_ServerCredentials__ctor.htm" /><HelpTOCNode Title="ServerCredentials Properties" Url="html/Properties_T_Grpc_Core_ServerCredentials.htm" HasChildren="true" /><HelpTOCNode Title="ServerCredentials Methods" Url="html/Methods_T_Grpc_Core_ServerCredentials.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_ServerPort.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_ServerPort.xml
new file mode 100644
index 0000000000..63cd6b4093
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_ServerPort.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerPort Class" Url="html/T_Grpc_Core_ServerPort.htm"><HelpTOCNode Title="ServerPort Constructor " Url="html/M_Grpc_Core_ServerPort__ctor.htm" /><HelpTOCNode Title="ServerPort Properties" Url="html/Properties_T_Grpc_Core_ServerPort.htm" HasChildren="true" /><HelpTOCNode Title="ServerPort Methods" Url="html/Methods_T_Grpc_Core_ServerPort.htm" /><HelpTOCNode Title="ServerPort Fields" Url="html/Fields_T_Grpc_Core_ServerPort.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_ServerServiceDefinition.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_ServerServiceDefinition.xml
new file mode 100644
index 0000000000..ec30762d32
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_ServerServiceDefinition.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerServiceDefinition Class" Url="html/T_Grpc_Core_ServerServiceDefinition.htm"><HelpTOCNode Title="ServerServiceDefinition Methods" Url="html/Methods_T_Grpc_Core_ServerServiceDefinition.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_ServerServiceDefinition_Builder.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_ServerServiceDefinition_Builder.xml
new file mode 100644
index 0000000000..0641ac30d9
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_ServerServiceDefinition_Builder.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="ServerServiceDefinition.Builder Class" Url="html/T_Grpc_Core_ServerServiceDefinition_Builder.htm"><HelpTOCNode Title="ServerServiceDefinition.Builder Constructor " Url="html/M_Grpc_Core_ServerServiceDefinition_Builder__ctor.htm" /><HelpTOCNode Title="Builder Methods" Url="html/Methods_T_Grpc_Core_ServerServiceDefinition_Builder.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Server_ServerPortCollection.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Server_ServerPortCollection.xml
new file mode 100644
index 0000000000..9a704ffdf5
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Server_ServerPortCollection.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Server.ServerPortCollection Class" Url="html/T_Grpc_Core_Server_ServerPortCollection.htm"><HelpTOCNode Title="ServerPortCollection Methods" Url="html/Methods_T_Grpc_Core_Server_ServerPortCollection.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Server_ServiceDefinitionCollection.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Server_ServiceDefinitionCollection.xml
new file mode 100644
index 0000000000..e9d7768402
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Server_ServiceDefinitionCollection.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Server.ServiceDefinitionCollection Class" Url="html/T_Grpc_Core_Server_ServiceDefinitionCollection.htm"><HelpTOCNode Title="ServiceDefinitionCollection Methods" Url="html/Methods_T_Grpc_Core_Server_ServiceDefinitionCollection.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_SslCredentials.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_SslCredentials.xml
new file mode 100644
index 0000000000..bb0f2a98ab
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_SslCredentials.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="SslCredentials Class" Url="html/T_Grpc_Core_SslCredentials.htm"><HelpTOCNode Title="SslCredentials Constructor " Url="html/Overload_Grpc_Core_SslCredentials__ctor.htm" HasChildren="true" /><HelpTOCNode Title="SslCredentials Properties" Url="html/Properties_T_Grpc_Core_SslCredentials.htm" HasChildren="true" /><HelpTOCNode Title="SslCredentials Methods" Url="html/Methods_T_Grpc_Core_SslCredentials.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_SslServerCredentials.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_SslServerCredentials.xml
new file mode 100644
index 0000000000..fa3e0f8425
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_SslServerCredentials.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="SslServerCredentials Class" Url="html/T_Grpc_Core_SslServerCredentials.htm"><HelpTOCNode Title="SslServerCredentials Constructor " Url="html/Overload_Grpc_Core_SslServerCredentials__ctor.htm" HasChildren="true" /><HelpTOCNode Title="SslServerCredentials Properties" Url="html/Properties_T_Grpc_Core_SslServerCredentials.htm" HasChildren="true" /><HelpTOCNode Title="SslServerCredentials Methods" Url="html/Methods_T_Grpc_Core_SslServerCredentials.htm" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Status.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Status.xml
new file mode 100644
index 0000000000..d1bc2943a0
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Status.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Status Structure" Url="html/T_Grpc_Core_Status.htm"><HelpTOCNode Title="Status Constructor " Url="html/M_Grpc_Core_Status__ctor.htm" /><HelpTOCNode Title="Status Properties" Url="html/Properties_T_Grpc_Core_Status.htm" HasChildren="true" /><HelpTOCNode Title="Status Methods" Url="html/Methods_T_Grpc_Core_Status.htm" HasChildren="true" /><HelpTOCNode Title="Status Fields" Url="html/Fields_T_Grpc_Core_Status.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Utils_AsyncStreamExtensions.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Utils_AsyncStreamExtensions.xml
new file mode 100644
index 0000000000..c581425d37
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Utils_AsyncStreamExtensions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="AsyncStreamExtensions Class" Url="html/T_Grpc_Core_Utils_AsyncStreamExtensions.htm"><HelpTOCNode Title="AsyncStreamExtensions Methods" Url="html/Methods_T_Grpc_Core_Utils_AsyncStreamExtensions.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Utils_BenchmarkUtil.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Utils_BenchmarkUtil.xml
new file mode 100644
index 0000000000..cb5d367aa3
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Utils_BenchmarkUtil.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="BenchmarkUtil Class" Url="html/T_Grpc_Core_Utils_BenchmarkUtil.htm"><HelpTOCNode Title="BenchmarkUtil Methods" Url="html/Methods_T_Grpc_Core_Utils_BenchmarkUtil.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_Utils_Preconditions.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_Utils_Preconditions.xml
new file mode 100644
index 0000000000..192b0257e2
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_Utils_Preconditions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="Preconditions Class" Url="html/T_Grpc_Core_Utils_Preconditions.htm"><HelpTOCNode Title="Preconditions Methods" Url="html/Methods_T_Grpc_Core_Utils_Preconditions.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_VersionInfo.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_VersionInfo.xml
new file mode 100644
index 0000000000..283cbbb83e
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_VersionInfo.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="VersionInfo Class" Url="html/T_Grpc_Core_VersionInfo.htm"><HelpTOCNode Title="VersionInfo Fields" Url="html/Fields_T_Grpc_Core_VersionInfo.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/T_Grpc_Core_WriteOptions.xml b/doc/ref/csharp/html/toc/T_Grpc_Core_WriteOptions.xml
new file mode 100644
index 0000000000..5dcda42dc0
--- /dev/null
+++ b/doc/ref/csharp/html/toc/T_Grpc_Core_WriteOptions.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOCNode Title="WriteOptions Class" Url="html/T_Grpc_Core_WriteOptions.htm"><HelpTOCNode Title="WriteOptions Constructor " Url="html/M_Grpc_Core_WriteOptions__ctor.htm" /><HelpTOCNode Title="WriteOptions Properties" Url="html/Properties_T_Grpc_Core_WriteOptions.htm" HasChildren="true" /><HelpTOCNode Title="WriteOptions Methods" Url="html/Methods_T_Grpc_Core_WriteOptions.htm" /><HelpTOCNode Title="WriteOptions Fields" Url="html/Fields_T_Grpc_Core_WriteOptions.htm" HasChildren="true" /></HelpTOCNode> \ No newline at end of file
diff --git a/doc/ref/csharp/html/toc/roottoc.xml b/doc/ref/csharp/html/toc/roottoc.xml
new file mode 100644
index 0000000000..e5d2703f77
--- /dev/null
+++ b/doc/ref/csharp/html/toc/roottoc.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8"?><HelpTOC><HelpTOCNode Title="Namespaces" Url="html/R_Project_Documentation.htm" HasChildren="true" /></HelpTOC> \ No newline at end of file
diff --git a/examples/README.md b/examples/README.md
new file mode 100644
index 0000000000..6465115e18
--- /dev/null
+++ b/examples/README.md
@@ -0,0 +1,450 @@
+
+# Getting started
+
+Welcome to the developer documentation for gRPC, a language-neutral,
+platform-neutral remote procedure call (RPC) system developed at Google.
+
+This document introduces you to gRPC with a quick overview and a simple
+Hello World example. You'll find more tutorials and reference docs in this repository - more documentation is coming soon!
+
+<a name="quickstart"></a>
+## Quick start
+You can find quick start guides for each language, including installation instructions, examples, and tutorials here:
+* [C++](examples/cpp)
+* [Java](https://github.com/grpc/grpc-java/tree/master/examples)
+* [Go](https://github.com/grpc/grpc-go/tree/master/examples)
+* [Ruby](examples/ruby)
+* [Node.js](examples/node)
+* [Android Java](examples/java/android)
+* [Python](examples/python/helloworld)
+* [C#](examples/csharp)
+* [Objective-C](examples/objective-c/route_guide)
+* [PHP](examples/php)
+
+## What's in this repository?
+
+The `examples` directory contains documentation, resources, and examples
+for all gRPC users. You can find examples and instructions specific to your
+favourite language in the relevant subdirectory.
+
+You can find out about the gRPC source code repositories in
+[`grpc`](https://github.com/grpc/grpc). Each repository provides instructions
+for building the appropriate libraries for your language.
+
+
+## What is gRPC?
+
+In gRPC a *client* application can directly call
+methods on a *server* application on a different machine as if it was a
+local object, making it easier for you to create distributed applications and
+services. As in many RPC systems, gRPC is based around the idea of defining
+a *service*, specifying the methods that can be called remotely with their
+parameters and return types. On the server side, the server implements this
+interface and runs a gRPC server to handle client calls. On the client side,
+the client has a *stub* that provides exactly the same methods as the server.
+
+<!--TODO: diagram-->
+
+gRPC clients and servers can run and talk to each other in a variety of
+environments - from servers inside Google to your own desktop - and can
+be written in any of gRPC's [supported languages](#quickstart). So, for
+example, you can easily create a gRPC server in Java with clients in Go,
+Python, or Ruby. In addition, the latest Google APIs will have gRPC versions
+of their interfaces, letting you easily build Google functionality into
+your applications.
+
+<a name="protocolbuffers"></a>
+### Working with protocol buffers
+
+By default gRPC uses *protocol buffers*, Google’s
+mature open source mechanism for serializing structured data (although it
+can be used with other data formats such as JSON). As you'll
+see in our example below, you define gRPC services using *proto files*,
+with method parameters and return types specified as protocol buffer message
+types. You
+can find out lots more about protocol buffers in the [Protocol Buffers
+documentation](https://developers.google.com/protocol-buffers/docs/overview).
+
+#### Protocol buffer versions
+
+While protocol buffers have been available for open source users for some
+time, our examples use a new flavour of protocol buffers called proto3,
+which has a slightly simplified syntax, some useful new features, and supports
+lots more languages. This is currently available as an alpha release in
+Java, C++, Java_nano (Android Java), Python, and Ruby from [the protocol buffers Github
+repo](https://github.com/google/protobuf/releases), as well as a Go language
+generator from [the golang/protobuf Github repo](https://github.com/golang/protobuf), with more languages in development. You can find out more in the [proto3 language guide](https://developers.google.com/protocol-buffers/docs/proto3), and see
+the major differences from the current default version in the [release notes](https://github.com/google/protobuf/releases). More proto3 documentation is coming soon.
+
+In general, while you *can* use proto2 (the current default protocol buffers version), we recommend that you use proto3 with gRPC as it lets you use the full range of gRPC-supported languages, as well as avoiding compatibility
+issues with proto2 clients talking to proto3 servers and vice versa.
+
+<a name="hello"></a>
+## Hello gRPC!
+
+Now that you know a bit more about gRPC, the easiest way to see how it
+works is to look at a simple example. Our Hello World walks you through the
+construction of a simple gRPC client-server application, showing you how to:
+
+- Create a protocol buffers schema that defines a simple RPC service with
+a single
+Hello World method.
+- Create a Java server that implements this interface.
+- Create a Java client that accesses the Java server.
+- Create a Go client that accesses
+the same Java server.
+
+The complete code for the example is available in the `examples`
+directory. We use the Git versioning system for source code management:
+however, you don't need to know anything about Git to follow along other
+than how to install and run a few git commands.
+
+This is an introductory example rather than a comprehensive tutorial, so
+don't worry if you're not a Go or
+Java developer - the concepts are similar for all languages, and you can
+find more implementations of our Hello World example in other languages (and full tutorials where available) in
+the [language-specific folders](#quickstart) in this repository. Complete tutorials and
+reference documentation for all gRPC languages are coming soon.
+
+<a name="setup"></a>
+### Setup
+
+This section explains how to set up your local machine to work with
+the example code. If you just want to read the example, you can go straight
+to the [next step](#servicedef).
+
+#### Install Git
+
+You can download and install Git from http://git-scm.com/download. Once
+installed you should have access to the git command line tool. The main
+commands that you will need to use are:
+
+- git clone ... : clone a remote repository onto your local machine
+- git checkout ... : check out a particular branch or a tagged version of
+the code to hack on
+
+#### Install gRPC
+
+To build and install gRPC plugins and related tools:
+- For Java, see the [Java quick start](https://github.com/grpc/grpc-java).
+- For Go, see the [Go quick start](https://github.com/grpc/grpc-go).
+
+#### Get the source code
+
+The example code for our Java example lives in the `grpc-java`
+GitHub repository. Clone this repository to your local machine by running the
+following command:
+
+
+```
+git clone https://github.com/grpc/grpc-java.git
+```
+
+Change your current directory to grpc-java/examples
+
+```
+cd grpc-java/examples
+```
+
+
+
+<a name="servicedef"></a>
+### Defining a service
+
+The first step in creating our example is to define a *service*: an RPC
+service specifies the methods that can be called remotely with their parameters
+and return types. As you saw in the
+[overview](#protocolbuffers) above, gRPC does this using [protocol
+buffers](https://developers.google.com/protocol-buffers/docs/overview). We
+use the protocol buffers interface definition language (IDL) to define our
+service methods, and define the parameters and return
+types as protocol buffer message types. Both the client and the
+server use interface code generated from the service definition.
+
+Here's our example service definition, defined using protocol buffers IDL in
+[helloworld.proto](https://github.com/grpc/grpc-java/tree/master/examples/src/main/proto). The `Greeter`
+service has one method, `SayHello`, that lets the server receive a single
+`HelloRequest`
+message from the remote client containing the user's name, then send back
+a greeting in a single `HelloReply`. This is the simplest type of RPC you
+can specify in gRPC - you can find out about other types in the tutorial for your chosen language.
+
+```proto
+syntax = "proto3";
+
+option java_package = "io.grpc.examples";
+
+package helloworld;
+
+// The greeter service definition.
+service Greeter {
+ // Sends a greeting
+ rpc SayHello (HelloRequest) returns (HelloReply) {}
+}
+
+// The request message containing the user's name.
+message HelloRequest {
+ string name = 1;
+}
+
+// The response message containing the greetings
+message HelloReply {
+ string message = 1;
+}
+
+```
+
+<a name="generating"></a>
+### Generating gRPC code
+
+Once we've defined our service, we use the protocol buffer compiler
+`protoc` to generate the special client and server code we need to create
+our application - right now we're going to generate Java code, though you
+can generate gRPC code in any gRPC-supported language (as you'll see later
+in this example). The generated code contains both stub code for clients to
+use and an abstract interface for servers to implement, both with the method
+defined in our `Greeter` service.
+
+(If you didn't install the gRPC plugins and protoc on your system and are just reading along with
+the example, you can skip this step and move
+onto the next one where we examine the generated code.)
+
+For simplicity, we've provided a [Gradle build file](https://github.com/grpc/grpc-java/blob/master/examples/build.gradle) with our Java examples that runs `protoc` for you with the appropriate plugin, input, and output:
+
+```shell
+../gradlew build
+```
+
+This generates the following classes from our .proto, which contain all the generated code
+we need to create our example:
+
+- `Helloworld.java`, which
+has all the protocol buffer code to populate, serialize, and retrieve our
+`HelloRequest` and `HelloReply` message types
+- `GreeterGrpc.java`, which contains (along with some other useful code):
+ - an interface for `Greeter` servers to implement
+
+ ```java
+ public static interface Greeter {
+ public void sayHello(io.grpc.examples.Helloworld.HelloRequest request,
+ io.grpc.stub.StreamObserver<io.grpc.examples.Helloworld.HelloReply> responseObserver);
+ }
+ ```
+
+ - _stub_ classes that clients can use to talk to a `Greeter` server. As you can see, they also implement the `Greeter` interface.
+
+ ```java
+ public static class GreeterStub extends
+ io.grpc.stub.AbstractStub<GreeterStub, GreeterServiceDescriptor>
+ implements Greeter {
+ ...
+ }
+ ```
+
+<a name="server"></a>
+### Writing a server
+
+Now let's write some code! First we'll create a server application to implement
+our service. Note that we're not going to go into a lot of detail about how
+to create a server in this section. More detailed information will be in the
+tutorial for your chosen language: check if there's one available yet in the relevant [quick start](#quickstart).
+
+Our server application has two classes:
+
+- a main server class that hosts the service implementation and allows access over the
+network: [HelloWorldServer.java](https://github.com/grpc/grpc-java/blob/master/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java).
+
+
+- a simple service implementation class [GreeterImpl.java](https://github.com/grpc/grpc-java/blob/master/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java#L51).
+
+
+#### Service implementation
+
+[GreeterImpl.java](https://github.com/grpc/grpc-java/blob/master/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java#L51)
+actually implements our `Greeter` service's required behaviour.
+
+As you can see, the class `GreeterImpl` implements the interface
+`GreeterGrpc.Greeter` that we [generated](#generating) from our proto
+[IDL](https://github.com/grpc/grpc-java/tree/master/examples/src/main/proto) by implementing the method `sayHello`:
+
+```java
+ @Override
+ public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
+ HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build();
+ responseObserver.onValue(reply);
+ responseObserver.onCompleted();
+ }
+```
+- `sayHello` takes two parameters:
+ - `HelloRequest`: the request
+ - `StreamObserver<HelloReply>`: a response observer, which is
+ a special interface for the server to call with its response
+
+To return our response to the client and complete the call:
+
+1. We construct and populate a `HelloReply` response object with our exciting
+message, as specified in our interface definition.
+2. We return the `HelloReply` to the client and then specify that we've finished dealing with the RPC.
+
+
+#### Server implementation
+
+[HelloWorldServer.java](https://github.com/grpc/grpc-java/blob/master/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java)
+shows the other main feature required to provide a gRPC service; making the service
+implementation available from the network.
+
+```java
+ /* The port on which the server should run */
+ private int port = 50051;
+ private ServerImpl server;
+
+ private void start() throws Exception {
+ server = NettyServerBuilder.forPort(port)
+ .addService(GreeterGrpc.bindService(new GreeterImpl()))
+ .build().start();
+ logger.info("Server started, listening on " + port);
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ @Override
+ public void run() {
+ // Use stderr here since the logger may have been reset by its JVM shutdown hook.
+ System.err.println("*** shutting down gRPC server since JVM is shutting down");
+ HelloWorldServer.this.stop();
+ System.err.println("*** server shut down");
+ }
+ });
+ }
+
+```
+
+Here we create an appropriate gRPC server, binding the `Greeter` service
+implementation that we created to a port. Then we start the server running: the server is now ready to receive
+requests from `Greeter` service clients on our specified port. We'll cover
+how all this works in a bit more detail in our language-specific documentation.
+
+<a name="client"></a>
+### Writing a client
+
+Client-side gRPC is pretty simple. In this step, we'll use the generated code
+to write a simple client that can access the `Greeter` server we created
+in the [previous section](#server). You can see the complete client code in
+[HelloWorldClient.java](https://github.com/grpc/grpc-java/blob/master/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldClient.java).
+
+Again, we're not going to go into much detail about how to implement a client;
+we'll leave that for the tutorial.
+
+#### Connecting to the service
+
+First let's look at how we connect to the `Greeter` server. First we need
+to create a gRPC channel, specifying the hostname and port of the server we
+want to connect to. Then we use the channel to construct the stub instance.
+
+
+```java
+ private final ChannelImpl channel;
+ private final GreeterGrpc.GreeterBlockingStub blockingStub;
+
+ public HelloWorldClient(String host, int port) {
+ channel =
+ NettyChannelBuilder.forAddress(host, port).negotiationType(NegotiationType.PLAINTEXT)
+ .build();
+ blockingStub = GreeterGrpc.newBlockingStub(channel);
+ }
+
+```
+
+In this case, we create a blocking stub. This means that the RPC call waits
+for the server to respond, and will either return a response or raise an
+exception. gRPC Java has other kinds of stubs that make non-blocking calls
+to the server, where the response is returned asynchronously.
+
+#### Calling an RPC
+
+Now we can contact the service and obtain a greeting:
+
+1. We construct and fill in a `HelloRequest` to send to the service.
+2. We call the stub's `hello()` RPC with our request and get a `HelloReply`
+back, from which we can get our greeting.
+
+
+```java
+ HelloRequest req = HelloRequest.newBuilder().setName(name).build();
+ HelloReply reply = blockingStub.sayHello(req);
+
+```
+
+<a name="run"></a>
+### Try it out!
+
+Our [Gradle build file](https://github.com/grpc/grpc-java/blob/master/examples/build.gradle) simplifies building and running the examples.
+
+You can build and run the server from the `grpc-java` root folder with:
+
+```sh
+$ ./gradlew :grpc-examples:helloWorldServer
+```
+
+and in another terminal window confirm that it receives a message.
+
+```sh
+$ ./gradlew :grpc-examples:helloWorldClient
+```
+
+### Adding another client
+
+Finally, let's look at one of gRPC's most useful features - interoperability
+between code in different languages. So far, we've just looked at Java code
+generated from and implementing our `Greeter` service definition. However,
+as you'll see if you look at the language-specific subdirectories
+in this repository, we've also generated and implemented `Greeter`
+in some of gRPC's other supported languages. Each service
+and client uses interface code generated from the same proto
+that we used for the Java example.
+
+So, for example, if we visit the [`go` example
+directory](https://github.com/grpc/grpc-go/tree/master/examples) and look at the
+[`greeter_client`](https://github.com/grpc/grpc-go/blob/master/examples/greeter_client/main.go),
+we can see that like the Java client, it connects to a `Greeter` service
+at `localhost:50051` and uses a stub to call the `SayHello` method with a
+`HelloRequest`:
+
+```go
+const (
+ address = "localhost:50051"
+ defaultName = "world"
+)
+
+func main() {
+ // Set up a connection to the server.
+ conn, err := grpc.Dial(address)
+ if err != nil {
+ log.Fatalf("did not connect: %v", err)
+ }
+ defer conn.Close()
+ c := pb.NewGreeterClient(conn)
+
+ // Contact the server and print out its response.
+ name := defaultName
+ if len(os.Args) > 1 {
+ name = os.Args[1]
+ }
+ r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name:
+ name})
+ if err != nil {
+ log.Fatalf("could not greet: %v", err)
+ }
+ log.Printf("Greeting: %s", r.Message)
+}
+```
+
+
+If we run the Java server from earlier in another terminal window, we can
+run the Go client and connect to it just like the Java client, even though
+it's written in a different language.
+
+```
+$ greeter_client
+```
+## Read more!
+
+- You can find links to language-specific tutorials, examples, and other docs in each language's [quick start](#quickstart).
+- [gRPC Authentication Support](doc/grpc-auth-support.md) introduces authentication support in gRPC with supported mechanisms and examples.
diff --git a/examples/cpp/README.md b/examples/cpp/README.md
new file mode 100644
index 0000000000..70418b4425
--- /dev/null
+++ b/examples/cpp/README.md
@@ -0,0 +1,65 @@
+#gRPC in 3 minutes (C++)
+
+## Installation
+
+To install gRPC on your system, follow the instructions here:
+[https://github.com/grpc/grpc/blob/master/INSTALL](https://github.com/grpc/grpc/blob/master/INSTALL).
+
+## Hello C++ gRPC!
+
+Here's how to build and run the C++ implementation of the [Hello World](examples/protos/helloworld.proto) example used in [Getting started](https://github.com/grpc/grpc/tree/master/examples).
+
+The example code for this and our other examples lives in the `examples`
+directory. Clone this repository to your local machine by running the
+following command:
+
+
+```sh
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Change your current directory to examples/cpp/helloworld
+
+```sh
+$ cd examples/cpp/helloworld/
+```
+
+
+### Generating gRPC code
+
+To generate the client and server side interfaces:
+
+```sh
+$ make helloworld.grpc.pb.cc helloworld.pb.cc
+```
+Which internally invokes the proto-compiler as:
+
+```sh
+$ protoc -I ../../protos/ --grpc_out=. --plugin=protoc-gen-grpc=grpc_cpp_plugin ../../protos/helloworld.proto
+$ protoc -I ../../protos/ --cpp_out=. ../../protos/helloworld.proto
+```
+
+### Client and server implementations
+
+The client implementation is at [greeter_client.cc](examples/cpp/helloworld/greeter_client.cc).
+
+The server implementation is at [greeter_server.cc](examples/cpp/helloworld/greeter_server.cc).
+
+### Try it!
+Build client and server:
+```sh
+$ make
+```
+Run the server, which will listen on port 50051:
+```sh
+$ ./greeter_server
+```
+Run the client (in a different terminal):
+```sh
+$ ./greeter_client
+```
+If things go smoothly, you will see the "Greeter received: Hello world" in the client side output.
+
+## Tutorial
+
+You can find a more detailed tutorial in [gRPC Basics: C++](examples/cpp/cpptutorial.md)
diff --git a/examples/cpp/cpptutorial.md b/examples/cpp/cpptutorial.md
new file mode 100644
index 0000000000..22be42d500
--- /dev/null
+++ b/examples/cpp/cpptutorial.md
@@ -0,0 +1,365 @@
+#gRPC Basics: C++
+
+This tutorial provides a basic C++ programmer's introduction to working with gRPC. By walking through this example you'll learn how to:
+
+- Define a service in a .proto file.
+- Generate server and client code using the protocol buffer compiler.
+- Use the C++ gRPC API to write a simple client and server for your service.
+
+It assumes that you have read the [Getting started](https://github.com/grpc/grpc/tree/master/examples) guide and are familiar with [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). Note that the example in this tutorial uses the proto3 version of the protocol buffers language, which is currently in alpha release: you can find out more in the [proto3 language guide](https://developers.google.com/protocol-buffers/docs/proto3) and see the [release notes](https://github.com/google/protobuf/releases) for the new version in the protocol buffers Github repository.
+
+This isn't a comprehensive guide to using gRPC in C++: more reference documentation is coming soon.
+
+## Why use gRPC?
+
+Our example is a simple route mapping application that lets clients get information about features on their route, create a summary of their route, and exchange route information such as traffic updates with the server and other clients.
+
+With gRPC we can define our service once in a .proto file and implement clients and servers in any of gRPC's supported languages, which in turn can be run in environments ranging from servers inside Google to your own tablet - all the complexity of communication between different languages and environments is handled for you by gRPC. We also get all the advantages of working with protocol buffers, including efficient serialization, a simple IDL, and easy interface updating.
+
+## Example code and setup
+
+The example code for our tutorial is in [examples/cpp/route_guide](examples/cpp/route_guide). To download the example, clone this repository by running the following command:
+```shell
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Then change your current directory to `examples/cpp/route_guide`:
+```shell
+$ cd examples/cpp/route_guide
+```
+
+You also should have the relevant tools installed to generate the server and client interface code - if you don't already, follow the setup instructions in [the C++ quick start guide](examples/cpp).
+
+
+## Defining the service
+
+Our first step (as you'll know from [Getting started](examples/) is to define the gRPC *service* and the method *request* and *response* types using [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). You can see the complete .proto file in [`examples/protos/route_guide.proto`](examples/protos/route_guide.proto).
+
+To define a service, you specify a named `service` in your .proto file:
+
+```
+service RouteGuide {
+ ...
+}
+```
+
+Then you define `rpc` methods inside your service definition, specifying their request and response types. gRPC lets you define four kinds of service method, all of which are used in the `RouteGuide` service:
+
+- A *simple RPC* where the client sends a request to the server using the stub and waits for a response to come back, just like a normal function call.
+```
+ // Obtains the feature at a given position.
+ rpc GetFeature(Point) returns (Feature) {}
+```
+
+- A *server-side streaming RPC* where the client sends a request to the server and gets a stream to read a sequence of messages back. The client reads from the returned stream until there are no more messages. As you can see in our example, you specify a server-side streaming method by placing the `stream` keyword before the *response* type.
+```
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+```
+
+- A *client-side streaming RPC* where the client writes a sequence of messages and sends them to the server, again using a provided stream. Once the client has finished writing the messages, it waits for the server to read them all and return its response. You specify a client-side streaming method by placing the `stream` keyword before the *request* type.
+```
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+```
+
+- A *bidirectional streaming RPC* where both sides send a sequence of messages using a read-write stream. The two streams operate independently, so clients and servers can read and write in whatever order they like: for example, the server could wait to receive all the client messages before writing its responses, or it could alternately read a message then write a message, or some other combination of reads and writes. The order of messages in each stream is preserved. You specify this type of method by placing the `stream` keyword before both the request and the response.
+```
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+```
+
+Our .proto file also contains protocol buffer message type definitions for all the request and response types used in our service methods - for example, here's the `Point` message type:
+```
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ int32 latitude = 1;
+ int32 longitude = 2;
+}
+```
+
+
+## Generating client and server code
+
+Next we need to generate the gRPC client and server interfaces from our .proto service definition. We do this using the protocol buffer compiler `protoc` with a special gRPC C++ plugin.
+
+For simplicity, we've provided a [makefile](examples/cpp/route_guide/Makefile) that runs `protoc` for you with the appropriate plugin, input, and output (if you want to run this yourself, make sure you've installed protoc and followed the gRPC code [installation instructions](https://github.com/grpc/grpc/blob/master/INSTALL) first):
+
+```shell
+$ make route_guide.grpc.pb.cc route_guide.pb.cc
+```
+
+which actually runs:
+
+```shell
+$ protoc -I ../../protos --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` ../../protos/route_guide.proto
+$ protoc -I ../../protos --cpp_out=. ../../protos/route_guide.proto
+```
+
+Running this command generates the following files in your current directory:
+- `route_guide.pb.h`, the header which declares your generated message classes
+- `route_guide.pb.cc`, which contains the implementation of your message classes
+- `route_guide.grpc.pb.h`, the header which declares your generated service classes
+- `route_guide.grpc.pb.cc`, which contains the implementation of your service classes
+
+These contain:
+- All the protocol buffer code to populate, serialize, and retrieve our request and response message types
+- A class called `RouteGuide` that contains
+ - a remote interface type (or *stub*) for clients to call with the methods defined in the `RouteGuide` service.
+ - two abstract interfaces for servers to implement, also with the methods defined in the `RouteGuide` service.
+
+
+<a name="server"></a>
+## Creating the server
+
+First let's look at how we create a `RouteGuide` server. If you're only interested in creating gRPC clients, you can skip this section and go straight to [Creating the client](#client) (though you might find it interesting anyway!).
+
+There are two parts to making our `RouteGuide` service do its job:
+- Implementing the service interface generated from our service definition: doing the actual "work" of our service.
+- Running a gRPC server to listen for requests from clients and return the service responses.
+
+You can find our example `RouteGuide` server in [examples/cpp/route_guide/route_guide_server.cc](examples/cpp/route_guide/route_guide_server.cc). Let's take a closer look at how it works.
+
+### Implementing RouteGuide
+
+As you can see, our server has a `RouteGuideImpl` class that implements the generated `RouteGuide::Service` interface:
+
+```cpp
+class RouteGuideImpl final : public RouteGuide::Service {
+...
+}
+```
+In this case we're implementing the *synchronous* version of `RouteGuide`, which provides our default gRPC server behaviour. It's also possible to implement an asynchronous interface, `RouteGuide::AsyncService`, which allows you to further customize your server's threading behaviour, though we won't look at this in this tutorial.
+
+`RouteGuideImpl` implements all our service methods. Let's look at the simplest type first, `GetFeature`, which just gets a `Point` from the client and returns the corresponding feature information from its database in a `Feature`.
+
+```cpp
+ Status GetFeature(ServerContext* context, const Point* point,
+ Feature* feature) override {
+ feature->set_name(GetFeatureName(*point, feature_list_));
+ feature->mutable_location()->CopyFrom(*point);
+ return Status::OK;
+ }
+```
+
+The method is passed a context object for the RPC, the client's `Point` protocol buffer request, and a `Feature` protocol buffer to fill in with the response information. In the method we populate the `Feature` with the appropriate information, and then `return` with an `OK` status to tell gRPC that we've finished dealing with the RPC and that the `Feature` can be returned to the client.
+
+Now let's look at something a bit more complicated - a streaming RPC. `ListFeatures` is a server-side streaming RPC, so we need to send back multiple `Feature`s to our client.
+
+```cpp
+ Status ListFeatures(ServerContext* context, const Rectangle* rectangle,
+ ServerWriter<Feature>* writer) override {
+ auto lo = rectangle->lo();
+ auto hi = rectangle->hi();
+ long left = std::min(lo.longitude(), hi.longitude());
+ long right = std::max(lo.longitude(), hi.longitude());
+ long top = std::max(lo.latitude(), hi.latitude());
+ long bottom = std::min(lo.latitude(), hi.latitude());
+ for (const Feature& f : feature_list_) {
+ if (f.location().longitude() >= left &&
+ f.location().longitude() <= right &&
+ f.location().latitude() >= bottom &&
+ f.location().latitude() <= top) {
+ writer->Write(f);
+ }
+ }
+ return Status::OK;
+ }
+```
+
+As you can see, instead of getting simple request and response objects in our method parameters, this time we get a request object (the `Rectangle` in which our client wants to find `Feature`s) and a special `ServerWriter` object. In the method, we populate as many `Feature` objects as we need to return, writing them to the `ServerWriter` using its `Write()` method. Finally, as in our simple RPC, we `return Status::OK` to tell gRPC that we've finished writing responses.
+
+If you look at the client-side streaming method `RecordRoute` you'll see it's quite similar, except this time we get a `ServerReader` instead of a request object and a single response. We use the `ServerReader`s `Read()` method to repeatedly read in our client's requests to a request object (in this case a `Point`) until there are no more messages: the server needs to check the return value of `Read()` after each call. If `true`, the stream is still good and it can continue reading; if `false` the message stream has ended.
+
+```cpp
+while (stream->Read(&point)) {
+ ...//process client input
+}
+```
+Finally, let's look at our bidirectional streaming RPC `RouteChat()`.
+
+```cpp
+ Status RouteChat(ServerContext* context,
+ ServerReaderWriter<RouteNote, RouteNote>* stream) override {
+ std::vector<RouteNote> received_notes;
+ RouteNote note;
+ while (stream->Read(&note)) {
+ for (const RouteNote& n : received_notes) {
+ if (n.location().latitude() == note.location().latitude() &&
+ n.location().longitude() == note.location().longitude()) {
+ stream->Write(n);
+ }
+ }
+ received_notes.push_back(note);
+ }
+
+ return Status::OK;
+ }
+```
+
+This time we get a `ServerReaderWriter` that can be used to read *and* write messages. The syntax for reading and writing here is exactly the same as for our client-streaming and server-streaming methods. Although each side will always get the other's messages in the order they were written, both the client and server can read and write in any order — the streams operate completely independently.
+
+### Starting the server
+
+Once we've implemented all our methods, we also need to start up a gRPC server so that clients can actually use our service. The following snippet shows how we do this for our `RouteGuide` service:
+
+```cpp
+void RunServer(const std::string& db_path) {
+ std::string server_address("0.0.0.0:50051");
+ RouteGuideImpl service(db_path);
+
+ ServerBuilder builder;
+ builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
+ builder.RegisterService(&service);
+ std::unique_ptr<Server> server(builder.BuildAndStart());
+ std::cout << "Server listening on " << server_address << std::endl;
+ server->Wait();
+}
+```
+As you can see, we build and start our server using a `ServerBuilder`. To do this, we:
+
+1. Create an instance of our service implementation class `RouteGuideImpl`.
+2. Create an instance of the factory `ServerBuilder` class.
+3. Specify the address and port we want to use to listen for client requests using the builder's `AddListeningPort()` method.
+4. Register our service implementation with the builder.
+5. Call `BuildAndStart()` on the builder to create and start an RPC server for our service.
+5. Call `Wait()` on the server to do a blocking wait until process is killed or `Shutdown()` is called.
+
+<a name="client"></a>
+## Creating the client
+
+In this section, we'll look at creating a C++ client for our `RouteGuide` service. You can see our complete example client code in [examples/cpp/route_guide/route_guide_client.cc](examples/cpp/route_guide/route_guide_client.cc).
+
+### Creating a stub
+
+To call service methods, we first need to create a *stub*.
+
+First we need to create a gRPC *channel* for our stub, specifying the server address and port we want to connect to and any special channel arguments - in our case we'll use the default `ChannelArguments` and no SSL:
+
+```cpp
+grpc::CreateChannel("localhost:50051", grpc::InsecureCredentials(), ChannelArguments());
+```
+
+Now we can use the channel to create our stub using the `NewStub` method provided in the `RouteGuide` class we generated from our .proto.
+
+```cpp
+ public:
+ RouteGuideClient(std::shared_ptr<Channel> channel, const std::string& db)
+ : stub_(RouteGuide::NewStub(channel)) {
+ ...
+ }
+```
+
+### Calling service methods
+
+Now let's look at how we call our service methods. Note that in this tutorial we're calling the *blocking/synchronous* versions of each method: this means that the RPC call waits for the server to respond, and will either return a response or raise an exception.
+
+#### Simple RPC
+
+Calling the simple RPC `GetFeature` is nearly as straightforward as calling a local method.
+
+```cpp
+ Point point;
+ Feature feature;
+ point = MakePoint(409146138, -746188906);
+ GetOneFeature(point, &feature);
+
+...
+
+ bool GetOneFeature(const Point& point, Feature* feature) {
+ ClientContext context;
+ Status status = stub_->GetFeature(&context, point, feature);
+ ...
+ }
+```
+
+As you can see, we create and populate a request protocol buffer object (in our case `Point`), and create a response protocol buffer object for the server to fill in. We also create a `ClientContext` object for our call - you can optionally set RPC configuration values on this object, such as deadlines, though for now we'll use the default settings. Note that you cannot reuse this object between calls. Finally, we call the method on the stub, passing it the context, request, and response. If the method returns `OK`, then we can read the response information from the server from our response object.
+
+```cpp
+ std::cout << "Found feature called " << feature->name() << " at "
+ << feature->location().latitude()/kCoordFactor_ << ", "
+ << feature->location().longitude()/kCoordFactor_ << std::endl;
+```
+
+#### Streaming RPCs
+
+Now let's look at our streaming methods. If you've already read [Creating the server](#server) some of this may look very familiar - streaming RPCs are implemented in a similar way on both sides. Here's where we call the server-side streaming method `ListFeatures`, which returns a stream of geographical `Feature`s:
+
+```cpp
+ std::unique_ptr<ClientReader<Feature> > reader(
+ stub_->ListFeatures(&context, rect));
+ while (reader->Read(&feature)) {
+ std::cout << "Found feature called "
+ << feature.name() << " at "
+ << feature.location().latitude()/kCoordFactor_ << ", "
+ << feature.location().longitude()/kCoordFactor_ << std::endl;
+ }
+ Status status = reader->Finish();
+```
+
+Instead of passing the method a context, request, and response, we pass it a context and request and get a `ClientReader` object back. The client can use the `ClientReader` to read the server's responses. We use the `ClientReader`s `Read()` method to repeatedly read in the server's responses to a response protocol buffer object (in this case a `Feature`) until there are no more messages: the client needs to check the return value of `Read()` after each call. If `true`, the stream is still good and it can continue reading; if `false` the message stream has ended. Finally, we call `Finish()` on the stream to complete the call and get our RPC status.
+
+The client-side streaming method `RecordRoute` is similar, except there we pass the method a context and response object and get back a `ClientWriter`.
+
+```cpp
+ std::unique_ptr<ClientWriter<Point> > writer(
+ stub_->RecordRoute(&context, &stats));
+ for (int i = 0; i < kPoints; i++) {
+ const Feature& f = feature_list_[feature_distribution(generator)];
+ std::cout << "Visiting point "
+ << f.location().latitude()/kCoordFactor_ << ", "
+ << f.location().longitude()/kCoordFactor_ << std::endl;
+ if (!writer->Write(f.location())) {
+ // Broken stream.
+ break;
+ }
+ std::this_thread::sleep_for(std::chrono::milliseconds(
+ delay_distribution(generator)));
+ }
+ writer->WritesDone();
+ Status status = writer->Finish();
+ if (status.IsOk()) {
+ std::cout << "Finished trip with " << stats.point_count() << " points\n"
+ << "Passed " << stats.feature_count() << " features\n"
+ << "Travelled " << stats.distance() << " meters\n"
+ << "It took " << stats.elapsed_time() << " seconds"
+ << std::endl;
+ } else {
+ std::cout << "RecordRoute rpc failed." << std::endl;
+ }
+```
+
+Once we've finished writing our client's requests to the stream using `Write()`, we need to call `WritesDone()` on the stream to let gRPC know that we've finished writing, then `Finish()` to complete the call and get our RPC status. If the status is `OK`, our response object that we initially passed to `RecordRoute()` will be populated with the server's response.
+
+Finally, let's look at our bidirectional streaming RPC `RouteChat()`. In this case, we just pass a context to the method and get back a `ClientReaderWriter`, which we can use to both write and read messages.
+
+```cpp
+ std::shared_ptr<ClientReaderWriter<RouteNote, RouteNote> > stream(
+ stub_->RouteChat(&context));
+```
+
+The syntax for reading and writing here is exactly the same as for our client-streaming and server-streaming methods. Although each side will always get the other's messages in the order they were written, both the client and server can read and write in any order — the streams operate completely independently.
+
+## Try it out!
+
+Build client and server:
+```shell
+$ make
+```
+Run the server, which will listen on port 50051:
+```shell
+$ ./route_guide_server
+```
+Run the client (in a different terminal):
+```shell
+$ ./route_guide_client
+```
+
diff --git a/examples/cpp/helloworld/Makefile b/examples/cpp/helloworld/Makefile
new file mode 100644
index 0000000000..f2093afa05
--- /dev/null
+++ b/examples/cpp/helloworld/Makefile
@@ -0,0 +1,119 @@
+#
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+CXX = g++
+CPPFLAGS += -I/usr/local/include -pthread
+CXXFLAGS += -std=c++11
+LDFLAGS += -L/usr/local/lib -lgrpc++_unsecure -lgrpc -lgpr -lprotobuf -lpthread -ldl
+PROTOC = protoc
+GRPC_CPP_PLUGIN = grpc_cpp_plugin
+GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`
+
+PROTOS_PATH = ../../protos
+
+vpath %.proto $(PROTOS_PATH)
+
+all: system-check greeter_client greeter_server greeter_async_client greeter_async_server
+
+greeter_client: helloworld.pb.o helloworld.grpc.pb.o greeter_client.o
+ $(CXX) $^ $(LDFLAGS) -o $@
+
+greeter_server: helloworld.pb.o helloworld.grpc.pb.o greeter_server.o
+ $(CXX) $^ $(LDFLAGS) -o $@
+
+greeter_async_client: helloworld.pb.o helloworld.grpc.pb.o greeter_async_client.o
+ $(CXX) $^ $(LDFLAGS) -o $@
+
+greeter_async_server: helloworld.pb.o helloworld.grpc.pb.o greeter_async_server.o
+ $(CXX) $^ $(LDFLAGS) -o $@
+
+%.grpc.pb.cc: %.proto
+ $(PROTOC) -I $(PROTOS_PATH) --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<
+
+%.pb.cc: %.proto
+ $(PROTOC) -I $(PROTOS_PATH) --cpp_out=. $<
+
+clean:
+ rm -f *.o *.pb.cc *.pb.h greeter_client greeter_server greeter_async_client greeter_async_server
+
+
+# The following is to test your system and ensure a smoother experience.
+# They are by no means necessary to actually compile a grpc-enabled software.
+
+PROTOC_CMD = which $(PROTOC)
+PROTOC_CHECK_CMD = $(PROTOC) --version | grep -q libprotoc.3
+PLUGIN_CHECK_CMD = which $(GRPC_CPP_PLUGIN)
+HAS_PROTOC = $(shell $(PROTOC_CMD) > /dev/null && echo true || echo false)
+ifeq ($(HAS_PROTOC),true)
+HAS_VALID_PROTOC = $(shell $(PROTOC_CHECK_CMD) 2> /dev/null && echo true || echo false)
+endif
+HAS_PLUGIN = $(shell $(PLUGIN_CHECK_CMD) > /dev/null && echo true || echo false)
+
+SYSTEM_OK = false
+ifeq ($(HAS_VALID_PROTOC),true)
+ifeq ($(HAS_PLUGIN),true)
+SYSTEM_OK = true
+endif
+endif
+
+system-check:
+ifneq ($(HAS_VALID_PROTOC),true)
+ @echo " DEPENDENCY ERROR"
+ @echo
+ @echo "You don't have protoc 3.0.0 installed in your path."
+ @echo "Please install Google protocol buffers 3.0.0 and its compiler."
+ @echo "You can find it here:"
+ @echo
+ @echo " https://github.com/google/protobuf/releases/tag/v3.0.0-alpha-1"
+ @echo
+ @echo "Here is what I get when trying to evaluate your version of protoc:"
+ @echo
+ -$(PROTOC) --version
+ @echo
+ @echo
+endif
+ifneq ($(HAS_PLUGIN),true)
+ @echo " DEPENDENCY ERROR"
+ @echo
+ @echo "You don't have the grpc c++ protobuf plugin installed in your path."
+ @echo "Please install grpc. You can find it here:"
+ @echo
+ @echo " https://github.com/grpc/grpc"
+ @echo
+ @echo "Here is what I get when trying to detect if you have the plugin:"
+ @echo
+ -which $(GRPC_CPP_PLUGIN)
+ @echo
+ @echo
+endif
+ifneq ($(SYSTEM_OK),true)
+ @false
+endif
diff --git a/examples/cpp/helloworld/README.md b/examples/cpp/helloworld/README.md
new file mode 100644
index 0000000000..641aadd52d
--- /dev/null
+++ b/examples/cpp/helloworld/README.md
@@ -0,0 +1,260 @@
+# gRPC C++ Hello World Tutorial
+
+### Install gRPC
+Make sure you have installed gRPC on your system. Follow the instructions here:
+[https://github.com/grpc/grpc/blob/master/INSTALL](https://github.com/grpc/grpc/blob/master/INSTALL).
+
+### Get the tutorial source code
+
+The example code for this and our other examples lives in the `examples`
+directory. Clone this repository to your local machine by running the
+following command:
+
+
+```sh
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Change your current directory to examples/cpp/helloworld
+
+```sh
+$ cd examples/cpp/helloworld/
+```
+
+### Defining a service
+
+The first step in creating our example is to define a *service*: an RPC
+service specifies the methods that can be called remotely with their parameters
+and return types. As you saw in the
+[overview](#protocolbuffers) above, gRPC does this using [protocol
+buffers](https://developers.google.com/protocol-buffers/docs/overview). We
+use the protocol buffers interface definition language (IDL) to define our
+service methods, and define the parameters and return
+types as protocol buffer message types. Both the client and the
+server use interface code generated from the service definition.
+
+Here's our example service definition, defined using protocol buffers IDL in
+[helloworld.proto](examples/protos/helloworld.proto). The `Greeting`
+service has one method, `hello`, that lets the server receive a single
+`HelloRequest`
+message from the remote client containing the user's name, then send back
+a greeting in a single `HelloReply`. This is the simplest type of RPC you
+can specify in gRPC - we'll look at some other types later in this document.
+
+```
+syntax = "proto3";
+
+option java_package = "ex.grpc";
+
+package helloworld;
+
+// The greeting service definition.
+service Greeter {
+ // Sends a greeting
+ rpc SayHello (HelloRequest) returns (HelloReply) {}
+}
+
+// The request message containing the user's name.
+message HelloRequest {
+ string name = 1;
+}
+
+// The response message containing the greetings
+message HelloReply {
+ string message = 1;
+}
+
+```
+
+<a name="generating"></a>
+### Generating gRPC code
+
+Once we've defined our service, we use the protocol buffer compiler
+`protoc` to generate the special client and server code we need to create
+our application. The generated code contains both stub code for clients to
+use and an abstract interface for servers to implement, both with the method
+defined in our `Greeting` service.
+
+To generate the client and server side interfaces:
+
+```sh
+$ make helloworld.grpc.pb.cc helloworld.pb.cc
+```
+Which internally invokes the proto-compiler as:
+
+```sh
+$ protoc -I ../../protos/ --grpc_out=. --plugin=protoc-gen-grpc=grpc_cpp_plugin ../../protos/helloworld.proto
+$ protoc -I ../../protos/ --cpp_out=. ../../protos/helloworld.proto
+```
+
+### Writing a client
+
+- Create a channel. A channel is a logical connection to an endpoint. A gRPC
+ channel can be created with the target address, credentials to use and
+ arguments as follows
+
+ ```
+ auto channel = CreateChannel("localhost:50051", InsecureCredentials(), ChannelArguments());
+ ```
+
+- Create a stub. A stub implements the rpc methods of a service and in the
+ generated code, a method is provided to created a stub with a channel:
+
+ ```
+ auto stub = helloworld::Greeter::NewStub(channel);
+ ```
+
+- Make a unary rpc, with `ClientContext` and request/response proto messages.
+
+ ```
+ ClientContext context;
+ HelloRequest request;
+ request.set_name("hello");
+ HelloReply reply;
+ Status status = stub->SayHello(&context, request, &reply);
+ ```
+
+- Check returned status and response.
+
+ ```
+ if (status.ok()) {
+ // check reply.message()
+ } else {
+ // rpc failed.
+ }
+ ```
+
+For a working example, refer to [greeter_client.cc](examples/cpp/helloworld/greeter_client.cc).
+
+### Writing a server
+
+- Implement the service interface
+
+ ```
+ class GreeterServiceImpl final : public Greeter::Service {
+ Status SayHello(ServerContext* context, const HelloRequest* request,
+ HelloReply* reply) override {
+ std::string prefix("Hello ");
+ reply->set_message(prefix + request->name());
+ return Status::OK;
+ }
+ };
+
+ ```
+
+- Build a server exporting the service
+
+ ```
+ GreeterServiceImpl service;
+ ServerBuilder builder;
+ builder.AddListeningPort("0.0.0.0:50051", grpc::InsecureServerCredentials());
+ builder.RegisterService(&service);
+ std::unique_ptr<Server> server(builder.BuildAndStart());
+ ```
+
+For a working example, refer to [greeter_server.cc](examples/cpp/helloworld/greeter_server.cc).
+
+### Writing asynchronous client and server
+
+gRPC uses `CompletionQueue` API for asynchronous operations. The basic work flow
+is
+- bind a `CompletionQueue` to a rpc call
+- do something like a read or write, present with a unique `void*` tag
+- call `CompletionQueue::Next` to wait for operations to complete. If a tag
+ appears, it indicates that the corresponding operation is complete.
+
+#### Async client
+
+The channel and stub creation code is the same as the sync client.
+
+- Initiate the rpc and create a handle for the rpc. Bind the rpc to a
+ `CompletionQueue`.
+
+ ```
+ CompletionQueue cq;
+ auto rpc = stub->AsyncSayHello(&context, request, &cq);
+ ```
+
+- Ask for reply and final status, with a unique tag
+
+ ```
+ Status status;
+ rpc->Finish(&reply, &status, (void*)1);
+ ```
+
+- Wait for the completion queue to return the next tag. The reply and status are
+ ready once the tag passed into the corresponding `Finish()` call is returned.
+
+ ```
+ void* got_tag;
+ bool ok = false;
+ cq.Next(&got_tag, &ok);
+ if (ok && got_tag == (void*)1) {
+ // check reply and status
+ }
+ ```
+
+For a working example, refer to [greeter_async_client.cc](examples/cpp/helloworld/greeter_async_client.cc).
+
+#### Async server
+
+The server implementation requests a rpc call with a tag and then wait for the
+completion queue to return the tag. The basic flow is
+
+- Build a server exporting the async service
+
+ ```
+ helloworld::Greeter::AsyncService service;
+ ServerBuilder builder;
+ builder.AddListeningPort("0.0.0.0:50051", InsecureServerCredentials());
+ builder.RegisterAsyncService(&service);
+ auto cq = builder.AddCompletionQueue();
+ auto server = builder.BuildAndStart();
+ ```
+
+- Request one rpc
+
+ ```
+ ServerContext context;
+ HelloRequest request;
+ ServerAsyncResponseWriter<HelloReply> responder;
+ service.RequestSayHello(&context, &request, &responder, &cq, &cq, (void*)1);
+ ```
+
+- Wait for the completion queue to return the tag. The context, request and
+ responder are ready once the tag is retrieved.
+
+ ```
+ HelloReply reply;
+ Status status;
+ void* got_tag;
+ bool ok = false;
+ cq.Next(&got_tag, &ok);
+ if (ok && got_tag == (void*)1) {
+ // set reply and status
+ responder.Finish(reply, status, (void*)2);
+ }
+ ```
+
+- Wait for the completion queue to return the tag. The rpc is finished when the
+ tag is back.
+
+ ```
+ void* got_tag;
+ bool ok = false;
+ cq.Next(&got_tag, &ok);
+ if (ok && got_tag == (void*)2) {
+ // clean up
+ }
+ ```
+
+To handle multiple rpcs, the async server creates an object `CallData` to
+maintain the state of each rpc and use the address of it as the unique tag. For
+simplicity the server only uses one completion queue for all events, and runs a
+main loop in `HandleRpcs` to query the queue.
+
+For a working example, refer to [greeter_async_server.cc](examples/cpp/helloworld/greeter_async_server.cc).
+
+
+
+
diff --git a/examples/cpp/helloworld/greeter_async_client.cc b/examples/cpp/helloworld/greeter_async_client.cc
new file mode 100644
index 0000000000..d99f89b135
--- /dev/null
+++ b/examples/cpp/helloworld/greeter_async_client.cc
@@ -0,0 +1,98 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <iostream>
+#include <memory>
+#include <string>
+
+#include <grpc/grpc.h>
+#include <grpc/support/log.h>
+#include <grpc++/channel.h>
+#include <grpc++/client_context.h>
+#include <grpc++/completion_queue.h>
+#include <grpc++/create_channel.h>
+#include <grpc++/credentials.h>
+#include "helloworld.grpc.pb.h"
+
+using grpc::Channel;
+using grpc::ChannelArguments;
+using grpc::ClientAsyncResponseReader;
+using grpc::ClientContext;
+using grpc::CompletionQueue;
+using grpc::Status;
+using helloworld::HelloRequest;
+using helloworld::HelloReply;
+using helloworld::Greeter;
+
+class GreeterClient {
+ public:
+ explicit GreeterClient(std::shared_ptr<Channel> channel)
+ : stub_(Greeter::NewStub(channel)) {}
+
+ std::string SayHello(const std::string& user) {
+ HelloRequest request;
+ request.set_name(user);
+ HelloReply reply;
+ ClientContext context;
+ CompletionQueue cq;
+ Status status;
+
+ std::unique_ptr<ClientAsyncResponseReader<HelloReply> > rpc(
+ stub_->AsyncSayHello(&context, request, &cq));
+ rpc->Finish(&reply, &status, (void*)1);
+ void* got_tag;
+ bool ok = false;
+ cq.Next(&got_tag, &ok);
+ GPR_ASSERT(ok);
+ GPR_ASSERT(got_tag == (void*)1);
+
+ if (status.ok()) {
+ return reply.message();
+ } else {
+ return "Rpc failed";
+ }
+ }
+
+ private:
+ std::unique_ptr<Greeter::Stub> stub_;
+};
+
+int main(int argc, char** argv) {
+ GreeterClient greeter(grpc::CreateChannel(
+ "localhost:50051", grpc::InsecureCredentials(), ChannelArguments()));
+ std::string user("world");
+ std::string reply = greeter.SayHello(user);
+ std::cout << "Greeter received: " << reply << std::endl;
+
+ return 0;
+}
diff --git a/examples/cpp/helloworld/greeter_async_server.cc b/examples/cpp/helloworld/greeter_async_server.cc
new file mode 100644
index 0000000000..b8a0dbf0e2
--- /dev/null
+++ b/examples/cpp/helloworld/greeter_async_server.cc
@@ -0,0 +1,136 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <memory>
+#include <iostream>
+#include <string>
+#include <thread>
+
+#include <grpc/grpc.h>
+#include <grpc/support/log.h>
+#include <grpc++/completion_queue.h>
+#include <grpc++/server.h>
+#include <grpc++/server_builder.h>
+#include <grpc++/server_context.h>
+#include <grpc++/server_credentials.h>
+#include "helloworld.grpc.pb.h"
+
+using grpc::Server;
+using grpc::ServerAsyncResponseWriter;
+using grpc::ServerBuilder;
+using grpc::ServerContext;
+using grpc::ServerCompletionQueue;
+using grpc::Status;
+using helloworld::HelloRequest;
+using helloworld::HelloReply;
+using helloworld::Greeter;
+
+class ServerImpl final {
+ public:
+ ~ServerImpl() {
+ server_->Shutdown();
+ cq_->Shutdown();
+ }
+
+ // There is no shutdown handling in this code.
+ void Run() {
+ std::string server_address("0.0.0.0:50051");
+
+ ServerBuilder builder;
+ builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
+ builder.RegisterAsyncService(&service_);
+ cq_ = builder.AddCompletionQueue();
+ server_ = builder.BuildAndStart();
+ std::cout << "Server listening on " << server_address << std::endl;
+
+ HandleRpcs();
+ }
+
+ private:
+ class CallData {
+ public:
+ CallData(Greeter::AsyncService* service, ServerCompletionQueue* cq)
+ : service_(service), cq_(cq), responder_(&ctx_), status_(CREATE) {
+ Proceed();
+ }
+
+ void Proceed() {
+ if (status_ == CREATE) {
+ service_->RequestSayHello(&ctx_, &request_, &responder_, cq_, cq_,
+ this);
+ status_ = PROCESS;
+ } else if (status_ == PROCESS) {
+ new CallData(service_, cq_);
+ std::string prefix("Hello ");
+ reply_.set_message(prefix + request_.name());
+ responder_.Finish(reply_, Status::OK, this);
+ status_ = FINISH;
+ } else {
+ delete this;
+ }
+ }
+
+ private:
+ Greeter::AsyncService* service_;
+ ServerCompletionQueue* cq_;
+ ServerContext ctx_;
+ HelloRequest request_;
+ HelloReply reply_;
+ ServerAsyncResponseWriter<HelloReply> responder_;
+ enum CallStatus { CREATE, PROCESS, FINISH };
+ CallStatus status_;
+ };
+
+ // This can be run in multiple threads if needed.
+ void HandleRpcs() {
+ new CallData(&service_, cq_.get());
+ void* tag;
+ bool ok;
+ while (true) {
+ cq_->Next(&tag, &ok);
+ GPR_ASSERT(ok);
+ static_cast<CallData*>(tag)->Proceed();
+ }
+ }
+
+ std::unique_ptr<ServerCompletionQueue> cq_;
+ Greeter::AsyncService service_;
+ std::unique_ptr<Server> server_;
+};
+
+int main(int argc, char** argv) {
+ ServerImpl server;
+ server.Run();
+
+ return 0;
+}
diff --git a/examples/pubsub/publisher.h b/examples/cpp/helloworld/greeter_client.cc
index 33bcf98df4..dd0358ac95 100644
--- a/examples/pubsub/publisher.h
+++ b/examples/cpp/helloworld/greeter_client.cc
@@ -31,37 +31,55 @@
*
*/
-#ifndef GRPC_EXAMPLES_PUBSUB_PUBLISHER_H
-#define GRPC_EXAMPLES_PUBSUB_PUBLISHER_H
+#include <iostream>
+#include <memory>
+#include <string>
-#include <grpc++/channel_interface.h>
-#include <grpc++/status.h>
+#include <grpc/grpc.h>
+#include <grpc++/channel.h>
+#include <grpc++/client_context.h>
+#include <grpc++/create_channel.h>
+#include <grpc++/credentials.h>
+#include "helloworld.grpc.pb.h"
-#include "examples/pubsub/pubsub.grpc.pb.h"
+using grpc::Channel;
+using grpc::ChannelArguments;
+using grpc::ClientContext;
+using grpc::Status;
+using helloworld::HelloRequest;
+using helloworld::HelloReply;
+using helloworld::Greeter;
-namespace grpc {
-namespace examples {
-namespace pubsub {
-
-class Publisher {
+class GreeterClient {
public:
- Publisher(std::shared_ptr<ChannelInterface> channel);
- void Shutdown();
+ GreeterClient(std::shared_ptr<Channel> channel)
+ : stub_(Greeter::NewStub(channel)) {}
- Status CreateTopic(const grpc::string& topic);
- Status GetTopic(const grpc::string& topic);
- Status DeleteTopic(const grpc::string& topic);
- Status ListTopics(const grpc::string& project_id,
- std::vector<grpc::string>* topics);
+ std::string SayHello(const std::string& user) {
+ HelloRequest request;
+ request.set_name(user);
+ HelloReply reply;
+ ClientContext context;
- Status Publish(const grpc::string& topic, const grpc::string& data);
+ Status status = stub_->SayHello(&context, request, &reply);
+ if (status.ok()) {
+ return reply.message();
+ } else {
+ return "Rpc failed";
+ }
+ }
private:
- std::unique_ptr<tech::pubsub::PublisherService::Stub> stub_;
+ std::unique_ptr<Greeter::Stub> stub_;
};
-} // namespace pubsub
-} // namespace examples
-} // namespace grpc
+int main(int argc, char** argv) {
+ GreeterClient greeter(
+ grpc::CreateChannel("localhost:50051", grpc::InsecureCredentials(),
+ ChannelArguments()));
+ std::string user("world");
+ std::string reply = greeter.SayHello(user);
+ std::cout << "Greeter received: " << reply << std::endl;
-#endif // GRPC_EXAMPLES_PUBSUB_PUBLISHER_H
+ return 0;
+}
diff --git a/test/cpp/server/fixed_size_thread_pool_test.cc b/examples/cpp/helloworld/greeter_server.cc
index 442e974fc1..c1efdf563c 100644
--- a/test/cpp/server/fixed_size_thread_pool_test.cc
+++ b/examples/cpp/helloworld/greeter_server.cc
@@ -31,47 +31,48 @@
*
*/
-#include <condition_variable>
-#include <functional>
-#include <mutex>
+#include <iostream>
+#include <memory>
+#include <string>
-#include <grpc++/fixed_size_thread_pool.h>
-#include <gtest/gtest.h>
+#include <grpc/grpc.h>
+#include <grpc++/server.h>
+#include <grpc++/server_builder.h>
+#include <grpc++/server_context.h>
+#include <grpc++/server_credentials.h>
+#include "helloworld.grpc.pb.h"
-namespace grpc {
+using grpc::Server;
+using grpc::ServerBuilder;
+using grpc::ServerContext;
+using grpc::Status;
+using helloworld::HelloRequest;
+using helloworld::HelloReply;
+using helloworld::Greeter;
-class FixedSizeThreadPoolTest : public ::testing::Test {
- public:
- FixedSizeThreadPoolTest() : thread_pool_(4) {}
-
- protected:
- FixedSizeThreadPool thread_pool_;
+class GreeterServiceImpl final : public Greeter::Service {
+ Status SayHello(ServerContext* context, const HelloRequest* request,
+ HelloReply* reply) override {
+ std::string prefix("Hello ");
+ reply->set_message(prefix + request->name());
+ return Status::OK;
+ }
};
-void Callback(std::mutex* mu, std::condition_variable* cv, bool* done) {
- std::unique_lock<std::mutex> lock(*mu);
- *done = true;
- cv->notify_all();
-}
-
-TEST_F(FixedSizeThreadPoolTest, Add) {
- std::mutex mu;
- std::condition_variable cv;
- bool done = false;
- std::function<void()> callback = std::bind(Callback, &mu, &cv, &done);
- thread_pool_.Add(callback);
+void RunServer() {
+ std::string server_address("0.0.0.0:50051");
+ GreeterServiceImpl service;
- // Wait for the callback to finish.
- std::unique_lock<std::mutex> lock(mu);
- while (!done) {
- cv.wait(lock);
- }
+ ServerBuilder builder;
+ builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
+ builder.RegisterService(&service);
+ std::unique_ptr<Server> server(builder.BuildAndStart());
+ std::cout << "Server listening on " << server_address << std::endl;
+ server->Wait();
}
-} // namespace grpc
-
int main(int argc, char** argv) {
- ::testing::InitGoogleTest(&argc, argv);
- int result = RUN_ALL_TESTS();
- return result;
+ RunServer();
+
+ return 0;
}
diff --git a/examples/cpp/route_guide/Makefile b/examples/cpp/route_guide/Makefile
new file mode 100644
index 0000000000..b906177af3
--- /dev/null
+++ b/examples/cpp/route_guide/Makefile
@@ -0,0 +1,113 @@
+#
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+CXX = g++
+CPPFLAGS += -I/usr/local/include -pthread
+CXXFLAGS += -std=c++11
+LDFLAGS += -L/usr/local/lib -lgrpc++_unsecure -lgrpc -lgpr -lprotobuf -lpthread -ldl
+PROTOC = protoc
+GRPC_CPP_PLUGIN = grpc_cpp_plugin
+GRPC_CPP_PLUGIN_PATH ?= `which $(GRPC_CPP_PLUGIN)`
+
+PROTOS_PATH = ../../protos
+
+vpath %.proto $(PROTOS_PATH)
+
+all: system-check route_guide_client route_guide_server
+
+route_guide_client: route_guide.pb.o route_guide.grpc.pb.o route_guide_client.o helper.o
+ $(CXX) $^ $(LDFLAGS) -o $@
+
+route_guide_server: route_guide.pb.o route_guide.grpc.pb.o route_guide_server.o helper.o
+ $(CXX) $^ $(LDFLAGS) -o $@
+
+%.grpc.pb.cc: %.proto
+ $(PROTOC) -I $(PROTOS_PATH) --grpc_out=. --plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<
+
+%.pb.cc: %.proto
+ $(PROTOC) -I $(PROTOS_PATH) --cpp_out=. $<
+
+clean:
+ rm -f *.o *.pb.cc *.pb.h route_guide_client route_guide_server
+
+
+# The following is to test your system and ensure a smoother experience.
+# They are by no means necessary to actually compile a grpc-enabled software.
+
+PROTOC_CMD = which $(PROTOC)
+PROTOC_CHECK_CMD = $(PROTOC) --version | grep -q libprotoc.3
+PLUGIN_CHECK_CMD = which $(GRPC_CPP_PLUGIN)
+HAS_PROTOC = $(shell $(PROTOC_CMD) > /dev/null && echo true || echo false)
+ifeq ($(HAS_PROTOC),true)
+HAS_VALID_PROTOC = $(shell $(PROTOC_CHECK_CMD) 2> /dev/null && echo true || echo false)
+endif
+HAS_PLUGIN = $(shell $(PLUGIN_CHECK_CMD) > /dev/null && echo true || echo false)
+
+SYSTEM_OK = false
+ifeq ($(HAS_VALID_PROTOC),true)
+ifeq ($(HAS_PLUGIN),true)
+SYSTEM_OK = true
+endif
+endif
+
+system-check:
+ifneq ($(HAS_VALID_PROTOC),true)
+ @echo " DEPENDENCY ERROR"
+ @echo
+ @echo "You don't have protoc 3.0.0 installed in your path."
+ @echo "Please install Google protocol buffers 3.0.0 and its compiler."
+ @echo "You can find it here:"
+ @echo
+ @echo " https://github.com/google/protobuf/releases/tag/v3.0.0-alpha-1"
+ @echo
+ @echo "Here is what I get when trying to evaluate your version of protoc:"
+ @echo
+ -$(PROTOC) --version
+ @echo
+ @echo
+endif
+ifneq ($(HAS_PLUGIN),true)
+ @echo " DEPENDENCY ERROR"
+ @echo
+ @echo "You don't have the grpc c++ protobuf plugin installed in your path."
+ @echo "Please install grpc. You can find it here:"
+ @echo
+ @echo " https://github.com/grpc/grpc"
+ @echo
+ @echo "Here is what I get when trying to detect if you have the plugin:"
+ @echo
+ -which $(GRPC_CPP_PLUGIN)
+ @echo
+ @echo
+endif
+ifneq ($(SYSTEM_OK),true)
+ @false
+endif
diff --git a/examples/cpp/route_guide/helper.cc b/examples/cpp/route_guide/helper.cc
new file mode 100644
index 0000000000..c2415afdf7
--- /dev/null
+++ b/examples/cpp/route_guide/helper.cc
@@ -0,0 +1,178 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <algorithm>
+#include <cctype>
+#include <fstream>
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <vector>
+#include "route_guide.grpc.pb.h"
+
+namespace examples {
+
+std::string GetDbFileContent(int argc, char** argv) {
+ std::string db_path;
+ std::string arg_str("--db_path");
+ if (argc > 1) {
+ std::string argv_1 = argv[1];
+ size_t start_position = argv_1.find(arg_str);
+ if (start_position != std::string::npos) {
+ start_position += arg_str.size();
+ if (argv_1[start_position] == ' ' ||
+ argv_1[start_position] == '=') {
+ db_path = argv_1.substr(start_position + 1);
+ }
+ }
+ } else {
+ db_path = "route_guide_db.json";
+ }
+ std::ifstream db_file(db_path);
+ if (!db_file.is_open()) {
+ std::cout << "Failed to open " << db_path << std::endl;
+ return "";
+ }
+ std::stringstream db;
+ db << db_file.rdbuf();
+ return db.str();
+}
+
+// A simple parser for the json db file. It requires the db file to have the
+// exact form of [{"location": { "latitude": 123, "longitude": 456}, "name":
+// "the name can be empty" }, { ... } ... The spaces will be stripped.
+class Parser {
+ public:
+ explicit Parser(const std::string& db) : db_(db) {
+ // Remove all spaces.
+ db_.erase(
+ std::remove_if(db_.begin(), db_.end(), isspace),
+ db_.end());
+ if (!Match("[")) {
+ SetFailedAndReturnFalse();
+ }
+ }
+
+ bool Finished() {
+ return current_ >= db_.size();
+ }
+
+ bool TryParseOne(Feature* feature) {
+ if (failed_ || Finished() || !Match("{")) {
+ return SetFailedAndReturnFalse();
+ }
+ if (!Match(location_) || !Match("{") || !Match(latitude_)) {
+ return SetFailedAndReturnFalse();
+ }
+ long temp = 0;
+ ReadLong(&temp);
+ feature->mutable_location()->set_latitude(temp);
+ if (!Match(",") || !Match(longitude_)) {
+ return SetFailedAndReturnFalse();
+ }
+ ReadLong(&temp);
+ feature->mutable_location()->set_longitude(temp);
+ if (!Match("},") || !Match(name_) || !Match("\"")) {
+ return SetFailedAndReturnFalse();
+ }
+ size_t name_start = current_;
+ while (current_ != db_.size() && db_[current_++] != '"') {
+ }
+ if (current_ == db_.size()) {
+ return SetFailedAndReturnFalse();
+ }
+ feature->set_name(db_.substr(name_start, current_-name_start-1));
+ if (!Match("},")) {
+ if (db_[current_ - 1] == ']' && current_ == db_.size()) {
+ return true;
+ }
+ return SetFailedAndReturnFalse();
+ }
+ return true;
+ }
+
+ private:
+
+ bool SetFailedAndReturnFalse() {
+ failed_ = true;
+ return false;
+ }
+
+ bool Match(const std::string& prefix) {
+ bool eq = db_.substr(current_, prefix.size()) == prefix;
+ current_ += prefix.size();
+ return eq;
+ }
+
+ void ReadLong(long* l) {
+ size_t start = current_;
+ while (current_ != db_.size() && db_[current_] != ',' && db_[current_] != '}') {
+ current_++;
+ }
+ // It will throw an exception if fails.
+ *l = std::stol(db_.substr(start, current_ - start));
+ }
+
+ bool failed_ = false;
+ std::string db_;
+ size_t current_ = 0;
+ const std::string location_ = "\"location\":";
+ const std::string latitude_ = "\"latitude\":";
+ const std::string longitude_ = "\"longitude\":";
+ const std::string name_ = "\"name\":";
+};
+
+void ParseDb(const std::string& db, std::vector<Feature>* feature_list) {
+ feature_list->clear();
+ std::string db_content(db);
+ db_content.erase(
+ std::remove_if(db_content.begin(), db_content.end(), isspace),
+ db_content.end());
+
+ Parser parser(db_content);
+ Feature feature;
+ while (!parser.Finished()) {
+ feature_list->push_back(Feature());
+ if (!parser.TryParseOne(&feature_list->back())) {
+ std::cout << "Error parsing the db file";
+ feature_list->clear();
+ break;
+ }
+ }
+ std::cout << "DB parsed, loaded " << feature_list->size()
+ << " features." << std::endl;
+}
+
+
+} // namespace examples
+
diff --git a/examples/pubsub/subscriber.h b/examples/cpp/route_guide/helper.h
index 40ab45471d..65c93c1d34 100644
--- a/examples/pubsub/subscriber.h
+++ b/examples/cpp/route_guide/helper.h
@@ -31,38 +31,20 @@
*
*/
-#ifndef GRPC_EXAMPLES_PUBSUB_SUBSCRIBER_H
-#define GRPC_EXAMPLES_PUBSUB_SUBSCRIBER_H
+#ifndef GRPC_COMMON_CPP_ROUTE_GUIDE_HELPER_H_
+#define GRPC_COMMON_CPP_ROUTE_GUIDE_HELPER_H_
-#include <grpc++/channel_interface.h>
-#include <grpc++/status.h>
+#include <string>
+#include <vector>
-#include "examples/pubsub/pubsub.grpc.pb.h"
-
-namespace grpc {
namespace examples {
-namespace pubsub {
-
-class Subscriber {
- public:
- Subscriber(std::shared_ptr<ChannelInterface> channel);
- void Shutdown();
-
- Status CreateSubscription(const grpc::string& topic,
- const grpc::string& name);
+class Feature;
- Status GetSubscription(const grpc::string& name, grpc::string* topic);
+std::string GetDbFileContent(int argc, char** argv);
- Status DeleteSubscription(const grpc::string& name);
+void ParseDb(const std::string& db, std::vector<Feature>* feature_list);
- Status Pull(const grpc::string& name, grpc::string* data);
-
- private:
- std::unique_ptr<tech::pubsub::SubscriberService::Stub> stub_;
-};
-
-} // namespace pubsub
} // namespace examples
-} // namespace grpc
-#endif // GRPC_EXAMPLES_PUBSUB_SUBSCRIBER_H
+#endif // GRPC_COMMON_CPP_ROUTE_GUIDE_HELPER_H_
+
diff --git a/examples/cpp/route_guide/route_guide_client.cc b/examples/cpp/route_guide/route_guide_client.cc
new file mode 100644
index 0000000000..814def27f3
--- /dev/null
+++ b/examples/cpp/route_guide/route_guide_client.cc
@@ -0,0 +1,252 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <chrono>
+#include <iostream>
+#include <memory>
+#include <random>
+#include <string>
+#include <thread>
+
+#include <grpc/grpc.h>
+#include <grpc++/channel.h>
+#include <grpc++/client_context.h>
+#include <grpc++/create_channel.h>
+#include <grpc++/credentials.h>
+#include "helper.h"
+#include "route_guide.grpc.pb.h"
+
+using grpc::Channel;
+using grpc::ChannelArguments;
+using grpc::ClientContext;
+using grpc::ClientReader;
+using grpc::ClientReaderWriter;
+using grpc::ClientWriter;
+using grpc::Status;
+using examples::Point;
+using examples::Feature;
+using examples::Rectangle;
+using examples::RouteSummary;
+using examples::RouteNote;
+using examples::RouteGuide;
+
+Point MakePoint(long latitude, long longitude) {
+ Point p;
+ p.set_latitude(latitude);
+ p.set_longitude(longitude);
+ return p;
+}
+
+Feature MakeFeature(const std::string& name,
+ long latitude, long longitude) {
+ Feature f;
+ f.set_name(name);
+ f.mutable_location()->CopyFrom(MakePoint(latitude, longitude));
+ return f;
+}
+
+RouteNote MakeRouteNote(const std::string& message,
+ long latitude, long longitude) {
+ RouteNote n;
+ n.set_message(message);
+ n.mutable_location()->CopyFrom(MakePoint(latitude, longitude));
+ return n;
+}
+
+class RouteGuideClient {
+ public:
+ RouteGuideClient(std::shared_ptr<Channel> channel, const std::string& db)
+ : stub_(RouteGuide::NewStub(channel)) {
+ examples::ParseDb(db, &feature_list_);
+ }
+
+ void GetFeature() {
+ Point point;
+ Feature feature;
+ point = MakePoint(409146138, -746188906);
+ GetOneFeature(point, &feature);
+ point = MakePoint(0, 0);
+ GetOneFeature(point, &feature);
+ }
+
+ void ListFeatures() {
+ examples::Rectangle rect;
+ Feature feature;
+ ClientContext context;
+
+ rect.mutable_lo()->set_latitude(400000000);
+ rect.mutable_lo()->set_longitude(-750000000);
+ rect.mutable_hi()->set_latitude(420000000);
+ rect.mutable_hi()->set_longitude(-730000000);
+ std::cout << "Looking for features between 40, -75 and 42, -73"
+ << std::endl;
+
+ std::unique_ptr<ClientReader<Feature> > reader(
+ stub_->ListFeatures(&context, rect));
+ while (reader->Read(&feature)) {
+ std::cout << "Found feature called "
+ << feature.name() << " at "
+ << feature.location().latitude()/kCoordFactor_ << ", "
+ << feature.location().longitude()/kCoordFactor_ << std::endl;
+ }
+ Status status = reader->Finish();
+ if (status.ok()) {
+ std::cout << "ListFeatures rpc succeeded." << std::endl;
+ } else {
+ std::cout << "ListFeatures rpc failed." << std::endl;
+ }
+ }
+
+ void RecordRoute() {
+ Point point;
+ RouteSummary stats;
+ ClientContext context;
+ const int kPoints = 10;
+ unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
+
+ std::default_random_engine generator(seed);
+ std::uniform_int_distribution<int> feature_distribution(
+ 0, feature_list_.size() - 1);
+ std::uniform_int_distribution<int> delay_distribution(
+ 500, 1500);
+
+ std::unique_ptr<ClientWriter<Point> > writer(
+ stub_->RecordRoute(&context, &stats));
+ for (int i = 0; i < kPoints; i++) {
+ const Feature& f = feature_list_[feature_distribution(generator)];
+ std::cout << "Visiting point "
+ << f.location().latitude()/kCoordFactor_ << ", "
+ << f.location().longitude()/kCoordFactor_ << std::endl;
+ if (!writer->Write(f.location())) {
+ // Broken stream.
+ break;
+ }
+ std::this_thread::sleep_for(std::chrono::milliseconds(
+ delay_distribution(generator)));
+ }
+ writer->WritesDone();
+ Status status = writer->Finish();
+ if (status.ok()) {
+ std::cout << "Finished trip with " << stats.point_count() << " points\n"
+ << "Passed " << stats.feature_count() << " features\n"
+ << "Travelled " << stats.distance() << " meters\n"
+ << "It took " << stats.elapsed_time() << " seconds"
+ << std::endl;
+ } else {
+ std::cout << "RecordRoute rpc failed." << std::endl;
+ }
+ }
+
+ void RouteChat() {
+ ClientContext context;
+
+ std::shared_ptr<ClientReaderWriter<RouteNote, RouteNote> > stream(
+ stub_->RouteChat(&context));
+
+ std::thread writer([stream]() {
+ std::vector<RouteNote> notes{
+ MakeRouteNote("First message", 0, 0),
+ MakeRouteNote("Second message", 0, 1),
+ MakeRouteNote("Third message", 1, 0),
+ MakeRouteNote("Fourth message", 0, 0)};
+ for (const RouteNote& note : notes) {
+ std::cout << "Sending message " << note.message()
+ << " at " << note.location().latitude() << ", "
+ << note.location().longitude() << std::endl;
+ stream->Write(note);
+ }
+ stream->WritesDone();
+ });
+
+ RouteNote server_note;
+ while (stream->Read(&server_note)) {
+ std::cout << "Got message " << server_note.message()
+ << " at " << server_note.location().latitude() << ", "
+ << server_note.location().longitude() << std::endl;
+ }
+ writer.join();
+ Status status = stream->Finish();
+ if (!status.ok()) {
+ std::cout << "RouteChat rpc failed." << std::endl;
+ }
+ }
+
+ private:
+
+ bool GetOneFeature(const Point& point, Feature* feature) {
+ ClientContext context;
+ Status status = stub_->GetFeature(&context, point, feature);
+ if (!status.ok()) {
+ std::cout << "GetFeature rpc failed." << std::endl;
+ return false;
+ }
+ if (!feature->has_location()) {
+ std::cout << "Server returns incomplete feature." << std::endl;
+ return false;
+ }
+ if (feature->name().empty()) {
+ std::cout << "Found no feature at "
+ << feature->location().latitude()/kCoordFactor_ << ", "
+ << feature->location().longitude()/kCoordFactor_ << std::endl;
+ } else {
+ std::cout << "Found feature called " << feature->name() << " at "
+ << feature->location().latitude()/kCoordFactor_ << ", "
+ << feature->location().longitude()/kCoordFactor_ << std::endl;
+ }
+ return true;
+ }
+
+ const float kCoordFactor_ = 10000000.0;
+ std::unique_ptr<RouteGuide::Stub> stub_;
+ std::vector<Feature> feature_list_;
+};
+
+int main(int argc, char** argv) {
+ // Expect only arg: --db_path=path/to/route_guide_db.json.
+ std::string db = examples::GetDbFileContent(argc, argv);
+ RouteGuideClient guide(
+ grpc::CreateChannel("localhost:50051", grpc::InsecureCredentials(),
+ ChannelArguments()),
+ db);
+
+ std::cout << "-------------- GetFeature --------------" << std::endl;
+ guide.GetFeature();
+ std::cout << "-------------- ListFeatures --------------" << std::endl;
+ guide.ListFeatures();
+ std::cout << "-------------- RecordRoute --------------" << std::endl;
+ guide.RecordRoute();
+ std::cout << "-------------- RouteChat --------------" << std::endl;
+ guide.RouteChat();
+
+ return 0;
+}
diff --git a/examples/cpp/route_guide/route_guide_db.json b/examples/cpp/route_guide/route_guide_db.json
new file mode 100644
index 0000000000..9d6a980ab7
--- /dev/null
+++ b/examples/cpp/route_guide/route_guide_db.json
@@ -0,0 +1,601 @@
+[{
+ "location": {
+ "latitude": 407838351,
+ "longitude": -746143763
+ },
+ "name": "Patriots Path, Mendham, NJ 07945, USA"
+}, {
+ "location": {
+ "latitude": 408122808,
+ "longitude": -743999179
+ },
+ "name": "101 New Jersey 10, Whippany, NJ 07981, USA"
+}, {
+ "location": {
+ "latitude": 413628156,
+ "longitude": -749015468
+ },
+ "name": "U.S. 6, Shohola, PA 18458, USA"
+}, {
+ "location": {
+ "latitude": 419999544,
+ "longitude": -740371136
+ },
+ "name": "5 Conners Road, Kingston, NY 12401, USA"
+}, {
+ "location": {
+ "latitude": 414008389,
+ "longitude": -743951297
+ },
+ "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA"
+}, {
+ "location": {
+ "latitude": 419611318,
+ "longitude": -746524769
+ },
+ "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA"
+}, {
+ "location": {
+ "latitude": 406109563,
+ "longitude": -742186778
+ },
+ "name": "4001 Tremley Point Road, Linden, NJ 07036, USA"
+}, {
+ "location": {
+ "latitude": 416802456,
+ "longitude": -742370183
+ },
+ "name": "352 South Mountain Road, Wallkill, NY 12589, USA"
+}, {
+ "location": {
+ "latitude": 412950425,
+ "longitude": -741077389
+ },
+ "name": "Bailey Turn Road, Harriman, NY 10926, USA"
+}, {
+ "location": {
+ "latitude": 412144655,
+ "longitude": -743949739
+ },
+ "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA"
+}, {
+ "location": {
+ "latitude": 415736605,
+ "longitude": -742847522
+ },
+ "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA"
+}, {
+ "location": {
+ "latitude": 413843930,
+ "longitude": -740501726
+ },
+ "name": "162 Merrill Road, Highland Mills, NY 10930, USA"
+}, {
+ "location": {
+ "latitude": 410873075,
+ "longitude": -744459023
+ },
+ "name": "Clinton Road, West Milford, NJ 07480, USA"
+}, {
+ "location": {
+ "latitude": 412346009,
+ "longitude": -744026814
+ },
+ "name": "16 Old Brook Lane, Warwick, NY 10990, USA"
+}, {
+ "location": {
+ "latitude": 402948455,
+ "longitude": -747903913
+ },
+ "name": "3 Drake Lane, Pennington, NJ 08534, USA"
+}, {
+ "location": {
+ "latitude": 406337092,
+ "longitude": -740122226
+ },
+ "name": "6324 8th Avenue, Brooklyn, NY 11220, USA"
+}, {
+ "location": {
+ "latitude": 406421967,
+ "longitude": -747727624
+ },
+ "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA"
+}, {
+ "location": {
+ "latitude": 416318082,
+ "longitude": -749677716
+ },
+ "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA"
+}, {
+ "location": {
+ "latitude": 415301720,
+ "longitude": -748416257
+ },
+ "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA"
+}, {
+ "location": {
+ "latitude": 402647019,
+ "longitude": -747071791
+ },
+ "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA"
+}, {
+ "location": {
+ "latitude": 412567807,
+ "longitude": -741058078
+ },
+ "name": "New York State Reference Route 987E, Southfields, NY 10975, USA"
+}, {
+ "location": {
+ "latitude": 416855156,
+ "longitude": -744420597
+ },
+ "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA"
+}, {
+ "location": {
+ "latitude": 404663628,
+ "longitude": -744820157
+ },
+ "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA"
+}, {
+ "location": {
+ "latitude": 407113723,
+ "longitude": -749746483
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 402133926,
+ "longitude": -743613249
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 400273442,
+ "longitude": -741220915
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411236786,
+ "longitude": -744070769
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411633782,
+ "longitude": -746784970
+ },
+ "name": "211-225 Plains Road, Augusta, NJ 07822, USA"
+}, {
+ "location": {
+ "latitude": 415830701,
+ "longitude": -742952812
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 413447164,
+ "longitude": -748712898
+ },
+ "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA"
+}, {
+ "location": {
+ "latitude": 405047245,
+ "longitude": -749800722
+ },
+ "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA"
+}, {
+ "location": {
+ "latitude": 418858923,
+ "longitude": -746156790
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 417951888,
+ "longitude": -748484944
+ },
+ "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA"
+}, {
+ "location": {
+ "latitude": 407033786,
+ "longitude": -743977337
+ },
+ "name": "26 East 3rd Street, New Providence, NJ 07974, USA"
+}, {
+ "location": {
+ "latitude": 417548014,
+ "longitude": -740075041
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 410395868,
+ "longitude": -744972325
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404615353,
+ "longitude": -745129803
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 406589790,
+ "longitude": -743560121
+ },
+ "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA"
+}, {
+ "location": {
+ "latitude": 414653148,
+ "longitude": -740477477
+ },
+ "name": "18 Lannis Avenue, New Windsor, NY 12553, USA"
+}, {
+ "location": {
+ "latitude": 405957808,
+ "longitude": -743255336
+ },
+ "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA"
+}, {
+ "location": {
+ "latitude": 411733589,
+ "longitude": -741648093
+ },
+ "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA"
+}, {
+ "location": {
+ "latitude": 412676291,
+ "longitude": -742606606
+ },
+ "name": "1270 Lakes Road, Monroe, NY 10950, USA"
+}, {
+ "location": {
+ "latitude": 409224445,
+ "longitude": -748286738
+ },
+ "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA"
+}, {
+ "location": {
+ "latitude": 406523420,
+ "longitude": -742135517
+ },
+ "name": "652 Garden Street, Elizabeth, NJ 07202, USA"
+}, {
+ "location": {
+ "latitude": 401827388,
+ "longitude": -740294537
+ },
+ "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA"
+}, {
+ "location": {
+ "latitude": 410564152,
+ "longitude": -743685054
+ },
+ "name": "13-17 Stanley Street, West Milford, NJ 07480, USA"
+}, {
+ "location": {
+ "latitude": 408472324,
+ "longitude": -740726046
+ },
+ "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA"
+}, {
+ "location": {
+ "latitude": 412452168,
+ "longitude": -740214052
+ },
+ "name": "5 White Oak Lane, Stony Point, NY 10980, USA"
+}, {
+ "location": {
+ "latitude": 409146138,
+ "longitude": -746188906
+ },
+ "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA"
+}, {
+ "location": {
+ "latitude": 404701380,
+ "longitude": -744781745
+ },
+ "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA"
+}, {
+ "location": {
+ "latitude": 409642566,
+ "longitude": -746017679
+ },
+ "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA"
+}, {
+ "location": {
+ "latitude": 408031728,
+ "longitude": -748645385
+ },
+ "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA"
+}, {
+ "location": {
+ "latitude": 413700272,
+ "longitude": -742135189
+ },
+ "name": "367 Prospect Road, Chester, NY 10918, USA"
+}, {
+ "location": {
+ "latitude": 404310607,
+ "longitude": -740282632
+ },
+ "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA"
+}, {
+ "location": {
+ "latitude": 409319800,
+ "longitude": -746201391
+ },
+ "name": "11 Ward Street, Mount Arlington, NJ 07856, USA"
+}, {
+ "location": {
+ "latitude": 406685311,
+ "longitude": -742108603
+ },
+ "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA"
+}, {
+ "location": {
+ "latitude": 419018117,
+ "longitude": -749142781
+ },
+ "name": "43 Dreher Road, Roscoe, NY 12776, USA"
+}, {
+ "location": {
+ "latitude": 412856162,
+ "longitude": -745148837
+ },
+ "name": "Swan Street, Pine Island, NY 10969, USA"
+}, {
+ "location": {
+ "latitude": 416560744,
+ "longitude": -746721964
+ },
+ "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA"
+}, {
+ "location": {
+ "latitude": 405314270,
+ "longitude": -749836354
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 414219548,
+ "longitude": -743327440
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 415534177,
+ "longitude": -742900616
+ },
+ "name": "565 Winding Hills Road, Montgomery, NY 12549, USA"
+}, {
+ "location": {
+ "latitude": 406898530,
+ "longitude": -749127080
+ },
+ "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA"
+}, {
+ "location": {
+ "latitude": 407586880,
+ "longitude": -741670168
+ },
+ "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA"
+}, {
+ "location": {
+ "latitude": 400106455,
+ "longitude": -742870190
+ },
+ "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA"
+}, {
+ "location": {
+ "latitude": 400066188,
+ "longitude": -746793294
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418803880,
+ "longitude": -744102673
+ },
+ "name": "40 Mountain Road, Napanoch, NY 12458, USA"
+}, {
+ "location": {
+ "latitude": 414204288,
+ "longitude": -747895140
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 414777405,
+ "longitude": -740615601
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 415464475,
+ "longitude": -747175374
+ },
+ "name": "48 North Road, Forestburgh, NY 12777, USA"
+}, {
+ "location": {
+ "latitude": 404062378,
+ "longitude": -746376177
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 405688272,
+ "longitude": -749285130
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 400342070,
+ "longitude": -748788996
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401809022,
+ "longitude": -744157964
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404226644,
+ "longitude": -740517141
+ },
+ "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA"
+}, {
+ "location": {
+ "latitude": 410322033,
+ "longitude": -747871659
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 407100674,
+ "longitude": -747742727
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418811433,
+ "longitude": -741718005
+ },
+ "name": "213 Bush Road, Stone Ridge, NY 12484, USA"
+}, {
+ "location": {
+ "latitude": 415034302,
+ "longitude": -743850945
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411349992,
+ "longitude": -743694161
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404839914,
+ "longitude": -744759616
+ },
+ "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA"
+}, {
+ "location": {
+ "latitude": 414638017,
+ "longitude": -745957854
+ },
+ "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA"
+}, {
+ "location": {
+ "latitude": 412127800,
+ "longitude": -740173578
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401263460,
+ "longitude": -747964303
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 412843391,
+ "longitude": -749086026
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418512773,
+ "longitude": -743067823
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404318328,
+ "longitude": -740835638
+ },
+ "name": "42-102 Main Street, Belford, NJ 07718, USA"
+}, {
+ "location": {
+ "latitude": 419020746,
+ "longitude": -741172328
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404080723,
+ "longitude": -746119569
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401012643,
+ "longitude": -744035134
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404306372,
+ "longitude": -741079661
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 403966326,
+ "longitude": -748519297
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 405002031,
+ "longitude": -748407866
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 409532885,
+ "longitude": -742200683
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 416851321,
+ "longitude": -742674555
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 406411633,
+ "longitude": -741722051
+ },
+ "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA"
+}, {
+ "location": {
+ "latitude": 413069058,
+ "longitude": -744597778
+ },
+ "name": "261 Van Sickle Road, Goshen, NY 10924, USA"
+}, {
+ "location": {
+ "latitude": 418465462,
+ "longitude": -746859398
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411733222,
+ "longitude": -744228360
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 410248224,
+ "longitude": -747127767
+ },
+ "name": "3 Hasta Way, Newton, NJ 07860, USA"
+}]
diff --git a/examples/cpp/route_guide/route_guide_server.cc b/examples/cpp/route_guide/route_guide_server.cc
new file mode 100644
index 0000000000..b37539299a
--- /dev/null
+++ b/examples/cpp/route_guide/route_guide_server.cc
@@ -0,0 +1,202 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <algorithm>
+#include <chrono>
+#include <cmath>
+#include <iostream>
+#include <memory>
+#include <string>
+
+#include <grpc/grpc.h>
+#include <grpc++/server.h>
+#include <grpc++/server_builder.h>
+#include <grpc++/server_context.h>
+#include <grpc++/server_credentials.h>
+#include "helper.h"
+#include "route_guide.grpc.pb.h"
+
+using grpc::Server;
+using grpc::ServerBuilder;
+using grpc::ServerContext;
+using grpc::ServerReader;
+using grpc::ServerReaderWriter;
+using grpc::ServerWriter;
+using grpc::Status;
+using examples::Point;
+using examples::Feature;
+using examples::Rectangle;
+using examples::RouteSummary;
+using examples::RouteNote;
+using examples::RouteGuide;
+using std::chrono::system_clock;
+
+
+float ConvertToRadians(float num) {
+ return num * 3.1415926 /180;
+}
+
+float GetDistance(const Point& start, const Point& end) {
+ const float kCoordFactor = 10000000.0;
+ float lat_1 = start.latitude() / kCoordFactor;
+ float lat_2 = end.latitude() / kCoordFactor;
+ float lon_1 = start.longitude() / kCoordFactor;
+ float lon_2 = end.longitude() / kCoordFactor;
+ float lat_rad_1 = ConvertToRadians(lat_1);
+ float lat_rad_2 = ConvertToRadians(lat_2);
+ float delta_lat_rad = ConvertToRadians(lat_2-lat_1);
+ float delta_lon_rad = ConvertToRadians(lon_2-lon_1);
+
+ float a = pow(sin(delta_lat_rad/2), 2) + cos(lat_rad_1) * cos(lat_rad_2) *
+ pow(sin(delta_lon_rad/2), 2);
+ float c = 2 * atan2(sqrt(a), sqrt(1-a));
+ int R = 6371000; // metres
+
+ return R * c;
+}
+
+std::string GetFeatureName(const Point& point,
+ const std::vector<Feature>& feature_list) {
+ for (const Feature& f : feature_list) {
+ if (f.location().latitude() == point.latitude() &&
+ f.location().longitude() == point.longitude()) {
+ return f.name();
+ }
+ }
+ return "";
+}
+
+class RouteGuideImpl final : public RouteGuide::Service {
+ public:
+ explicit RouteGuideImpl(const std::string& db) {
+ examples::ParseDb(db, &feature_list_);
+ }
+
+ Status GetFeature(ServerContext* context, const Point* point,
+ Feature* feature) override {
+ feature->set_name(GetFeatureName(*point, feature_list_));
+ feature->mutable_location()->CopyFrom(*point);
+ return Status::OK;
+ }
+
+ Status ListFeatures(ServerContext* context,
+ const examples::Rectangle* rectangle,
+ ServerWriter<Feature>* writer) override {
+ auto lo = rectangle->lo();
+ auto hi = rectangle->hi();
+ long left = (std::min)(lo.longitude(), hi.longitude());
+ long right = (std::max)(lo.longitude(), hi.longitude());
+ long top = (std::max)(lo.latitude(), hi.latitude());
+ long bottom = (std::min)(lo.latitude(), hi.latitude());
+ for (const Feature& f : feature_list_) {
+ if (f.location().longitude() >= left &&
+ f.location().longitude() <= right &&
+ f.location().latitude() >= bottom &&
+ f.location().latitude() <= top) {
+ writer->Write(f);
+ }
+ }
+ return Status::OK;
+ }
+
+ Status RecordRoute(ServerContext* context, ServerReader<Point>* reader,
+ RouteSummary* summary) override {
+ Point point;
+ int point_count = 0;
+ int feature_count = 0;
+ float distance = 0.0;
+ Point previous;
+
+ system_clock::time_point start_time = system_clock::now();
+ while (reader->Read(&point)) {
+ point_count++;
+ if (!GetFeatureName(point, feature_list_).empty()) {
+ feature_count++;
+ }
+ if (point_count != 1) {
+ distance += GetDistance(previous, point);
+ }
+ previous = point;
+ }
+ system_clock::time_point end_time = system_clock::now();
+ summary->set_point_count(point_count);
+ summary->set_feature_count(feature_count);
+ summary->set_distance(static_cast<long>(distance));
+ auto secs = std::chrono::duration_cast<std::chrono::seconds>(
+ end_time - start_time);
+ summary->set_elapsed_time(secs.count());
+
+ return Status::OK;
+ }
+
+ Status RouteChat(ServerContext* context,
+ ServerReaderWriter<RouteNote, RouteNote>* stream) override {
+ std::vector<RouteNote> received_notes;
+ RouteNote note;
+ while (stream->Read(&note)) {
+ for (const RouteNote& n : received_notes) {
+ if (n.location().latitude() == note.location().latitude() &&
+ n.location().longitude() == note.location().longitude()) {
+ stream->Write(n);
+ }
+ }
+ received_notes.push_back(note);
+ }
+
+ return Status::OK;
+ }
+
+ private:
+
+ std::vector<Feature> feature_list_;
+};
+
+void RunServer(const std::string& db_path) {
+ std::string server_address("0.0.0.0:50051");
+ RouteGuideImpl service(db_path);
+
+ ServerBuilder builder;
+ builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
+ builder.RegisterService(&service);
+ std::unique_ptr<Server> server(builder.BuildAndStart());
+ std::cout << "Server listening on " << server_address << std::endl;
+ server->Wait();
+}
+
+int main(int argc, char** argv) {
+ // Expect only arg: --db_path=path/to/route_guide_db.json.
+ std::string db = examples::GetDbFileContent(argc, argv);
+ RunServer(db);
+
+ return 0;
+}
diff --git a/examples/csharp/.gitignore b/examples/csharp/.gitignore
new file mode 100644
index 0000000000..585000ea2d
--- /dev/null
+++ b/examples/csharp/.gitignore
@@ -0,0 +1,5 @@
+bin/
+obj/
+packages/
+*.suo
+*.userprefs
diff --git a/examples/csharp/.nuget/packages.config b/examples/csharp/.nuget/packages.config
new file mode 100644
index 0000000000..b14373069f
--- /dev/null
+++ b/examples/csharp/.nuget/packages.config
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Grpc.Tools" version="0.6.0" />
+</packages> \ No newline at end of file
diff --git a/examples/csharp/Greeter.sln b/examples/csharp/Greeter.sln
new file mode 100644
index 0000000000..9430e94de9
--- /dev/null
+++ b/examples/csharp/Greeter.sln
@@ -0,0 +1,42 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.31101.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Greeter", "Greeter\Greeter.csproj", "{724DFC8C-4B57-4C3F-811C-0463BE2A2829}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreeterServer", "GreeterServer\GreeterServer.csproj", "{A7706C84-92D2-4B7A-B779-76B64D2950EC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreeterClient", "GreeterClient\GreeterClient.csproj", "{ACCF4597-3748-4117-8633-1CB767F8CCC3}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{FF1EBE95-F20D-4C27-8A61-D0125F3C8152}"
+ ProjectSection(SolutionItems) = preProject
+ .nuget\packages.config = .nuget\packages.config
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {724DFC8C-4B57-4C3F-811C-0463BE2A2829}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {724DFC8C-4B57-4C3F-811C-0463BE2A2829}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {724DFC8C-4B57-4C3F-811C-0463BE2A2829}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {724DFC8C-4B57-4C3F-811C-0463BE2A2829}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A7706C84-92D2-4B7A-B779-76B64D2950EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A7706C84-92D2-4B7A-B779-76B64D2950EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A7706C84-92D2-4B7A-B779-76B64D2950EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A7706C84-92D2-4B7A-B779-76B64D2950EC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ACCF4597-3748-4117-8633-1CB767F8CCC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ACCF4597-3748-4117-8633-1CB767F8CCC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ACCF4597-3748-4117-8633-1CB767F8CCC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ACCF4597-3748-4117-8633-1CB767F8CCC3}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = Greeter\Greeter.csproj
+ EndGlobalSection
+EndGlobal
diff --git a/examples/csharp/Greeter/.gitignore b/examples/csharp/Greeter/.gitignore
new file mode 100644
index 0000000000..1746e3269e
--- /dev/null
+++ b/examples/csharp/Greeter/.gitignore
@@ -0,0 +1,2 @@
+bin
+obj
diff --git a/examples/csharp/Greeter/Greeter.csproj b/examples/csharp/Greeter/Greeter.csproj
new file mode 100644
index 0000000000..b8f965dbd2
--- /dev/null
+++ b/examples/csharp/Greeter/Greeter.csproj
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" />
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>10.0.0</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{724DFC8C-4B57-4C3F-811C-0463BE2A2829}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <RootNamespace>Greeter</RootNamespace>
+ <AssemblyName>Greeter</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <NuGetPackageImportStamp>927432a0</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug</OutputPath>
+ <DefineConstants>DEBUG;</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>full</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release</OutputPath>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Google.ProtocolBuffers">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.dll</HintPath>
+ </Reference>
+ <Reference Include="Google.ProtocolBuffers.Serialization">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.Serialization.dll</HintPath>
+ </Reference>
+ <Reference Include="Grpc.Core, Version=0.6.5668.37363, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Grpc.Core.0.6.0\lib\net45\Grpc.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\System.Collections.Immutable.1.1.36\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Interactive.Async">
+ <HintPath>..\packages\Ix-Async.1.2.3\lib\net45\System.Interactive.Async.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Helloworld.cs" />
+ <Compile Include="HelloworldGrpc.cs" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <ItemGroup>
+ <None Include="packages.config" />
+ <None Include="protos\helloworld.proto" />
+ </ItemGroup>
+ <ItemGroup />
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets'))" />
+ </Target>
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" />
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" />
+</Project> \ No newline at end of file
diff --git a/examples/csharp/Greeter/Helloworld.cs b/examples/csharp/Greeter/Helloworld.cs
new file mode 100644
index 0000000000..923a4271e9
--- /dev/null
+++ b/examples/csharp/Greeter/Helloworld.cs
@@ -0,0 +1,617 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: helloworld.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.ProtocolBuffers;
+using pbc = global::Google.ProtocolBuffers.Collections;
+using pbd = global::Google.ProtocolBuffers.Descriptors;
+using scg = global::System.Collections.Generic;
+namespace helloworld {
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public static partial class Helloworld {
+
+ #region Extension registration
+ public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
+ }
+ #endregion
+ #region Static variables
+ internal static pbd::MessageDescriptor internal__static_helloworld_HelloRequest__Descriptor;
+ internal static pb::FieldAccess.FieldAccessorTable<global::helloworld.HelloRequest, global::helloworld.HelloRequest.Builder> internal__static_helloworld_HelloRequest__FieldAccessorTable;
+ internal static pbd::MessageDescriptor internal__static_helloworld_HelloReply__Descriptor;
+ internal static pb::FieldAccess.FieldAccessorTable<global::helloworld.HelloReply, global::helloworld.HelloReply.Builder> internal__static_helloworld_HelloReply__FieldAccessorTable;
+ #endregion
+ #region Descriptor
+ public static pbd::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbd::FileDescriptor descriptor;
+
+ static Helloworld() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "ChBoZWxsb3dvcmxkLnByb3RvEgpoZWxsb3dvcmxkIhwKDEhlbGxvUmVxdWVz",
+ "dBIMCgRuYW1lGAEgASgJIh0KCkhlbGxvUmVwbHkSDwoHbWVzc2FnZRgBIAEo",
+ "CTJJCgdHcmVldGVyEj4KCFNheUhlbGxvEhguaGVsbG93b3JsZC5IZWxsb1Jl",
+ "cXVlc3QaFi5oZWxsb3dvcmxkLkhlbGxvUmVwbHkiAEISChBpby5ncnBjLmV4",
+ "YW1wbGVz"));
+ pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
+ descriptor = root;
+ internal__static_helloworld_HelloRequest__Descriptor = Descriptor.MessageTypes[0];
+ internal__static_helloworld_HelloRequest__FieldAccessorTable =
+ new pb::FieldAccess.FieldAccessorTable<global::helloworld.HelloRequest, global::helloworld.HelloRequest.Builder>(internal__static_helloworld_HelloRequest__Descriptor,
+ new string[] { "Name", });
+ internal__static_helloworld_HelloReply__Descriptor = Descriptor.MessageTypes[1];
+ internal__static_helloworld_HelloReply__FieldAccessorTable =
+ new pb::FieldAccess.FieldAccessorTable<global::helloworld.HelloReply, global::helloworld.HelloReply.Builder>(internal__static_helloworld_HelloReply__Descriptor,
+ new string[] { "Message", });
+ pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
+ RegisterAllExtensions(registry);
+ return registry;
+ };
+ pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+ new pbd::FileDescriptor[] {
+ }, assigner);
+ }
+ #endregion
+
+ }
+ #region Messages
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class HelloRequest : pb::GeneratedMessage<HelloRequest, HelloRequest.Builder> {
+ private HelloRequest() { }
+ private static readonly HelloRequest defaultInstance = new HelloRequest().MakeReadOnly();
+ private static readonly string[] _helloRequestFieldNames = new string[] { "name" };
+ private static readonly uint[] _helloRequestFieldTags = new uint[] { 10 };
+ public static HelloRequest DefaultInstance {
+ get { return defaultInstance; }
+ }
+
+ public override HelloRequest DefaultInstanceForType {
+ get { return DefaultInstance; }
+ }
+
+ protected override HelloRequest ThisMessage {
+ get { return this; }
+ }
+
+ public static pbd::MessageDescriptor Descriptor {
+ get { return global::helloworld.Helloworld.internal__static_helloworld_HelloRequest__Descriptor; }
+ }
+
+ protected override pb::FieldAccess.FieldAccessorTable<HelloRequest, HelloRequest.Builder> InternalFieldAccessors {
+ get { return global::helloworld.Helloworld.internal__static_helloworld_HelloRequest__FieldAccessorTable; }
+ }
+
+ public const int NameFieldNumber = 1;
+ private bool hasName;
+ private string name_ = "";
+ public bool HasName {
+ get { return hasName; }
+ }
+ public string Name {
+ get { return name_; }
+ }
+
+ public override bool IsInitialized {
+ get {
+ return true;
+ }
+ }
+
+ public override void WriteTo(pb::ICodedOutputStream output) {
+ CalcSerializedSize();
+ string[] field_names = _helloRequestFieldNames;
+ if (hasName) {
+ output.WriteString(1, field_names[0], Name);
+ }
+ UnknownFields.WriteTo(output);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public override int SerializedSize {
+ get {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+ return CalcSerializedSize();
+ }
+ }
+
+ private int CalcSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (hasName) {
+ size += pb::CodedOutputStream.ComputeStringSize(1, Name);
+ }
+ size += UnknownFields.SerializedSize;
+ memoizedSerializedSize = size;
+ return size;
+ }
+ public static HelloRequest ParseFrom(pb::ByteString data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static HelloRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static HelloRequest ParseFrom(byte[] data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static HelloRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static HelloRequest ParseFrom(global::System.IO.Stream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static HelloRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ public static HelloRequest ParseDelimitedFrom(global::System.IO.Stream input) {
+ return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+ }
+ public static HelloRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+ }
+ public static HelloRequest ParseFrom(pb::ICodedInputStream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static HelloRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ private HelloRequest MakeReadOnly() {
+ return this;
+ }
+
+ public static Builder CreateBuilder() { return new Builder(); }
+ public override Builder ToBuilder() { return CreateBuilder(this); }
+ public override Builder CreateBuilderForType() { return new Builder(); }
+ public static Builder CreateBuilder(HelloRequest prototype) {
+ return new Builder(prototype);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class Builder : pb::GeneratedBuilder<HelloRequest, Builder> {
+ protected override Builder ThisBuilder {
+ get { return this; }
+ }
+ public Builder() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ }
+ internal Builder(HelloRequest cloneFrom) {
+ result = cloneFrom;
+ resultIsReadOnly = true;
+ }
+
+ private bool resultIsReadOnly;
+ private HelloRequest result;
+
+ private HelloRequest PrepareBuilder() {
+ if (resultIsReadOnly) {
+ HelloRequest original = result;
+ result = new HelloRequest();
+ resultIsReadOnly = false;
+ MergeFrom(original);
+ }
+ return result;
+ }
+
+ public override bool IsInitialized {
+ get { return result.IsInitialized; }
+ }
+
+ protected override HelloRequest MessageBeingBuilt {
+ get { return PrepareBuilder(); }
+ }
+
+ public override Builder Clear() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ return this;
+ }
+
+ public override Builder Clone() {
+ if (resultIsReadOnly) {
+ return new Builder(result);
+ } else {
+ return new Builder().MergeFrom(result);
+ }
+ }
+
+ public override pbd::MessageDescriptor DescriptorForType {
+ get { return global::helloworld.HelloRequest.Descriptor; }
+ }
+
+ public override HelloRequest DefaultInstanceForType {
+ get { return global::helloworld.HelloRequest.DefaultInstance; }
+ }
+
+ public override HelloRequest BuildPartial() {
+ if (resultIsReadOnly) {
+ return result;
+ }
+ resultIsReadOnly = true;
+ return result.MakeReadOnly();
+ }
+
+ public override Builder MergeFrom(pb::IMessage other) {
+ if (other is HelloRequest) {
+ return MergeFrom((HelloRequest) other);
+ } else {
+ base.MergeFrom(other);
+ return this;
+ }
+ }
+
+ public override Builder MergeFrom(HelloRequest other) {
+ if (other == global::helloworld.HelloRequest.DefaultInstance) return this;
+ PrepareBuilder();
+ if (other.HasName) {
+ Name = other.Name;
+ }
+ this.MergeUnknownFields(other.UnknownFields);
+ return this;
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input) {
+ return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ PrepareBuilder();
+ pb::UnknownFieldSet.Builder unknownFields = null;
+ uint tag;
+ string field_name;
+ while (input.ReadTag(out tag, out field_name)) {
+ if(tag == 0 && field_name != null) {
+ int field_ordinal = global::System.Array.BinarySearch(_helloRequestFieldNames, field_name, global::System.StringComparer.Ordinal);
+ if(field_ordinal >= 0)
+ tag = _helloRequestFieldTags[field_ordinal];
+ else {
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ continue;
+ }
+ }
+ switch (tag) {
+ case 0: {
+ throw pb::InvalidProtocolBufferException.InvalidTag();
+ }
+ default: {
+ if (pb::WireFormat.IsEndGroupTag(tag)) {
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ break;
+ }
+ case 10: {
+ result.hasName = input.ReadString(ref result.name_);
+ break;
+ }
+ }
+ }
+
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+
+
+ public bool HasName {
+ get { return result.hasName; }
+ }
+ public string Name {
+ get { return result.Name; }
+ set { SetName(value); }
+ }
+ public Builder SetName(string value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ result.hasName = true;
+ result.name_ = value;
+ return this;
+ }
+ public Builder ClearName() {
+ PrepareBuilder();
+ result.hasName = false;
+ result.name_ = "";
+ return this;
+ }
+ }
+ static HelloRequest() {
+ object.ReferenceEquals(global::helloworld.Helloworld.Descriptor, null);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class HelloReply : pb::GeneratedMessage<HelloReply, HelloReply.Builder> {
+ private HelloReply() { }
+ private static readonly HelloReply defaultInstance = new HelloReply().MakeReadOnly();
+ private static readonly string[] _helloReplyFieldNames = new string[] { "message" };
+ private static readonly uint[] _helloReplyFieldTags = new uint[] { 10 };
+ public static HelloReply DefaultInstance {
+ get { return defaultInstance; }
+ }
+
+ public override HelloReply DefaultInstanceForType {
+ get { return DefaultInstance; }
+ }
+
+ protected override HelloReply ThisMessage {
+ get { return this; }
+ }
+
+ public static pbd::MessageDescriptor Descriptor {
+ get { return global::helloworld.Helloworld.internal__static_helloworld_HelloReply__Descriptor; }
+ }
+
+ protected override pb::FieldAccess.FieldAccessorTable<HelloReply, HelloReply.Builder> InternalFieldAccessors {
+ get { return global::helloworld.Helloworld.internal__static_helloworld_HelloReply__FieldAccessorTable; }
+ }
+
+ public const int MessageFieldNumber = 1;
+ private bool hasMessage;
+ private string message_ = "";
+ public bool HasMessage {
+ get { return hasMessage; }
+ }
+ public string Message {
+ get { return message_; }
+ }
+
+ public override bool IsInitialized {
+ get {
+ return true;
+ }
+ }
+
+ public override void WriteTo(pb::ICodedOutputStream output) {
+ CalcSerializedSize();
+ string[] field_names = _helloReplyFieldNames;
+ if (hasMessage) {
+ output.WriteString(1, field_names[0], Message);
+ }
+ UnknownFields.WriteTo(output);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public override int SerializedSize {
+ get {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+ return CalcSerializedSize();
+ }
+ }
+
+ private int CalcSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (hasMessage) {
+ size += pb::CodedOutputStream.ComputeStringSize(1, Message);
+ }
+ size += UnknownFields.SerializedSize;
+ memoizedSerializedSize = size;
+ return size;
+ }
+ public static HelloReply ParseFrom(pb::ByteString data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static HelloReply ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static HelloReply ParseFrom(byte[] data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static HelloReply ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static HelloReply ParseFrom(global::System.IO.Stream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static HelloReply ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ public static HelloReply ParseDelimitedFrom(global::System.IO.Stream input) {
+ return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+ }
+ public static HelloReply ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+ }
+ public static HelloReply ParseFrom(pb::ICodedInputStream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static HelloReply ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ private HelloReply MakeReadOnly() {
+ return this;
+ }
+
+ public static Builder CreateBuilder() { return new Builder(); }
+ public override Builder ToBuilder() { return CreateBuilder(this); }
+ public override Builder CreateBuilderForType() { return new Builder(); }
+ public static Builder CreateBuilder(HelloReply prototype) {
+ return new Builder(prototype);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class Builder : pb::GeneratedBuilder<HelloReply, Builder> {
+ protected override Builder ThisBuilder {
+ get { return this; }
+ }
+ public Builder() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ }
+ internal Builder(HelloReply cloneFrom) {
+ result = cloneFrom;
+ resultIsReadOnly = true;
+ }
+
+ private bool resultIsReadOnly;
+ private HelloReply result;
+
+ private HelloReply PrepareBuilder() {
+ if (resultIsReadOnly) {
+ HelloReply original = result;
+ result = new HelloReply();
+ resultIsReadOnly = false;
+ MergeFrom(original);
+ }
+ return result;
+ }
+
+ public override bool IsInitialized {
+ get { return result.IsInitialized; }
+ }
+
+ protected override HelloReply MessageBeingBuilt {
+ get { return PrepareBuilder(); }
+ }
+
+ public override Builder Clear() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ return this;
+ }
+
+ public override Builder Clone() {
+ if (resultIsReadOnly) {
+ return new Builder(result);
+ } else {
+ return new Builder().MergeFrom(result);
+ }
+ }
+
+ public override pbd::MessageDescriptor DescriptorForType {
+ get { return global::helloworld.HelloReply.Descriptor; }
+ }
+
+ public override HelloReply DefaultInstanceForType {
+ get { return global::helloworld.HelloReply.DefaultInstance; }
+ }
+
+ public override HelloReply BuildPartial() {
+ if (resultIsReadOnly) {
+ return result;
+ }
+ resultIsReadOnly = true;
+ return result.MakeReadOnly();
+ }
+
+ public override Builder MergeFrom(pb::IMessage other) {
+ if (other is HelloReply) {
+ return MergeFrom((HelloReply) other);
+ } else {
+ base.MergeFrom(other);
+ return this;
+ }
+ }
+
+ public override Builder MergeFrom(HelloReply other) {
+ if (other == global::helloworld.HelloReply.DefaultInstance) return this;
+ PrepareBuilder();
+ if (other.HasMessage) {
+ Message = other.Message;
+ }
+ this.MergeUnknownFields(other.UnknownFields);
+ return this;
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input) {
+ return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ PrepareBuilder();
+ pb::UnknownFieldSet.Builder unknownFields = null;
+ uint tag;
+ string field_name;
+ while (input.ReadTag(out tag, out field_name)) {
+ if(tag == 0 && field_name != null) {
+ int field_ordinal = global::System.Array.BinarySearch(_helloReplyFieldNames, field_name, global::System.StringComparer.Ordinal);
+ if(field_ordinal >= 0)
+ tag = _helloReplyFieldTags[field_ordinal];
+ else {
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ continue;
+ }
+ }
+ switch (tag) {
+ case 0: {
+ throw pb::InvalidProtocolBufferException.InvalidTag();
+ }
+ default: {
+ if (pb::WireFormat.IsEndGroupTag(tag)) {
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ break;
+ }
+ case 10: {
+ result.hasMessage = input.ReadString(ref result.message_);
+ break;
+ }
+ }
+ }
+
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+
+
+ public bool HasMessage {
+ get { return result.hasMessage; }
+ }
+ public string Message {
+ get { return result.Message; }
+ set { SetMessage(value); }
+ }
+ public Builder SetMessage(string value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ result.hasMessage = true;
+ result.message_ = value;
+ return this;
+ }
+ public Builder ClearMessage() {
+ PrepareBuilder();
+ result.hasMessage = false;
+ result.message_ = "";
+ return this;
+ }
+ }
+ static HelloReply() {
+ object.ReferenceEquals(global::helloworld.Helloworld.Descriptor, null);
+ }
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/examples/csharp/Greeter/HelloworldGrpc.cs b/examples/csharp/Greeter/HelloworldGrpc.cs
new file mode 100644
index 0000000000..1ca9d2899b
--- /dev/null
+++ b/examples/csharp/Greeter/HelloworldGrpc.cs
@@ -0,0 +1,78 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: helloworld.proto
+#region Designer generated code
+
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using Grpc.Core;
+
+namespace helloworld {
+ public static class Greeter
+ {
+ static readonly string __ServiceName = "helloworld.Greeter";
+
+ static readonly Marshaller<global::helloworld.HelloRequest> __Marshaller_HelloRequest = Marshallers.Create((arg) => arg.ToByteArray(), global::helloworld.HelloRequest.ParseFrom);
+ static readonly Marshaller<global::helloworld.HelloReply> __Marshaller_HelloReply = Marshallers.Create((arg) => arg.ToByteArray(), global::helloworld.HelloReply.ParseFrom);
+
+ static readonly Method<global::helloworld.HelloRequest, global::helloworld.HelloReply> __Method_SayHello = new Method<global::helloworld.HelloRequest, global::helloworld.HelloReply>(
+ MethodType.Unary,
+ "SayHello",
+ __Marshaller_HelloRequest,
+ __Marshaller_HelloReply);
+
+ // client-side stub interface
+ public interface IGreeterClient
+ {
+ global::helloworld.HelloReply SayHello(global::helloworld.HelloRequest request, CancellationToken token = default(CancellationToken));
+ Task<global::helloworld.HelloReply> SayHelloAsync(global::helloworld.HelloRequest request, CancellationToken token = default(CancellationToken));
+ }
+
+ // server-side interface
+ public interface IGreeter
+ {
+ Task<global::helloworld.HelloReply> SayHello(ServerCallContext context, global::helloworld.HelloRequest request);
+ }
+
+ // client stub
+ public class GreeterClient : AbstractStub<GreeterClient, StubConfiguration>, IGreeterClient
+ {
+ public GreeterClient(Channel channel) : this(channel, StubConfiguration.Default)
+ {
+ }
+ public GreeterClient(Channel channel, StubConfiguration config) : base(channel, config)
+ {
+ }
+ public global::helloworld.HelloReply SayHello(global::helloworld.HelloRequest request, CancellationToken token = default(CancellationToken))
+ {
+ var call = CreateCall(__ServiceName, __Method_SayHello);
+ return Calls.BlockingUnaryCall(call, request, token);
+ }
+ public Task<global::helloworld.HelloReply> SayHelloAsync(global::helloworld.HelloRequest request, CancellationToken token = default(CancellationToken))
+ {
+ var call = CreateCall(__ServiceName, __Method_SayHello);
+ return Calls.AsyncUnaryCall(call, request, token);
+ }
+ }
+
+ // creates service definition that can be registered with a server
+ public static ServerServiceDefinition BindService(IGreeter serviceImpl)
+ {
+ return ServerServiceDefinition.CreateBuilder(__ServiceName)
+ .AddMethod(__Method_SayHello, serviceImpl.SayHello).Build();
+ }
+
+ // creates a new client stub
+ public static IGreeterClient NewStub(Channel channel)
+ {
+ return new GreeterClient(channel);
+ }
+
+ // creates a new client stub
+ public static IGreeterClient NewStub(Channel channel, StubConfiguration config)
+ {
+ return new GreeterClient(channel, config);
+ }
+ }
+}
+#endregion
diff --git a/examples/csharp/Greeter/Properties/AssemblyInfo.cs b/examples/csharp/Greeter/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..b9d0dc264d
--- /dev/null
+++ b/examples/csharp/Greeter/Properties/AssemblyInfo.cs
@@ -0,0 +1,22 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+[assembly: AssemblyTitle("Greeter")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("jtattermusch")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+[assembly: AssemblyVersion("1.0.*")]
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/examples/csharp/Greeter/packages.config b/examples/csharp/Greeter/packages.config
new file mode 100644
index 0000000000..5922553bc3
--- /dev/null
+++ b/examples/csharp/Greeter/packages.config
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Google.ProtocolBuffers" version="2.4.1.555" targetFramework="net45" />
+ <package id="Grpc" version="0.6.0" targetFramework="net45" />
+ <package id="Grpc.Core" version="0.6.0" targetFramework="net45" />
+ <package id="grpc.dependencies.openssl.redist" version="1.0.2.2" targetFramework="net45" />
+ <package id="grpc.dependencies.zlib.redist" version="1.2.8.9" targetFramework="net45" />
+ <package id="grpc.native.csharp_ext" version="0.10.0" targetFramework="net45" />
+ <package id="Ix-Async" version="1.2.3" targetFramework="net45" />
+ <package id="System.Collections.Immutable" version="1.1.36" targetFramework="net45" />
+</packages> \ No newline at end of file
diff --git a/examples/csharp/Greeter/protos/helloworld.proto b/examples/csharp/Greeter/protos/helloworld.proto
new file mode 100644
index 0000000000..e02ebd94e7
--- /dev/null
+++ b/examples/csharp/Greeter/protos/helloworld.proto
@@ -0,0 +1,52 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// TODO(jtattermusch): as of now, C# protobufs don't officially support
+// proto3.
+syntax = "proto2";
+
+option java_package = "io.grpc.examples";
+
+package helloworld;
+
+// The greeting service definition.
+service Greeter {
+ // Sends a greeting
+ rpc SayHello (HelloRequest) returns (HelloReply) {}
+}
+
+// The request message containing the user's name.
+message HelloRequest {
+ optional string name = 1;
+}
+
+// The response message containing the greetings
+message HelloReply {
+ optional string message = 1;
+}
diff --git a/examples/csharp/GreeterClient/.gitignore b/examples/csharp/GreeterClient/.gitignore
new file mode 100644
index 0000000000..1746e3269e
--- /dev/null
+++ b/examples/csharp/GreeterClient/.gitignore
@@ -0,0 +1,2 @@
+bin
+obj
diff --git a/examples/csharp/GreeterClient/GreeterClient.csproj b/examples/csharp/GreeterClient/GreeterClient.csproj
new file mode 100644
index 0000000000..59b768af01
--- /dev/null
+++ b/examples/csharp/GreeterClient/GreeterClient.csproj
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" />
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>10.0.0</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{ACCF4597-3748-4117-8633-1CB767F8CCC3}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>GreeterClient</RootNamespace>
+ <AssemblyName>GreeterClient</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <NuGetPackageImportStamp>985ca8be</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug</OutputPath>
+ <DefineConstants>DEBUG;</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <Externalconsole>true</Externalconsole>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>full</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release</OutputPath>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <Externalconsole>true</Externalconsole>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Google.ProtocolBuffers">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.dll</HintPath>
+ </Reference>
+ <Reference Include="Google.ProtocolBuffers.Serialization">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.Serialization.dll</HintPath>
+ </Reference>
+ <Reference Include="Grpc.Core, Version=0.6.5668.37363, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Grpc.Core.0.6.0\lib\net45\Grpc.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\System.Collections.Immutable.1.1.36\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Interactive.Async">
+ <HintPath>..\packages\Ix-Async.1.2.3\lib\net45\System.Interactive.Async.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <ItemGroup>
+ <ProjectReference Include="..\Greeter\Greeter.csproj">
+ <Project>{724DFC8C-4B57-4C3F-811C-0463BE2A2829}</Project>
+ <Name>Greeter</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets'))" />
+ </Target>
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" />
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" />
+</Project> \ No newline at end of file
diff --git a/examples/csharp/GreeterClient/Program.cs b/examples/csharp/GreeterClient/Program.cs
new file mode 100644
index 0000000000..61c29762b1
--- /dev/null
+++ b/examples/csharp/GreeterClient/Program.cs
@@ -0,0 +1,25 @@
+using System;
+using Grpc.Core;
+using helloworld;
+
+namespace GreeterClient
+{
+ class ClientMainClass
+ {
+ public static void Main(string[] args)
+ {
+ GrpcEnvironment.Initialize();
+
+ using (Channel channel = new Channel("127.0.0.1:50051"))
+ {
+ var client = Greeter.NewStub(channel);
+ String user = "you";
+
+ var reply = client.SayHello(new HelloRequest.Builder { Name = user }.Build());
+ Console.WriteLine("Greeting: " + reply.Message);
+ }
+
+ GrpcEnvironment.Shutdown();
+ }
+ }
+}
diff --git a/examples/csharp/GreeterClient/Properties/AssemblyInfo.cs b/examples/csharp/GreeterClient/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..1422e952d8
--- /dev/null
+++ b/examples/csharp/GreeterClient/Properties/AssemblyInfo.cs
@@ -0,0 +1,22 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+[assembly: AssemblyTitle("GreeterClient")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("jtattermusch")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+[assembly: AssemblyVersion("1.0.*")]
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/examples/csharp/GreeterClient/packages.config b/examples/csharp/GreeterClient/packages.config
new file mode 100644
index 0000000000..5922553bc3
--- /dev/null
+++ b/examples/csharp/GreeterClient/packages.config
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Google.ProtocolBuffers" version="2.4.1.555" targetFramework="net45" />
+ <package id="Grpc" version="0.6.0" targetFramework="net45" />
+ <package id="Grpc.Core" version="0.6.0" targetFramework="net45" />
+ <package id="grpc.dependencies.openssl.redist" version="1.0.2.2" targetFramework="net45" />
+ <package id="grpc.dependencies.zlib.redist" version="1.2.8.9" targetFramework="net45" />
+ <package id="grpc.native.csharp_ext" version="0.10.0" targetFramework="net45" />
+ <package id="Ix-Async" version="1.2.3" targetFramework="net45" />
+ <package id="System.Collections.Immutable" version="1.1.36" targetFramework="net45" />
+</packages> \ No newline at end of file
diff --git a/examples/csharp/GreeterServer/.gitignore b/examples/csharp/GreeterServer/.gitignore
new file mode 100644
index 0000000000..1746e3269e
--- /dev/null
+++ b/examples/csharp/GreeterServer/.gitignore
@@ -0,0 +1,2 @@
+bin
+obj
diff --git a/examples/csharp/GreeterServer/GreeterServer.csproj b/examples/csharp/GreeterServer/GreeterServer.csproj
new file mode 100644
index 0000000000..cd50d6cd52
--- /dev/null
+++ b/examples/csharp/GreeterServer/GreeterServer.csproj
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" />
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>10.0.0</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{A7706C84-92D2-4B7A-B779-76B64D2950EC}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>GreeterServer</RootNamespace>
+ <AssemblyName>GreeterServer</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <NuGetPackageImportStamp>a1eeb1d8</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug</OutputPath>
+ <DefineConstants>DEBUG;</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <Externalconsole>true</Externalconsole>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>full</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release</OutputPath>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <Externalconsole>true</Externalconsole>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Google.ProtocolBuffers">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.dll</HintPath>
+ </Reference>
+ <Reference Include="Google.ProtocolBuffers.Serialization">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.Serialization.dll</HintPath>
+ </Reference>
+ <Reference Include="Grpc.Core, Version=0.6.5668.37363, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Grpc.Core.0.6.0\lib\net45\Grpc.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\System.Collections.Immutable.1.1.36\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Interactive.Async">
+ <HintPath>..\packages\Ix-Async.1.2.3\lib\net45\System.Interactive.Async.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+ <ItemGroup>
+ <ProjectReference Include="..\Greeter\Greeter.csproj">
+ <Project>{724DFC8C-4B57-4C3F-811C-0463BE2A2829}</Project>
+ <Name>Greeter</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets'))" />
+ </Target>
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" />
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" />
+</Project> \ No newline at end of file
diff --git a/examples/csharp/GreeterServer/Program.cs b/examples/csharp/GreeterServer/Program.cs
new file mode 100644
index 0000000000..9482797c3b
--- /dev/null
+++ b/examples/csharp/GreeterServer/Program.cs
@@ -0,0 +1,37 @@
+using System;
+using System.Threading.Tasks;
+using Grpc.Core;
+using helloworld;
+
+namespace GreeterServer
+{
+ class GreeterImpl : Greeter.IGreeter
+ {
+ // Server side handler of the SayHello RPC
+ public Task<HelloReply> SayHello(ServerCallContext context, HelloRequest request)
+ {
+ var reply = new HelloReply.Builder { Message = "Hello " + request.Name }.Build();
+ return Task.FromResult(reply);
+ }
+ }
+
+ class ServerMainClass
+ {
+ public static void Main(string[] args)
+ {
+ GrpcEnvironment.Initialize();
+
+ Server server = new Server();
+ server.AddServiceDefinition(Greeter.BindService(new GreeterImpl()));
+ int port = server.AddListeningPort("localhost", 50051);
+ server.Start();
+
+ Console.WriteLine("Greeter server listening on port " + port);
+ Console.WriteLine("Press any key to stop the server...");
+ Console.ReadKey();
+
+ server.ShutdownAsync().Wait();
+ GrpcEnvironment.Shutdown();
+ }
+ }
+}
diff --git a/examples/csharp/GreeterServer/Properties/AssemblyInfo.cs b/examples/csharp/GreeterServer/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..f8a8d521d8
--- /dev/null
+++ b/examples/csharp/GreeterServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,22 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+[assembly: AssemblyTitle("GreeterServer")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("jtattermusch")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+[assembly: AssemblyVersion("1.0.*")]
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/examples/csharp/GreeterServer/packages.config b/examples/csharp/GreeterServer/packages.config
new file mode 100644
index 0000000000..5922553bc3
--- /dev/null
+++ b/examples/csharp/GreeterServer/packages.config
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Google.ProtocolBuffers" version="2.4.1.555" targetFramework="net45" />
+ <package id="Grpc" version="0.6.0" targetFramework="net45" />
+ <package id="Grpc.Core" version="0.6.0" targetFramework="net45" />
+ <package id="grpc.dependencies.openssl.redist" version="1.0.2.2" targetFramework="net45" />
+ <package id="grpc.dependencies.zlib.redist" version="1.2.8.9" targetFramework="net45" />
+ <package id="grpc.native.csharp_ext" version="0.10.0" targetFramework="net45" />
+ <package id="Ix-Async" version="1.2.3" targetFramework="net45" />
+ <package id="System.Collections.Immutable" version="1.1.36" targetFramework="net45" />
+</packages> \ No newline at end of file
diff --git a/examples/csharp/README.md b/examples/csharp/README.md
new file mode 100644
index 0000000000..fcdcc735f9
--- /dev/null
+++ b/examples/csharp/README.md
@@ -0,0 +1,72 @@
+gRPC in 3 minutes (C#)
+========================
+
+BACKGROUND
+-------------
+For this sample, we've already generated the server and client stubs from `helloworld.proto`.
+Example projects depend on NuGet packages `Grpc` and `Google.ProtocolBuffers` which have been already added to the project for you.
+
+PREREQUISITES
+-------------
+**Windows**
+- .NET 4.5+
+- VS 2013 (with NuGet plugin installed)
+
+**Linux (Mono)**
+- Mono
+- Monodevelop 5.9 with NuGet Add-in installed (older versions might work)
+
+**MacOS (Mono)**
+- Xamarin Studio (with NuGet plugin installed)
+
+BUILD
+-------
+
+**Windows**
+- Clone this repository.
+
+- Open solution `Greeter.sln` with Visual Studio
+
+- Build the solution (this will automatically download NuGet dependencies)
+
+**Linux (Mono)**
+- Clone this repository.
+
+- Install gRPC C Core using instructions in https://github.com/grpc/homebrew-grpc
+
+- gRPC C# depends on native shared library `libgrpc_csharp_ext.so`. To make it visible
+ to Mono runtime, follow instructions in [Using gRPC C# on Linux](https://github.com/grpc/grpc/tree/master/src/csharp#usage-linux-mono)
+
+- Open solution `Greeter.sln` in MonoDevelop (you need to manually restore dependencies by using `mono nuget.exe restore` if you don't have NuGet add-in)
+
+- Build the solution.
+
+**MacOS (Mono)**
+- See [Using gRPC C# on MacOS](https://github.com/grpc/grpc/tree/master/src/csharp#usage-macos-mono) for more info
+ on MacOS support.
+
+Try it!
+-------
+
+- Run the server
+
+ ```
+ > cd GreeterServer/bin/Debug
+ > GreeterServer.exe
+ ```
+
+- Run the client
+
+ ```
+ > cd GreeterClient/bin/Debug
+ > GreeterClient.exe
+ ```
+
+You can also run the server and client directly from Visual Studio.
+
+On Linux or Mac, use `mono GreeterServer.exe` and `mono GreeterClient.exe` to run the server and client.
+
+Tutorial
+--------
+
+You can find a more detailed tutorial in [gRPC Basics: C#](examples/csharp/route_guide/README.md)
diff --git a/examples/csharp/route_guide/.gitignore b/examples/csharp/route_guide/.gitignore
new file mode 100644
index 0000000000..585000ea2d
--- /dev/null
+++ b/examples/csharp/route_guide/.gitignore
@@ -0,0 +1,5 @@
+bin/
+obj/
+packages/
+*.suo
+*.userprefs
diff --git a/examples/csharp/route_guide/.nuget/packages.config b/examples/csharp/route_guide/.nuget/packages.config
new file mode 100644
index 0000000000..b14373069f
--- /dev/null
+++ b/examples/csharp/route_guide/.nuget/packages.config
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Grpc.Tools" version="0.6.0" />
+</packages> \ No newline at end of file
diff --git a/examples/csharp/route_guide/README.md b/examples/csharp/route_guide/README.md
new file mode 100644
index 0000000000..c3262c9b8a
--- /dev/null
+++ b/examples/csharp/route_guide/README.md
@@ -0,0 +1,409 @@
+#gRPC Basics: C# #
+
+This tutorial provides a basic C# programmer's introduction to working with gRPC. By walking through this example you'll learn how to:
+
+- Define a service in a .proto file.
+- Generate server and client code using the protocol buffer compiler.
+- Use the C# gRPC API to write a simple client and server for your service.
+
+It assumes that you have read the [Getting started](https://github.com/grpc/grpc/tree/master/examples) guide and are familiar with [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). Note that the example in this tutorial only uses the proto2 version of the protocol buffers language, as proto3 support for C# is not ready yet (see [protobuf C# README](https://github.com/google/protobuf/tree/master/csharp#proto2--proto3)).
+
+This isn't a comprehensive guide to using gRPC in C#: more reference documentation is coming soon.
+
+## Why use gRPC?
+
+Our example is a simple route mapping application that lets clients get information about features on their route, create a summary of their route, and exchange route information such as traffic updates with the server and other clients.
+
+With gRPC we can define our service once in a .proto file and implement clients and servers in any of gRPC's supported languages, which in turn can be run in environments ranging from servers inside Google to your own tablet - all the complexity of communication between different languages and environments is handled for you by gRPC. We also get all the advantages of working with protocol buffers, including efficient serialization, a simple IDL, and easy interface updating.
+
+## Example code and setup
+
+The example code for our tutorial is in [examples/csharp/route_guide](examples/csharp/route_guide). To download the example, clone this repository by running the following command:
+```shell
+$ git clone https://github.com/grpc/grpc.git
+```
+
+All the files for this tutorial are in the directory `examples/csharp/route_guide`.
+Open the solution `examples/csharp/route_guide/RouteGuide.sln` from Visual Studio (or Monodevelop on Linux).
+
+On Windows, you should not need to do anything besides opening the solution. All the needed dependencies will be restored
+for you automatically by the `Grpc` NuGet package upon building the solution.
+
+On Linux (or MacOS), you will first need to install protobuf and gRPC C Core using Linuxbrew (or Homebrew) tool in order to be
+able to generate the server and client interface code and run the examples. Follow the instructions for [Linux](https://github.com/grpc/grpc/tree/master/src/csharp#usage-linux-mono) or [MacOS](https://github.com/grpc/grpc/tree/master/src/csharp#usage-macos-mono).
+
+## Defining the service
+
+Our first step (as you'll know from [Getting started](https://github.com/grpc/grpc/tree/master/examples)) is to define the gRPC *service* and the method *request* and *response* types using [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). You can see the complete .proto file in [`examples/csharp/route_guide/RouteGuide/protos/route_guide.proto`](examples/csharp/route_guide/RouteGuide/protos/route_guide.proto).
+
+To define a service, you specify a named `service` in your .proto file:
+
+```protobuf
+service RouteGuide {
+ ...
+}
+```
+
+Then you define `rpc` methods inside your service definition, specifying their request and response types. gRPC lets you define four kinds of service method, all of which are used in the `RouteGuide` service:
+
+- A *simple RPC* where the client sends a request to the server using the stub and waits for a response to come back, just like a normal function call.
+```protobuf
+ // Obtains the feature at a given position.
+ rpc GetFeature(Point) returns (Feature) {}
+```
+
+- A *server-side streaming RPC* where the client sends a request to the server and gets a stream to read a sequence of messages back. The client reads from the returned stream until there are no more messages. As you can see in our example, you specify a server-side streaming method by placing the `stream` keyword before the *response* type.
+```protobuf
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+```
+
+- A *client-side streaming RPC* where the client writes a sequence of messages and sends them to the server, again using a provided stream. Once the client has finished writing the messages, it waits for the server to read them all and return its response. You specify a server-side streaming method by placing the `stream` keyword before the *request* type.
+```protobuf
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+```
+
+- A *bidirectional streaming RPC* where both sides send a sequence of messages using a read-write stream. The two streams operate independently, so clients and servers can read and write in whatever order they like: for example, the server could wait to receive all the client messages before writing its responses, or it could alternately read a message then write a message, or some other combination of reads and writes. The order of messages in each stream is preserved. You specify this type of method by placing the `stream` keyword before both the request and the response.
+```protobuf
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+```
+
+Our .proto file also contains protocol buffer message type definitions for all the request and response types used in our service methods - for example, here's the `Point` message type:
+```protobuf
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ int32 latitude = 1;
+ int32 longitude = 2;
+}
+```
+
+
+## Generating client and server code
+
+Next we need to generate the gRPC client and server interfaces from our .proto service definition. We do this using the protocol buffer compiler `protoc` with a special gRPC C# plugin.
+
+If you want to run this yourself, make sure you've installed protoc and gRPC C# plugin. The instructions vary based on your OS:
+- For Windows, the `Grpc.Tools` NuGet package contains the binaries you will need to generate the code.
+- For Linux, make sure you've [installed gRPC C Core using Linuxbrew](https://github.com/grpc/grpc/tree/master/src/csharp#usage-linux-mono)
+- For MacOS, make sure you've [installed gRPC C Core using Homebrew](https://github.com/grpc/grpc/tree/master/src/csharp#usage-macos-mono)
+
+Once that's done, the following command can be used to generate the C# code.
+
+To generate the code on Windows, we use `protoc.exe` and `grpc_csharp_plugin.exe` binaries that are shipped with the `Grpc.Tools` NuGet package under the `tools` directory.
+Normally you would need to add the `Grpc.Tools` package to the solution yourself, but in this tutorial it has been already done for you. Following command should be run from the `csharp/route_guide` directory:
+```
+> packages\Grpc.Tools.0.5.1\tools\protoc -I RouteGuide/protos --csharp_out=RouteGuide --grpc_out=RouteGuide --plugin=protoc-gen-grpc=packages\Grpc.Tools.0.5.1\tools\grpc_csharp_plugin.exe RouteGuide/protos/route_guide.proto
+```
+
+On Linux/MacOS, we rely on `protoc` and `grpc_csharp_plugin` being installed by Linuxbrew/Homebrew. Run this command from the route_guide directory:
+```shell
+$ protoc -I RouteGuide/protos --csharp_out=RouteGuide --grpc_out=RouteGuide --plugin=protoc-gen-grpc=`which grpc_csharp_plugin` RouteGuide/protos/route_guide.proto
+```
+
+Running one of the previous commands regenerates the following files in the RouteGuide directory:
+- `RouteGuide/RouteGuide.cs` defines a namespace `examples`
+ - This contains all the protocol buffer code to populate, serialize, and retrieve our request and response message types
+- `RouteGuide/RouteGuideGrpc.cs`, provides stub and service classes
+ - an interface `RouteGuide.IRouteGuide` to inherit from when defining RouteGuide service implementations
+ - a class `RouteGuide.RouteGuideClient` that can be used to access remote RouteGuide instances
+
+
+<a name="server"></a>
+## Creating the server
+
+First let's look at how we create a `RouteGuide` server. If you're only interested in creating gRPC clients, you can skip this section and go straight to [Creating the client](#client) (though you might find it interesting anyway!).
+
+There are two parts to making our `RouteGuide` service do its job:
+- Implementing the service interface generated from our service definition: doing the actual "work" of our service.
+- Running a gRPC server to listen for requests from clients and return the service responses.
+
+You can find our example `RouteGuide` server in [examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs](examples/csharp/route_guide/RouteGuideServer/RouteGuideServerImpl.cs). Let's take a closer look at how it works.
+
+### Implementing RouteGuide
+
+As you can see, our server has a `RouteGuideImpl` class that implements the generated `RouteGuide.IRouteGuide`:
+
+```csharp
+// RouteGuideImpl provides an implementation of the RouteGuide service.
+public class RouteGuideImpl : RouteGuide.IRouteGuide
+```
+
+#### Simple RPC
+
+`RouteGuideImpl` implements all our service methods. Let's look at the simplest type first, `GetFeature`, which just gets a `Point` from the client and returns the corresponding feature information from its database in a `Feature`.
+
+```csharp
+ public Task<Feature> GetFeature(Grpc.Core.ServerCallContext context, Point request)
+ {
+ return Task.FromResult(CheckFeature(request));
+ }
+```
+
+The method is passed a context for the RPC (which is empty in the alpha release), the client's `Point` protocol buffer request, and returns a `Feature` protocol buffer. In the method we create the `Feature` with the appropriate information, and then return it. To allow asynchronous
+implementation, the method returns `Task<Feature>` rather than just `Feature`. You are free to perform your computations synchronously and return
+the result once you've finished, just as we do in the example.
+
+#### Server-side streaming RPC
+
+Now let's look at something a bit more complicated - a streaming RPC. `ListFeatures` is a server-side streaming RPC, so we need to send back multiple `Feature` protocol buffers to our client.
+
+```csharp
+ // in RouteGuideImpl
+ public async Task ListFeatures(Grpc.Core.ServerCallContext context, Rectangle request,
+ Grpc.Core.IServerStreamWriter<Feature> responseStream)
+ {
+ int left = Math.Min(request.Lo.Longitude, request.Hi.Longitude);
+ int right = Math.Max(request.Lo.Longitude, request.Hi.Longitude);
+ int top = Math.Max(request.Lo.Latitude, request.Hi.Latitude);
+ int bottom = Math.Min(request.Lo.Latitude, request.Hi.Latitude);
+
+ foreach (var feature in features)
+ {
+ if (!RouteGuideUtil.Exists(feature))
+ {
+ continue;
+ }
+
+ int lat = feature.Location.Latitude;
+ int lon = feature.Location.Longitude;
+ if (lon >= left && lon <= right && lat >= bottom && lat <= top)
+ {
+ await responseStream.WriteAsync(feature);
+ }
+ }
+ }
+```
+
+As you can see, here the request object is a `Rectangle` in which our client wants to find `Feature`s, but instead of returning a simple response we need to write responses to an asynchronous stream `IServerStreamWriter` using async method `WriteAsync`.
+
+#### Client-side streaming RPC
+
+Similarly, the client-side streaming method `RecordRoute` uses an [IAsyncEnumerator](https://github.com/Reactive-Extensions/Rx.NET/blob/master/Ix.NET/Source/System.Interactive.Async/IAsyncEnumerator.cs), to read the stream of requests using the async method `MoveNext` and the `Current` property.
+
+```csharp
+ public async Task<RouteSummary> RecordRoute(Grpc.Core.ServerCallContext context,
+ Grpc.Core.IAsyncStreamReader<Point> requestStream)
+ {
+ int pointCount = 0;
+ int featureCount = 0;
+ int distance = 0;
+ Point previous = null;
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+
+ while (await requestStream.MoveNext())
+ {
+ var point = requestStream.Current;
+ pointCount++;
+ if (RouteGuideUtil.Exists(CheckFeature(point)))
+ {
+ featureCount++;
+ }
+ if (previous != null)
+ {
+ distance += (int) CalcDistance(previous, point);
+ }
+ previous = point;
+ }
+
+ stopwatch.Stop();
+ return RouteSummary.CreateBuilder().SetPointCount(pointCount)
+ .SetFeatureCount(featureCount).SetDistance(distance)
+ .SetElapsedTime((int) (stopwatch.ElapsedMilliseconds / 1000)).Build();
+ }
+```
+
+#### Bidirectional streaming RPC
+
+Finally, let's look at our bidirectional streaming RPC `RouteChat`.
+
+```csharp
+ public async Task RouteChat(Grpc.Core.ServerCallContext context,
+ Grpc.Core.IAsyncStreamReader<RouteNote> requestStream, Grpc.Core.IServerStreamWriter<RouteNote> responseStream)
+ {
+ while (await requestStream.MoveNext())
+ {
+ var note = requestStream.Current;
+ List<RouteNote> notes = GetOrCreateNotes(note.Location);
+
+ List<RouteNote> prevNotes;
+ lock (notes)
+ {
+ prevNotes = new List<RouteNote>(notes);
+ }
+
+ foreach (var prevNote in prevNotes)
+ {
+ await responseStream.WriteAsync(prevNote);
+ }
+
+ lock (notes)
+ {
+ notes.Add(note);
+ }
+ }
+ }
+```
+
+Here the method receives both `requestStream` and `responseStream` arguments. Reading the requests is done the same way as in the client-side streaming method `RecordRoute`. Writing the responses is done the same way as in the server-side streaming method `ListFeatures`.
+
+### Starting the server
+
+Once we've implemented all our methods, we also need to start up a gRPC server so that clients can actually use our service. The following snippet shows how we do this for our `RouteGuide` service:
+
+```csharp
+var features = RouteGuideUtil.ParseFeatures(RouteGuideUtil.DefaultFeaturesFile);
+GrpcEnvironment.Initialize();
+
+Server server = new Server();
+server.AddServiceDefinition(RouteGuide.BindService(new RouteGuideImpl(features)));
+int port = server.AddListeningPort("localhost", 50052);
+server.Start();
+
+Console.WriteLine("RouteGuide server listening on port " + port);
+Console.WriteLine("Press any key to stop the server...");
+Console.ReadKey();
+
+server.ShutdownAsync().Wait();
+GrpcEnvironment.Shutdown();
+```
+As you can see, we build and start our server using `Grpc.Core.Server` class. To do this, we:
+
+1. Create an instance of `Grpc.Core.Server`.
+1. Create an instance of our service implementation class `RouteGuideImpl`.
+3. Register our service implementation with the server using the `AddServiceDefinition` method and the generated method `RouteGuide.BindService`.
+2. Specify the address and port we want to use to listen for client requests using the `AddListeningPort` method.
+4. Call `Start` on the server instance to start an RPC server for our service.
+
+<a name="client"></a>
+## Creating the client
+
+In this section, we'll look at creating a C# client for our `RouteGuide` service. You can see our complete example client code in [examples/csharp/route_guide/RouteGuideClient/Program.cs](examples/csharp/route_guide/RouteGuideClient/Program.cs).
+
+### Creating a stub
+
+To call service methods, we first need to create a *stub*.
+
+First, we need to create a gRPC client channel that will connect to gRPC server. Then, we use the `RouteGuide.NewStub` method of the `RouteGuide` class generated from our .proto.
+
+```csharp
+GrpcEnvironment.Initialize();
+
+using (Channel channel = new Channel("127.0.0.1:50052"))
+{
+ var client = RouteGuide.NewStub(channel);
+
+ // YOUR CODE GOES HERE
+}
+
+GrpcEnvironment.Shutdown();
+```
+
+### Calling service methods
+
+Now let's look at how we call our service methods. gRPC C# provides asynchronous versions of each of the supported method types. For convenience,
+gRPC C# also provides a synchronous method stub, but only for simple (single request/single response) RPCs.
+
+#### Simple RPC
+
+Calling the simple RPC `GetFeature` in a synchronous way is nearly as straightforward as calling a local method.
+
+```csharp
+Point request = Point.CreateBuilder().SetLatitude(409146138).SetLongitude(-746188906).Build();
+Feature feature = client.GetFeature(request);
+```
+
+As you can see, we create and populate a request protocol buffer object (in our case `Point`), and call the desired method on the client object, passing it the request. If the RPC finishes with success, the response protocol buffer (in our case `Feature`) will be returned. Otherwise, an exception of type `RpcException` will be thrown, indicating the status code of the problem.
+
+Alternatively, if you are in async context, you can call an asynchronous version of the method (and use `await` keyword to await the result):
+```csharp
+Point request = Point.CreateBuilder().SetLatitude(409146138).SetLongitude(-746188906).Build();
+Feature feature = await client.GetFeatureAsync(request);
+```
+
+#### Streaming RPCs
+
+Now let's look at our streaming methods. If you've already read [Creating the server](#server) some of this may look very familiar - streaming RPCs are implemented in a similar way on both sides. The difference with respect to simple call is that the client methods return an instance of a call object, that provides access to request/response streams and/or asynchronous result (depending on the streaming type you are using).
+
+Here's where we call the server-side streaming method `ListFeatures`, which has property `ReponseStream` of type `IAsyncEnumerator<Feature>`
+
+```csharp
+using (var call = client.ListFeatures(request))
+{
+ while (await call.ResponseStream.MoveNext())
+ {
+ Feature feature = call.ResponseStream.Current;
+ Console.WriteLine("Received " + feature.ToString());
+ }
+}
+```
+
+The client-side streaming method `RecordRoute` is similar, except we use the property `RequestStream` to write the requests one by one using `WriteAsync` and eventually signal that no more request will be send using `CompleteAsync`. The method result can be obtained through the property
+`Result`.
+```csharp
+using (var call = client.RecordRoute())
+{
+ foreach (var point in points)
+ {
+ await call.RequestStream.WriteAsync(point);
+ }
+ await call.RequestStream.CompleteAsync();
+
+ RouteSummary summary = await call.Result;
+}
+```
+
+Finally, let's look at our bidirectional streaming RPC `RouteChat`. In this case, we write the request to `RequestStream` and receive the responses from `ResponseStream`. As you can see from the example, the streams are independent of each other.
+
+```csharp
+ using (var call = client.RouteChat())
+ {
+ var responseReaderTask = Task.Run(async () =>
+ {
+ while (await call.ResponseStream.MoveNext())
+ {
+ var note = call.ResponseStream.Current;
+ Console.WriteLine("Received " + note);
+ }
+ });
+
+ foreach (RouteNote request in requests)
+ {
+ await call.RequestStream.WriteAsync(request);
+ }
+ await call.RequestStream.CompleteAsync();
+ await responseReaderTask;
+}
+```
+
+## Try it out!
+
+Build client and server:
+
+Open the solution `examples/csharp/route_guide/RouteGuide.sln` from Visual Studio (or Monodevelop on Linux) and hit "Build".
+
+Run the server, which will listen on port 50052:
+```
+> cd RouteGuideServer/bin/Debug
+> RouteGuideServer.exe
+```
+
+Run the client (in a different terminal):
+```
+> cd RouteGuideClient/bin/Debug
+> RouteGuideClient.exe
+```
+
+You can also run the server and client directly from Visual Studio.
+
+On Linux or Mac, use `mono RouteGuideServer.exe` and `mono RouteGuideClient.exe` to run the server and client.
diff --git a/examples/csharp/route_guide/RouteGuide.sln b/examples/csharp/route_guide/RouteGuide.sln
new file mode 100644
index 0000000000..0b79fdc5ca
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuide.sln
@@ -0,0 +1,39 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.31101.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RouteGuide", "RouteGuide\RouteGuide.csproj", "{49954D9C-5F17-4662-96B2-73BE833DD81A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RouteGuideClient", "RouteGuideClient\RouteGuideClient.csproj", "{D47BE663-4DE3-4206-B7A8-EA3FA066DADC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RouteGuideServer", "RouteGuideServer\RouteGuideServer.csproj", "{4B7C7794-BE24-4477-ACE7-18259EB73D27}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{2F6B184B-A576-4F21-AF2E-27E73D1FC96E}"
+ ProjectSection(SolutionItems) = preProject
+ .nuget\packages.config = .nuget\packages.config
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {49954D9C-5F17-4662-96B2-73BE833DD81A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {49954D9C-5F17-4662-96B2-73BE833DD81A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {49954D9C-5F17-4662-96B2-73BE833DD81A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {49954D9C-5F17-4662-96B2-73BE833DD81A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D47BE663-4DE3-4206-B7A8-EA3FA066DADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D47BE663-4DE3-4206-B7A8-EA3FA066DADC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D47BE663-4DE3-4206-B7A8-EA3FA066DADC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D47BE663-4DE3-4206-B7A8-EA3FA066DADC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4B7C7794-BE24-4477-ACE7-18259EB73D27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4B7C7794-BE24-4477-ACE7-18259EB73D27}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4B7C7794-BE24-4477-ACE7-18259EB73D27}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4B7C7794-BE24-4477-ACE7-18259EB73D27}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/csharp/route_guide/RouteGuide/Properties/AssemblyInfo.cs b/examples/csharp/route_guide/RouteGuide/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..9c3441e42f
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuide/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("RouteGuide")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("RouteGuide")]
+[assembly: AssemblyCopyright("Copyright © 2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("ef6b85bc-ac27-46de-8714-a658236cc6fb")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/examples/csharp/route_guide/RouteGuide/RouteGuide.cs b/examples/csharp/route_guide/RouteGuide/RouteGuide.cs
new file mode 100644
index 0000000000..80508bcd3f
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuide/RouteGuide.cs
@@ -0,0 +1,1873 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: route_guide.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.ProtocolBuffers;
+using pbc = global::Google.ProtocolBuffers.Collections;
+using pbd = global::Google.ProtocolBuffers.Descriptors;
+using scg = global::System.Collections.Generic;
+namespace examples {
+
+ namespace Proto {
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public static partial class RouteGuide {
+
+ #region Extension registration
+ public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
+ }
+ #endregion
+ #region Static variables
+ internal static pbd::MessageDescriptor internal__static_examples_Point__Descriptor;
+ internal static pb::FieldAccess.FieldAccessorTable<global::examples.Point, global::examples.Point.Builder> internal__static_examples_Point__FieldAccessorTable;
+ internal static pbd::MessageDescriptor internal__static_examples_Rectangle__Descriptor;
+ internal static pb::FieldAccess.FieldAccessorTable<global::examples.Rectangle, global::examples.Rectangle.Builder> internal__static_examples_Rectangle__FieldAccessorTable;
+ internal static pbd::MessageDescriptor internal__static_examples_Feature__Descriptor;
+ internal static pb::FieldAccess.FieldAccessorTable<global::examples.Feature, global::examples.Feature.Builder> internal__static_examples_Feature__FieldAccessorTable;
+ internal static pbd::MessageDescriptor internal__static_examples_RouteNote__Descriptor;
+ internal static pb::FieldAccess.FieldAccessorTable<global::examples.RouteNote, global::examples.RouteNote.Builder> internal__static_examples_RouteNote__FieldAccessorTable;
+ internal static pbd::MessageDescriptor internal__static_examples_RouteSummary__Descriptor;
+ internal static pb::FieldAccess.FieldAccessorTable<global::examples.RouteSummary, global::examples.RouteSummary.Builder> internal__static_examples_RouteSummary__FieldAccessorTable;
+ #endregion
+ #region Descriptor
+ public static pbd::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbd::FileDescriptor descriptor;
+
+ static RouteGuide() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "ChFyb3V0ZV9ndWlkZS5wcm90bxIIZXhhbXBsZXMiLAoFUG9pbnQSEAoIbGF0",
+ "aXR1ZGUYASABKAUSEQoJbG9uZ2l0dWRlGAIgASgFIkUKCVJlY3RhbmdsZRIb",
+ "CgJsbxgBIAEoCzIPLmV4YW1wbGVzLlBvaW50EhsKAmhpGAIgASgLMg8uZXhh",
+ "bXBsZXMuUG9pbnQiOgoHRmVhdHVyZRIMCgRuYW1lGAEgASgJEiEKCGxvY2F0",
+ "aW9uGAIgASgLMg8uZXhhbXBsZXMuUG9pbnQiPwoJUm91dGVOb3RlEiEKCGxv",
+ "Y2F0aW9uGAEgASgLMg8uZXhhbXBsZXMuUG9pbnQSDwoHbWVzc2FnZRgCIAEo",
+ "CSJiCgxSb3V0ZVN1bW1hcnkSEwoLcG9pbnRfY291bnQYASABKAUSFQoNZmVh",
+ "dHVyZV9jb3VudBgCIAEoBRIQCghkaXN0YW5jZRgDIAEoBRIUCgxlbGFwc2Vk",
+ "X3RpbWUYBCABKAUy9QEKClJvdXRlR3VpZGUSMgoKR2V0RmVhdHVyZRIPLmV4",
+ "YW1wbGVzLlBvaW50GhEuZXhhbXBsZXMuRmVhdHVyZSIAEjoKDExpc3RGZWF0",
+ "dXJlcxITLmV4YW1wbGVzLlJlY3RhbmdsZRoRLmV4YW1wbGVzLkZlYXR1cmUi",
+ "ADABEjoKC1JlY29yZFJvdXRlEg8uZXhhbXBsZXMuUG9pbnQaFi5leGFtcGxl",
+ "cy5Sb3V0ZVN1bW1hcnkiACgBEjsKCVJvdXRlQ2hhdBITLmV4YW1wbGVzLlJv",
+ "dXRlTm90ZRoTLmV4YW1wbGVzLlJvdXRlTm90ZSIAKAEwAQ=="));
+ pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
+ descriptor = root;
+ internal__static_examples_Point__Descriptor = Descriptor.MessageTypes[0];
+ internal__static_examples_Point__FieldAccessorTable =
+ new pb::FieldAccess.FieldAccessorTable<global::examples.Point, global::examples.Point.Builder>(internal__static_examples_Point__Descriptor,
+ new string[] { "Latitude", "Longitude", });
+ internal__static_examples_Rectangle__Descriptor = Descriptor.MessageTypes[1];
+ internal__static_examples_Rectangle__FieldAccessorTable =
+ new pb::FieldAccess.FieldAccessorTable<global::examples.Rectangle, global::examples.Rectangle.Builder>(internal__static_examples_Rectangle__Descriptor,
+ new string[] { "Lo", "Hi", });
+ internal__static_examples_Feature__Descriptor = Descriptor.MessageTypes[2];
+ internal__static_examples_Feature__FieldAccessorTable =
+ new pb::FieldAccess.FieldAccessorTable<global::examples.Feature, global::examples.Feature.Builder>(internal__static_examples_Feature__Descriptor,
+ new string[] { "Name", "Location", });
+ internal__static_examples_RouteNote__Descriptor = Descriptor.MessageTypes[3];
+ internal__static_examples_RouteNote__FieldAccessorTable =
+ new pb::FieldAccess.FieldAccessorTable<global::examples.RouteNote, global::examples.RouteNote.Builder>(internal__static_examples_RouteNote__Descriptor,
+ new string[] { "Location", "Message", });
+ internal__static_examples_RouteSummary__Descriptor = Descriptor.MessageTypes[4];
+ internal__static_examples_RouteSummary__FieldAccessorTable =
+ new pb::FieldAccess.FieldAccessorTable<global::examples.RouteSummary, global::examples.RouteSummary.Builder>(internal__static_examples_RouteSummary__Descriptor,
+ new string[] { "PointCount", "FeatureCount", "Distance", "ElapsedTime", });
+ pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
+ RegisterAllExtensions(registry);
+ return registry;
+ };
+ pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+ new pbd::FileDescriptor[] {
+ }, assigner);
+ }
+ #endregion
+
+ }
+ }
+ #region Messages
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class Point : pb::GeneratedMessage<Point, Point.Builder> {
+ private Point() { }
+ private static readonly Point defaultInstance = new Point().MakeReadOnly();
+ private static readonly string[] _pointFieldNames = new string[] { "latitude", "longitude" };
+ private static readonly uint[] _pointFieldTags = new uint[] { 8, 16 };
+ public static Point DefaultInstance {
+ get { return defaultInstance; }
+ }
+
+ public override Point DefaultInstanceForType {
+ get { return DefaultInstance; }
+ }
+
+ protected override Point ThisMessage {
+ get { return this; }
+ }
+
+ public static pbd::MessageDescriptor Descriptor {
+ get { return global::examples.Proto.RouteGuide.internal__static_examples_Point__Descriptor; }
+ }
+
+ protected override pb::FieldAccess.FieldAccessorTable<Point, Point.Builder> InternalFieldAccessors {
+ get { return global::examples.Proto.RouteGuide.internal__static_examples_Point__FieldAccessorTable; }
+ }
+
+ public const int LatitudeFieldNumber = 1;
+ private bool hasLatitude;
+ private int latitude_;
+ public bool HasLatitude {
+ get { return hasLatitude; }
+ }
+ public int Latitude {
+ get { return latitude_; }
+ }
+
+ public const int LongitudeFieldNumber = 2;
+ private bool hasLongitude;
+ private int longitude_;
+ public bool HasLongitude {
+ get { return hasLongitude; }
+ }
+ public int Longitude {
+ get { return longitude_; }
+ }
+
+ public override bool IsInitialized {
+ get {
+ return true;
+ }
+ }
+
+ public override void WriteTo(pb::ICodedOutputStream output) {
+ CalcSerializedSize();
+ string[] field_names = _pointFieldNames;
+ if (hasLatitude) {
+ output.WriteInt32(1, field_names[0], Latitude);
+ }
+ if (hasLongitude) {
+ output.WriteInt32(2, field_names[1], Longitude);
+ }
+ UnknownFields.WriteTo(output);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public override int SerializedSize {
+ get {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+ return CalcSerializedSize();
+ }
+ }
+
+ private int CalcSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (hasLatitude) {
+ size += pb::CodedOutputStream.ComputeInt32Size(1, Latitude);
+ }
+ if (hasLongitude) {
+ size += pb::CodedOutputStream.ComputeInt32Size(2, Longitude);
+ }
+ size += UnknownFields.SerializedSize;
+ memoizedSerializedSize = size;
+ return size;
+ }
+ public static Point ParseFrom(pb::ByteString data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static Point ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static Point ParseFrom(byte[] data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static Point ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static Point ParseFrom(global::System.IO.Stream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static Point ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ public static Point ParseDelimitedFrom(global::System.IO.Stream input) {
+ return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+ }
+ public static Point ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+ }
+ public static Point ParseFrom(pb::ICodedInputStream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static Point ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ private Point MakeReadOnly() {
+ return this;
+ }
+
+ public static Builder CreateBuilder() { return new Builder(); }
+ public override Builder ToBuilder() { return CreateBuilder(this); }
+ public override Builder CreateBuilderForType() { return new Builder(); }
+ public static Builder CreateBuilder(Point prototype) {
+ return new Builder(prototype);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class Builder : pb::GeneratedBuilder<Point, Builder> {
+ protected override Builder ThisBuilder {
+ get { return this; }
+ }
+ public Builder() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ }
+ internal Builder(Point cloneFrom) {
+ result = cloneFrom;
+ resultIsReadOnly = true;
+ }
+
+ private bool resultIsReadOnly;
+ private Point result;
+
+ private Point PrepareBuilder() {
+ if (resultIsReadOnly) {
+ Point original = result;
+ result = new Point();
+ resultIsReadOnly = false;
+ MergeFrom(original);
+ }
+ return result;
+ }
+
+ public override bool IsInitialized {
+ get { return result.IsInitialized; }
+ }
+
+ protected override Point MessageBeingBuilt {
+ get { return PrepareBuilder(); }
+ }
+
+ public override Builder Clear() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ return this;
+ }
+
+ public override Builder Clone() {
+ if (resultIsReadOnly) {
+ return new Builder(result);
+ } else {
+ return new Builder().MergeFrom(result);
+ }
+ }
+
+ public override pbd::MessageDescriptor DescriptorForType {
+ get { return global::examples.Point.Descriptor; }
+ }
+
+ public override Point DefaultInstanceForType {
+ get { return global::examples.Point.DefaultInstance; }
+ }
+
+ public override Point BuildPartial() {
+ if (resultIsReadOnly) {
+ return result;
+ }
+ resultIsReadOnly = true;
+ return result.MakeReadOnly();
+ }
+
+ public override Builder MergeFrom(pb::IMessage other) {
+ if (other is Point) {
+ return MergeFrom((Point) other);
+ } else {
+ base.MergeFrom(other);
+ return this;
+ }
+ }
+
+ public override Builder MergeFrom(Point other) {
+ if (other == global::examples.Point.DefaultInstance) return this;
+ PrepareBuilder();
+ if (other.HasLatitude) {
+ Latitude = other.Latitude;
+ }
+ if (other.HasLongitude) {
+ Longitude = other.Longitude;
+ }
+ this.MergeUnknownFields(other.UnknownFields);
+ return this;
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input) {
+ return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ PrepareBuilder();
+ pb::UnknownFieldSet.Builder unknownFields = null;
+ uint tag;
+ string field_name;
+ while (input.ReadTag(out tag, out field_name)) {
+ if(tag == 0 && field_name != null) {
+ int field_ordinal = global::System.Array.BinarySearch(_pointFieldNames, field_name, global::System.StringComparer.Ordinal);
+ if(field_ordinal >= 0)
+ tag = _pointFieldTags[field_ordinal];
+ else {
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ continue;
+ }
+ }
+ switch (tag) {
+ case 0: {
+ throw pb::InvalidProtocolBufferException.InvalidTag();
+ }
+ default: {
+ if (pb::WireFormat.IsEndGroupTag(tag)) {
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ break;
+ }
+ case 8: {
+ result.hasLatitude = input.ReadInt32(ref result.latitude_);
+ break;
+ }
+ case 16: {
+ result.hasLongitude = input.ReadInt32(ref result.longitude_);
+ break;
+ }
+ }
+ }
+
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+
+
+ public bool HasLatitude {
+ get { return result.hasLatitude; }
+ }
+ public int Latitude {
+ get { return result.Latitude; }
+ set { SetLatitude(value); }
+ }
+ public Builder SetLatitude(int value) {
+ PrepareBuilder();
+ result.hasLatitude = true;
+ result.latitude_ = value;
+ return this;
+ }
+ public Builder ClearLatitude() {
+ PrepareBuilder();
+ result.hasLatitude = false;
+ result.latitude_ = 0;
+ return this;
+ }
+
+ public bool HasLongitude {
+ get { return result.hasLongitude; }
+ }
+ public int Longitude {
+ get { return result.Longitude; }
+ set { SetLongitude(value); }
+ }
+ public Builder SetLongitude(int value) {
+ PrepareBuilder();
+ result.hasLongitude = true;
+ result.longitude_ = value;
+ return this;
+ }
+ public Builder ClearLongitude() {
+ PrepareBuilder();
+ result.hasLongitude = false;
+ result.longitude_ = 0;
+ return this;
+ }
+ }
+ static Point() {
+ object.ReferenceEquals(global::examples.Proto.RouteGuide.Descriptor, null);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class Rectangle : pb::GeneratedMessage<Rectangle, Rectangle.Builder> {
+ private Rectangle() { }
+ private static readonly Rectangle defaultInstance = new Rectangle().MakeReadOnly();
+ private static readonly string[] _rectangleFieldNames = new string[] { "hi", "lo" };
+ private static readonly uint[] _rectangleFieldTags = new uint[] { 18, 10 };
+ public static Rectangle DefaultInstance {
+ get { return defaultInstance; }
+ }
+
+ public override Rectangle DefaultInstanceForType {
+ get { return DefaultInstance; }
+ }
+
+ protected override Rectangle ThisMessage {
+ get { return this; }
+ }
+
+ public static pbd::MessageDescriptor Descriptor {
+ get { return global::examples.Proto.RouteGuide.internal__static_examples_Rectangle__Descriptor; }
+ }
+
+ protected override pb::FieldAccess.FieldAccessorTable<Rectangle, Rectangle.Builder> InternalFieldAccessors {
+ get { return global::examples.Proto.RouteGuide.internal__static_examples_Rectangle__FieldAccessorTable; }
+ }
+
+ public const int LoFieldNumber = 1;
+ private bool hasLo;
+ private global::examples.Point lo_;
+ public bool HasLo {
+ get { return hasLo; }
+ }
+ public global::examples.Point Lo {
+ get { return lo_ ?? global::examples.Point.DefaultInstance; }
+ }
+
+ public const int HiFieldNumber = 2;
+ private bool hasHi;
+ private global::examples.Point hi_;
+ public bool HasHi {
+ get { return hasHi; }
+ }
+ public global::examples.Point Hi {
+ get { return hi_ ?? global::examples.Point.DefaultInstance; }
+ }
+
+ public override bool IsInitialized {
+ get {
+ return true;
+ }
+ }
+
+ public override void WriteTo(pb::ICodedOutputStream output) {
+ CalcSerializedSize();
+ string[] field_names = _rectangleFieldNames;
+ if (hasLo) {
+ output.WriteMessage(1, field_names[1], Lo);
+ }
+ if (hasHi) {
+ output.WriteMessage(2, field_names[0], Hi);
+ }
+ UnknownFields.WriteTo(output);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public override int SerializedSize {
+ get {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+ return CalcSerializedSize();
+ }
+ }
+
+ private int CalcSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (hasLo) {
+ size += pb::CodedOutputStream.ComputeMessageSize(1, Lo);
+ }
+ if (hasHi) {
+ size += pb::CodedOutputStream.ComputeMessageSize(2, Hi);
+ }
+ size += UnknownFields.SerializedSize;
+ memoizedSerializedSize = size;
+ return size;
+ }
+ public static Rectangle ParseFrom(pb::ByteString data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static Rectangle ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static Rectangle ParseFrom(byte[] data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static Rectangle ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static Rectangle ParseFrom(global::System.IO.Stream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static Rectangle ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ public static Rectangle ParseDelimitedFrom(global::System.IO.Stream input) {
+ return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+ }
+ public static Rectangle ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+ }
+ public static Rectangle ParseFrom(pb::ICodedInputStream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static Rectangle ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ private Rectangle MakeReadOnly() {
+ return this;
+ }
+
+ public static Builder CreateBuilder() { return new Builder(); }
+ public override Builder ToBuilder() { return CreateBuilder(this); }
+ public override Builder CreateBuilderForType() { return new Builder(); }
+ public static Builder CreateBuilder(Rectangle prototype) {
+ return new Builder(prototype);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class Builder : pb::GeneratedBuilder<Rectangle, Builder> {
+ protected override Builder ThisBuilder {
+ get { return this; }
+ }
+ public Builder() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ }
+ internal Builder(Rectangle cloneFrom) {
+ result = cloneFrom;
+ resultIsReadOnly = true;
+ }
+
+ private bool resultIsReadOnly;
+ private Rectangle result;
+
+ private Rectangle PrepareBuilder() {
+ if (resultIsReadOnly) {
+ Rectangle original = result;
+ result = new Rectangle();
+ resultIsReadOnly = false;
+ MergeFrom(original);
+ }
+ return result;
+ }
+
+ public override bool IsInitialized {
+ get { return result.IsInitialized; }
+ }
+
+ protected override Rectangle MessageBeingBuilt {
+ get { return PrepareBuilder(); }
+ }
+
+ public override Builder Clear() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ return this;
+ }
+
+ public override Builder Clone() {
+ if (resultIsReadOnly) {
+ return new Builder(result);
+ } else {
+ return new Builder().MergeFrom(result);
+ }
+ }
+
+ public override pbd::MessageDescriptor DescriptorForType {
+ get { return global::examples.Rectangle.Descriptor; }
+ }
+
+ public override Rectangle DefaultInstanceForType {
+ get { return global::examples.Rectangle.DefaultInstance; }
+ }
+
+ public override Rectangle BuildPartial() {
+ if (resultIsReadOnly) {
+ return result;
+ }
+ resultIsReadOnly = true;
+ return result.MakeReadOnly();
+ }
+
+ public override Builder MergeFrom(pb::IMessage other) {
+ if (other is Rectangle) {
+ return MergeFrom((Rectangle) other);
+ } else {
+ base.MergeFrom(other);
+ return this;
+ }
+ }
+
+ public override Builder MergeFrom(Rectangle other) {
+ if (other == global::examples.Rectangle.DefaultInstance) return this;
+ PrepareBuilder();
+ if (other.HasLo) {
+ MergeLo(other.Lo);
+ }
+ if (other.HasHi) {
+ MergeHi(other.Hi);
+ }
+ this.MergeUnknownFields(other.UnknownFields);
+ return this;
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input) {
+ return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ PrepareBuilder();
+ pb::UnknownFieldSet.Builder unknownFields = null;
+ uint tag;
+ string field_name;
+ while (input.ReadTag(out tag, out field_name)) {
+ if(tag == 0 && field_name != null) {
+ int field_ordinal = global::System.Array.BinarySearch(_rectangleFieldNames, field_name, global::System.StringComparer.Ordinal);
+ if(field_ordinal >= 0)
+ tag = _rectangleFieldTags[field_ordinal];
+ else {
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ continue;
+ }
+ }
+ switch (tag) {
+ case 0: {
+ throw pb::InvalidProtocolBufferException.InvalidTag();
+ }
+ default: {
+ if (pb::WireFormat.IsEndGroupTag(tag)) {
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ break;
+ }
+ case 10: {
+ global::examples.Point.Builder subBuilder = global::examples.Point.CreateBuilder();
+ if (result.hasLo) {
+ subBuilder.MergeFrom(Lo);
+ }
+ input.ReadMessage(subBuilder, extensionRegistry);
+ Lo = subBuilder.BuildPartial();
+ break;
+ }
+ case 18: {
+ global::examples.Point.Builder subBuilder = global::examples.Point.CreateBuilder();
+ if (result.hasHi) {
+ subBuilder.MergeFrom(Hi);
+ }
+ input.ReadMessage(subBuilder, extensionRegistry);
+ Hi = subBuilder.BuildPartial();
+ break;
+ }
+ }
+ }
+
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+
+
+ public bool HasLo {
+ get { return result.hasLo; }
+ }
+ public global::examples.Point Lo {
+ get { return result.Lo; }
+ set { SetLo(value); }
+ }
+ public Builder SetLo(global::examples.Point value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ result.hasLo = true;
+ result.lo_ = value;
+ return this;
+ }
+ public Builder SetLo(global::examples.Point.Builder builderForValue) {
+ pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+ PrepareBuilder();
+ result.hasLo = true;
+ result.lo_ = builderForValue.Build();
+ return this;
+ }
+ public Builder MergeLo(global::examples.Point value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ if (result.hasLo &&
+ result.lo_ != global::examples.Point.DefaultInstance) {
+ result.lo_ = global::examples.Point.CreateBuilder(result.lo_).MergeFrom(value).BuildPartial();
+ } else {
+ result.lo_ = value;
+ }
+ result.hasLo = true;
+ return this;
+ }
+ public Builder ClearLo() {
+ PrepareBuilder();
+ result.hasLo = false;
+ result.lo_ = null;
+ return this;
+ }
+
+ public bool HasHi {
+ get { return result.hasHi; }
+ }
+ public global::examples.Point Hi {
+ get { return result.Hi; }
+ set { SetHi(value); }
+ }
+ public Builder SetHi(global::examples.Point value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ result.hasHi = true;
+ result.hi_ = value;
+ return this;
+ }
+ public Builder SetHi(global::examples.Point.Builder builderForValue) {
+ pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+ PrepareBuilder();
+ result.hasHi = true;
+ result.hi_ = builderForValue.Build();
+ return this;
+ }
+ public Builder MergeHi(global::examples.Point value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ if (result.hasHi &&
+ result.hi_ != global::examples.Point.DefaultInstance) {
+ result.hi_ = global::examples.Point.CreateBuilder(result.hi_).MergeFrom(value).BuildPartial();
+ } else {
+ result.hi_ = value;
+ }
+ result.hasHi = true;
+ return this;
+ }
+ public Builder ClearHi() {
+ PrepareBuilder();
+ result.hasHi = false;
+ result.hi_ = null;
+ return this;
+ }
+ }
+ static Rectangle() {
+ object.ReferenceEquals(global::examples.Proto.RouteGuide.Descriptor, null);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class Feature : pb::GeneratedMessage<Feature, Feature.Builder> {
+ private Feature() { }
+ private static readonly Feature defaultInstance = new Feature().MakeReadOnly();
+ private static readonly string[] _featureFieldNames = new string[] { "location", "name" };
+ private static readonly uint[] _featureFieldTags = new uint[] { 18, 10 };
+ public static Feature DefaultInstance {
+ get { return defaultInstance; }
+ }
+
+ public override Feature DefaultInstanceForType {
+ get { return DefaultInstance; }
+ }
+
+ protected override Feature ThisMessage {
+ get { return this; }
+ }
+
+ public static pbd::MessageDescriptor Descriptor {
+ get { return global::examples.Proto.RouteGuide.internal__static_examples_Feature__Descriptor; }
+ }
+
+ protected override pb::FieldAccess.FieldAccessorTable<Feature, Feature.Builder> InternalFieldAccessors {
+ get { return global::examples.Proto.RouteGuide.internal__static_examples_Feature__FieldAccessorTable; }
+ }
+
+ public const int NameFieldNumber = 1;
+ private bool hasName;
+ private string name_ = "";
+ public bool HasName {
+ get { return hasName; }
+ }
+ public string Name {
+ get { return name_; }
+ }
+
+ public const int LocationFieldNumber = 2;
+ private bool hasLocation;
+ private global::examples.Point location_;
+ public bool HasLocation {
+ get { return hasLocation; }
+ }
+ public global::examples.Point Location {
+ get { return location_ ?? global::examples.Point.DefaultInstance; }
+ }
+
+ public override bool IsInitialized {
+ get {
+ return true;
+ }
+ }
+
+ public override void WriteTo(pb::ICodedOutputStream output) {
+ CalcSerializedSize();
+ string[] field_names = _featureFieldNames;
+ if (hasName) {
+ output.WriteString(1, field_names[1], Name);
+ }
+ if (hasLocation) {
+ output.WriteMessage(2, field_names[0], Location);
+ }
+ UnknownFields.WriteTo(output);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public override int SerializedSize {
+ get {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+ return CalcSerializedSize();
+ }
+ }
+
+ private int CalcSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (hasName) {
+ size += pb::CodedOutputStream.ComputeStringSize(1, Name);
+ }
+ if (hasLocation) {
+ size += pb::CodedOutputStream.ComputeMessageSize(2, Location);
+ }
+ size += UnknownFields.SerializedSize;
+ memoizedSerializedSize = size;
+ return size;
+ }
+ public static Feature ParseFrom(pb::ByteString data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static Feature ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static Feature ParseFrom(byte[] data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static Feature ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static Feature ParseFrom(global::System.IO.Stream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static Feature ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ public static Feature ParseDelimitedFrom(global::System.IO.Stream input) {
+ return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+ }
+ public static Feature ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+ }
+ public static Feature ParseFrom(pb::ICodedInputStream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static Feature ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ private Feature MakeReadOnly() {
+ return this;
+ }
+
+ public static Builder CreateBuilder() { return new Builder(); }
+ public override Builder ToBuilder() { return CreateBuilder(this); }
+ public override Builder CreateBuilderForType() { return new Builder(); }
+ public static Builder CreateBuilder(Feature prototype) {
+ return new Builder(prototype);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class Builder : pb::GeneratedBuilder<Feature, Builder> {
+ protected override Builder ThisBuilder {
+ get { return this; }
+ }
+ public Builder() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ }
+ internal Builder(Feature cloneFrom) {
+ result = cloneFrom;
+ resultIsReadOnly = true;
+ }
+
+ private bool resultIsReadOnly;
+ private Feature result;
+
+ private Feature PrepareBuilder() {
+ if (resultIsReadOnly) {
+ Feature original = result;
+ result = new Feature();
+ resultIsReadOnly = false;
+ MergeFrom(original);
+ }
+ return result;
+ }
+
+ public override bool IsInitialized {
+ get { return result.IsInitialized; }
+ }
+
+ protected override Feature MessageBeingBuilt {
+ get { return PrepareBuilder(); }
+ }
+
+ public override Builder Clear() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ return this;
+ }
+
+ public override Builder Clone() {
+ if (resultIsReadOnly) {
+ return new Builder(result);
+ } else {
+ return new Builder().MergeFrom(result);
+ }
+ }
+
+ public override pbd::MessageDescriptor DescriptorForType {
+ get { return global::examples.Feature.Descriptor; }
+ }
+
+ public override Feature DefaultInstanceForType {
+ get { return global::examples.Feature.DefaultInstance; }
+ }
+
+ public override Feature BuildPartial() {
+ if (resultIsReadOnly) {
+ return result;
+ }
+ resultIsReadOnly = true;
+ return result.MakeReadOnly();
+ }
+
+ public override Builder MergeFrom(pb::IMessage other) {
+ if (other is Feature) {
+ return MergeFrom((Feature) other);
+ } else {
+ base.MergeFrom(other);
+ return this;
+ }
+ }
+
+ public override Builder MergeFrom(Feature other) {
+ if (other == global::examples.Feature.DefaultInstance) return this;
+ PrepareBuilder();
+ if (other.HasName) {
+ Name = other.Name;
+ }
+ if (other.HasLocation) {
+ MergeLocation(other.Location);
+ }
+ this.MergeUnknownFields(other.UnknownFields);
+ return this;
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input) {
+ return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ PrepareBuilder();
+ pb::UnknownFieldSet.Builder unknownFields = null;
+ uint tag;
+ string field_name;
+ while (input.ReadTag(out tag, out field_name)) {
+ if(tag == 0 && field_name != null) {
+ int field_ordinal = global::System.Array.BinarySearch(_featureFieldNames, field_name, global::System.StringComparer.Ordinal);
+ if(field_ordinal >= 0)
+ tag = _featureFieldTags[field_ordinal];
+ else {
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ continue;
+ }
+ }
+ switch (tag) {
+ case 0: {
+ throw pb::InvalidProtocolBufferException.InvalidTag();
+ }
+ default: {
+ if (pb::WireFormat.IsEndGroupTag(tag)) {
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ break;
+ }
+ case 10: {
+ result.hasName = input.ReadString(ref result.name_);
+ break;
+ }
+ case 18: {
+ global::examples.Point.Builder subBuilder = global::examples.Point.CreateBuilder();
+ if (result.hasLocation) {
+ subBuilder.MergeFrom(Location);
+ }
+ input.ReadMessage(subBuilder, extensionRegistry);
+ Location = subBuilder.BuildPartial();
+ break;
+ }
+ }
+ }
+
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+
+
+ public bool HasName {
+ get { return result.hasName; }
+ }
+ public string Name {
+ get { return result.Name; }
+ set { SetName(value); }
+ }
+ public Builder SetName(string value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ result.hasName = true;
+ result.name_ = value;
+ return this;
+ }
+ public Builder ClearName() {
+ PrepareBuilder();
+ result.hasName = false;
+ result.name_ = "";
+ return this;
+ }
+
+ public bool HasLocation {
+ get { return result.hasLocation; }
+ }
+ public global::examples.Point Location {
+ get { return result.Location; }
+ set { SetLocation(value); }
+ }
+ public Builder SetLocation(global::examples.Point value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ result.hasLocation = true;
+ result.location_ = value;
+ return this;
+ }
+ public Builder SetLocation(global::examples.Point.Builder builderForValue) {
+ pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+ PrepareBuilder();
+ result.hasLocation = true;
+ result.location_ = builderForValue.Build();
+ return this;
+ }
+ public Builder MergeLocation(global::examples.Point value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ if (result.hasLocation &&
+ result.location_ != global::examples.Point.DefaultInstance) {
+ result.location_ = global::examples.Point.CreateBuilder(result.location_).MergeFrom(value).BuildPartial();
+ } else {
+ result.location_ = value;
+ }
+ result.hasLocation = true;
+ return this;
+ }
+ public Builder ClearLocation() {
+ PrepareBuilder();
+ result.hasLocation = false;
+ result.location_ = null;
+ return this;
+ }
+ }
+ static Feature() {
+ object.ReferenceEquals(global::examples.Proto.RouteGuide.Descriptor, null);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class RouteNote : pb::GeneratedMessage<RouteNote, RouteNote.Builder> {
+ private RouteNote() { }
+ private static readonly RouteNote defaultInstance = new RouteNote().MakeReadOnly();
+ private static readonly string[] _routeNoteFieldNames = new string[] { "location", "message" };
+ private static readonly uint[] _routeNoteFieldTags = new uint[] { 10, 18 };
+ public static RouteNote DefaultInstance {
+ get { return defaultInstance; }
+ }
+
+ public override RouteNote DefaultInstanceForType {
+ get { return DefaultInstance; }
+ }
+
+ protected override RouteNote ThisMessage {
+ get { return this; }
+ }
+
+ public static pbd::MessageDescriptor Descriptor {
+ get { return global::examples.Proto.RouteGuide.internal__static_examples_RouteNote__Descriptor; }
+ }
+
+ protected override pb::FieldAccess.FieldAccessorTable<RouteNote, RouteNote.Builder> InternalFieldAccessors {
+ get { return global::examples.Proto.RouteGuide.internal__static_examples_RouteNote__FieldAccessorTable; }
+ }
+
+ public const int LocationFieldNumber = 1;
+ private bool hasLocation;
+ private global::examples.Point location_;
+ public bool HasLocation {
+ get { return hasLocation; }
+ }
+ public global::examples.Point Location {
+ get { return location_ ?? global::examples.Point.DefaultInstance; }
+ }
+
+ public const int MessageFieldNumber = 2;
+ private bool hasMessage;
+ private string message_ = "";
+ public bool HasMessage {
+ get { return hasMessage; }
+ }
+ public string Message {
+ get { return message_; }
+ }
+
+ public override bool IsInitialized {
+ get {
+ return true;
+ }
+ }
+
+ public override void WriteTo(pb::ICodedOutputStream output) {
+ CalcSerializedSize();
+ string[] field_names = _routeNoteFieldNames;
+ if (hasLocation) {
+ output.WriteMessage(1, field_names[0], Location);
+ }
+ if (hasMessage) {
+ output.WriteString(2, field_names[1], Message);
+ }
+ UnknownFields.WriteTo(output);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public override int SerializedSize {
+ get {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+ return CalcSerializedSize();
+ }
+ }
+
+ private int CalcSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (hasLocation) {
+ size += pb::CodedOutputStream.ComputeMessageSize(1, Location);
+ }
+ if (hasMessage) {
+ size += pb::CodedOutputStream.ComputeStringSize(2, Message);
+ }
+ size += UnknownFields.SerializedSize;
+ memoizedSerializedSize = size;
+ return size;
+ }
+ public static RouteNote ParseFrom(pb::ByteString data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static RouteNote ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static RouteNote ParseFrom(byte[] data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static RouteNote ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static RouteNote ParseFrom(global::System.IO.Stream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static RouteNote ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ public static RouteNote ParseDelimitedFrom(global::System.IO.Stream input) {
+ return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+ }
+ public static RouteNote ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+ }
+ public static RouteNote ParseFrom(pb::ICodedInputStream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static RouteNote ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ private RouteNote MakeReadOnly() {
+ return this;
+ }
+
+ public static Builder CreateBuilder() { return new Builder(); }
+ public override Builder ToBuilder() { return CreateBuilder(this); }
+ public override Builder CreateBuilderForType() { return new Builder(); }
+ public static Builder CreateBuilder(RouteNote prototype) {
+ return new Builder(prototype);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class Builder : pb::GeneratedBuilder<RouteNote, Builder> {
+ protected override Builder ThisBuilder {
+ get { return this; }
+ }
+ public Builder() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ }
+ internal Builder(RouteNote cloneFrom) {
+ result = cloneFrom;
+ resultIsReadOnly = true;
+ }
+
+ private bool resultIsReadOnly;
+ private RouteNote result;
+
+ private RouteNote PrepareBuilder() {
+ if (resultIsReadOnly) {
+ RouteNote original = result;
+ result = new RouteNote();
+ resultIsReadOnly = false;
+ MergeFrom(original);
+ }
+ return result;
+ }
+
+ public override bool IsInitialized {
+ get { return result.IsInitialized; }
+ }
+
+ protected override RouteNote MessageBeingBuilt {
+ get { return PrepareBuilder(); }
+ }
+
+ public override Builder Clear() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ return this;
+ }
+
+ public override Builder Clone() {
+ if (resultIsReadOnly) {
+ return new Builder(result);
+ } else {
+ return new Builder().MergeFrom(result);
+ }
+ }
+
+ public override pbd::MessageDescriptor DescriptorForType {
+ get { return global::examples.RouteNote.Descriptor; }
+ }
+
+ public override RouteNote DefaultInstanceForType {
+ get { return global::examples.RouteNote.DefaultInstance; }
+ }
+
+ public override RouteNote BuildPartial() {
+ if (resultIsReadOnly) {
+ return result;
+ }
+ resultIsReadOnly = true;
+ return result.MakeReadOnly();
+ }
+
+ public override Builder MergeFrom(pb::IMessage other) {
+ if (other is RouteNote) {
+ return MergeFrom((RouteNote) other);
+ } else {
+ base.MergeFrom(other);
+ return this;
+ }
+ }
+
+ public override Builder MergeFrom(RouteNote other) {
+ if (other == global::examples.RouteNote.DefaultInstance) return this;
+ PrepareBuilder();
+ if (other.HasLocation) {
+ MergeLocation(other.Location);
+ }
+ if (other.HasMessage) {
+ Message = other.Message;
+ }
+ this.MergeUnknownFields(other.UnknownFields);
+ return this;
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input) {
+ return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ PrepareBuilder();
+ pb::UnknownFieldSet.Builder unknownFields = null;
+ uint tag;
+ string field_name;
+ while (input.ReadTag(out tag, out field_name)) {
+ if(tag == 0 && field_name != null) {
+ int field_ordinal = global::System.Array.BinarySearch(_routeNoteFieldNames, field_name, global::System.StringComparer.Ordinal);
+ if(field_ordinal >= 0)
+ tag = _routeNoteFieldTags[field_ordinal];
+ else {
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ continue;
+ }
+ }
+ switch (tag) {
+ case 0: {
+ throw pb::InvalidProtocolBufferException.InvalidTag();
+ }
+ default: {
+ if (pb::WireFormat.IsEndGroupTag(tag)) {
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ break;
+ }
+ case 10: {
+ global::examples.Point.Builder subBuilder = global::examples.Point.CreateBuilder();
+ if (result.hasLocation) {
+ subBuilder.MergeFrom(Location);
+ }
+ input.ReadMessage(subBuilder, extensionRegistry);
+ Location = subBuilder.BuildPartial();
+ break;
+ }
+ case 18: {
+ result.hasMessage = input.ReadString(ref result.message_);
+ break;
+ }
+ }
+ }
+
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+
+
+ public bool HasLocation {
+ get { return result.hasLocation; }
+ }
+ public global::examples.Point Location {
+ get { return result.Location; }
+ set { SetLocation(value); }
+ }
+ public Builder SetLocation(global::examples.Point value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ result.hasLocation = true;
+ result.location_ = value;
+ return this;
+ }
+ public Builder SetLocation(global::examples.Point.Builder builderForValue) {
+ pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
+ PrepareBuilder();
+ result.hasLocation = true;
+ result.location_ = builderForValue.Build();
+ return this;
+ }
+ public Builder MergeLocation(global::examples.Point value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ if (result.hasLocation &&
+ result.location_ != global::examples.Point.DefaultInstance) {
+ result.location_ = global::examples.Point.CreateBuilder(result.location_).MergeFrom(value).BuildPartial();
+ } else {
+ result.location_ = value;
+ }
+ result.hasLocation = true;
+ return this;
+ }
+ public Builder ClearLocation() {
+ PrepareBuilder();
+ result.hasLocation = false;
+ result.location_ = null;
+ return this;
+ }
+
+ public bool HasMessage {
+ get { return result.hasMessage; }
+ }
+ public string Message {
+ get { return result.Message; }
+ set { SetMessage(value); }
+ }
+ public Builder SetMessage(string value) {
+ pb::ThrowHelper.ThrowIfNull(value, "value");
+ PrepareBuilder();
+ result.hasMessage = true;
+ result.message_ = value;
+ return this;
+ }
+ public Builder ClearMessage() {
+ PrepareBuilder();
+ result.hasMessage = false;
+ result.message_ = "";
+ return this;
+ }
+ }
+ static RouteNote() {
+ object.ReferenceEquals(global::examples.Proto.RouteGuide.Descriptor, null);
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class RouteSummary : pb::GeneratedMessage<RouteSummary, RouteSummary.Builder> {
+ private RouteSummary() { }
+ private static readonly RouteSummary defaultInstance = new RouteSummary().MakeReadOnly();
+ private static readonly string[] _routeSummaryFieldNames = new string[] { "distance", "elapsed_time", "feature_count", "point_count" };
+ private static readonly uint[] _routeSummaryFieldTags = new uint[] { 24, 32, 16, 8 };
+ public static RouteSummary DefaultInstance {
+ get { return defaultInstance; }
+ }
+
+ public override RouteSummary DefaultInstanceForType {
+ get { return DefaultInstance; }
+ }
+
+ protected override RouteSummary ThisMessage {
+ get { return this; }
+ }
+
+ public static pbd::MessageDescriptor Descriptor {
+ get { return global::examples.Proto.RouteGuide.internal__static_examples_RouteSummary__Descriptor; }
+ }
+
+ protected override pb::FieldAccess.FieldAccessorTable<RouteSummary, RouteSummary.Builder> InternalFieldAccessors {
+ get { return global::examples.Proto.RouteGuide.internal__static_examples_RouteSummary__FieldAccessorTable; }
+ }
+
+ public const int PointCountFieldNumber = 1;
+ private bool hasPointCount;
+ private int pointCount_;
+ public bool HasPointCount {
+ get { return hasPointCount; }
+ }
+ public int PointCount {
+ get { return pointCount_; }
+ }
+
+ public const int FeatureCountFieldNumber = 2;
+ private bool hasFeatureCount;
+ private int featureCount_;
+ public bool HasFeatureCount {
+ get { return hasFeatureCount; }
+ }
+ public int FeatureCount {
+ get { return featureCount_; }
+ }
+
+ public const int DistanceFieldNumber = 3;
+ private bool hasDistance;
+ private int distance_;
+ public bool HasDistance {
+ get { return hasDistance; }
+ }
+ public int Distance {
+ get { return distance_; }
+ }
+
+ public const int ElapsedTimeFieldNumber = 4;
+ private bool hasElapsedTime;
+ private int elapsedTime_;
+ public bool HasElapsedTime {
+ get { return hasElapsedTime; }
+ }
+ public int ElapsedTime {
+ get { return elapsedTime_; }
+ }
+
+ public override bool IsInitialized {
+ get {
+ return true;
+ }
+ }
+
+ public override void WriteTo(pb::ICodedOutputStream output) {
+ CalcSerializedSize();
+ string[] field_names = _routeSummaryFieldNames;
+ if (hasPointCount) {
+ output.WriteInt32(1, field_names[3], PointCount);
+ }
+ if (hasFeatureCount) {
+ output.WriteInt32(2, field_names[2], FeatureCount);
+ }
+ if (hasDistance) {
+ output.WriteInt32(3, field_names[0], Distance);
+ }
+ if (hasElapsedTime) {
+ output.WriteInt32(4, field_names[1], ElapsedTime);
+ }
+ UnknownFields.WriteTo(output);
+ }
+
+ private int memoizedSerializedSize = -1;
+ public override int SerializedSize {
+ get {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+ return CalcSerializedSize();
+ }
+ }
+
+ private int CalcSerializedSize() {
+ int size = memoizedSerializedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (hasPointCount) {
+ size += pb::CodedOutputStream.ComputeInt32Size(1, PointCount);
+ }
+ if (hasFeatureCount) {
+ size += pb::CodedOutputStream.ComputeInt32Size(2, FeatureCount);
+ }
+ if (hasDistance) {
+ size += pb::CodedOutputStream.ComputeInt32Size(3, Distance);
+ }
+ if (hasElapsedTime) {
+ size += pb::CodedOutputStream.ComputeInt32Size(4, ElapsedTime);
+ }
+ size += UnknownFields.SerializedSize;
+ memoizedSerializedSize = size;
+ return size;
+ }
+ public static RouteSummary ParseFrom(pb::ByteString data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static RouteSummary ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static RouteSummary ParseFrom(byte[] data) {
+ return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
+ }
+ public static RouteSummary ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
+ }
+ public static RouteSummary ParseFrom(global::System.IO.Stream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static RouteSummary ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ public static RouteSummary ParseDelimitedFrom(global::System.IO.Stream input) {
+ return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
+ }
+ public static RouteSummary ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
+ return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
+ }
+ public static RouteSummary ParseFrom(pb::ICodedInputStream input) {
+ return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ }
+ public static RouteSummary ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ }
+ private RouteSummary MakeReadOnly() {
+ return this;
+ }
+
+ public static Builder CreateBuilder() { return new Builder(); }
+ public override Builder ToBuilder() { return CreateBuilder(this); }
+ public override Builder CreateBuilderForType() { return new Builder(); }
+ public static Builder CreateBuilder(RouteSummary prototype) {
+ return new Builder(prototype);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public sealed partial class Builder : pb::GeneratedBuilder<RouteSummary, Builder> {
+ protected override Builder ThisBuilder {
+ get { return this; }
+ }
+ public Builder() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ }
+ internal Builder(RouteSummary cloneFrom) {
+ result = cloneFrom;
+ resultIsReadOnly = true;
+ }
+
+ private bool resultIsReadOnly;
+ private RouteSummary result;
+
+ private RouteSummary PrepareBuilder() {
+ if (resultIsReadOnly) {
+ RouteSummary original = result;
+ result = new RouteSummary();
+ resultIsReadOnly = false;
+ MergeFrom(original);
+ }
+ return result;
+ }
+
+ public override bool IsInitialized {
+ get { return result.IsInitialized; }
+ }
+
+ protected override RouteSummary MessageBeingBuilt {
+ get { return PrepareBuilder(); }
+ }
+
+ public override Builder Clear() {
+ result = DefaultInstance;
+ resultIsReadOnly = true;
+ return this;
+ }
+
+ public override Builder Clone() {
+ if (resultIsReadOnly) {
+ return new Builder(result);
+ } else {
+ return new Builder().MergeFrom(result);
+ }
+ }
+
+ public override pbd::MessageDescriptor DescriptorForType {
+ get { return global::examples.RouteSummary.Descriptor; }
+ }
+
+ public override RouteSummary DefaultInstanceForType {
+ get { return global::examples.RouteSummary.DefaultInstance; }
+ }
+
+ public override RouteSummary BuildPartial() {
+ if (resultIsReadOnly) {
+ return result;
+ }
+ resultIsReadOnly = true;
+ return result.MakeReadOnly();
+ }
+
+ public override Builder MergeFrom(pb::IMessage other) {
+ if (other is RouteSummary) {
+ return MergeFrom((RouteSummary) other);
+ } else {
+ base.MergeFrom(other);
+ return this;
+ }
+ }
+
+ public override Builder MergeFrom(RouteSummary other) {
+ if (other == global::examples.RouteSummary.DefaultInstance) return this;
+ PrepareBuilder();
+ if (other.HasPointCount) {
+ PointCount = other.PointCount;
+ }
+ if (other.HasFeatureCount) {
+ FeatureCount = other.FeatureCount;
+ }
+ if (other.HasDistance) {
+ Distance = other.Distance;
+ }
+ if (other.HasElapsedTime) {
+ ElapsedTime = other.ElapsedTime;
+ }
+ this.MergeUnknownFields(other.UnknownFields);
+ return this;
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input) {
+ return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ }
+
+ public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
+ PrepareBuilder();
+ pb::UnknownFieldSet.Builder unknownFields = null;
+ uint tag;
+ string field_name;
+ while (input.ReadTag(out tag, out field_name)) {
+ if(tag == 0 && field_name != null) {
+ int field_ordinal = global::System.Array.BinarySearch(_routeSummaryFieldNames, field_name, global::System.StringComparer.Ordinal);
+ if(field_ordinal >= 0)
+ tag = _routeSummaryFieldTags[field_ordinal];
+ else {
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ continue;
+ }
+ }
+ switch (tag) {
+ case 0: {
+ throw pb::InvalidProtocolBufferException.InvalidTag();
+ }
+ default: {
+ if (pb::WireFormat.IsEndGroupTag(tag)) {
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+ if (unknownFields == null) {
+ unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
+ }
+ ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
+ break;
+ }
+ case 8: {
+ result.hasPointCount = input.ReadInt32(ref result.pointCount_);
+ break;
+ }
+ case 16: {
+ result.hasFeatureCount = input.ReadInt32(ref result.featureCount_);
+ break;
+ }
+ case 24: {
+ result.hasDistance = input.ReadInt32(ref result.distance_);
+ break;
+ }
+ case 32: {
+ result.hasElapsedTime = input.ReadInt32(ref result.elapsedTime_);
+ break;
+ }
+ }
+ }
+
+ if (unknownFields != null) {
+ this.UnknownFields = unknownFields.Build();
+ }
+ return this;
+ }
+
+
+ public bool HasPointCount {
+ get { return result.hasPointCount; }
+ }
+ public int PointCount {
+ get { return result.PointCount; }
+ set { SetPointCount(value); }
+ }
+ public Builder SetPointCount(int value) {
+ PrepareBuilder();
+ result.hasPointCount = true;
+ result.pointCount_ = value;
+ return this;
+ }
+ public Builder ClearPointCount() {
+ PrepareBuilder();
+ result.hasPointCount = false;
+ result.pointCount_ = 0;
+ return this;
+ }
+
+ public bool HasFeatureCount {
+ get { return result.hasFeatureCount; }
+ }
+ public int FeatureCount {
+ get { return result.FeatureCount; }
+ set { SetFeatureCount(value); }
+ }
+ public Builder SetFeatureCount(int value) {
+ PrepareBuilder();
+ result.hasFeatureCount = true;
+ result.featureCount_ = value;
+ return this;
+ }
+ public Builder ClearFeatureCount() {
+ PrepareBuilder();
+ result.hasFeatureCount = false;
+ result.featureCount_ = 0;
+ return this;
+ }
+
+ public bool HasDistance {
+ get { return result.hasDistance; }
+ }
+ public int Distance {
+ get { return result.Distance; }
+ set { SetDistance(value); }
+ }
+ public Builder SetDistance(int value) {
+ PrepareBuilder();
+ result.hasDistance = true;
+ result.distance_ = value;
+ return this;
+ }
+ public Builder ClearDistance() {
+ PrepareBuilder();
+ result.hasDistance = false;
+ result.distance_ = 0;
+ return this;
+ }
+
+ public bool HasElapsedTime {
+ get { return result.hasElapsedTime; }
+ }
+ public int ElapsedTime {
+ get { return result.ElapsedTime; }
+ set { SetElapsedTime(value); }
+ }
+ public Builder SetElapsedTime(int value) {
+ PrepareBuilder();
+ result.hasElapsedTime = true;
+ result.elapsedTime_ = value;
+ return this;
+ }
+ public Builder ClearElapsedTime() {
+ PrepareBuilder();
+ result.hasElapsedTime = false;
+ result.elapsedTime_ = 0;
+ return this;
+ }
+ }
+ static RouteSummary() {
+ object.ReferenceEquals(global::examples.Proto.RouteGuide.Descriptor, null);
+ }
+ }
+
+ #endregion
+
+}
+
+#endregion Designer generated code
diff --git a/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj b/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj
new file mode 100644
index 0000000000..8358974aac
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuide/RouteGuide.csproj
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" />
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" />
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{49954D9C-5F17-4662-96B2-73BE833DD81A}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>RouteGuide</RootNamespace>
+ <AssemblyName>RouteGuide</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <NuGetPackageImportStamp>214cccda</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Google.ProtocolBuffers">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.dll</HintPath>
+ </Reference>
+ <Reference Include="Google.ProtocolBuffers.Serialization">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.Serialization.dll</HintPath>
+ </Reference>
+ <Reference Include="Grpc.Core, Version=0.6.5668.37363, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Grpc.Core.0.6.0\lib\net45\Grpc.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Newtonsoft.Json.7.0.1-beta2\lib\net45\Newtonsoft.Json.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\System.Collections.Immutable.1.1.36\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Core" />
+ <Reference Include="System.Interactive.Async">
+ <HintPath>..\packages\Ix-Async.1.2.3\lib\net45\System.Interactive.Async.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="RouteGuide.cs" />
+ <Compile Include="RouteGuideGrpc.cs" />
+ <Compile Include="RouteGuideUtil.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ <None Include="protos\route_guide.proto" />
+ <None Include="route_guide_db.json">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </None>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets'))" />
+ </Target>
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" />
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs b/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs
new file mode 100644
index 0000000000..c4b3900dca
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuide/RouteGuideGrpc.cs
@@ -0,0 +1,123 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: route_guide.proto
+#region Designer generated code
+
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+using Grpc.Core;
+
+namespace examples {
+ public static class RouteGuide
+ {
+ static readonly string __ServiceName = "examples.RouteGuide";
+
+ static readonly Marshaller<global::examples.Point> __Marshaller_Point = Marshallers.Create((arg) => arg.ToByteArray(), global::examples.Point.ParseFrom);
+ static readonly Marshaller<global::examples.Feature> __Marshaller_Feature = Marshallers.Create((arg) => arg.ToByteArray(), global::examples.Feature.ParseFrom);
+ static readonly Marshaller<global::examples.Rectangle> __Marshaller_Rectangle = Marshallers.Create((arg) => arg.ToByteArray(), global::examples.Rectangle.ParseFrom);
+ static readonly Marshaller<global::examples.RouteSummary> __Marshaller_RouteSummary = Marshallers.Create((arg) => arg.ToByteArray(), global::examples.RouteSummary.ParseFrom);
+ static readonly Marshaller<global::examples.RouteNote> __Marshaller_RouteNote = Marshallers.Create((arg) => arg.ToByteArray(), global::examples.RouteNote.ParseFrom);
+
+ static readonly Method<global::examples.Point, global::examples.Feature> __Method_GetFeature = new Method<global::examples.Point, global::examples.Feature>(
+ MethodType.Unary,
+ "GetFeature",
+ __Marshaller_Point,
+ __Marshaller_Feature);
+
+ static readonly Method<global::examples.Rectangle, global::examples.Feature> __Method_ListFeatures = new Method<global::examples.Rectangle, global::examples.Feature>(
+ MethodType.ServerStreaming,
+ "ListFeatures",
+ __Marshaller_Rectangle,
+ __Marshaller_Feature);
+
+ static readonly Method<global::examples.Point, global::examples.RouteSummary> __Method_RecordRoute = new Method<global::examples.Point, global::examples.RouteSummary>(
+ MethodType.ClientStreaming,
+ "RecordRoute",
+ __Marshaller_Point,
+ __Marshaller_RouteSummary);
+
+ static readonly Method<global::examples.RouteNote, global::examples.RouteNote> __Method_RouteChat = new Method<global::examples.RouteNote, global::examples.RouteNote>(
+ MethodType.DuplexStreaming,
+ "RouteChat",
+ __Marshaller_RouteNote,
+ __Marshaller_RouteNote);
+
+ // client-side stub interface
+ public interface IRouteGuideClient
+ {
+ global::examples.Feature GetFeature(global::examples.Point request, CancellationToken token = default(CancellationToken));
+ Task<global::examples.Feature> GetFeatureAsync(global::examples.Point request, CancellationToken token = default(CancellationToken));
+ AsyncServerStreamingCall<global::examples.Feature> ListFeatures(global::examples.Rectangle request, CancellationToken token = default(CancellationToken));
+ AsyncClientStreamingCall<global::examples.Point, global::examples.RouteSummary> RecordRoute(CancellationToken token = default(CancellationToken));
+ AsyncDuplexStreamingCall<global::examples.RouteNote, global::examples.RouteNote> RouteChat(CancellationToken token = default(CancellationToken));
+ }
+
+ // server-side interface
+ public interface IRouteGuide
+ {
+ Task<global::examples.Feature> GetFeature(ServerCallContext context, global::examples.Point request);
+ Task ListFeatures(ServerCallContext context, global::examples.Rectangle request, IServerStreamWriter<global::examples.Feature> responseStream);
+ Task<global::examples.RouteSummary> RecordRoute(ServerCallContext context, IAsyncStreamReader<global::examples.Point> requestStream);
+ Task RouteChat(ServerCallContext context, IAsyncStreamReader<global::examples.RouteNote> requestStream, IServerStreamWriter<global::examples.RouteNote> responseStream);
+ }
+
+ // client stub
+ public class RouteGuideClient : AbstractStub<RouteGuideClient, StubConfiguration>, IRouteGuideClient
+ {
+ public RouteGuideClient(Channel channel) : this(channel, StubConfiguration.Default)
+ {
+ }
+ public RouteGuideClient(Channel channel, StubConfiguration config) : base(channel, config)
+ {
+ }
+ public global::examples.Feature GetFeature(global::examples.Point request, CancellationToken token = default(CancellationToken))
+ {
+ var call = CreateCall(__ServiceName, __Method_GetFeature);
+ return Calls.BlockingUnaryCall(call, request, token);
+ }
+ public Task<global::examples.Feature> GetFeatureAsync(global::examples.Point request, CancellationToken token = default(CancellationToken))
+ {
+ var call = CreateCall(__ServiceName, __Method_GetFeature);
+ return Calls.AsyncUnaryCall(call, request, token);
+ }
+ public AsyncServerStreamingCall<global::examples.Feature> ListFeatures(global::examples.Rectangle request, CancellationToken token = default(CancellationToken))
+ {
+ var call = CreateCall(__ServiceName, __Method_ListFeatures);
+ return Calls.AsyncServerStreamingCall(call, request, token);
+ }
+ public AsyncClientStreamingCall<global::examples.Point, global::examples.RouteSummary> RecordRoute(CancellationToken token = default(CancellationToken))
+ {
+ var call = CreateCall(__ServiceName, __Method_RecordRoute);
+ return Calls.AsyncClientStreamingCall(call, token);
+ }
+ public AsyncDuplexStreamingCall<global::examples.RouteNote, global::examples.RouteNote> RouteChat(CancellationToken token = default(CancellationToken))
+ {
+ var call = CreateCall(__ServiceName, __Method_RouteChat);
+ return Calls.AsyncDuplexStreamingCall(call, token);
+ }
+ }
+
+ // creates service definition that can be registered with a server
+ public static ServerServiceDefinition BindService(IRouteGuide serviceImpl)
+ {
+ return ServerServiceDefinition.CreateBuilder(__ServiceName)
+ .AddMethod(__Method_GetFeature, serviceImpl.GetFeature)
+ .AddMethod(__Method_ListFeatures, serviceImpl.ListFeatures)
+ .AddMethod(__Method_RecordRoute, serviceImpl.RecordRoute)
+ .AddMethod(__Method_RouteChat, serviceImpl.RouteChat).Build();
+ }
+
+ // creates a new client stub
+ public static IRouteGuideClient NewStub(Channel channel)
+ {
+ return new RouteGuideClient(channel);
+ }
+
+ // creates a new client stub
+ public static IRouteGuideClient NewStub(Channel channel, StubConfiguration config)
+ {
+ return new RouteGuideClient(channel, config);
+ }
+ }
+}
+#endregion
diff --git a/examples/csharp/route_guide/RouteGuide/RouteGuideUtil.cs b/examples/csharp/route_guide/RouteGuide/RouteGuideUtil.cs
new file mode 100644
index 0000000000..6fb8b1e28a
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuide/RouteGuideUtil.cs
@@ -0,0 +1,67 @@
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace examples
+{
+ public static class RouteGuideUtil
+ {
+ public const string DefaultFeaturesFile = "route_guide_db.json";
+
+ private const double CoordFactor = 1e7;
+
+ /// <summary>
+ /// Indicates whether the given feature exists (i.e. has a valid name).
+ /// </summary>
+ public static bool Exists(Feature feature)
+ {
+ return feature != null && (feature.Name.Length != 0);
+ }
+
+ public static double GetLatitude(Point point)
+ {
+ return point.Latitude / CoordFactor;
+ }
+
+ public static double GetLongitude(Point point)
+ {
+ return point.Longitude / CoordFactor;
+ }
+
+ /// <summary>
+ /// Parses features from a JSON file.
+ /// </summary>
+ public static List<Feature> ParseFeatures(string filename)
+ {
+ var features = new List<Feature>();
+ var jsonFeatures = JsonConvert.DeserializeObject<List<JsonFeature>>(File.ReadAllText(filename));
+
+
+ foreach(var jsonFeature in jsonFeatures)
+ {
+ features.Add(Feature.CreateBuilder().SetName(jsonFeature.name).SetLocation(
+ Point.CreateBuilder()
+ .SetLongitude(jsonFeature.location.longitude)
+ .SetLatitude(jsonFeature.location.latitude).Build()).Build());
+ }
+ return features;
+ }
+
+ private class JsonFeature
+ {
+ public string name;
+ public JsonLocation location;
+ }
+
+ private class JsonLocation
+ {
+ public int longitude;
+ public int latitude;
+ }
+ }
+}
diff --git a/examples/csharp/route_guide/RouteGuide/packages.config b/examples/csharp/route_guide/RouteGuide/packages.config
new file mode 100644
index 0000000000..79abe0aa65
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuide/packages.config
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Google.ProtocolBuffers" version="2.4.1.555" targetFramework="net45" />
+ <package id="Grpc" version="0.6.0" targetFramework="net45" />
+ <package id="Grpc.Core" version="0.6.0" targetFramework="net45" />
+ <package id="grpc.dependencies.openssl.redist" version="1.0.2.2" targetFramework="net45" />
+ <package id="grpc.dependencies.zlib.redist" version="1.2.8.9" targetFramework="net45" />
+ <package id="grpc.native.csharp_ext" version="0.10.0" targetFramework="net45" />
+ <package id="Ix-Async" version="1.2.3" targetFramework="net45" />
+ <package id="Newtonsoft.Json" version="7.0.1-beta2" targetFramework="net45" />
+ <package id="System.Collections.Immutable" version="1.1.36" targetFramework="net45" />
+</packages> \ No newline at end of file
diff --git a/examples/csharp/route_guide/RouteGuide/protos/route_guide.proto b/examples/csharp/route_guide/RouteGuide/protos/route_guide.proto
new file mode 100644
index 0000000000..f4110b5515
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuide/protos/route_guide.proto
@@ -0,0 +1,123 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// TODO(jtattermusch): as of now, C# protobufs don't officially support
+// proto3.
+syntax = "proto2";
+
+package examples;
+
+// Interface exported by the server.
+service RouteGuide {
+ // A simple RPC.
+ //
+ // Obtains the feature at a given position.
+ //
+ // A feature with an empty name is returned if there's no feature at the given
+ // position.
+ rpc GetFeature(Point) returns (Feature) {}
+
+ // A server-to-client streaming RPC.
+ //
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+
+ // A client-to-server streaming RPC.
+ //
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+
+ // A Bidirectional streaming RPC.
+ //
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+}
+
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ optional int32 latitude = 1;
+ optional int32 longitude = 2;
+}
+
+// A latitude-longitude rectangle, represented as two diagonally opposite
+// points "lo" and "hi".
+message Rectangle {
+ // One corner of the rectangle.
+ optional Point lo = 1;
+
+ // The other corner of the rectangle.
+ optional Point hi = 2;
+}
+
+// A feature names something at a given point.
+//
+// If a feature could not be named, the name is empty.
+message Feature {
+ // The name of the feature.
+ optional string name = 1;
+
+ // The point where the feature is detected.
+ optional Point location = 2;
+}
+
+// A RouteNote is a message sent while at a given point.
+message RouteNote {
+ // The location from which the message is sent.
+ optional Point location = 1;
+
+ // The message to be sent.
+ optional string message = 2;
+}
+
+// A RouteSummary is received in response to a RecordRoute rpc.
+//
+// It contains the number of individual points received, the number of
+// detected features, and the total distance covered as the cumulative sum of
+// the distance between each point.
+message RouteSummary {
+ // The number of points received.
+ optional int32 point_count = 1;
+
+ // The number of known features passed while traversing the route.
+ optional int32 feature_count = 2;
+
+ // The distance covered in metres.
+ optional int32 distance = 3;
+
+ // The duration of the traversal in seconds.
+ optional int32 elapsed_time = 4;
+}
diff --git a/examples/csharp/route_guide/RouteGuide/route_guide_db.json b/examples/csharp/route_guide/RouteGuide/route_guide_db.json
new file mode 100644
index 0000000000..209f016259
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuide/route_guide_db.json
@@ -0,0 +1,601 @@
+[{
+ "location": {
+ "latitude": 407838351,
+ "longitude": -746143763
+ },
+ "name": "Patriots Path, Mendham, NJ 07945, USA"
+}, {
+ "location": {
+ "latitude": 408122808,
+ "longitude": -743999179
+ },
+ "name": "101 New Jersey 10, Whippany, NJ 07981, USA"
+}, {
+ "location": {
+ "latitude": 413628156,
+ "longitude": -749015468
+ },
+ "name": "U.S. 6, Shohola, PA 18458, USA"
+}, {
+ "location": {
+ "latitude": 419999544,
+ "longitude": -740371136
+ },
+ "name": "5 Conners Road, Kingston, NY 12401, USA"
+}, {
+ "location": {
+ "latitude": 414008389,
+ "longitude": -743951297
+ },
+ "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA"
+}, {
+ "location": {
+ "latitude": 419611318,
+ "longitude": -746524769
+ },
+ "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA"
+}, {
+ "location": {
+ "latitude": 406109563,
+ "longitude": -742186778
+ },
+ "name": "4001 Tremley Point Road, Linden, NJ 07036, USA"
+}, {
+ "location": {
+ "latitude": 416802456,
+ "longitude": -742370183
+ },
+ "name": "352 South Mountain Road, Wallkill, NY 12589, USA"
+}, {
+ "location": {
+ "latitude": 412950425,
+ "longitude": -741077389
+ },
+ "name": "Bailey Turn Road, Harriman, NY 10926, USA"
+}, {
+ "location": {
+ "latitude": 412144655,
+ "longitude": -743949739
+ },
+ "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA"
+}, {
+ "location": {
+ "latitude": 415736605,
+ "longitude": -742847522
+ },
+ "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA"
+}, {
+ "location": {
+ "latitude": 413843930,
+ "longitude": -740501726
+ },
+ "name": "162 Merrill Road, Highland Mills, NY 10930, USA"
+}, {
+ "location": {
+ "latitude": 410873075,
+ "longitude": -744459023
+ },
+ "name": "Clinton Road, West Milford, NJ 07480, USA"
+}, {
+ "location": {
+ "latitude": 412346009,
+ "longitude": -744026814
+ },
+ "name": "16 Old Brook Lane, Warwick, NY 10990, USA"
+}, {
+ "location": {
+ "latitude": 402948455,
+ "longitude": -747903913
+ },
+ "name": "3 Drake Lane, Pennington, NJ 08534, USA"
+}, {
+ "location": {
+ "latitude": 406337092,
+ "longitude": -740122226
+ },
+ "name": "6324 8th Avenue, Brooklyn, NY 11220, USA"
+}, {
+ "location": {
+ "latitude": 406421967,
+ "longitude": -747727624
+ },
+ "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA"
+}, {
+ "location": {
+ "latitude": 416318082,
+ "longitude": -749677716
+ },
+ "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA"
+}, {
+ "location": {
+ "latitude": 415301720,
+ "longitude": -748416257
+ },
+ "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA"
+}, {
+ "location": {
+ "latitude": 402647019,
+ "longitude": -747071791
+ },
+ "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA"
+}, {
+ "location": {
+ "latitude": 412567807,
+ "longitude": -741058078
+ },
+ "name": "New York State Reference Route 987E, Southfields, NY 10975, USA"
+}, {
+ "location": {
+ "latitude": 416855156,
+ "longitude": -744420597
+ },
+ "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA"
+}, {
+ "location": {
+ "latitude": 404663628,
+ "longitude": -744820157
+ },
+ "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA"
+}, {
+ "location": {
+ "latitude": 407113723,
+ "longitude": -749746483
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 402133926,
+ "longitude": -743613249
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 400273442,
+ "longitude": -741220915
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411236786,
+ "longitude": -744070769
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411633782,
+ "longitude": -746784970
+ },
+ "name": "211-225 Plains Road, Augusta, NJ 07822, USA"
+}, {
+ "location": {
+ "latitude": 415830701,
+ "longitude": -742952812
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 413447164,
+ "longitude": -748712898
+ },
+ "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA"
+}, {
+ "location": {
+ "latitude": 405047245,
+ "longitude": -749800722
+ },
+ "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA"
+}, {
+ "location": {
+ "latitude": 418858923,
+ "longitude": -746156790
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 417951888,
+ "longitude": -748484944
+ },
+ "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA"
+}, {
+ "location": {
+ "latitude": 407033786,
+ "longitude": -743977337
+ },
+ "name": "26 East 3rd Street, New Providence, NJ 07974, USA"
+}, {
+ "location": {
+ "latitude": 417548014,
+ "longitude": -740075041
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 410395868,
+ "longitude": -744972325
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404615353,
+ "longitude": -745129803
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 406589790,
+ "longitude": -743560121
+ },
+ "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA"
+}, {
+ "location": {
+ "latitude": 414653148,
+ "longitude": -740477477
+ },
+ "name": "18 Lannis Avenue, New Windsor, NY 12553, USA"
+}, {
+ "location": {
+ "latitude": 405957808,
+ "longitude": -743255336
+ },
+ "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA"
+}, {
+ "location": {
+ "latitude": 411733589,
+ "longitude": -741648093
+ },
+ "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA"
+}, {
+ "location": {
+ "latitude": 412676291,
+ "longitude": -742606606
+ },
+ "name": "1270 Lakes Road, Monroe, NY 10950, USA"
+}, {
+ "location": {
+ "latitude": 409224445,
+ "longitude": -748286738
+ },
+ "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA"
+}, {
+ "location": {
+ "latitude": 406523420,
+ "longitude": -742135517
+ },
+ "name": "652 Garden Street, Elizabeth, NJ 07202, USA"
+}, {
+ "location": {
+ "latitude": 401827388,
+ "longitude": -740294537
+ },
+ "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA"
+}, {
+ "location": {
+ "latitude": 410564152,
+ "longitude": -743685054
+ },
+ "name": "13-17 Stanley Street, West Milford, NJ 07480, USA"
+}, {
+ "location": {
+ "latitude": 408472324,
+ "longitude": -740726046
+ },
+ "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA"
+}, {
+ "location": {
+ "latitude": 412452168,
+ "longitude": -740214052
+ },
+ "name": "5 White Oak Lane, Stony Point, NY 10980, USA"
+}, {
+ "location": {
+ "latitude": 409146138,
+ "longitude": -746188906
+ },
+ "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA"
+}, {
+ "location": {
+ "latitude": 404701380,
+ "longitude": -744781745
+ },
+ "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA"
+}, {
+ "location": {
+ "latitude": 409642566,
+ "longitude": -746017679
+ },
+ "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA"
+}, {
+ "location": {
+ "latitude": 408031728,
+ "longitude": -748645385
+ },
+ "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA"
+}, {
+ "location": {
+ "latitude": 413700272,
+ "longitude": -742135189
+ },
+ "name": "367 Prospect Road, Chester, NY 10918, USA"
+}, {
+ "location": {
+ "latitude": 404310607,
+ "longitude": -740282632
+ },
+ "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA"
+}, {
+ "location": {
+ "latitude": 409319800,
+ "longitude": -746201391
+ },
+ "name": "11 Ward Street, Mount Arlington, NJ 07856, USA"
+}, {
+ "location": {
+ "latitude": 406685311,
+ "longitude": -742108603
+ },
+ "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA"
+}, {
+ "location": {
+ "latitude": 419018117,
+ "longitude": -749142781
+ },
+ "name": "43 Dreher Road, Roscoe, NY 12776, USA"
+}, {
+ "location": {
+ "latitude": 412856162,
+ "longitude": -745148837
+ },
+ "name": "Swan Street, Pine Island, NY 10969, USA"
+}, {
+ "location": {
+ "latitude": 416560744,
+ "longitude": -746721964
+ },
+ "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA"
+}, {
+ "location": {
+ "latitude": 405314270,
+ "longitude": -749836354
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 414219548,
+ "longitude": -743327440
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 415534177,
+ "longitude": -742900616
+ },
+ "name": "565 Winding Hills Road, Montgomery, NY 12549, USA"
+}, {
+ "location": {
+ "latitude": 406898530,
+ "longitude": -749127080
+ },
+ "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA"
+}, {
+ "location": {
+ "latitude": 407586880,
+ "longitude": -741670168
+ },
+ "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA"
+}, {
+ "location": {
+ "latitude": 400106455,
+ "longitude": -742870190
+ },
+ "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA"
+}, {
+ "location": {
+ "latitude": 400066188,
+ "longitude": -746793294
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418803880,
+ "longitude": -744102673
+ },
+ "name": "40 Mountain Road, Napanoch, NY 12458, USA"
+}, {
+ "location": {
+ "latitude": 414204288,
+ "longitude": -747895140
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 414777405,
+ "longitude": -740615601
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 415464475,
+ "longitude": -747175374
+ },
+ "name": "48 North Road, Forestburgh, NY 12777, USA"
+}, {
+ "location": {
+ "latitude": 404062378,
+ "longitude": -746376177
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 405688272,
+ "longitude": -749285130
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 400342070,
+ "longitude": -748788996
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401809022,
+ "longitude": -744157964
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404226644,
+ "longitude": -740517141
+ },
+ "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA"
+}, {
+ "location": {
+ "latitude": 410322033,
+ "longitude": -747871659
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 407100674,
+ "longitude": -747742727
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418811433,
+ "longitude": -741718005
+ },
+ "name": "213 Bush Road, Stone Ridge, NY 12484, USA"
+}, {
+ "location": {
+ "latitude": 415034302,
+ "longitude": -743850945
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411349992,
+ "longitude": -743694161
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404839914,
+ "longitude": -744759616
+ },
+ "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA"
+}, {
+ "location": {
+ "latitude": 414638017,
+ "longitude": -745957854
+ },
+ "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA"
+}, {
+ "location": {
+ "latitude": 412127800,
+ "longitude": -740173578
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401263460,
+ "longitude": -747964303
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 412843391,
+ "longitude": -749086026
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418512773,
+ "longitude": -743067823
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404318328,
+ "longitude": -740835638
+ },
+ "name": "42-102 Main Street, Belford, NJ 07718, USA"
+}, {
+ "location": {
+ "latitude": 419020746,
+ "longitude": -741172328
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404080723,
+ "longitude": -746119569
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401012643,
+ "longitude": -744035134
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404306372,
+ "longitude": -741079661
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 403966326,
+ "longitude": -748519297
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 405002031,
+ "longitude": -748407866
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 409532885,
+ "longitude": -742200683
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 416851321,
+ "longitude": -742674555
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 406411633,
+ "longitude": -741722051
+ },
+ "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA"
+}, {
+ "location": {
+ "latitude": 413069058,
+ "longitude": -744597778
+ },
+ "name": "261 Van Sickle Road, Goshen, NY 10924, USA"
+}, {
+ "location": {
+ "latitude": 418465462,
+ "longitude": -746859398
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411733222,
+ "longitude": -744228360
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 410248224,
+ "longitude": -747127767
+ },
+ "name": "3 Hasta Way, Newton, NJ 07860, USA"
+}] \ No newline at end of file
diff --git a/examples/csharp/route_guide/RouteGuideClient/App.config b/examples/csharp/route_guide/RouteGuideClient/App.config
new file mode 100644
index 0000000000..8e15646352
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideClient/App.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+ </startup>
+</configuration> \ No newline at end of file
diff --git a/examples/csharp/route_guide/RouteGuideClient/Program.cs b/examples/csharp/route_guide/RouteGuideClient/Program.cs
new file mode 100644
index 0000000000..0352c78020
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideClient/Program.cs
@@ -0,0 +1,223 @@
+using Grpc.Core;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace examples
+{
+ class Program
+ {
+ /// <summary>
+ /// Sample client code that makes gRPC calls to the server.
+ /// </summary>
+ public class RouteGuideClient
+ {
+ readonly RouteGuide.IRouteGuideClient client;
+
+ public RouteGuideClient(RouteGuide.IRouteGuideClient client)
+ {
+ this.client = client;
+ }
+
+ /// <summary>
+ /// Blocking unary call example. Calls GetFeature and prints the response.
+ /// </summary>
+ public void GetFeature(int lat, int lon)
+ {
+ try
+ {
+ Log("*** GetFeature: lat={0} lon={1}", lat, lon);
+
+ Point request = Point.CreateBuilder().SetLatitude(lat).SetLongitude(lon).Build();
+
+ Feature feature = client.GetFeature(request);
+ if (RouteGuideUtil.Exists(feature))
+ {
+ Log("Found feature called \"{0}\" at {1}, {2}",
+ feature.Name,
+ RouteGuideUtil.GetLatitude(feature.Location),
+ RouteGuideUtil.GetLongitude(feature.Location));
+ }
+ else
+ {
+ Log("Found no feature at {0}, {1}",
+ RouteGuideUtil.GetLatitude(feature.Location),
+ RouteGuideUtil.GetLongitude(feature.Location));
+ }
+ }
+ catch (RpcException e)
+ {
+ Log("RPC failed " + e);
+ throw e;
+ }
+ }
+
+
+ /// <summary>
+ /// Server-streaming example. Calls listFeatures with a rectangle of interest. Prints each response feature as it arrives.
+ /// </summary>
+ public async Task ListFeatures(int lowLat, int lowLon, int hiLat, int hiLon)
+ {
+ try
+ {
+ Log("*** ListFeatures: lowLat={0} lowLon={1} hiLat={2} hiLon={3}", lowLat, lowLon, hiLat,
+ hiLon);
+
+ Rectangle request =
+ Rectangle.CreateBuilder()
+ .SetLo(Point.CreateBuilder().SetLatitude(lowLat).SetLongitude(lowLon).Build())
+ .SetHi(Point.CreateBuilder().SetLatitude(hiLat).SetLongitude(hiLon).Build()).Build();
+
+ using (var call = client.ListFeatures(request))
+ {
+ StringBuilder responseLog = new StringBuilder("Result: ");
+
+ while (await call.ResponseStream.MoveNext())
+ {
+ Feature feature = call.ResponseStream.Current;
+ responseLog.Append(feature.ToString());
+ }
+ Log(responseLog.ToString());
+ }
+ }
+ catch (RpcException e)
+ {
+ Log("RPC failed " + e);
+ throw e;
+ }
+ }
+
+ /// <summary>
+ /// Client-streaming example. Sends numPoints randomly chosen points from features
+ /// with a variable delay in between. Prints the statistics when they are sent from the server.
+ /// </summary>
+ public async Task RecordRoute(List<Feature> features, int numPoints)
+ {
+ try
+ {
+ Log("*** RecordRoute");
+ using (var call = client.RecordRoute())
+ {
+ // Send numPoints points randomly selected from the features list.
+ StringBuilder numMsg = new StringBuilder();
+ Random rand = new Random();
+ for (int i = 0; i < numPoints; ++i)
+ {
+ int index = rand.Next(features.Count);
+ Point point = features[index].Location;
+ Log("Visiting point {0}, {1}", RouteGuideUtil.GetLatitude(point),
+ RouteGuideUtil.GetLongitude(point));
+
+ await call.RequestStream.WriteAsync(point);
+
+ // A bit of delay before sending the next one.
+ await Task.Delay(rand.Next(1000) + 500);
+ }
+ await call.RequestStream.CompleteAsync();
+
+ RouteSummary summary = await call.Result;
+ Log("Finished trip with {0} points. Passed {1} features. "
+ + "Travelled {2} meters. It took {3} seconds.", summary.PointCount,
+ summary.FeatureCount, summary.Distance, summary.ElapsedTime);
+
+ Log("Finished RecordRoute");
+ }
+ }
+ catch (RpcException e)
+ {
+ Log("RPC failed", e);
+ throw e;
+ }
+ }
+
+ /// <summary>
+ /// Bi-directional streaming example. Send some chat messages, and print any
+ /// chat messages that are sent from the server.
+ /// </summary>
+ public async Task RouteChat()
+ {
+ try
+ {
+ Log("*** RouteChat");
+ var requests =
+ new List<RouteNote> { NewNote("First message", 0, 0), NewNote("Second message", 0, 1), NewNote("Third message", 1, 0), NewNote("Fourth message", 1, 1) };
+
+ using (var call = client.RouteChat())
+ {
+ var responseReaderTask = Task.Run(async () =>
+ {
+ while (await call.ResponseStream.MoveNext())
+ {
+ var note = call.ResponseStream.Current;
+ Log("Got message \"{0}\" at {1}, {2}", note.Message,
+ note.Location.Latitude, note.Location.Longitude);
+ }
+ });
+
+ foreach (RouteNote request in requests)
+ {
+ Log("Sending message \"{0}\" at {1}, {2}", request.Message,
+ request.Location.Latitude, request.Location.Longitude);
+
+ await call.RequestStream.WriteAsync(request);
+ }
+ await call.RequestStream.CompleteAsync();
+ await responseReaderTask;
+
+ Log("Finished RouteChat");
+ }
+ }
+ catch (RpcException e)
+ {
+ Log("RPC failed", e);
+ throw e;
+ }
+ }
+
+ private void Log(string s, params object[] args)
+ {
+ Console.WriteLine(string.Format(s, args));
+ }
+
+ private void Log(string s)
+ {
+ Console.WriteLine(s);
+ }
+
+ private RouteNote NewNote(string message, int lat, int lon)
+ {
+ return RouteNote.CreateBuilder().SetMessage(message).SetLocation(
+ Point.CreateBuilder().SetLatitude(lat).SetLongitude(lat).Build()).Build();
+ }
+ }
+
+ static void Main(string[] args)
+ {
+ GrpcEnvironment.Initialize();
+
+ using (Channel channel = new Channel("127.0.0.1:50052"))
+ {
+ var client = new RouteGuideClient(RouteGuide.NewStub(channel));
+
+ // Looking for a valid feature
+ client.GetFeature(409146138, -746188906);
+
+ // Feature missing.
+ client.GetFeature(0, 0);
+
+ // Looking for features between 40, -75 and 42, -73.
+ client.ListFeatures(400000000, -750000000, 420000000, -730000000).Wait();
+
+ // Record a few randomly selected points from the features file.
+ client.RecordRoute(RouteGuideUtil.ParseFeatures(RouteGuideUtil.DefaultFeaturesFile), 10).Wait();
+
+ // Send and receive some notes.
+ client.RouteChat().Wait();
+ }
+
+ GrpcEnvironment.Shutdown();
+ }
+ }
+}
diff --git a/examples/csharp/route_guide/RouteGuideClient/Properties/AssemblyInfo.cs b/examples/csharp/route_guide/RouteGuideClient/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..a17e164a78
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideClient/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("RouteGuideClient")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("RouteGuideClient")]
+[assembly: AssemblyCopyright("Copyright © 2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("914644eb-47cd-4a37-9fba-5e62dd432333")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/examples/csharp/route_guide/RouteGuideClient/RouteGuideClient.csproj b/examples/csharp/route_guide/RouteGuideClient/RouteGuideClient.csproj
new file mode 100644
index 0000000000..78034a9145
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideClient/RouteGuideClient.csproj
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" />
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" />
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{D47BE663-4DE3-4206-B7A8-EA3FA066DADC}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>RouteGuideClient</RootNamespace>
+ <AssemblyName>RouteGuideClient</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <NuGetPackageImportStamp>794416d0</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Google.ProtocolBuffers">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.dll</HintPath>
+ </Reference>
+ <Reference Include="Google.ProtocolBuffers.Serialization">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.Serialization.dll</HintPath>
+ </Reference>
+ <Reference Include="Grpc.Core, Version=0.6.5668.37363, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Grpc.Core.0.6.0\lib\net45\Grpc.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\System.Collections.Immutable.1.1.36\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Core" />
+ <Reference Include="System.Interactive.Async">
+ <HintPath>..\packages\Ix-Async.1.2.3\lib\net45\System.Interactive.Async.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ <None Include="packages.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\RouteGuide\RouteGuide.csproj">
+ <Project>{49954d9c-5f17-4662-96b2-73be833dd81a}</Project>
+ <Name>RouteGuide</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets'))" />
+ </Target>
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" />
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/examples/csharp/route_guide/RouteGuideClient/packages.config b/examples/csharp/route_guide/RouteGuideClient/packages.config
new file mode 100644
index 0000000000..5922553bc3
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideClient/packages.config
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Google.ProtocolBuffers" version="2.4.1.555" targetFramework="net45" />
+ <package id="Grpc" version="0.6.0" targetFramework="net45" />
+ <package id="Grpc.Core" version="0.6.0" targetFramework="net45" />
+ <package id="grpc.dependencies.openssl.redist" version="1.0.2.2" targetFramework="net45" />
+ <package id="grpc.dependencies.zlib.redist" version="1.2.8.9" targetFramework="net45" />
+ <package id="grpc.native.csharp_ext" version="0.10.0" targetFramework="net45" />
+ <package id="Ix-Async" version="1.2.3" targetFramework="net45" />
+ <package id="System.Collections.Immutable" version="1.1.36" targetFramework="net45" />
+</packages> \ No newline at end of file
diff --git a/examples/csharp/route_guide/RouteGuideServer/App.config b/examples/csharp/route_guide/RouteGuideServer/App.config
new file mode 100644
index 0000000000..8e15646352
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideServer/App.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+ </startup>
+</configuration> \ No newline at end of file
diff --git a/examples/csharp/route_guide/RouteGuideServer/Program.cs b/examples/csharp/route_guide/RouteGuideServer/Program.cs
new file mode 100644
index 0000000000..e00b4d6723
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideServer/Program.cs
@@ -0,0 +1,30 @@
+using Grpc.Core;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace examples
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ var features = RouteGuideUtil.ParseFeatures(RouteGuideUtil.DefaultFeaturesFile);
+ GrpcEnvironment.Initialize();
+
+ Server server = new Server();
+ server.AddServiceDefinition(RouteGuide.BindService(new RouteGuideImpl(features)));
+ int port = server.AddListeningPort("localhost", 50052);
+ server.Start();
+
+ Console.WriteLine("RouteGuide server listening on port " + port);
+ Console.WriteLine("Press any key to stop the server...");
+ Console.ReadKey();
+
+ server.ShutdownAsync().Wait();
+ GrpcEnvironment.Shutdown();
+ }
+ }
+}
diff --git a/examples/csharp/route_guide/RouteGuideServer/Properties/AssemblyInfo.cs b/examples/csharp/route_guide/RouteGuideServer/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..a161b1d602
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("RouteGuideServer")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("RouteGuideServer")]
+[assembly: AssemblyCopyright("Copyright © 2015")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("908bdeef-05cc-42bf-9498-c4c573df8925")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs b/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs
new file mode 100644
index 0000000000..0bdf386fc3
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideServer/RouteGuideImpl.cs
@@ -0,0 +1,184 @@
+using System;
+using System.Collections.Concurrent;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace examples
+{
+ /// <summary>
+ /// Example implementation of RouteGuide server.
+ /// </summary>
+ public class RouteGuideImpl : RouteGuide.IRouteGuide
+ {
+ readonly List<Feature> features;
+ private readonly ConcurrentDictionary<Point, List<RouteNote>> routeNotes =
+ new ConcurrentDictionary<Point, List<RouteNote>>();
+
+ public RouteGuideImpl(List<Feature> features)
+ {
+ this.features = features;
+ }
+
+ /// <summary>
+ /// Gets the feature at the requested point. If no feature at that location
+ /// exists, an unnammed feature is returned at the provided location.
+ /// </summary>
+ public Task<Feature> GetFeature(Grpc.Core.ServerCallContext context, Point request)
+ {
+ return Task.FromResult(CheckFeature(request));
+ }
+
+ /// <summary>
+ /// Gets all features contained within the given bounding rectangle.
+ /// </summary>
+ public async Task ListFeatures(Grpc.Core.ServerCallContext context, Rectangle request, Grpc.Core.IServerStreamWriter<Feature> responseStream)
+ {
+ int left = Math.Min(request.Lo.Longitude, request.Hi.Longitude);
+ int right = Math.Max(request.Lo.Longitude, request.Hi.Longitude);
+ int top = Math.Max(request.Lo.Latitude, request.Hi.Latitude);
+ int bottom = Math.Min(request.Lo.Latitude, request.Hi.Latitude);
+
+ foreach (var feature in features)
+ {
+ if (!RouteGuideUtil.Exists(feature))
+ {
+ continue;
+ }
+
+ int lat = feature.Location.Latitude;
+ int lon = feature.Location.Longitude;
+ if (lon >= left && lon <= right && lat >= bottom && lat <= top)
+ {
+ await responseStream.WriteAsync(feature);
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets a stream of points, and responds with statistics about the "trip": number of points,
+ /// number of known features visited, total distance traveled, and total time spent.
+ /// </summary>
+ public async Task<RouteSummary> RecordRoute(Grpc.Core.ServerCallContext context, Grpc.Core.IAsyncStreamReader<Point> requestStream)
+ {
+ int pointCount = 0;
+ int featureCount = 0;
+ int distance = 0;
+ Point previous = null;
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+
+ while (await requestStream.MoveNext())
+ {
+ var point = requestStream.Current;
+ pointCount++;
+ if (RouteGuideUtil.Exists(CheckFeature(point)))
+ {
+ featureCount++;
+ }
+ if (previous != null)
+ {
+ distance += (int) CalcDistance(previous, point);
+ }
+ previous = point;
+ }
+
+ stopwatch.Stop();
+ return RouteSummary.CreateBuilder().SetPointCount(pointCount)
+ .SetFeatureCount(featureCount).SetDistance(distance)
+ .SetElapsedTime((int) (stopwatch.ElapsedMilliseconds / 1000)).Build();
+ }
+
+ /// <summary>
+ /// Receives a stream of message/location pairs, and responds with a stream of all previous
+ /// messages at each of those locations.
+ /// </summary>
+ public async Task RouteChat(Grpc.Core.ServerCallContext context, Grpc.Core.IAsyncStreamReader<RouteNote> requestStream, Grpc.Core.IServerStreamWriter<RouteNote> responseStream)
+ {
+ while (await requestStream.MoveNext())
+ {
+ var note = requestStream.Current;
+ List<RouteNote> notes = GetOrCreateNotes(note.Location);
+
+ List<RouteNote> prevNotes;
+ lock (notes)
+ {
+ prevNotes = new List<RouteNote>(notes);
+ }
+
+ foreach (var prevNote in prevNotes)
+ {
+ await responseStream.WriteAsync(prevNote);
+ }
+
+ lock (notes)
+ {
+ notes.Add(note);
+ }
+ }
+ }
+
+
+ /// <summary>
+ /// Get the notes list for the given location. If missing, create it.
+ /// </summary>
+ private List<RouteNote> GetOrCreateNotes(Point location)
+ {
+ List<RouteNote> notes = new List<RouteNote>();
+ routeNotes.TryAdd(location, notes);
+ return routeNotes[location];
+ }
+
+ /// <summary>
+ /// Gets the feature at the given point.
+ /// </summary>
+ /// <param name="location">the location to check</param>
+ /// <returns>The feature object at the point Note that an empty name indicates no feature.</returns>
+ private Feature CheckFeature(Point location)
+ {
+ foreach (var feature in features)
+ {
+ if (feature.Location.Latitude == location.Latitude
+ && feature.Location.Longitude == location.Longitude)
+ {
+ return feature;
+ }
+ }
+
+ // No feature was found, return an unnamed feature.
+ return Feature.CreateBuilder().SetName("").SetLocation(location).Build();
+ }
+
+ /// <summary>
+ /// Calculate the distance between two points using the "haversine" formula.
+ /// This code was taken from http://www.movable-type.co.uk/scripts/latlong.html.
+ /// </summary>
+ /// <param name="start">the starting point</param>
+ /// <param name="end">the end point</param>
+ /// <returns>the distance between the points in meters</returns>
+ private static double CalcDistance(Point start, Point end)
+ {
+ double lat1 = RouteGuideUtil.GetLatitude(start);
+ double lat2 = RouteGuideUtil.GetLatitude(end);
+ double lon1 = RouteGuideUtil.GetLongitude(start);
+ double lon2 = RouteGuideUtil.GetLongitude(end);
+ int r = 6371000; // metres
+ double φ1 = ToRadians(lat1);
+ double φ2 = ToRadians(lat2);
+ double Δφ = ToRadians(lat2 - lat1);
+ double Δλ = ToRadians(lon2 - lon1);
+
+ double a = Math.Sin(Δφ / 2) * Math.Sin(Δφ / 2) + Math.Cos(φ1) * Math.Cos(φ2) * Math.Sin(Δλ / 2) * Math.Sin(Δλ / 2);
+ double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
+
+ return r * c;
+ }
+
+ private static double ToRadians(double val)
+ {
+ return (Math.PI / 180) * val;
+ }
+ }
+}
diff --git a/examples/csharp/route_guide/RouteGuideServer/RouteGuideServer.csproj b/examples/csharp/route_guide/RouteGuideServer/RouteGuideServer.csproj
new file mode 100644
index 0000000000..9ac1cfbf4d
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideServer/RouteGuideServer.csproj
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" />
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" />
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{4B7C7794-BE24-4477-ACE7-18259EB73D27}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>RouteGuideServer</RootNamespace>
+ <AssemblyName>RouteGuideServer</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <NuGetPackageImportStamp>74781d8b</NuGetPackageImportStamp>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="Google.ProtocolBuffers">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.dll</HintPath>
+ </Reference>
+ <Reference Include="Google.ProtocolBuffers.Serialization">
+ <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.Serialization.dll</HintPath>
+ </Reference>
+ <Reference Include="Grpc.Core, Version=0.6.5668.37363, Culture=neutral, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Grpc.Core.0.6.0\lib\net45\Grpc.Core.dll</HintPath>
+ </Reference>
+ <Reference Include="System" />
+ <Reference Include="System.Collections.Immutable, Version=1.1.36.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\System.Collections.Immutable.1.1.36\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Core" />
+ <Reference Include="System.Interactive.Async">
+ <HintPath>..\packages\Ix-Async.1.2.3\lib\net45\System.Interactive.Async.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="RouteGuideImpl.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ <None Include="packages.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\RouteGuide\RouteGuide.csproj">
+ <Project>{49954d9c-5f17-4662-96b2-73be833dd81a}</Project>
+ <Name>RouteGuide</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
+ <PropertyGroup>
+ <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
+ </PropertyGroup>
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.props'))" />
+ <Error Condition="!Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets'))" />
+ </Target>
+ <Import Project="..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets" Condition="Exists('..\packages\grpc.dependencies.zlib.redist.1.2.8.9\build\portable-net45\grpc.dependencies.zlib.redist.targets')" />
+ <Import Project="..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets" Condition="Exists('..\packages\grpc.dependencies.openssl.redist.1.0.2.2\build\portable-net45\grpc.dependencies.openssl.redist.targets')" />
+ <Import Project="..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets" Condition="Exists('..\packages\grpc.native.csharp_ext.0.10.0\build\portable-net45\grpc.native.csharp_ext.targets')" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/examples/csharp/route_guide/RouteGuideServer/packages.config b/examples/csharp/route_guide/RouteGuideServer/packages.config
new file mode 100644
index 0000000000..5922553bc3
--- /dev/null
+++ b/examples/csharp/route_guide/RouteGuideServer/packages.config
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="Google.ProtocolBuffers" version="2.4.1.555" targetFramework="net45" />
+ <package id="Grpc" version="0.6.0" targetFramework="net45" />
+ <package id="Grpc.Core" version="0.6.0" targetFramework="net45" />
+ <package id="grpc.dependencies.openssl.redist" version="1.0.2.2" targetFramework="net45" />
+ <package id="grpc.dependencies.zlib.redist" version="1.2.8.9" targetFramework="net45" />
+ <package id="grpc.native.csharp_ext" version="0.10.0" targetFramework="net45" />
+ <package id="Ix-Async" version="1.2.3" targetFramework="net45" />
+ <package id="System.Collections.Immutable" version="1.1.36" targetFramework="net45" />
+</packages> \ No newline at end of file
diff --git a/examples/node/.gitignore b/examples/node/.gitignore
new file mode 100644
index 0000000000..3d06f5db7b
--- /dev/null
+++ b/examples/node/.gitignore
@@ -0,0 +1,3 @@
+*~
+node_modules
+npm-debug.log \ No newline at end of file
diff --git a/examples/node/README.md b/examples/node/README.md
new file mode 100644
index 0000000000..045fe51ede
--- /dev/null
+++ b/examples/node/README.md
@@ -0,0 +1,60 @@
+gRPC in 3 minutes (Node.js)
+===========================
+
+PREREQUISITES
+-------------
+
+- `node`: This requires Node 10.x or greater.
+- [homebrew][] on Mac OS X, [linuxbrew][] on Linux. These simplify the installation of the gRPC C core.
+
+INSTALL
+-------
+ - On Mac OS X, install [homebrew][]. On Linux, install [linuxbrew][]. Run the following command to install gRPC Node.js.
+
+ ```sh
+ $ curl -fsSL https://goo.gl/getgrpc | bash -s nodejs
+ ```
+ This will download and run the [gRPC install script][], then install the latest version of gRPC Nodejs npm package.
+ - Clone this repository
+
+ ```sh
+ $ git clone https://github.com/grpc/grpc.git
+ ```
+
+ - Install this package's dependencies
+
+ ```sh
+ $ cd examples/node
+ $ npm install
+ ```
+
+TRY IT!
+-------
+
+ - Run the server
+
+ ```sh
+ $ # from this directory (grpc_common/node).
+ $ node ./greeter_server.js &
+ ```
+
+ - Run the client
+
+ ```sh
+ $ # from this directory
+ $ node ./greeter_client.js
+ ```
+
+NOTE
+----
+This directory has a copy of `helloworld.proto` because it currently depends on
+some Protocol Buffer 2.0 syntax that is deprecated in Protocol Buffer 3.0.
+
+TUTORIAL
+--------
+You can find a more detailed tutorial in [gRPC Basics: Node.js][]
+
+[homebrew]:http://brew.sh
+[linuxbrew]:https://github.com/Homebrew/linuxbrew#installation
+[gRPC install script]:https://raw.githubusercontent.com/grpc/homebrew-grpc/master/scripts/install
+[gRPC Basics: Node.js]:https://github.com/grpc/grpc/blob/master/examples/node/route_guide/README.md
diff --git a/examples/node/greeter_client.js b/examples/node/greeter_client.js
new file mode 100644
index 0000000000..ab7050ab21
--- /dev/null
+++ b/examples/node/greeter_client.js
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+var PROTO_PATH = __dirname + '/helloworld.proto';
+
+var grpc = require('grpc');
+var hello_proto = grpc.load(PROTO_PATH).helloworld;
+
+function main() {
+ var client = new hello_proto.Greeter('localhost:50051');
+ var user;
+ if (process.argv.length >= 3) {
+ user = process.argv[2];
+ } else {
+ user = 'world';
+ }
+ client.sayHello({name: user}, function(err, response) {
+ console.log('Greeting:', response.message);
+ });
+}
+
+main();
diff --git a/examples/node/greeter_server.js b/examples/node/greeter_server.js
new file mode 100644
index 0000000000..2fb95f0f90
--- /dev/null
+++ b/examples/node/greeter_server.js
@@ -0,0 +1,63 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+var PROTO_PATH = __dirname + '/helloworld.proto';
+
+var grpc = require('grpc');
+var hello_proto = grpc.load(PROTO_PATH).helloworld;
+
+var Server = grpc.buildServer([hello_proto.Greeter.service]);
+
+/**
+ * Implements the SayHello RPC method.
+ */
+function sayHello(call, callback) {
+ callback(null, {message: 'Hello ' + call.request.name});
+}
+
+/**
+ * Starts an RPC server that receives requests for the Greeter service at the
+ * sample server port
+ */
+function main() {
+ var server = new Server({
+ "helloworld.Greeter": {
+ sayHello: sayHello
+ }
+ });
+
+ server.bind('0.0.0.0:50051');
+ server.listen();
+}
+
+main();
diff --git a/examples/node/helloworld.proto b/examples/node/helloworld.proto
new file mode 100644
index 0000000000..a52c947f89
--- /dev/null
+++ b/examples/node/helloworld.proto
@@ -0,0 +1,50 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+option java_package = "ex.grpc";
+
+package helloworld;
+
+// The greeting service definition.
+service Greeter {
+ // Sends a greeting
+ rpc SayHello (HelloRequest) returns (HelloReply) {}
+}
+
+// The request message containing the user's name.
+message HelloRequest {
+ optional string name = 1;
+}
+
+// The response message containing the greetings
+message HelloReply {
+ optional string message = 1;
+}
diff --git a/examples/node/package.json b/examples/node/package.json
new file mode 100644
index 0000000000..caf539518f
--- /dev/null
+++ b/examples/node/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "grpc-demo",
+ "version": "0.5.0",
+ "dependencies": {
+ "async": "^0.9.0",
+ "grpc": "~0.9.0",
+ "minimist": "^1.1.0",
+ "underscore": "^1.8.2"
+ }
+}
diff --git a/examples/node/route_guide/README.md b/examples/node/route_guide/README.md
new file mode 100644
index 0000000000..2efc5a5da5
--- /dev/null
+++ b/examples/node/route_guide/README.md
@@ -0,0 +1,362 @@
+#gRPC Basics: Node.js
+
+This tutorial provides a basic Node.js programmer's introduction to working with gRPC. By walking through this example you'll learn how to:
+
+- Define a service in a .proto file.
+- Use the Node.js gRPC API to write a simple client and server for your service.
+
+It assumes that you have read the [Getting started](https://github.com/grpc/grpc/tree/master/examples) guide and are familiar with [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). Note that the example in this tutorial uses the proto3 version of the protocol buffers language, which is currently in alpha release:you can find out more in the [proto3 language guide](https://developers.google.com/protocol-buffers/docs/proto3) and see the [release notes](https://github.com/google/protobuf/releases) for the new version in the protocol buffers Github repository.
+
+This isn't a comprehensive guide to using gRPC in Node.js: more reference documentation is coming soon.
+
+## Why use gRPC?
+
+Our example is a simple route mapping application that lets clients get information about features on their route, create a summary of their route, and exchange route information such as traffic updates with the server and other clients.
+
+With gRPC we can define our service once in a .proto file and implement clients and servers in any of gRPC's supported languages, which in turn can be run in environments ranging from servers inside Google to your own tablet - all the complexity of communication between different languages and environments is handled for you by gRPC. We also get all the advantages of working with protocol buffers, including efficient serialization, a simple IDL, and easy interface updating.
+
+## Example code and setup
+
+The example code for our tutorial is in [examples/node/route_guide](examples/node/route_guide). To download the example, clone this repository by running the following command:
+```shell
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Then change your current directory to `examples/node/route_guide`:
+```shell
+$ cd examples/node/route_guide
+```
+
+You also should have the relevant tools installed to generate the server and client interface code - if you don't already, follow the setup instructions in [the Node.js quick start guide](examples/node).
+
+
+## Defining the service
+
+Our first step (as you'll know from [Getting started](https://github.com/grpc/grpc/tree/master/examples)) is to define the gRPC *service* and the method *request* and *response* types using [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). You can see the complete .proto file in [`examples/protos/route_guide.proto`](examples/protos/route_guide.proto).
+
+To define a service, you specify a named `service` in your .proto file:
+
+```protobuf
+service RouteGuide {
+ ...
+}
+```
+
+Then you define `rpc` methods inside your service definition, specifying their request and response types. gRPC lets you define four kinds of service method, all of which are used in the `RouteGuide` service:
+
+- A *simple RPC* where the client sends a request to the server using the stub and waits for a response to come back, just like a normal function call.
+```protobuf
+ // Obtains the feature at a given position.
+ rpc GetFeature(Point) returns (Feature) {}
+```
+
+- A *server-side streaming RPC* where the client sends a request to the server and gets a stream to read a sequence of messages back. The client reads from the returned stream until there are no more messages. As you can see in our example, you specify a server-side streaming method by placing the `stream` keyword before the *response* type.
+```protobuf
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+```
+
+- A *client-side streaming RPC* where the client writes a sequence of messages and sends them to the server, again using a provided stream. Once the client has finished writing the messages, it waits for the server to read them all and return its response. You specify a server-side streaming method by placing the `stream` keyword before the *request* type.
+```protobuf
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+```
+
+- A *bidirectional streaming RPC* where both sides send a sequence of messages using a read-write stream. The two streams operate independently, so clients and servers can read and write in whatever order they like: for example, the server could wait to receive all the client messages before writing its responses, or it could alternately read a message then write a message, or some other combination of reads and writes. The order of messages in each stream is preserved. You specify this type of method by placing the `stream` keyword before both the request and the response.
+```protobuf
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+```
+
+Our .proto file also contains protocol buffer message type definitions for all the request and response types used in our service methods - for example, here's the `Point` message type:
+```protobuf
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ int32 latitude = 1;
+ int32 longitude = 2;
+}
+```
+
+
+## Loading service descriptors from proto files
+
+The Node.js library dynamically generates service descriptors and client stub definitions from `.proto` files loaded at runtime.
+
+To load a `.proto` file, simply `require` the gRPC library, then use its `load()` method:
+
+```node
+var grpc = require('grpc');
+var protoDescriptor = grpc.load(__dirname + '/route_guide.proto');
+// The protoDescriptor object has the full package hierarchy
+var example = protoDescriptor.examples;
+```
+
+Once you've done this, the stub constructor is in the `examples` namespace (`protoDescriptor.examples.RouteGuide`) and the service descriptor (which is used to create a server) is a property of the stub (`protoDescriptor.examples.RouteGuide.service`);
+
+<a name="server"></a>
+## Creating the server
+
+First let's look at how we create a `RouteGuide` server. If you're only interested in creating gRPC clients, you can skip this section and go straight to [Creating the client](#client) (though you might find it interesting anyway!).
+
+There are two parts to making our `RouteGuide` service do its job:
+- Implementing the service interface generated from our service definition: doing the actual "work" of our service.
+- Running a gRPC server to listen for requests from clients and return the service responses.
+
+You can find our example `RouteGuide` server in [examples/node/route_guide/route_guide_server.js](examples/node/route_guide/route_guide_server.js). Let's take a closer look at how it works.
+
+### Implementing RouteGuide
+
+As you can see, our server has a `Server` constructor generated from the `RouteGuide.service` descriptor object
+
+```node
+var Server = grpc.buildServer([examples.RouteGuide.service]);
+```
+In this case we're implementing the *asynchronous* version of `RouteGuide`, which provides our default gRPC server behaviour.
+
+The functions in `route_guide_server.js` implement all our service methods. Let's look at the simplest type first, `getFeature`, which just gets a `Point` from the client and returns the corresponding feature information from its database in a `Feature`.
+
+```node
+function checkFeature(point) {
+ var feature;
+ // Check if there is already a feature object for the given point
+ for (var i = 0; i < feature_list.length; i++) {
+ feature = feature_list[i];
+ if (feature.location.latitude === point.latitude &&
+ feature.location.longitude === point.longitude) {
+ return feature;
+ }
+ }
+ var name = '';
+ feature = {
+ name: name,
+ location: point
+ };
+ return feature;
+}
+function getFeature(call, callback) {
+ callback(null, checkFeature(call.request));
+}
+```
+
+The method is passed a call object for the RPC, which has the `Point` parameter as a property, and a callback to which we can pass our returned `Feature`. In the method body we populate a `Feature` corresponding to the given point and pass it to the callback, with a null first parameter to indicate that there is no error.
+
+Now let's look at something a bit more complicated - a streaming RPC. `listFeatures` is a server-side streaming RPC, so we need to send back multiple `Feature`s to our client.
+
+```node
+function listFeatures(call) {
+ var lo = call.request.lo;
+ var hi = call.request.hi;
+ var left = _.min([lo.longitude, hi.longitude]);
+ var right = _.max([lo.longitude, hi.longitude]);
+ var top = _.max([lo.latitude, hi.latitude]);
+ var bottom = _.min([lo.latitude, hi.latitude]);
+ // For each feature, check if it is in the given bounding box
+ _.each(feature_list, function(feature) {
+ if (feature.name === '') {
+ return;
+ }
+ if (feature.location.longitude >= left &&
+ feature.location.longitude <= right &&
+ feature.location.latitude >= bottom &&
+ feature.location.latitude <= top) {
+ call.write(feature);
+ }
+ });
+ call.end();
+}
+```
+
+As you can see, instead of getting the call object and callback in our method parameters, this time we get a `call` object that implements the `Writable` interface. In the method, we create as many `Feature` objects as we need to return, writing them to the `call` using its `write()` method. Finally, we call `call.end()` to indicate that we have sent all messages.
+
+If you look at the client-side streaming method `RecordRoute` you'll see it's quite similar to the unary call, except this time the `call` parameter implements the `Reader` interface. The `call`'s `'data'` event fires every time there is new data, and the `'end'` event fires when all data has been read. Like the unary case, we respond by calling the callback
+
+```node
+call.on('data', function(point) {
+ // Process user data
+});
+call.on('end', function() {
+ callback(null, result);
+});
+```
+
+Finally, let's look at our bidirectional streaming RPC `RouteChat()`.
+
+```node
+function routeChat(call) {
+ call.on('data', function(note) {
+ var key = pointKey(note.location);
+ /* For each note sent, respond with all previous notes that correspond to
+ * the same point */
+ if (route_notes.hasOwnProperty(key)) {
+ _.each(route_notes[key], function(note) {
+ call.write(note);
+ });
+ } else {
+ route_notes[key] = [];
+ }
+ // Then add the new note to the list
+ route_notes[key].push(JSON.parse(JSON.stringify(note)));
+ });
+ call.on('end', function() {
+ call.end();
+ });
+}
+```
+
+This time we get a `call` implementing `Duplex` that can be used to read *and* write messages. The syntax for reading and writing here is exactly the same as for our client-streaming and server-streaming methods. Although each side will always get the other's messages in the order they were written, both the client and server can read and write in any order — the streams operate completely independently.
+
+### Starting the server
+
+Once we've implemented all our methods, we also need to start up a gRPC server so that clients can actually use our service. The following snippet shows how we do this for our `RouteGuide` service:
+
+```node
+function getServer() {
+ return new Server({
+ 'examples.RouteGuide' : {
+ getFeature: getFeature,
+ listFeatures: listFeatures,
+ recordRoute: recordRoute,
+ routeChat: routeChat
+ }
+ });
+}
+var routeServer = getServer();
+routeServer.bind('0.0.0.0:50051');
+routeServer.listen();
+```
+
+As you can see, we build and start our server with the following steps:
+
+ 1. Create a `Server` constructor from the `RouteGuide` service descriptor.
+ 2. Implement the service methods.
+ 3. Create an instance of the server by calling the `Server` constructor with the method implementations.
+ 4. Specify the address and port we want to use to listen for client requests using the instance's `bind()` method.
+ 5. Call `listen()` on the instance to start the RPC server.
+
+<a name="client"></a>
+## Creating the client
+
+In this section, we'll look at creating a Node.js client for our `RouteGuide` service. You can see our complete example client code in [examples/node/route_guide/route_guide_client.js](examples/node/route_guide/route_guide_client.js).
+
+### Creating a stub
+
+To call service methods, we first need to create a *stub*. To do this, we just need to call the RouteGuide stub constructor, specifying the server address and port.
+
+```node
+new example.RouteGuide('localhost:50051');
+```
+
+### Calling service methods
+
+Now let's look at how we call our service methods. Note that all of these methods are asynchronous: they use either events or callbacks to retrieve results.
+
+#### Simple RPC
+
+Calling the simple RPC `GetFeature` is nearly as straightforward as calling a local asynchronous method.
+
+```node
+var point = {latitude: 409146138, longitude: -746188906};
+stub.getFeature(point, function(err, feature) {
+ if (err) {
+ // process error
+ } else {
+ // process feature
+ }
+});
+```
+
+As you can see, we create and populate a request object. Finally, we call the method on the stub, passing it the request and callback. If there is no error, then we can read the response information from the server from our response object.
+
+```node
+ console.log('Found feature called "' + feature.name + '" at ' +
+ feature.location.latitude/COORD_FACTOR + ', ' +
+ feature.location.longitude/COORD_FACTOR);
+```
+
+#### Streaming RPCs
+
+Now let's look at our streaming methods. If you've already read [Creating the server](#server) some of this may look very familiar - streaming RPCs are implemented in a similar way on both sides. Here's where we call the server-side streaming method `ListFeatures`, which returns a stream of geographical `Feature`s:
+
+```node
+var call = client.listFeatures(rectangle);
+ call.on('data', function(feature) {
+ console.log('Found feature called "' + feature.name + '" at ' +
+ feature.location.latitude/COORD_FACTOR + ', ' +
+ feature.location.longitude/COORD_FACTOR);
+ });
+ call.on('end', function() {
+ // The server has finished sending
+ });
+ call.on('status', function(status) {
+ // process status
+ });
+```
+
+Instead of passing the method a request and callback, we pass it a request and get a `Readable` stream object back. The client can use the `Readable`'s `'data'` event to read the server's responses. This event fires with each `Feature` message object until there are no more messages: the `'end'` event indicates that the call is done. Finally, the status event fires when the server sends the status.
+
+The client-side streaming method `RecordRoute` is similar, except there we pass the method a callback and get back a `Writable`.
+
+```node
+ var call = client.recordRoute(function(error, stats) {
+ if (error) {
+ callback(error);
+ }
+ console.log('Finished trip with', stats.point_count, 'points');
+ console.log('Passed', stats.feature_count, 'features');
+ console.log('Travelled', stats.distance, 'meters');
+ console.log('It took', stats.elapsed_time, 'seconds');
+ });
+ function pointSender(lat, lng) {
+ return function(callback) {
+ console.log('Visiting point ' + lat/COORD_FACTOR + ', ' +
+ lng/COORD_FACTOR);
+ call.write({
+ latitude: lat,
+ longitude: lng
+ });
+ _.delay(callback, _.random(500, 1500));
+ };
+ }
+ var point_senders = [];
+ for (var i = 0; i < num_points; i++) {
+ var rand_point = feature_list[_.random(0, feature_list.length - 1)];
+ point_senders[i] = pointSender(rand_point.location.latitude,
+ rand_point.location.longitude);
+ }
+ async.series(point_senders, function() {
+ call.end();
+ });
+```
+
+Once we've finished writing our client's requests to the stream using `write()`, we need to call `end()` on the stream to let gRPC know that we've finished writing. If the status is `OK`, the `stats` object will be populated with the server's response.
+
+Finally, let's look at our bidirectional streaming RPC `routeChat()`. In this case, we just pass a context to the method and get back a `Duplex` stream object, which we can use to both write and read messages.
+
+```node
+var call = client.routeChat();
+```
+
+The syntax for reading and writing here is exactly the same as for our client-streaming and server-streaming methods. Although each side will always get the other's messages in the order they were written, both the client and server can read and write in any order — the streams operate completely independently.
+
+## Try it out!
+
+Build client and server:
+```shell
+$ npm install
+```
+Run the server, which will listen on port 50051:
+```shell
+$ node ./route_guide_server.js --db_path=route_guide_db.json
+```
+Run the client (in a different terminal):
+```shell
+$ node ./route_guide_client.js --db_path=route_guide_db.json
+```
diff --git a/examples/node/route_guide/route_guide.proto b/examples/node/route_guide/route_guide.proto
new file mode 100644
index 0000000000..442112823e
--- /dev/null
+++ b/examples/node/route_guide/route_guide.proto
@@ -0,0 +1,120 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+option java_package = "io.grpc.examples";
+
+package examples;
+
+// Interface exported by the server.
+service RouteGuide {
+ // A simple RPC.
+ //
+ // Obtains the feature at a given position.
+ rpc GetFeature(Point) returns (Feature) {}
+
+ // A server-to-client streaming RPC.
+ //
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+
+ // A client-to-server streaming RPC.
+ //
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+
+ // A Bidirectional streaming RPC.
+ //
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+}
+
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ optional int32 latitude = 1;
+ optional int32 longitude = 2;
+}
+
+// A latitude-longitude rectangle, represented as two diagonally opposite
+// points "lo" and "hi".
+message Rectangle {
+ // One corner of the rectangle.
+ optional Point lo = 1;
+
+ // The other corner of the rectangle.
+ optional Point hi = 2;
+}
+
+// A feature names something at a given point.
+//
+// If a feature could not be named, the name is empty.
+message Feature {
+ // The name of the feature.
+ optional string name = 1;
+
+ // The point where the feature is detected.
+ optional Point location = 2;
+}
+
+// A RouteNote is a message sent while at a given point.
+message RouteNote {
+ // The location from which the message is sent.
+ optional Point location = 1;
+
+ // The message to be sent.
+ optional string message = 2;
+}
+
+// A RouteSummary is received in response to a RecordRoute rpc.
+//
+// It contains the number of individual points received, the number of
+// detected features, and the total distance covered as the cumulative sum of
+// the distance between each point.
+message RouteSummary {
+ // The number of points received.
+ optional int32 point_count = 1;
+
+ // The number of known features passed while traversing the route.
+ optional int32 feature_count = 2;
+
+ // The distance covered in metres.
+ optional int32 distance = 3;
+
+ // The duration of the traversal in seconds.
+ optional int32 elapsed_time = 4;
+}
diff --git a/examples/node/route_guide/route_guide_client.js b/examples/node/route_guide/route_guide_client.js
new file mode 100644
index 0000000000..60c47a429d
--- /dev/null
+++ b/examples/node/route_guide/route_guide_client.js
@@ -0,0 +1,231 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var async = require('async');
+var fs = require('fs');
+var parseArgs = require('minimist');
+var path = require('path');
+var _ = require('underscore');
+var grpc = require('grpc');
+var examples = grpc.load(__dirname + '/route_guide.proto').examples;
+var client = new examples.RouteGuide('localhost:50051');
+
+var COORD_FACTOR = 1e7;
+
+/**
+ * Run the getFeature demo. Calls getFeature with a point known to have a
+ * feature and a point known not to have a feature.
+ * @param {function} callback Called when this demo is complete
+ */
+function runGetFeature(callback) {
+ var next = _.after(2, callback);
+ function featureCallback(error, feature) {
+ if (error) {
+ callback(error);
+ }
+ if (feature.name === '') {
+ console.log('Found no feature at ' +
+ feature.location.latitude/COORD_FACTOR + ', ' +
+ feature.location.longitude/COORD_FACTOR);
+ } else {
+ console.log('Found feature called "' + feature.name + '" at ' +
+ feature.location.latitude/COORD_FACTOR + ', ' +
+ feature.location.longitude/COORD_FACTOR);
+ }
+ next();
+ }
+ var point1 = {
+ latitude: 409146138,
+ longitude: -746188906
+ };
+ var point2 = {
+ latitude: 0,
+ longitude: 0
+ };
+ client.getFeature(point1, featureCallback);
+ client.getFeature(point2, featureCallback);
+}
+
+/**
+ * Run the listFeatures demo. Calls listFeatures with a rectangle containing all
+ * of the features in the pre-generated database. Prints each response as it
+ * comes in.
+ * @param {function} callback Called when this demo is complete
+ */
+function runListFeatures(callback) {
+ var rectangle = {
+ lo: {
+ latitude: 400000000,
+ longitude: -750000000
+ },
+ hi: {
+ latitude: 420000000,
+ longitude: -730000000
+ }
+ };
+ console.log('Looking for features between 40, -75 and 42, -73');
+ var call = client.listFeatures(rectangle);
+ call.on('data', function(feature) {
+ console.log('Found feature called "' + feature.name + '" at ' +
+ feature.location.latitude/COORD_FACTOR + ', ' +
+ feature.location.longitude/COORD_FACTOR);
+ });
+ call.on('end', callback);
+}
+
+/**
+ * Run the recordRoute demo. Sends several randomly chosen points from the
+ * pre-generated feature database with a variable delay in between. Prints the
+ * statistics when they are sent from the server.
+ * @param {function} callback Called when this demo is complete
+ */
+function runRecordRoute(callback) {
+ var argv = parseArgs(process.argv, {
+ string: 'db_path'
+ });
+ fs.readFile(path.resolve(argv.db_path), function(err, data) {
+ if (err) callback(err);
+ var feature_list = JSON.parse(data);
+
+ var num_points = 10;
+ var call = client.recordRoute(function(error, stats) {
+ if (error) {
+ callback(error);
+ }
+ console.log('Finished trip with', stats.point_count, 'points');
+ console.log('Passed', stats.feature_count, 'features');
+ console.log('Travelled', stats.distance, 'meters');
+ console.log('It took', stats.elapsed_time, 'seconds');
+ callback();
+ });
+ /**
+ * Constructs a function that asynchronously sends the given point and then
+ * delays sending its callback
+ * @param {number} lat The latitude to send
+ * @param {number} lng The longitude to send
+ * @return {function(function)} The function that sends the point
+ */
+ function pointSender(lat, lng) {
+ /**
+ * Sends the point, then calls the callback after a delay
+ * @param {function} callback Called when complete
+ */
+ return function(callback) {
+ console.log('Visiting point ' + lat/COORD_FACTOR + ', ' +
+ lng/COORD_FACTOR);
+ call.write({
+ latitude: lat,
+ longitude: lng
+ });
+ _.delay(callback, _.random(500, 1500));
+ };
+ }
+ var point_senders = [];
+ for (var i = 0; i < num_points; i++) {
+ var rand_point = feature_list[_.random(0, feature_list.length - 1)];
+ point_senders[i] = pointSender(rand_point.location.latitude,
+ rand_point.location.longitude);
+ }
+ async.series(point_senders, function() {
+ call.end();
+ });
+ });
+}
+
+/**
+ * Run the routeChat demo. Send some chat messages, and print any chat messages
+ * that are sent from the server.
+ * @param {function} callback Called when the demo is complete
+ */
+function runRouteChat(callback) {
+ var call = client.routeChat();
+ call.on('data', function(note) {
+ console.log('Got message "' + note.message + '" at ' +
+ note.location.latitude + ', ' + note.location.longitude);
+ });
+
+ call.on('end', callback);
+
+ var notes = [{
+ location: {
+ latitude: 0,
+ longitude: 0
+ },
+ message: 'First message'
+ }, {
+ location: {
+ latitude: 0,
+ longitude: 1
+ },
+ message: 'Second message'
+ }, {
+ location: {
+ latitude: 1,
+ longitude: 0
+ },
+ message: 'Third message'
+ }, {
+ location: {
+ latitude: 0,
+ longitude: 0
+ },
+ message: 'Fourth message'
+ }];
+ for (var i = 0; i < notes.length; i++) {
+ var note = notes[i];
+ console.log('Sending message "' + note.message + '" at ' +
+ note.location.latitude + ', ' + note.location.longitude);
+ call.write(note);
+ }
+ call.end();
+}
+
+/**
+ * Run all of the demos in order
+ */
+function main() {
+ async.series([
+ runGetFeature,
+ runListFeatures,
+ runRecordRoute,
+ runRouteChat
+ ]);
+}
+
+if (require.main === module) {
+ main();
+}
+
+exports.runGetFeature = runGetFeature;
+
+exports.runListFeatures = runListFeatures;
+
+exports.runRecordRoute = runRecordRoute;
+
+exports.runRouteChat = runRouteChat;
diff --git a/examples/node/route_guide/route_guide_db.json b/examples/node/route_guide/route_guide_db.json
new file mode 100644
index 0000000000..9d6a980ab7
--- /dev/null
+++ b/examples/node/route_guide/route_guide_db.json
@@ -0,0 +1,601 @@
+[{
+ "location": {
+ "latitude": 407838351,
+ "longitude": -746143763
+ },
+ "name": "Patriots Path, Mendham, NJ 07945, USA"
+}, {
+ "location": {
+ "latitude": 408122808,
+ "longitude": -743999179
+ },
+ "name": "101 New Jersey 10, Whippany, NJ 07981, USA"
+}, {
+ "location": {
+ "latitude": 413628156,
+ "longitude": -749015468
+ },
+ "name": "U.S. 6, Shohola, PA 18458, USA"
+}, {
+ "location": {
+ "latitude": 419999544,
+ "longitude": -740371136
+ },
+ "name": "5 Conners Road, Kingston, NY 12401, USA"
+}, {
+ "location": {
+ "latitude": 414008389,
+ "longitude": -743951297
+ },
+ "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA"
+}, {
+ "location": {
+ "latitude": 419611318,
+ "longitude": -746524769
+ },
+ "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA"
+}, {
+ "location": {
+ "latitude": 406109563,
+ "longitude": -742186778
+ },
+ "name": "4001 Tremley Point Road, Linden, NJ 07036, USA"
+}, {
+ "location": {
+ "latitude": 416802456,
+ "longitude": -742370183
+ },
+ "name": "352 South Mountain Road, Wallkill, NY 12589, USA"
+}, {
+ "location": {
+ "latitude": 412950425,
+ "longitude": -741077389
+ },
+ "name": "Bailey Turn Road, Harriman, NY 10926, USA"
+}, {
+ "location": {
+ "latitude": 412144655,
+ "longitude": -743949739
+ },
+ "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA"
+}, {
+ "location": {
+ "latitude": 415736605,
+ "longitude": -742847522
+ },
+ "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA"
+}, {
+ "location": {
+ "latitude": 413843930,
+ "longitude": -740501726
+ },
+ "name": "162 Merrill Road, Highland Mills, NY 10930, USA"
+}, {
+ "location": {
+ "latitude": 410873075,
+ "longitude": -744459023
+ },
+ "name": "Clinton Road, West Milford, NJ 07480, USA"
+}, {
+ "location": {
+ "latitude": 412346009,
+ "longitude": -744026814
+ },
+ "name": "16 Old Brook Lane, Warwick, NY 10990, USA"
+}, {
+ "location": {
+ "latitude": 402948455,
+ "longitude": -747903913
+ },
+ "name": "3 Drake Lane, Pennington, NJ 08534, USA"
+}, {
+ "location": {
+ "latitude": 406337092,
+ "longitude": -740122226
+ },
+ "name": "6324 8th Avenue, Brooklyn, NY 11220, USA"
+}, {
+ "location": {
+ "latitude": 406421967,
+ "longitude": -747727624
+ },
+ "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA"
+}, {
+ "location": {
+ "latitude": 416318082,
+ "longitude": -749677716
+ },
+ "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA"
+}, {
+ "location": {
+ "latitude": 415301720,
+ "longitude": -748416257
+ },
+ "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA"
+}, {
+ "location": {
+ "latitude": 402647019,
+ "longitude": -747071791
+ },
+ "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA"
+}, {
+ "location": {
+ "latitude": 412567807,
+ "longitude": -741058078
+ },
+ "name": "New York State Reference Route 987E, Southfields, NY 10975, USA"
+}, {
+ "location": {
+ "latitude": 416855156,
+ "longitude": -744420597
+ },
+ "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA"
+}, {
+ "location": {
+ "latitude": 404663628,
+ "longitude": -744820157
+ },
+ "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA"
+}, {
+ "location": {
+ "latitude": 407113723,
+ "longitude": -749746483
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 402133926,
+ "longitude": -743613249
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 400273442,
+ "longitude": -741220915
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411236786,
+ "longitude": -744070769
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411633782,
+ "longitude": -746784970
+ },
+ "name": "211-225 Plains Road, Augusta, NJ 07822, USA"
+}, {
+ "location": {
+ "latitude": 415830701,
+ "longitude": -742952812
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 413447164,
+ "longitude": -748712898
+ },
+ "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA"
+}, {
+ "location": {
+ "latitude": 405047245,
+ "longitude": -749800722
+ },
+ "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA"
+}, {
+ "location": {
+ "latitude": 418858923,
+ "longitude": -746156790
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 417951888,
+ "longitude": -748484944
+ },
+ "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA"
+}, {
+ "location": {
+ "latitude": 407033786,
+ "longitude": -743977337
+ },
+ "name": "26 East 3rd Street, New Providence, NJ 07974, USA"
+}, {
+ "location": {
+ "latitude": 417548014,
+ "longitude": -740075041
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 410395868,
+ "longitude": -744972325
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404615353,
+ "longitude": -745129803
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 406589790,
+ "longitude": -743560121
+ },
+ "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA"
+}, {
+ "location": {
+ "latitude": 414653148,
+ "longitude": -740477477
+ },
+ "name": "18 Lannis Avenue, New Windsor, NY 12553, USA"
+}, {
+ "location": {
+ "latitude": 405957808,
+ "longitude": -743255336
+ },
+ "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA"
+}, {
+ "location": {
+ "latitude": 411733589,
+ "longitude": -741648093
+ },
+ "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA"
+}, {
+ "location": {
+ "latitude": 412676291,
+ "longitude": -742606606
+ },
+ "name": "1270 Lakes Road, Monroe, NY 10950, USA"
+}, {
+ "location": {
+ "latitude": 409224445,
+ "longitude": -748286738
+ },
+ "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA"
+}, {
+ "location": {
+ "latitude": 406523420,
+ "longitude": -742135517
+ },
+ "name": "652 Garden Street, Elizabeth, NJ 07202, USA"
+}, {
+ "location": {
+ "latitude": 401827388,
+ "longitude": -740294537
+ },
+ "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA"
+}, {
+ "location": {
+ "latitude": 410564152,
+ "longitude": -743685054
+ },
+ "name": "13-17 Stanley Street, West Milford, NJ 07480, USA"
+}, {
+ "location": {
+ "latitude": 408472324,
+ "longitude": -740726046
+ },
+ "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA"
+}, {
+ "location": {
+ "latitude": 412452168,
+ "longitude": -740214052
+ },
+ "name": "5 White Oak Lane, Stony Point, NY 10980, USA"
+}, {
+ "location": {
+ "latitude": 409146138,
+ "longitude": -746188906
+ },
+ "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA"
+}, {
+ "location": {
+ "latitude": 404701380,
+ "longitude": -744781745
+ },
+ "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA"
+}, {
+ "location": {
+ "latitude": 409642566,
+ "longitude": -746017679
+ },
+ "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA"
+}, {
+ "location": {
+ "latitude": 408031728,
+ "longitude": -748645385
+ },
+ "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA"
+}, {
+ "location": {
+ "latitude": 413700272,
+ "longitude": -742135189
+ },
+ "name": "367 Prospect Road, Chester, NY 10918, USA"
+}, {
+ "location": {
+ "latitude": 404310607,
+ "longitude": -740282632
+ },
+ "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA"
+}, {
+ "location": {
+ "latitude": 409319800,
+ "longitude": -746201391
+ },
+ "name": "11 Ward Street, Mount Arlington, NJ 07856, USA"
+}, {
+ "location": {
+ "latitude": 406685311,
+ "longitude": -742108603
+ },
+ "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA"
+}, {
+ "location": {
+ "latitude": 419018117,
+ "longitude": -749142781
+ },
+ "name": "43 Dreher Road, Roscoe, NY 12776, USA"
+}, {
+ "location": {
+ "latitude": 412856162,
+ "longitude": -745148837
+ },
+ "name": "Swan Street, Pine Island, NY 10969, USA"
+}, {
+ "location": {
+ "latitude": 416560744,
+ "longitude": -746721964
+ },
+ "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA"
+}, {
+ "location": {
+ "latitude": 405314270,
+ "longitude": -749836354
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 414219548,
+ "longitude": -743327440
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 415534177,
+ "longitude": -742900616
+ },
+ "name": "565 Winding Hills Road, Montgomery, NY 12549, USA"
+}, {
+ "location": {
+ "latitude": 406898530,
+ "longitude": -749127080
+ },
+ "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA"
+}, {
+ "location": {
+ "latitude": 407586880,
+ "longitude": -741670168
+ },
+ "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA"
+}, {
+ "location": {
+ "latitude": 400106455,
+ "longitude": -742870190
+ },
+ "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA"
+}, {
+ "location": {
+ "latitude": 400066188,
+ "longitude": -746793294
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418803880,
+ "longitude": -744102673
+ },
+ "name": "40 Mountain Road, Napanoch, NY 12458, USA"
+}, {
+ "location": {
+ "latitude": 414204288,
+ "longitude": -747895140
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 414777405,
+ "longitude": -740615601
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 415464475,
+ "longitude": -747175374
+ },
+ "name": "48 North Road, Forestburgh, NY 12777, USA"
+}, {
+ "location": {
+ "latitude": 404062378,
+ "longitude": -746376177
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 405688272,
+ "longitude": -749285130
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 400342070,
+ "longitude": -748788996
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401809022,
+ "longitude": -744157964
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404226644,
+ "longitude": -740517141
+ },
+ "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA"
+}, {
+ "location": {
+ "latitude": 410322033,
+ "longitude": -747871659
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 407100674,
+ "longitude": -747742727
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418811433,
+ "longitude": -741718005
+ },
+ "name": "213 Bush Road, Stone Ridge, NY 12484, USA"
+}, {
+ "location": {
+ "latitude": 415034302,
+ "longitude": -743850945
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411349992,
+ "longitude": -743694161
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404839914,
+ "longitude": -744759616
+ },
+ "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA"
+}, {
+ "location": {
+ "latitude": 414638017,
+ "longitude": -745957854
+ },
+ "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA"
+}, {
+ "location": {
+ "latitude": 412127800,
+ "longitude": -740173578
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401263460,
+ "longitude": -747964303
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 412843391,
+ "longitude": -749086026
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418512773,
+ "longitude": -743067823
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404318328,
+ "longitude": -740835638
+ },
+ "name": "42-102 Main Street, Belford, NJ 07718, USA"
+}, {
+ "location": {
+ "latitude": 419020746,
+ "longitude": -741172328
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404080723,
+ "longitude": -746119569
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401012643,
+ "longitude": -744035134
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404306372,
+ "longitude": -741079661
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 403966326,
+ "longitude": -748519297
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 405002031,
+ "longitude": -748407866
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 409532885,
+ "longitude": -742200683
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 416851321,
+ "longitude": -742674555
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 406411633,
+ "longitude": -741722051
+ },
+ "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA"
+}, {
+ "location": {
+ "latitude": 413069058,
+ "longitude": -744597778
+ },
+ "name": "261 Van Sickle Road, Goshen, NY 10924, USA"
+}, {
+ "location": {
+ "latitude": 418465462,
+ "longitude": -746859398
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411733222,
+ "longitude": -744228360
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 410248224,
+ "longitude": -747127767
+ },
+ "name": "3 Hasta Way, Newton, NJ 07860, USA"
+}]
diff --git a/examples/node/route_guide/route_guide_server.js b/examples/node/route_guide/route_guide_server.js
new file mode 100644
index 0000000000..5dd8412654
--- /dev/null
+++ b/examples/node/route_guide/route_guide_server.js
@@ -0,0 +1,249 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var fs = require('fs');
+var parseArgs = require('minimist');
+var path = require('path');
+var _ = require('underscore');
+var grpc = require('grpc');
+var examples = grpc.load(__dirname + '/route_guide.proto').examples;
+
+var Server = grpc.buildServer([examples.RouteGuide.service]);
+
+var COORD_FACTOR = 1e7;
+
+/**
+ * For simplicity, a point is a record type that looks like
+ * {latitude: number, longitude: number}, and a feature is a record type that
+ * looks like {name: string, location: point}. feature objects with name===''
+ * are points with no feature.
+ */
+
+/**
+ * List of feature objects at points that have been requested so far.
+ */
+var feature_list = [];
+
+/**
+ * Get a feature object at the given point, or creates one if it does not exist.
+ * @param {point} point The point to check
+ * @return {feature} The feature object at the point. Note that an empty name
+ * indicates no feature
+ */
+function checkFeature(point) {
+ var feature;
+ // Check if there is already a feature object for the given point
+ for (var i = 0; i < feature_list.length; i++) {
+ feature = feature_list[i];
+ if (feature.location.latitude === point.latitude &&
+ feature.location.longitude === point.longitude) {
+ return feature;
+ }
+ }
+ var name = '';
+ feature = {
+ name: name,
+ location: point
+ };
+ return feature;
+}
+
+/**
+ * getFeature request handler. Gets a request with a point, and responds with a
+ * feature object indicating whether there is a feature at that point.
+ * @param {EventEmitter} call Call object for the handler to process
+ * @param {function(Error, feature)} callback Response callback
+ */
+function getFeature(call, callback) {
+ callback(null, checkFeature(call.request));
+}
+
+/**
+ * listFeatures request handler. Gets a request with two points, and responds
+ * with a stream of all features in the bounding box defined by those points.
+ * @param {Writable} call Writable stream for responses with an additional
+ * request property for the request value.
+ */
+function listFeatures(call) {
+ var lo = call.request.lo;
+ var hi = call.request.hi;
+ var left = _.min([lo.longitude, hi.longitude]);
+ var right = _.max([lo.longitude, hi.longitude]);
+ var top = _.max([lo.latitude, hi.latitude]);
+ var bottom = _.min([lo.latitude, hi.latitude]);
+ // For each feature, check if it is in the given bounding box
+ _.each(feature_list, function(feature) {
+ if (feature.name === '') {
+ return;
+ }
+ if (feature.location.longitude >= left &&
+ feature.location.longitude <= right &&
+ feature.location.latitude >= bottom &&
+ feature.location.latitude <= top) {
+ call.write(feature);
+ }
+ });
+ call.end();
+}
+
+/**
+ * Calculate the distance between two points using the "haversine" formula.
+ * This code was taken from http://www.movable-type.co.uk/scripts/latlong.html.
+ * @param start The starting point
+ * @param end The end point
+ * @return The distance between the points in meters
+ */
+function getDistance(start, end) {
+ function toRadians(num) {
+ return num * Math.PI / 180;
+ }
+ var lat1 = start.latitude / COORD_FACTOR;
+ var lat2 = end.latitude / COORD_FACTOR;
+ var lon1 = start.longitude / COORD_FACTOR;
+ var lon2 = end.longitude / COORD_FACTOR;
+ var R = 6371000; // metres
+ var φ1 = toRadians(lat1);
+ var φ2 = toRadians(lat2);
+ var Δφ = toRadians(lat2-lat1);
+ var Δλ = toRadians(lon2-lon1);
+
+ var a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +
+ Math.cos(φ1) * Math.cos(φ2) *
+ Math.sin(Δλ/2) * Math.sin(Δλ/2);
+ var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
+
+ return R * c;
+}
+
+/**
+ * recordRoute handler. Gets a stream of points, and responds with statistics
+ * about the "trip": number of points, number of known features visited, total
+ * distance traveled, and total time spent.
+ * @param {Readable} call The request point stream.
+ * @param {function(Error, routeSummary)} callback The callback to pass the
+ * response to
+ */
+function recordRoute(call, callback) {
+ var point_count = 0;
+ var feature_count = 0;
+ var distance = 0;
+ var previous = null;
+ // Start a timer
+ var start_time = process.hrtime();
+ call.on('data', function(point) {
+ point_count += 1;
+ if (checkFeature(point).name !== '') {
+ feature_count += 1;
+ }
+ /* For each point after the first, add the incremental distance from the
+ * previous point to the total distance value */
+ if (previous != null) {
+ distance += getDistance(previous, point);
+ }
+ previous = point;
+ });
+ call.on('end', function() {
+ callback(null, {
+ point_count: point_count,
+ feature_count: feature_count,
+ // Cast the distance to an integer
+ distance: distance|0,
+ // End the timer
+ elapsed_time: process.hrtime(start_time)[0]
+ });
+ });
+}
+
+var route_notes = {};
+
+/**
+ * Turn the point into a dictionary key.
+ * @param {point} point The point to use
+ * @return {string} The key for an object
+ */
+function pointKey(point) {
+ return point.latitude + ' ' + point.longitude;
+}
+
+/**
+ * routeChat handler. Receives a stream of message/location pairs, and responds
+ * with a stream of all previous messages at each of those locations.
+ * @param {Duplex} call The stream for incoming and outgoing messages
+ */
+function routeChat(call) {
+ call.on('data', function(note) {
+ var key = pointKey(note.location);
+ /* For each note sent, respond with all previous notes that correspond to
+ * the same point */
+ if (route_notes.hasOwnProperty(key)) {
+ _.each(route_notes[key], function(note) {
+ call.write(note);
+ });
+ } else {
+ route_notes[key] = [];
+ }
+ // Then add the new note to the list
+ route_notes[key].push(JSON.parse(JSON.stringify(note)));
+ });
+ call.on('end', function() {
+ call.end();
+ });
+}
+
+/**
+ * Get a new server with the handler functions in this file bound to the methods
+ * it serves.
+ * @return {Server} The new server object
+ */
+function getServer() {
+ return new Server({
+ 'examples.RouteGuide' : {
+ getFeature: getFeature,
+ listFeatures: listFeatures,
+ recordRoute: recordRoute,
+ routeChat: routeChat
+ }
+ });
+}
+
+if (require.main === module) {
+ // If this is run as a script, start a server on an unused port
+ var routeServer = getServer();
+ routeServer.bind('0.0.0.0:50051');
+ var argv = parseArgs(process.argv, {
+ string: 'db_path'
+ });
+ fs.readFile(path.resolve(argv.db_path), function(err, data) {
+ if (err) throw err;
+ feature_list = JSON.parse(data);
+ routeServer.listen();
+ });
+}
+
+exports.getServer = getServer;
diff --git a/examples/objective-c/auth_sample/AuthSample.xcodeproj/project.pbxproj b/examples/objective-c/auth_sample/AuthSample.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..51a39c578c
--- /dev/null
+++ b/examples/objective-c/auth_sample/AuthSample.xcodeproj/project.pbxproj
@@ -0,0 +1,366 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 63E1E9821B28CB2100EF0978 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E1E9811B28CB2100EF0978 /* main.m */; };
+ 63E1E9851B28CB2100EF0978 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E1E9841B28CB2100EF0978 /* AppDelegate.m */; };
+ 63E1E9881B28CB2100EF0978 /* SelectUserViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E1E9871B28CB2100EF0978 /* SelectUserViewController.m */; };
+ 63E1E98B1B28CB2100EF0978 /* MakeRPCViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 63E1E98A1B28CB2100EF0978 /* MakeRPCViewController.m */; };
+ 63E1E98E1B28CB2100EF0978 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 63E1E98C1B28CB2100EF0978 /* Main.storyboard */; };
+ 63E1E9901B28CB2100EF0978 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 63E1E98F1B28CB2100EF0978 /* Images.xcassets */; };
+ 63F5DE481B28F5C100CDD07E /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 63F5DE471B28F5C100CDD07E /* GoogleService-Info.plist */; };
+ 832213142AB24DB816D02635 /* libPods-AuthSample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F217A6ECA7F5BD1D5FB5071B /* libPods-AuthSample.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 63E1E97C1B28CB2100EF0978 /* AuthSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AuthSample.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 63E1E9801B28CB2100EF0978 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 63E1E9811B28CB2100EF0978 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 63E1E9831B28CB2100EF0978 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ 63E1E9841B28CB2100EF0978 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+ 63E1E9861B28CB2100EF0978 /* SelectUserViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SelectUserViewController.h; sourceTree = "<group>"; };
+ 63E1E9871B28CB2100EF0978 /* SelectUserViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SelectUserViewController.m; sourceTree = "<group>"; };
+ 63E1E9891B28CB2100EF0978 /* MakeRPCViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MakeRPCViewController.h; sourceTree = "<group>"; };
+ 63E1E98A1B28CB2100EF0978 /* MakeRPCViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MakeRPCViewController.m; sourceTree = "<group>"; };
+ 63E1E98D1B28CB2100EF0978 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+ 63E1E98F1B28CB2100EF0978 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
+ 63F5DE471B28F5C100CDD07E /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
+ A387D6CECBCF2EAF2983033A /* Pods-AuthSample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AuthSample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-AuthSample/Pods-AuthSample.debug.xcconfig"; sourceTree = "<group>"; };
+ B444176735DA81FBE4B8B80C /* Pods-AuthSample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AuthSample.release.xcconfig"; path = "Pods/Target Support Files/Pods-AuthSample/Pods-AuthSample.release.xcconfig"; sourceTree = "<group>"; };
+ F217A6ECA7F5BD1D5FB5071B /* libPods-AuthSample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-AuthSample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 63E1E9791B28CB2000EF0978 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 832213142AB24DB816D02635 /* libPods-AuthSample.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 021FA0E0B3F5D3D477DDAC10 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ A387D6CECBCF2EAF2983033A /* Pods-AuthSample.debug.xcconfig */,
+ B444176735DA81FBE4B8B80C /* Pods-AuthSample.release.xcconfig */,
+ );
+ name = Pods;
+ sourceTree = "<group>";
+ };
+ 4F443572636F3D60F26E870D /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ F217A6ECA7F5BD1D5FB5071B /* libPods-AuthSample.a */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ 63E1E9731B28CB2000EF0978 = {
+ isa = PBXGroup;
+ children = (
+ 63E1E97E1B28CB2100EF0978 /* AuthSample */,
+ 63E1E97D1B28CB2100EF0978 /* Products */,
+ 021FA0E0B3F5D3D477DDAC10 /* Pods */,
+ 4F443572636F3D60F26E870D /* Frameworks */,
+ );
+ sourceTree = "<group>";
+ };
+ 63E1E97D1B28CB2100EF0978 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 63E1E97C1B28CB2100EF0978 /* AuthSample.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 63E1E97E1B28CB2100EF0978 /* AuthSample */ = {
+ isa = PBXGroup;
+ children = (
+ 63E1E9861B28CB2100EF0978 /* SelectUserViewController.h */,
+ 63E1E9871B28CB2100EF0978 /* SelectUserViewController.m */,
+ 63E1E9891B28CB2100EF0978 /* MakeRPCViewController.h */,
+ 63E1E98A1B28CB2100EF0978 /* MakeRPCViewController.m */,
+ 63E1E97F1B28CB2100EF0978 /* Supporting Files */,
+ );
+ name = AuthSample;
+ sourceTree = SOURCE_ROOT;
+ };
+ 63E1E97F1B28CB2100EF0978 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 63E1E98C1B28CB2100EF0978 /* Main.storyboard */,
+ 63F5DE471B28F5C100CDD07E /* GoogleService-Info.plist */,
+ 63E1E98F1B28CB2100EF0978 /* Images.xcassets */,
+ 63E1E9801B28CB2100EF0978 /* Info.plist */,
+ 63E1E9831B28CB2100EF0978 /* AppDelegate.h */,
+ 63E1E9841B28CB2100EF0978 /* AppDelegate.m */,
+ 63E1E9811B28CB2100EF0978 /* main.m */,
+ );
+ name = "Supporting Files";
+ path = Misc;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 63E1E97B1B28CB2000EF0978 /* AuthSample */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 63E1E9A21B28CB2100EF0978 /* Build configuration list for PBXNativeTarget "AuthSample" */;
+ buildPhases = (
+ DAABBA7B5788A39108D7CA83 /* Check Pods Manifest.lock */,
+ 63E1E9781B28CB2000EF0978 /* Sources */,
+ 63E1E9791B28CB2000EF0978 /* Frameworks */,
+ 63E1E97A1B28CB2000EF0978 /* Resources */,
+ AEFCCC69DD59CE8F6EB769D7 /* Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = AuthSample;
+ productName = AuthSample;
+ productReference = 63E1E97C1B28CB2100EF0978 /* AuthSample.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 63E1E9741B28CB2000EF0978 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0630;
+ ORGANIZATIONNAME = gRPC;
+ TargetAttributes = {
+ 63E1E97B1B28CB2000EF0978 = {
+ CreatedOnToolsVersion = 6.3.1;
+ };
+ };
+ };
+ buildConfigurationList = 63E1E9771B28CB2000EF0978 /* Build configuration list for PBXProject "AuthSample" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 63E1E9731B28CB2000EF0978;
+ productRefGroup = 63E1E97D1B28CB2100EF0978 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 63E1E97B1B28CB2000EF0978 /* AuthSample */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 63E1E97A1B28CB2000EF0978 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 63E1E98E1B28CB2100EF0978 /* Main.storyboard in Resources */,
+ 63E1E9901B28CB2100EF0978 /* Images.xcassets in Resources */,
+ 63F5DE481B28F5C100CDD07E /* GoogleService-Info.plist in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ AEFCCC69DD59CE8F6EB769D7 /* Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Copy Pods Resources";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-AuthSample/Pods-AuthSample-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ DAABBA7B5788A39108D7CA83 /* Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Check Pods Manifest.lock";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 63E1E9781B28CB2000EF0978 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 63E1E98B1B28CB2100EF0978 /* MakeRPCViewController.m in Sources */,
+ 63E1E9851B28CB2100EF0978 /* AppDelegate.m in Sources */,
+ 63E1E9881B28CB2100EF0978 /* SelectUserViewController.m in Sources */,
+ 63E1E9821B28CB2100EF0978 /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 63E1E98C1B28CB2100EF0978 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 63E1E98D1B28CB2100EF0978 /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 63E1E9A01B28CB2100EF0978 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.3;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 63E1E9A11B28CB2100EF0978 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.3;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 63E1E9A31B28CB2100EF0978 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = A387D6CECBCF2EAF2983033A /* Pods-AuthSample.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ INFOPLIST_FILE = Misc/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 63E1E9A41B28CB2100EF0978 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = B444176735DA81FBE4B8B80C /* Pods-AuthSample.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ INFOPLIST_FILE = Misc/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 63E1E9771B28CB2000EF0978 /* Build configuration list for PBXProject "AuthSample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 63E1E9A01B28CB2100EF0978 /* Debug */,
+ 63E1E9A11B28CB2100EF0978 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 63E1E9A21B28CB2100EF0978 /* Build configuration list for PBXNativeTarget "AuthSample" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 63E1E9A31B28CB2100EF0978 /* Debug */,
+ 63E1E9A41B28CB2100EF0978 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 63E1E9741B28CB2000EF0978 /* Project object */;
+}
diff --git a/examples/objective-c/auth_sample/AuthSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/objective-c/auth_sample/AuthSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000..39b57a4b33
--- /dev/null
+++ b/examples/objective-c/auth_sample/AuthSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:AuthSample.xcodeproj">
+ </FileRef>
+</Workspace>
diff --git a/examples/objective-c/auth_sample/AuthTestService.podspec b/examples/objective-c/auth_sample/AuthTestService.podspec
new file mode 100644
index 0000000000..9f2a2cc361
--- /dev/null
+++ b/examples/objective-c/auth_sample/AuthTestService.podspec
@@ -0,0 +1,35 @@
+Pod::Spec.new do |s|
+ s.name = "AuthTestService"
+ s.version = "0.0.1"
+ s.license = "New BSD"
+
+ s.ios.deployment_target = "6.0"
+ s.osx.deployment_target = "10.8"
+
+ # Base directory where the .proto files are.
+ src = "../../protos"
+
+ # Directory where the generated files will be place.
+ dir = "Pods/" + s.name
+
+ # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients.
+ s.prepare_command = <<-CMD
+ mkdir -p #{dir}
+ protoc -I #{src} --objc_out=#{dir} --objcgrpc_out=#{dir} #{src}/auth_sample.proto
+ CMD
+
+ s.subspec "Messages" do |ms|
+ ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}"
+ ms.header_mappings_dir = dir
+ ms.requires_arc = false
+ ms.dependency "Protobuf", "~> 3.0.0-alpha-3"
+ end
+
+ s.subspec "Services" do |ss|
+ ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}"
+ ss.header_mappings_dir = dir
+ ss.requires_arc = true
+ ss.dependency "gRPC", "~> 0.6"
+ ss.dependency "#{s.name}/Messages"
+ end
+end
diff --git a/examples/objective-c/auth_sample/MakeRPCViewController.h b/examples/objective-c/auth_sample/MakeRPCViewController.h
new file mode 100644
index 0000000000..c75a8b3180
--- /dev/null
+++ b/examples/objective-c/auth_sample/MakeRPCViewController.h
@@ -0,0 +1,40 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+
+extern NSString * const kTestScope;
+
+@interface MakeRPCViewController : UIViewController
+@property(weak, nonatomic) IBOutlet UILabel *mainLabel;
+@end
diff --git a/examples/objective-c/auth_sample/MakeRPCViewController.m b/examples/objective-c/auth_sample/MakeRPCViewController.m
new file mode 100644
index 0000000000..366bc9deea
--- /dev/null
+++ b/examples/objective-c/auth_sample/MakeRPCViewController.m
@@ -0,0 +1,100 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import "MakeRPCViewController.h"
+
+#import <AuthTestService/AuthSample.pbrpc.h>
+#import <Google/SignIn.h>
+#include <grpc/status.h>
+#import <ProtoRPC/ProtoRPC.h>
+
+NSString * const kTestScope = @"https://www.googleapis.com/auth/xapi.zoo";
+
+static NSString * const kTestHostAddress = @"grpc-test.sandbox.google.com";
+
+// Category for RPC errors to create the descriptions as we want them to appear on our view.
+@interface NSError (AuthSample)
+- (NSString *)UIDescription;
+@end
+
+@implementation NSError (AuthSample)
+- (NSString *)UIDescription {
+ if (self.code == GRPC_STATUS_UNAUTHENTICATED) {
+ // Authentication error. OAuth2 specifies we'll receive a challenge header.
+ // |userInfo[kGRPCStatusMetadataKey]| is the dictionary of response metadata.
+ NSString *challengeHeader = self.userInfo[kGRPCStatusMetadataKey][@"www-authenticate"] ?: @"";
+ return [@"Invalid credentials. Server challenge:\n" stringByAppendingString:challengeHeader];
+ } else {
+ // Any other error.
+ return [NSString stringWithFormat:@"Unexpected RPC error %li: %@",
+ (long)self.code, self.localizedDescription];
+ }
+}
+@end
+
+@implementation MakeRPCViewController
+
+- (void)viewWillAppear:(BOOL)animated {
+
+ // Create a service client and a proto request as usual.
+ AUTHTestService *client = [[AUTHTestService alloc] initWithHost:kTestHostAddress];
+
+ AUTHRequest *request = [AUTHRequest message];
+ request.fillUsername = YES;
+ request.fillOauthScope = YES;
+
+ // Create a not-yet-started RPC. We want to set the request headers on this object before starting
+ // it.
+ ProtoRPC *call =
+ [client RPCToUnaryCallWithRequest:request handler:^(AUTHResponse *response, NSError *error) {
+ if (response) {
+ // This test server responds with the email and scope of the access token it receives.
+ self.mainLabel.text = [NSString stringWithFormat:@"Used scope: %@ on behalf of user %@",
+ response.oauthScope, response.username];
+
+ } else {
+ self.mainLabel.text = error.UIDescription;
+ }
+ }];
+
+ // Set the access token to be used.
+ NSString *accessToken = GIDSignIn.sharedInstance.currentUser.authentication.accessToken;
+ call.requestMetadata[@"Authorization"] = [@"Bearer " stringByAppendingString:accessToken];
+
+ // Start the RPC.
+ [call start];
+
+ self.mainLabel.text = @"Waiting for RPC to complete...";
+}
+
+@end
diff --git a/examples/objective-c/auth_sample/Misc/AppDelegate.h b/examples/objective-c/auth_sample/Misc/AppDelegate.h
new file mode 100644
index 0000000000..102e7f3ade
--- /dev/null
+++ b/examples/objective-c/auth_sample/Misc/AppDelegate.h
@@ -0,0 +1,38 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+@property (strong, nonatomic) UIWindow *window;
+@end
diff --git a/test/cpp/server/dynamic_thread_pool_test.cc b/examples/objective-c/auth_sample/Misc/AppDelegate.m
index 63b603b8f7..798d342938 100644
--- a/test/cpp/server/dynamic_thread_pool_test.cc
+++ b/examples/objective-c/auth_sample/Misc/AppDelegate.m
@@ -31,47 +31,31 @@
*
*/
-#include <condition_variable>
-#include <functional>
-#include <mutex>
+#import "AppDelegate.h"
-#include <grpc++/dynamic_thread_pool.h>
-#include <gtest/gtest.h>
+#import <Google/SignIn.h>
-namespace grpc {
+@implementation AppDelegate
-class DynamicThreadPoolTest : public ::testing::Test {
- public:
- DynamicThreadPoolTest() : thread_pool_(0) {}
+// As instructed in https://developers.google.com/identity/sign-in/ios/sign-in
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+ NSError* configureError;
+ [GGLContext.sharedInstance configureWithError: &configureError];
+ NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
- protected:
- DynamicThreadPool thread_pool_;
-};
-
-void Callback(std::mutex* mu, std::condition_variable* cv, bool* done) {
- std::unique_lock<std::mutex> lock(*mu);
- *done = true;
- cv->notify_all();
+ return YES;
}
-TEST_F(DynamicThreadPoolTest, Add) {
- std::mutex mu;
- std::condition_variable cv;
- bool done = false;
- std::function<void()> callback = std::bind(Callback, &mu, &cv, &done);
- thread_pool_.Add(callback);
-
- // Wait for the callback to finish.
- std::unique_lock<std::mutex> lock(mu);
- while (!done) {
- cv.wait(lock);
- }
+// As instructed in https://developers.google.com/identity/sign-in/ios/sign-in
+- (BOOL)application:(UIApplication *)application
+ openURL:(NSURL *)url
+ sourceApplication:(NSString *)sourceApplication
+ annotation:(id)annotation {
+ // This will properly handle the URL that the application receives at the end of the
+ // authentication process.
+ return [GIDSignIn.sharedInstance handleURL:url
+ sourceApplication:sourceApplication
+ annotation:annotation];
}
-} // namespace grpc
-
-int main(int argc, char** argv) {
- ::testing::InitGoogleTest(&argc, argv);
- int result = RUN_ALL_TESTS();
- return result;
-}
+@end
diff --git a/examples/objective-c/auth_sample/Misc/Base.lproj/Main.storyboard b/examples/objective-c/auth_sample/Misc/Base.lproj/Main.storyboard
new file mode 100644
index 0000000000..fb29c124e2
--- /dev/null
+++ b/examples/objective-c/auth_sample/Misc/Base.lproj/Main.storyboard
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="7702" systemVersion="14D131" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="49e-Tb-3d3">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
+ <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
+ </dependencies>
+ <scenes>
+ <!--Select User-->
+ <scene sceneID="hNz-n2-bh7">
+ <objects>
+ <viewController id="9pv-A4-QxB" userLabel="Select User" customClass="SelectUserViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="Ia1-K6-d13"/>
+ <viewControllerLayoutGuide type="bottom" id="4ug-Mw-9AY"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="tsR-hK-woN">
+ <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Please sign in." textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="KQZ-1w-vlD" userLabel="Main Label">
+ <rect key="frame" x="222" y="190" width="157" height="28"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="24"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="A5M-7J-77L" userLabel="Sub Label">
+ <rect key="frame" x="301" y="226" width="0.0" height="0.0"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="W20-aa-6Xr">
+ <rect key="frame" x="150" y="370" width="300" height="50"/>
+ <subviews>
+ <view contentMode="center" translatesAutoresizingMaskIntoConstraints="NO" id="25e-pE-eb8" customClass="GIDSignInButton">
+ <rect key="frame" x="42" y="0.0" width="216" height="77"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="216" placeholder="YES" id="Gfn-Hn-HXd"/>
+ <constraint firstAttribute="height" constant="77" placeholder="YES" id="cy1-xY-er0"/>
+ </constraints>
+ </view>
+ <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="RKb-EE-mCZ">
+ <rect key="frame" x="0.0" y="0.0" width="300" height="42"/>
+ <color key="backgroundColor" red="0.0" green="0.50196081399917603" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+ <constraints>
+ <constraint firstAttribute="width" constant="300" id="ILy-QC-YPq"/>
+ <constraint firstAttribute="height" constant="42" id="MFs-aL-fQF"/>
+ </constraints>
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="14"/>
+ <color key="tintColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <state key="normal" title="Sign out">
+ <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
+ </state>
+ <connections>
+ <action selector="didTapSignOut" destination="9pv-A4-QxB" eventType="touchUpInside" id="lcC-7k-Rki"/>
+ </connections>
+ </button>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstAttribute="centerX" secondItem="25e-pE-eb8" secondAttribute="centerX" id="47f-A8-C2R"/>
+ <constraint firstAttribute="height" constant="50" id="EDJ-oo-Ix4"/>
+ <constraint firstItem="25e-pE-eb8" firstAttribute="top" secondItem="W20-aa-6Xr" secondAttribute="top" id="KSP-qb-mCJ"/>
+ <constraint firstItem="RKb-EE-mCZ" firstAttribute="top" secondItem="W20-aa-6Xr" secondAttribute="top" id="QDr-HV-DXb"/>
+ <constraint firstAttribute="width" constant="300" id="zWU-pZ-oQ7"/>
+ <constraint firstAttribute="centerX" secondItem="RKb-EE-mCZ" secondAttribute="centerX" id="zwy-cD-xao"/>
+ </constraints>
+ </view>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstAttribute="centerX" secondItem="KQZ-1w-vlD" secondAttribute="centerX" id="6BV-lF-sBN"/>
+ <constraint firstItem="KQZ-1w-vlD" firstAttribute="top" secondItem="Ia1-K6-d13" secondAttribute="bottom" constant="170" id="82x-jY-eWa"/>
+ <constraint firstAttribute="centerX" secondItem="W20-aa-6Xr" secondAttribute="centerX" id="aHL-Ts-LoW"/>
+ <constraint firstItem="A5M-7J-77L" firstAttribute="top" secondItem="KQZ-1w-vlD" secondAttribute="bottom" constant="8" symbolic="YES" id="cfb-er-3JN"/>
+ <constraint firstItem="A5M-7J-77L" firstAttribute="centerX" secondItem="KQZ-1w-vlD" secondAttribute="centerX" id="e1l-AV-tCB"/>
+ <constraint firstItem="W20-aa-6Xr" firstAttribute="top" secondItem="Ia1-K6-d13" secondAttribute="bottom" constant="350" id="pab-Li-xZ5"/>
+ </constraints>
+ </view>
+ <tabBarItem key="tabBarItem" title="Select User" image="first" id="acW-dT-cKf"/>
+ <connections>
+ <outlet property="mainLabel" destination="KQZ-1w-vlD" id="fWK-H9-WXN"/>
+ <outlet property="signInButton" destination="25e-pE-eb8" id="ovt-t5-7BV"/>
+ <outlet property="signOutButton" destination="RKb-EE-mCZ" id="afy-Q6-rK8"/>
+ <outlet property="subLabel" destination="A5M-7J-77L" id="DIj-ZX-1NK"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="W5J-7L-Pyd" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="750" y="-320"/>
+ </scene>
+ <!--Make RPC-->
+ <scene sceneID="wg7-f3-ORb">
+ <objects>
+ <viewController id="8rJ-Kc-sve" userLabel="Make RPC" customClass="MakeRPCViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="L7p-HK-0SC"/>
+ <viewControllerLayoutGuide type="bottom" id="Djb-ko-YwX"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="QS5-Rx-YEW">
+ <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" misplaced="YES" text="Waiting for RPC to complete..." lineBreakMode="wordWrap" numberOfLines="0" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="zEq-FU-wV5">
+ <rect key="frame" x="16" y="286" width="568" height="28"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="18"/>
+ <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstItem="zEq-FU-wV5" firstAttribute="leading" secondItem="QS5-Rx-YEW" secondAttribute="leadingMargin" id="173-PJ-A9Y"/>
+ <constraint firstAttribute="trailingMargin" secondItem="zEq-FU-wV5" secondAttribute="trailing" id="Tct-jU-lL7"/>
+ <constraint firstAttribute="centerY" secondItem="zEq-FU-wV5" secondAttribute="centerY" id="qzY-Ky-pLD"/>
+ </constraints>
+ </view>
+ <tabBarItem key="tabBarItem" title="Make RPC" image="second" id="cPa-gy-q4n" userLabel="Make RPC"/>
+ <connections>
+ <outlet property="mainLabel" destination="zEq-FU-wV5" id="l1H-U6-oAa"/>
+ </connections>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="4Nw-L8-lE0" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="750" y="360"/>
+ </scene>
+ <!--Tab Bar Controller-->
+ <scene sceneID="yl2-sM-qoP">
+ <objects>
+ <tabBarController id="49e-Tb-3d3" sceneMemberID="viewController">
+ <nil key="simulatedBottomBarMetrics"/>
+ <tabBar key="tabBar" contentMode="scaleToFill" id="W28-zg-YXA">
+ <rect key="frame" x="0.0" y="975" width="768" height="49"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+ </tabBar>
+ <connections>
+ <segue destination="9pv-A4-QxB" kind="relationship" relationship="viewControllers" id="u7Y-xg-7CH"/>
+ <segue destination="8rJ-Kc-sve" kind="relationship" relationship="viewControllers" id="lzU-1b-eKA"/>
+ </connections>
+ </tabBarController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="HuB-VB-40B" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="0.0" y="0.0"/>
+ </scene>
+ </scenes>
+ <resources>
+ <image name="first" width="30" height="30"/>
+ <image name="second" width="30" height="30"/>
+ </resources>
+</document>
diff --git a/examples/objective-c/auth_sample/Misc/GoogleService-Info.plist b/examples/objective-c/auth_sample/Misc/GoogleService-Info.plist
new file mode 100644
index 0000000000..86909d84a3
--- /dev/null
+++ b/examples/objective-c/auth_sample/Misc/GoogleService-Info.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CLIENT_ID</key>
+ <string>15087385131-lh9bpkiai9nls53uadju0if6k7un3uih.apps.googleusercontent.com</string>
+ <key>REVERSED_CLIENT_ID</key>
+ <string>com.googleusercontent.apps.15087385131-lh9bpkiai9nls53uadju0if6k7un3uih</string>
+</dict>
+</plist> \ No newline at end of file
diff --git a/examples/objective-c/auth_sample/Misc/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/objective-c/auth_sample/Misc/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000..36d2c80d88
--- /dev/null
+++ b/examples/objective-c/auth_sample/Misc/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,68 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/Contents.json b/examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/Contents.json
new file mode 100644
index 0000000000..33a745102c
--- /dev/null
+++ b/examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "first.pdf"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/first.pdf b/examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/first.pdf
new file mode 100644
index 0000000000..47d911dea6
--- /dev/null
+++ b/examples/objective-c/auth_sample/Misc/Images.xcassets/first.imageset/first.pdf
Binary files differ
diff --git a/examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/Contents.json b/examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/Contents.json
new file mode 100644
index 0000000000..03bd9c927f
--- /dev/null
+++ b/examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "second.pdf"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/second.pdf b/examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/second.pdf
new file mode 100644
index 0000000000..401614e288
--- /dev/null
+++ b/examples/objective-c/auth_sample/Misc/Images.xcassets/second.imageset/second.pdf
Binary files differ
diff --git a/examples/objective-c/auth_sample/Misc/Info.plist b/examples/objective-c/auth_sample/Misc/Info.plist
new file mode 100644
index 0000000000..fc292507c7
--- /dev/null
+++ b/examples/objective-c/auth_sample/Misc/Info.plist
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>io.grpc.$(PRODUCT_NAME:rfc1034identifier)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleURLTypes</key>
+ <array>
+ <dict>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ <key>CFBundleURLName</key>
+ <string>REVERSED_CLIENT_ID</string>
+ <key>CFBundleURLSchemes</key>
+ <array>
+ <string>com.googleusercontent.apps.15087385131-lh9bpkiai9nls53uadju0if6k7un3uih</string>
+ </array>
+ </dict>
+ <dict>
+ <key>CFBundleTypeRole</key>
+ <string>Editor</string>
+ <key>CFBundleURLName</key>
+ <string>BUNDLE_ID</string>
+ <key>CFBundleURLSchemes</key>
+ <array>
+ <string>io.grpc.AuthSample</string>
+ </array>
+ </dict>
+ </array>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>UILaunchStoryboardName</key>
+ <string>Main</string>
+ <key>UIMainStoryboardFile</key>
+ <string>Main</string>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>armv7</string>
+ </array>
+ <key>UIStatusBarTintParameters</key>
+ <dict>
+ <key>UINavigationBar</key>
+ <dict>
+ <key>Style</key>
+ <string>UIBarStyleDefault</string>
+ <key>Translucent</key>
+ <false/>
+ </dict>
+ </dict>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UISupportedInterfaceOrientations~ipad</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+</dict>
+</plist>
diff --git a/examples/objective-c/auth_sample/Misc/main.m b/examples/objective-c/auth_sample/Misc/main.m
new file mode 100644
index 0000000000..81e9d44e54
--- /dev/null
+++ b/examples/objective-c/auth_sample/Misc/main.m
@@ -0,0 +1,41 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/examples/objective-c/auth_sample/Podfile b/examples/objective-c/auth_sample/Podfile
new file mode 100644
index 0000000000..dd4fd558c0
--- /dev/null
+++ b/examples/objective-c/auth_sample/Podfile
@@ -0,0 +1,10 @@
+source 'https://github.com/CocoaPods/Specs.git'
+platform :ios, '8.0'
+
+target 'AuthSample' do
+ # Depend on the generated AuthTestService library.
+ pod 'AuthTestService', :path => '.'
+
+ # Depend on Google's OAuth2 library
+ pod 'Google/SignIn'
+end
diff --git a/examples/objective-c/auth_sample/README.md b/examples/objective-c/auth_sample/README.md
new file mode 100644
index 0000000000..3dbe7e334c
--- /dev/null
+++ b/examples/objective-c/auth_sample/README.md
@@ -0,0 +1,189 @@
+#OAuth2 on gRPC: Objective-C
+
+This example application demostrates how to use OAuth2 on gRPC to make authenticated API calls on
+behalf of a user. By walking through it you'll learn how to use the Objective-C gRPC API to:
+
+- Initialize and configure a remote call object before the RPC is started.
+- Set request metadata elements on a call, which are semantically equivalent to HTTP request
+headers.
+- Read response metadata from a call, which is equivalent to HTTP response headers and trailers.
+
+It assumes you know the basics on how to make gRPC API calls using the Objective-C client library,
+as shown in the [Hello World](examples/objective-c/helloworld)
+or [Route Guide](examples/objective-c/route_guide) tutorials,
+and are familiar with OAuth2 concepts like _access token_.
+
+- [Example code and setup](#setup)
+- [Try it out!](#try)
+- [Create an RPC object and start it later](#rpc-object)
+- [Set request metadata of a call: Authorization header with an access token](#request-metadata)
+- [Get response metadata of a call: Auth challenge header](#response-metadata)
+
+<a name="setup"></a>
+## Example code and setup
+
+The example code for our tutorial is in [examples/objective-c/auth_sample](examples/objective-c/auth_sample).
+To download the example, clone this repository by running the following command:
+```shell
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Then change your current directory to `examples/objective-c/auth_sample`:
+```shell
+$ cd examples/objective-c/auth_sample
+```
+
+Our example is a simple application with two views. The first one lets a user sign in and out using
+the OAuth2 flow of Google's [iOS SignIn library](https://developers.google.com/identity/sign-in/ios/).
+(Google's library is used in this example because the test gRPC service we are going to call expects
+Google account credentials, but neither gRPC nor the Objective-C client library is tied to any
+specific OAuth2 provider). The second view makes a gRPC request to the test server, using the
+access token obtained by the first view.
+
+Note: OAuth2 libraries need the application to register and obtain an ID from the identity provider
+(in the case of this example app, Google). The app's XCode project is configured using that ID, so
+you shouldn't copy this project "as is" for your own app: it would result in your app being
+identified in the consent screen as "gRPC-AuthSample", and not having access to real Google
+services. Instead, configure your own XCode project following the [instructions here](https://developers.google.com/identity/sign-in/ios/).
+
+As with the other examples, you also should have [Cocoapods](https://cocoapods.org/#install)
+installed, as well as the relevant tools to generate the client library code. You can obtain the
+latter by following [these setup instructions](https://github.com/grpc/homebrew-grpc).
+
+
+<a name="try"></a>
+## Try it out!
+
+To try the sample app, first have Cocoapods generate and install the client library for our .proto
+files:
+
+```shell
+$ pod install
+```
+
+(This might have to compile OpenSSL, which takes around 15 minutes if Cocoapods doesn't have it yet
+on your computer's cache).
+
+Finally, open the XCode workspace created by Cocoapods, and run the app.
+
+The first view, `SelectUserViewController.h/m`, asks you to sign in with your Google account, and to
+give the "gRPC-AuthSample" app the following permissions:
+
+- View your email address.
+- View your basic profile info.
+- "Test scope for access to the Zoo service".
+
+This last permission, corresponding to the scope `https://www.googleapis.com/auth/xapi.zoo` doesn't
+grant any real capability: it's only used for testing. You can log out at any time.
+
+The second view, `MakeRPCViewController.h/m`, makes a gRPC request to a test server at
+https://grpc-test.sandbox.google.com, sending the access token along with the request. The test
+service simply validates the token and writes in its response which user it belongs to, and which
+scopes it gives access to. (The client application already knows those two values; it's a way to
+verify that everything went as expected).
+
+The next sections guide you step-by-step through how the gRPC call in `MakeRPCViewController` is
+performed.
+
+<a name="rpc-object"></a>
+## Create an RPC object and start it later
+
+The other basic tutorials show how to invoke an RPC by calling an asynchronous method in a generated
+client object. This shows how to initialize an object that represents the RPC, and configure it
+before starting the network request.
+
+Assume you have a proto service definition like this:
+
+```protobuf
+option objc_class_prefix = "AUTH";
+
+service TestService {
+ rpc UnaryCall(Request) returns (Response);
+}
+```
+
+A `unaryCallWithRequest:handler:` method, with which you're already familiar, is generated for the
+`AUTHTestService` class:
+
+```objective-c
+[client unaryCallWithRequest:request handler:^(AUTHResponse *response, NSError *error) {
+ ...
+}];
+```
+
+In addition, an `RPCToUnaryCallWithRequest:handler:` method is generated, which returns a
+not-yet-started RPC object:
+
+```objective-c
+#import <ProtoRPC/ProtoRPC.h>
+
+ProtoRPC *call =
+ [client RPCToUnaryCallWithRequest:request handler:^(AUTHResponse *response, NSError *error) {
+ ...
+ }];
+```
+
+The RPC represented by this object can be started at any later time like this:
+
+```objective-c
+[call start];
+```
+
+<a name="request-metadata"></a>
+## Set request metadata of a call: Authorization header with an access token
+
+The `ProtoRPC` class has a `requestMetadata` property (inherited from `GRPCCall`) defined like this:
+
+```objective-c
+- (NSMutableDictionary *)requestMetadata; // nonatomic
+- (void)setRequestMetadata:(NSDictionary *)requestMetadata; // nonatomic, copy
+```
+
+Setting it to a dictionary of metadata keys and values will have them sent on the wire when the call
+is started. gRPC metadata are pieces of information about the call sent by the client to the server
+(and vice versa). They take the form of key-value pairs and are essentially opaque to gRPC itself.
+
+```objective-c
+call.requestMetadata = @{@"My-Header": @"Value for this header",
+ @"Another-Header": @"Its value"};
+```
+
+For convenience, the property is initialized with an empty `NSMutableDictionary`, so that request
+metadata elements can be set like this:
+
+```objective-c
+call.requestMetadata[@"My-Header"] = @"Value for this header";
+```
+
+If you have an access token, OAuth2 specifies it is to be sent in this format:
+
+```objective-c
+call.requestMetadata[@"Authorization"] = [@"Bearer " stringByAppendingString:accessToken];
+```
+
+<a name="response-metadata"></a>
+## Get response metadata of a call: Auth challenge header
+
+The `ProtoRPC` class also inherits a `responseMetadata` property, analogous to the request metadata
+we just looked at. It's defined like this:
+
+```objective-c
+@property(atomic, readonly) NSDictionary *responseMetadata;
+```
+
+To access OAuth2's authentication challenge header you write:
+
+```objective-c
+call.responseMetadata[@"www-authenticate"]
+```
+
+Note that, as gRPC metadata elements are mapped to HTTP/2 headers (or trailers), the keys of the
+response metadata are always ASCII strings in lowercase.
+
+Many uses cases of response metadata are getting more details about an RPC error. For convenience,
+when a `NSError` instance is passed to an RPC handler block, the response metadata dictionary can
+also be accessed this way:
+
+```objective-c
+error.userInfo[kGRPCStatusMetadataKey]
+```
diff --git a/examples/objective-c/auth_sample/SelectUserViewController.h b/examples/objective-c/auth_sample/SelectUserViewController.h
new file mode 100644
index 0000000000..eb3c2cf5f0
--- /dev/null
+++ b/examples/objective-c/auth_sample/SelectUserViewController.h
@@ -0,0 +1,42 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import <Google/SignIn.h>
+#import <UIKit/UIKit.h>
+
+@interface SelectUserViewController : UIViewController <GIDSignInDelegate, GIDSignInUIDelegate>
+@property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
+@property(weak, nonatomic) IBOutlet UIButton *signOutButton;
+@property(weak, nonatomic) IBOutlet UILabel *mainLabel;
+@property(weak, nonatomic) IBOutlet UILabel *subLabel;
+@end
diff --git a/src/cpp/client/channel.h b/examples/objective-c/auth_sample/SelectUserViewController.m
index 7e406ad788..954c531f3f 100644
--- a/src/cpp/client/channel.h
+++ b/examples/objective-c/auth_sample/SelectUserViewController.m
@@ -31,50 +31,56 @@
*
*/
-#ifndef GRPC_INTERNAL_CPP_CLIENT_CHANNEL_H
-#define GRPC_INTERNAL_CPP_CLIENT_CHANNEL_H
+#import "SelectUserViewController.h"
-#include <memory>
+#import "MakeRPCViewController.h"
-#include <grpc++/channel_interface.h>
-#include <grpc++/config.h>
-#include <grpc++/impl/grpc_library.h>
+@implementation SelectUserViewController
-struct grpc_channel;
+- (void)viewDidLoad {
+ [super viewDidLoad];
-namespace grpc {
-class Call;
-class CallOpSetInterface;
-class ChannelArguments;
-class CompletionQueue;
-class Credentials;
-class StreamContextInterface;
+ self.signOutButton.layer.cornerRadius = 5;
+ self.signOutButton.hidden = YES;
-class Channel GRPC_FINAL : public GrpcLibrary, public ChannelInterface {
- public:
- explicit Channel(grpc_channel* c_channel);
- Channel(const grpc::string& host, grpc_channel* c_channel);
- ~Channel() GRPC_OVERRIDE;
+ // As instructed in https://developers.google.com/identity/sign-in/ios/sign-in
+ GIDSignIn *signIn = GIDSignIn.sharedInstance;
+ signIn.delegate = self;
+ signIn.uiDelegate = self;
- void* RegisterMethod(const char* method) GRPC_OVERRIDE;
- Call CreateCall(const RpcMethod& method, ClientContext* context,
- CompletionQueue* cq) GRPC_OVERRIDE;
- void PerformOpsOnCall(CallOpSetInterface* ops, Call* call) GRPC_OVERRIDE;
+ // As instructed in https://developers.google.com/identity/sign-in/ios/additional-scopes
+ if (![signIn.scopes containsObject:kTestScope]) {
+ signIn.scopes = [signIn.scopes arrayByAddingObject:kTestScope];
+ }
- grpc_connectivity_state GetState(bool try_to_connect) GRPC_OVERRIDE;
+ [signIn signInSilently];
+}
- private:
- void NotifyOnStateChangeImpl(grpc_connectivity_state last_observed,
- gpr_timespec deadline, CompletionQueue* cq,
- void* tag) GRPC_OVERRIDE;
+- (void)signIn:(GIDSignIn *)signIn
+didSignInForUser:(GIDGoogleUser *)user
+ withError:(NSError *)error {
+ if (error) {
+ // The user probably cancelled the sign-in flow.
+ return;
+ }
- bool WaitForStateChangeImpl(grpc_connectivity_state last_observed,
- gpr_timespec deadline) GRPC_OVERRIDE;
+ self.mainLabel.text = [NSString stringWithFormat:@"User: %@", user.profile.email];
+ NSString *scopes = [user.accessibleScopes componentsJoinedByString:@", "];
+ scopes = scopes.length ? scopes : @"(none)";
+ self.subLabel.text = [NSString stringWithFormat:@"Scopes: %@", scopes];
- const grpc::string host_;
- grpc_channel* const c_channel_; // owned
-};
+ self.signInButton.hidden = YES;
+ self.signOutButton.hidden = NO;
+}
-} // namespace grpc
+- (IBAction)didTapSignOut {
+ [GIDSignIn.sharedInstance signOut];
-#endif // GRPC_INTERNAL_CPP_CLIENT_CHANNEL_H
+ self.mainLabel.text = @"Please sign in.";
+ self.subLabel.text = @"";
+
+ self.signInButton.hidden = NO;
+ self.signOutButton.hidden = YES;
+}
+
+@end
diff --git a/examples/objective-c/helloworld/HelloWorld.podspec b/examples/objective-c/helloworld/HelloWorld.podspec
new file mode 100644
index 0000000000..ae009a688c
--- /dev/null
+++ b/examples/objective-c/helloworld/HelloWorld.podspec
@@ -0,0 +1,35 @@
+Pod::Spec.new do |s|
+ s.name = "HelloWorld"
+ s.version = "0.0.1"
+ s.license = "New BSD"
+
+ s.ios.deployment_target = "6.0"
+ s.osx.deployment_target = "10.8"
+
+ # Base directory where the .proto files are.
+ src = "../../protos"
+
+ # Directory where the generated files will be place.
+ dir = "Pods/" + s.name
+
+ # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients.
+ s.prepare_command = <<-CMD
+ mkdir -p #{dir}
+ protoc -I #{src} --objc_out=#{dir} --objcgrpc_out=#{dir} #{src}/helloworld.proto
+ CMD
+
+ s.subspec "Messages" do |ms|
+ ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}"
+ ms.header_mappings_dir = dir
+ ms.requires_arc = false
+ ms.dependency "Protobuf", "~> 3.0.0-alpha-3"
+ end
+
+ s.subspec "Services" do |ss|
+ ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}"
+ ss.header_mappings_dir = dir
+ ss.requires_arc = true
+ ss.dependency "gRPC", "~> 0.6"
+ ss.dependency "#{s.name}/Messages"
+ end
+end
diff --git a/examples/objective-c/helloworld/HelloWorld.xcodeproj/project.pbxproj b/examples/objective-c/helloworld/HelloWorld.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..702ad3ff8b
--- /dev/null
+++ b/examples/objective-c/helloworld/HelloWorld.xcodeproj/project.pbxproj
@@ -0,0 +1,349 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 5E3690661B2A23800040F884 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E3690651B2A23800040F884 /* main.m */; };
+ 5E3690691B2A23800040F884 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E3690681B2A23800040F884 /* AppDelegate.m */; };
+ 5E36906C1B2A23800040F884 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E36906B1B2A23800040F884 /* ViewController.m */; };
+ 5E36906F1B2A23800040F884 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5E36906D1B2A23800040F884 /* Main.storyboard */; };
+ 5E3690711B2A23800040F884 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5E3690701B2A23800040F884 /* Images.xcassets */; };
+ EF61CF6AE2536A31D47F0E63 /* libPods-HelloWorld.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B4E1F55F8A2EC95A0E7EE88 /* libPods-HelloWorld.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 0C432EF610DB15C0F47A66BB /* Pods-HelloWorld.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.release.xcconfig"; path = "Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld.release.xcconfig"; sourceTree = "<group>"; };
+ 5E3690601B2A23800040F884 /* HelloWorld.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HelloWorld.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5E3690641B2A23800040F884 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 5E3690651B2A23800040F884 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 5E3690671B2A23800040F884 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ 5E3690681B2A23800040F884 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+ 5E36906B1B2A23800040F884 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
+ 5E36906E1B2A23800040F884 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+ 5E3690701B2A23800040F884 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
+ 6B4E1F55F8A2EC95A0E7EE88 /* libPods-HelloWorld.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-HelloWorld.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ DBDE3E48389499064CD664B8 /* Pods-HelloWorld.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HelloWorld.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld.debug.xcconfig"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 5E36905D1B2A23800040F884 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ EF61CF6AE2536A31D47F0E63 /* libPods-HelloWorld.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 5E3690571B2A23800040F884 = {
+ isa = PBXGroup;
+ children = (
+ 5E3690651B2A23800040F884 /* main.m */,
+ 5E3690621B2A23800040F884 /* HelloWorld */,
+ 5E3690611B2A23800040F884 /* Products */,
+ BD9CE6458E7C4FF49A1DF69F /* Pods */,
+ 66CEC7120220DDD2221DD075 /* Frameworks */,
+ );
+ sourceTree = "<group>";
+ };
+ 5E3690611B2A23800040F884 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 5E3690601B2A23800040F884 /* HelloWorld.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 5E3690621B2A23800040F884 /* HelloWorld */ = {
+ isa = PBXGroup;
+ children = (
+ 5E3690631B2A23800040F884 /* Supporting Files */,
+ );
+ path = HelloWorld;
+ sourceTree = "<group>";
+ };
+ 5E3690631B2A23800040F884 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 5E3690701B2A23800040F884 /* Images.xcassets */,
+ 5E36906D1B2A23800040F884 /* Main.storyboard */,
+ 5E36906B1B2A23800040F884 /* ViewController.m */,
+ 5E3690681B2A23800040F884 /* AppDelegate.m */,
+ 5E3690671B2A23800040F884 /* AppDelegate.h */,
+ 5E3690641B2A23800040F884 /* Info.plist */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ 66CEC7120220DDD2221DD075 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 6B4E1F55F8A2EC95A0E7EE88 /* libPods-HelloWorld.a */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ BD9CE6458E7C4FF49A1DF69F /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ DBDE3E48389499064CD664B8 /* Pods-HelloWorld.debug.xcconfig */,
+ 0C432EF610DB15C0F47A66BB /* Pods-HelloWorld.release.xcconfig */,
+ );
+ name = Pods;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 5E36905F1B2A23800040F884 /* HelloWorld */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 5E3690831B2A23810040F884 /* Build configuration list for PBXNativeTarget "HelloWorld" */;
+ buildPhases = (
+ ACF9162361FB8F24C70657DE /* Check Pods Manifest.lock */,
+ 5E36905C1B2A23800040F884 /* Sources */,
+ 5E36905D1B2A23800040F884 /* Frameworks */,
+ 5E36905E1B2A23800040F884 /* Resources */,
+ 4C7D815378D98AB3BFC1A7D5 /* Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = HelloWorld;
+ productName = HelloWorld;
+ productReference = 5E3690601B2A23800040F884 /* HelloWorld.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 5E3690581B2A23800040F884 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0620;
+ ORGANIZATIONNAME = Google;
+ TargetAttributes = {
+ 5E36905F1B2A23800040F884 = {
+ CreatedOnToolsVersion = 6.2;
+ };
+ };
+ };
+ buildConfigurationList = 5E36905B1B2A23800040F884 /* Build configuration list for PBXProject "HelloWorld" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 5E3690571B2A23800040F884;
+ productRefGroup = 5E3690611B2A23800040F884 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 5E36905F1B2A23800040F884 /* HelloWorld */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 5E36905E1B2A23800040F884 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5E36906F1B2A23800040F884 /* Main.storyboard in Resources */,
+ 5E3690711B2A23800040F884 /* Images.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 4C7D815378D98AB3BFC1A7D5 /* Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Copy Pods Resources";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-HelloWorld/Pods-HelloWorld-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ ACF9162361FB8F24C70657DE /* Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Check Pods Manifest.lock";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 5E36905C1B2A23800040F884 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5E36906C1B2A23800040F884 /* ViewController.m in Sources */,
+ 5E3690691B2A23800040F884 /* AppDelegate.m in Sources */,
+ 5E3690661B2A23800040F884 /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 5E36906D1B2A23800040F884 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 5E36906E1B2A23800040F884 /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 5E3690811B2A23810040F884 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.2;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 5E3690821B2A23810040F884 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.2;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 5E3690841B2A23810040F884 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = DBDE3E48389499064CD664B8 /* Pods-HelloWorld.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ INFOPLIST_FILE = HelloWorld/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 5E3690851B2A23810040F884 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 0C432EF610DB15C0F47A66BB /* Pods-HelloWorld.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ INFOPLIST_FILE = HelloWorld/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 5E36905B1B2A23800040F884 /* Build configuration list for PBXProject "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 5E3690811B2A23810040F884 /* Debug */,
+ 5E3690821B2A23810040F884 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 5E3690831B2A23810040F884 /* Build configuration list for PBXNativeTarget "HelloWorld" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 5E3690841B2A23810040F884 /* Debug */,
+ 5E3690851B2A23810040F884 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 5E3690581B2A23800040F884 /* Project object */;
+}
diff --git a/examples/objective-c/helloworld/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/objective-c/helloworld/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000..174a04ecb8
--- /dev/null
+++ b/examples/objective-c/helloworld/HelloWorld.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:HelloWorld.xcodeproj">
+ </FileRef>
+</Workspace>
diff --git a/examples/objective-c/helloworld/HelloWorld/AppDelegate.h b/examples/objective-c/helloworld/HelloWorld/AppDelegate.h
new file mode 100644
index 0000000000..102e7f3ade
--- /dev/null
+++ b/examples/objective-c/helloworld/HelloWorld/AppDelegate.h
@@ -0,0 +1,38 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+@property (strong, nonatomic) UIWindow *window;
+@end
diff --git a/src/cpp/client/internal_stub.cc b/examples/objective-c/helloworld/HelloWorld/AppDelegate.m
index 91724a4837..a38e36651e 100644
--- a/src/cpp/client/internal_stub.cc
+++ b/examples/objective-c/helloworld/HelloWorld/AppDelegate.m
@@ -31,6 +31,7 @@
*
*/
-#include <grpc++/impl/internal_stub.h>
+#import "AppDelegate.h"
-namespace grpc {} // namespace grpc
+@implementation AppDelegate
+@end
diff --git a/examples/objective-c/helloworld/HelloWorld/Base.lproj/Main.storyboard b/examples/objective-c/helloworld/HelloWorld/Base.lproj/Main.storyboard
new file mode 100644
index 0000000000..f56d2f3bb5
--- /dev/null
+++ b/examples/objective-c/helloworld/HelloWorld/Base.lproj/Main.storyboard
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6211" systemVersion="14A298i" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6204"/>
+ </dependencies>
+ <scenes>
+ <!--View Controller-->
+ <scene sceneID="tne-QT-ifu">
+ <objects>
+ <viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
+ <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
+ <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
+ </objects>
+ </scene>
+ </scenes>
+</document>
diff --git a/examples/objective-c/helloworld/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/objective-c/helloworld/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000..36d2c80d88
--- /dev/null
+++ b/examples/objective-c/helloworld/HelloWorld/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,68 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/examples/objective-c/helloworld/HelloWorld/Info.plist b/examples/objective-c/helloworld/HelloWorld/Info.plist
new file mode 100644
index 0000000000..1078fff723
--- /dev/null
+++ b/examples/objective-c/helloworld/HelloWorld/Info.plist
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>Google.$(PRODUCT_NAME:rfc1034identifier)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>UILaunchStoryboardName</key>
+ <string>Main</string>
+ <key>UIMainStoryboardFile</key>
+ <string>Main</string>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>armv7</string>
+ </array>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UISupportedInterfaceOrientations~ipad</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+</dict>
+</plist>
diff --git a/examples/objective-c/helloworld/HelloWorld/ViewController.m b/examples/objective-c/helloworld/HelloWorld/ViewController.m
new file mode 100644
index 0000000000..090fd93689
--- /dev/null
+++ b/examples/objective-c/helloworld/HelloWorld/ViewController.m
@@ -0,0 +1,40 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface ViewController : UIViewController
+@end
+
+@implementation ViewController
+@end
diff --git a/examples/objective-c/helloworld/Podfile b/examples/objective-c/helloworld/Podfile
new file mode 100644
index 0000000000..2934ebc2c8
--- /dev/null
+++ b/examples/objective-c/helloworld/Podfile
@@ -0,0 +1,7 @@
+source 'https://github.com/CocoaPods/Specs.git'
+platform :ios, '8.0'
+
+target 'HelloWorld' do
+ # Depend on the generated HelloWorld library.
+ pod 'HelloWorld', :path => '.'
+end
diff --git a/examples/objective-c/helloworld/README.md b/examples/objective-c/helloworld/README.md
new file mode 100644
index 0000000000..3b852f857f
--- /dev/null
+++ b/examples/objective-c/helloworld/README.md
@@ -0,0 +1,56 @@
+#gRPC in 3 minutes (Objective-C)
+
+## Installation
+
+To run this example you should have [Cocoapods](https://cocoapods.org/#install) installed, as well
+as the relevant tools to generate the client library code (and a server in another language, for
+testing). You can obtain the latter by following [these setup instructions](https://github.com/grpc/homebrew-grpc).
+
+## Hello Objective-C gRPC!
+
+Here's how to build and run the Objective-C implementation of the [Hello World](examples/protos/helloworld.proto)
+example used in [Getting started](https://github.com/grpc/grpc/tree/master/examples).
+
+The example code for this and our other examples lives in the `examples` directory. Clone
+this repository to your local machine by running the following command:
+
+
+```sh
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Change your current directory to `examples/objective-c/helloworld`
+
+```sh
+$ cd examples/objective-c/helloworld
+```
+
+### Try it!
+To try the sample app, we need a gRPC server running locally. Let's compile and run, for example,
+the C++ server in this repository:
+
+```shell
+$ pushd ../../cpp/helloworld
+$ make
+$ ./greeter_server &
+$ popd
+```
+
+Now have Cocoapods generate and install the client library for our .proto files:
+
+```shell
+$ pod install
+```
+
+(This might have to compile OpenSSL, which takes around 15 minutes if Cocoapods doesn't have it yet
+on your computer's cache.)
+
+Finally, open the XCode workspace created by Cocoapods, and run the app. You can check the calling
+code in `main.m` and see the results in XCode's log console.
+
+The code sends a `HLWHelloRequest` containing the string "Objective-C" to a local server. The server
+responds with a `HLWHelloResponse`, which contains a string that is then output to the log.
+
+## Tutorial
+
+You can find a more detailed tutorial in [gRPC Basics: Objective-C](examples/objective-c/route_guide/README.md).
diff --git a/examples/objective-c/helloworld/main.m b/examples/objective-c/helloworld/main.m
new file mode 100644
index 0000000000..458580be30
--- /dev/null
+++ b/examples/objective-c/helloworld/main.m
@@ -0,0 +1,51 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+#import <HelloWorld/Helloworld.pbrpc.h>
+
+static NSString * const kHostAddress = @"http://localhost:50051";
+
+int main(int argc, char * argv[]) {
+ @autoreleasepool {
+ HLWGreeter *client = [[HLWGreeter alloc] initWithHost:kHostAddress];
+ HLWHelloRequest *request = [HLWHelloRequest message];
+ request.name = @"Objective-C";
+ [client sayHelloWithRequest:request handler:^(HLWHelloReply *response, NSError *error) {
+ NSLog(@"%@", response.message);
+ }];
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/examples/objective-c/route_guide/Misc/AppDelegate.h b/examples/objective-c/route_guide/Misc/AppDelegate.h
new file mode 100644
index 0000000000..102e7f3ade
--- /dev/null
+++ b/examples/objective-c/route_guide/Misc/AppDelegate.h
@@ -0,0 +1,38 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+@property (strong, nonatomic) UIWindow *window;
+@end
diff --git a/examples/objective-c/route_guide/Misc/AppDelegate.m b/examples/objective-c/route_guide/Misc/AppDelegate.m
new file mode 100644
index 0000000000..a38e36651e
--- /dev/null
+++ b/examples/objective-c/route_guide/Misc/AppDelegate.m
@@ -0,0 +1,37 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import "AppDelegate.h"
+
+@implementation AppDelegate
+@end
diff --git a/examples/objective-c/route_guide/Misc/Base.lproj/Main.storyboard b/examples/objective-c/route_guide/Misc/Base.lproj/Main.storyboard
new file mode 100644
index 0000000000..9bf9498d62
--- /dev/null
+++ b/examples/objective-c/route_guide/Misc/Base.lproj/Main.storyboard
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="7702" systemVersion="14D131" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="49e-Tb-3d3">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
+ </dependencies>
+ <scenes>
+ <!--Get Feature-->
+ <scene sceneID="hNz-n2-bh7">
+ <objects>
+ <viewController id="9pv-A4-QxB" customClass="GetFeatureViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="Ia1-K6-d13"/>
+ <viewControllerLayoutGuide type="bottom" id="4ug-Mw-9AY"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="tsR-hK-woN">
+ <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Get Feature Demo" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="KQZ-1w-vlD">
+ <rect key="frame" x="150" y="279" width="299" height="42"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="36"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="See ViewControllers.m and this app's log in XCode" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="A5M-7J-77L">
+ <rect key="frame" x="136" y="329" width="329" height="17"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstAttribute="centerX" secondItem="KQZ-1w-vlD" secondAttribute="centerX" id="6BV-lF-sBN"/>
+ <constraint firstItem="A5M-7J-77L" firstAttribute="top" secondItem="KQZ-1w-vlD" secondAttribute="bottom" constant="8" symbolic="YES" id="cfb-er-3JN"/>
+ <constraint firstItem="A5M-7J-77L" firstAttribute="centerX" secondItem="KQZ-1w-vlD" secondAttribute="centerX" id="e1l-AV-tCB"/>
+ <constraint firstAttribute="centerY" secondItem="KQZ-1w-vlD" secondAttribute="centerY" id="exm-UA-ej4"/>
+ </constraints>
+ </view>
+ <tabBarItem key="tabBarItem" title="Get Feature" image="first" id="acW-dT-cKf"/>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="W5J-7L-Pyd" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="718" y="-660"/>
+ </scene>
+ <!--List Features-->
+ <scene sceneID="wg7-f3-ORb">
+ <objects>
+ <viewController id="8rJ-Kc-sve" customClass="ListFeaturesViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="L7p-HK-0SC"/>
+ <viewControllerLayoutGuide type="bottom" id="Djb-ko-YwX"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="QS5-Rx-YEW">
+ <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="List Features Demo" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="zEq-FU-wV5">
+ <rect key="frame" x="143" y="279" width="315" height="42"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="36"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="See ViewControllers.m and this app's log in XCode" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NDk-cv-Gan">
+ <rect key="frame" x="136" y="329" width="329" height="17"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstItem="NDk-cv-Gan" firstAttribute="top" secondItem="zEq-FU-wV5" secondAttribute="bottom" constant="8" symbolic="YES" id="Day-4N-Vmt"/>
+ <constraint firstItem="NDk-cv-Gan" firstAttribute="centerX" secondItem="zEq-FU-wV5" secondAttribute="centerX" id="JgO-Fn-dHn"/>
+ <constraint firstAttribute="centerX" secondItem="zEq-FU-wV5" secondAttribute="centerX" id="qqM-NS-xev"/>
+ <constraint firstAttribute="centerY" secondItem="zEq-FU-wV5" secondAttribute="centerY" id="qzY-Ky-pLD"/>
+ </constraints>
+ </view>
+ <tabBarItem key="tabBarItem" title="List Features" image="second" id="cPa-gy-q4n"/>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="4Nw-L8-lE0" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="1466" y="-386"/>
+ </scene>
+ <!--Tab Bar Controller-->
+ <scene sceneID="yl2-sM-qoP">
+ <objects>
+ <tabBarController id="49e-Tb-3d3" sceneMemberID="viewController">
+ <nil key="simulatedBottomBarMetrics"/>
+ <tabBar key="tabBar" contentMode="scaleToFill" id="W28-zg-YXA">
+ <rect key="frame" x="0.0" y="975" width="768" height="49"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
+ <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+ </tabBar>
+ <connections>
+ <segue destination="9pv-A4-QxB" kind="relationship" relationship="viewControllers" id="u7Y-xg-7CH"/>
+ <segue destination="8rJ-Kc-sve" kind="relationship" relationship="viewControllers" id="lzU-1b-eKA"/>
+ <segue destination="YIR-e4-hjB" kind="relationship" relationship="viewControllers" id="L0R-vl-fT4"/>
+ <segue destination="6mc-1d-hJy" kind="relationship" relationship="viewControllers" id="C2G-Se-4Fe"/>
+ </connections>
+ </tabBarController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="HuB-VB-40B" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="0.0" y="0.0"/>
+ </scene>
+ <!--Record Route-->
+ <scene sceneID="kS4-Oa-mxG">
+ <objects>
+ <viewController id="YIR-e4-hjB" userLabel="Record Route" customClass="RecordRouteViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="jR8-0x-GjY"/>
+ <viewControllerLayoutGuide type="bottom" id="4Q5-sW-A9H"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="Wvj-mg-YnO">
+ <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Record Route Demo" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="Nqv-Vr-o8P">
+ <rect key="frame" x="136" y="279" width="329" height="42"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="36"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="See ViewControllers.m and this app's log in XCode" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="xjS-0N-tLe">
+ <rect key="frame" x="136" y="329" width="329" height="17"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstAttribute="centerX" secondItem="Nqv-Vr-o8P" secondAttribute="centerX" id="1wf-uc-57y"/>
+ <constraint firstItem="xjS-0N-tLe" firstAttribute="centerX" secondItem="Nqv-Vr-o8P" secondAttribute="centerX" id="Gnh-rN-EQ3"/>
+ <constraint firstItem="xjS-0N-tLe" firstAttribute="top" secondItem="Nqv-Vr-o8P" secondAttribute="bottom" constant="8" symbolic="YES" id="Xhj-u3-th9"/>
+ <constraint firstAttribute="centerY" secondItem="Nqv-Vr-o8P" secondAttribute="centerY" id="xqU-v8-Bb3"/>
+ </constraints>
+ </view>
+ <tabBarItem key="tabBarItem" title="Record Route" image="first" id="PLK-Jm-UyM"/>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="9RW-dt-a4q" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="1466" y="264"/>
+ </scene>
+ <!--Route Chat-->
+ <scene sceneID="M4k-TV-RZJ">
+ <objects>
+ <viewController id="6mc-1d-hJy" userLabel="Route Chat" customClass="RouteChatViewController" sceneMemberID="viewController">
+ <layoutGuides>
+ <viewControllerLayoutGuide type="top" id="Sl7-r2-TON"/>
+ <viewControllerLayoutGuide type="bottom" id="e7m-SC-g06"/>
+ </layoutGuides>
+ <view key="view" contentMode="scaleToFill" id="c9d-af-OMP">
+ <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleToFill" text="Route Chat Demo" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" translatesAutoresizingMaskIntoConstraints="NO" id="zUL-Bo-wJt">
+ <rect key="frame" x="156" y="279" width="289" height="42"/>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+ <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="36"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="See ViewControllers.m and this app's log in XCode" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CgS-1q-Od9">
+ <rect key="frame" x="136" y="329" width="329" height="17"/>
+ <fontDescription key="fontDescription" type="system" pointSize="14"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+ <constraints>
+ <constraint firstAttribute="centerY" secondItem="zUL-Bo-wJt" secondAttribute="centerY" id="5hM-q1-ZjM"/>
+ <constraint firstItem="CgS-1q-Od9" firstAttribute="top" secondItem="zUL-Bo-wJt" secondAttribute="bottom" constant="8" symbolic="YES" id="AqI-Ra-a5O"/>
+ <constraint firstItem="CgS-1q-Od9" firstAttribute="centerX" secondItem="zUL-Bo-wJt" secondAttribute="centerX" id="K8f-KI-bc6"/>
+ <constraint firstAttribute="centerX" secondItem="zUL-Bo-wJt" secondAttribute="centerX" id="n8b-x8-Yze"/>
+ </constraints>
+ </view>
+ <tabBarItem key="tabBarItem" title="Route Chat" image="second" id="p2G-IC-yAR"/>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="yUz-se-Cfi" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="718" y="594"/>
+ </scene>
+ </scenes>
+ <resources>
+ <image name="first" width="30" height="30"/>
+ <image name="second" width="30" height="30"/>
+ </resources>
+</document>
diff --git a/examples/objective-c/route_guide/Misc/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/objective-c/route_guide/Misc/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000..36d2c80d88
--- /dev/null
+++ b/examples/objective-c/route_guide/Misc/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,68 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/Contents.json b/examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/Contents.json
new file mode 100644
index 0000000000..33a745102c
--- /dev/null
+++ b/examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "first.pdf"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/first.pdf b/examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/first.pdf
new file mode 100644
index 0000000000..47d911dea6
--- /dev/null
+++ b/examples/objective-c/route_guide/Misc/Images.xcassets/first.imageset/first.pdf
Binary files differ
diff --git a/examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/Contents.json b/examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/Contents.json
new file mode 100644
index 0000000000..03bd9c927f
--- /dev/null
+++ b/examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "second.pdf"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+} \ No newline at end of file
diff --git a/examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/second.pdf b/examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/second.pdf
new file mode 100644
index 0000000000..401614e288
--- /dev/null
+++ b/examples/objective-c/route_guide/Misc/Images.xcassets/second.imageset/second.pdf
Binary files differ
diff --git a/examples/objective-c/route_guide/Misc/Info.plist b/examples/objective-c/route_guide/Misc/Info.plist
new file mode 100644
index 0000000000..33ad4800f6
--- /dev/null
+++ b/examples/objective-c/route_guide/Misc/Info.plist
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIdentifier</key>
+ <string>gRPC.$(PRODUCT_NAME:rfc1034identifier)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>UILaunchStoryboardName</key>
+ <string>Main</string>
+ <key>UIMainStoryboardFile</key>
+ <string>Main</string>
+ <key>UIRequiredDeviceCapabilities</key>
+ <array>
+ <string>armv7</string>
+ </array>
+ <key>UIStatusBarTintParameters</key>
+ <dict>
+ <key>UINavigationBar</key>
+ <dict>
+ <key>Style</key>
+ <string>UIBarStyleDefault</string>
+ <key>Translucent</key>
+ <false/>
+ </dict>
+ </dict>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+ <key>UISupportedInterfaceOrientations~ipad</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+</dict>
+</plist>
diff --git a/examples/objective-c/route_guide/Misc/main.m b/examples/objective-c/route_guide/Misc/main.m
new file mode 100644
index 0000000000..fb701005d1
--- /dev/null
+++ b/examples/objective-c/route_guide/Misc/main.m
@@ -0,0 +1,41 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/examples/objective-c/route_guide/Podfile b/examples/objective-c/route_guide/Podfile
new file mode 100644
index 0000000000..a97f414685
--- /dev/null
+++ b/examples/objective-c/route_guide/Podfile
@@ -0,0 +1,7 @@
+source 'https://github.com/CocoaPods/Specs.git'
+platform :ios, '8.0'
+
+target 'RouteGuideClient' do
+ # Depend on the generated RouteGuide library.
+ pod 'RouteGuide', :path => '.'
+end
diff --git a/examples/objective-c/route_guide/README.md b/examples/objective-c/route_guide/README.md
new file mode 100644
index 0000000000..dd20a07995
--- /dev/null
+++ b/examples/objective-c/route_guide/README.md
@@ -0,0 +1,360 @@
+#gRPC Basics: Objective-C
+
+This tutorial provides a basic Objective-C programmer's introduction to working with gRPC. By
+walking through this example you'll learn how to:
+
+- Define a service in a .proto file.
+- Generate client code using the protocol buffer compiler.
+- Use the Objective-C gRPC API to write a simple client for your service.
+
+It assumes a passing familiarity with [protocol buffers](https://developers.google.com/protocol-buffers/docs/overview).
+Note that the example in this tutorial uses the proto3 version of the protocol buffers language,
+which is currently in alpha release: you can find out more in the [proto3 language guide](https://developers.google.com/protocol-buffers/docs/proto3)
+and see the [release notes](https://github.com/google/protobuf/releases) for the new version in the
+protocol buffers Github repository.
+
+This isn't a comprehensive guide to using gRPC in Objective-C: more reference documentation is
+coming soon.
+
+- [Why use gRPC?](#why-grpc)
+- [Example code and setup](#setup)
+- [Try it out!](#try)
+- [Defining the service](#proto)
+- [Generating client code](#protoc)
+- [Creating the client](#client)
+
+<a name="why-grpc"></a>
+## Why use gRPC?
+
+With gRPC you can define your service once in a .proto file and implement clients and servers in any
+of gRPC's supported languages, which in turn can be run in environments ranging from servers inside
+Google to your own tablet - all the complexity of communication between different languages and
+environments is handled for you by gRPC. You also get all the advantages of working with protocol
+buffers, including efficient serialization, a simple IDL, and easy interface updating.
+
+gRPC and proto3 are specially suited for mobile clients: gRPC is implemented on top of HTTP/2, which
+results in network bandwidth savings over using HTTP/1.1. Serialization and parsing of the proto
+binary format is more efficient than the equivalent JSON, resulting in CPU and battery savings. And
+proto3 uses a runtime that has been optimized over the years at Google to keep code size to a
+minimum. The latter is important in Objective-C, because the ability of the compiler to strip unused
+code is limited by the dynamic nature of the language.
+
+
+<a name="setup"></a>
+## Example code and setup
+
+The example code for our tutorial is in [examples/objective-c/route_guide](examples/objective-c/route_guide).
+To download the example, clone this repository by running the following command:
+```shell
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Then change your current directory to `examples/objective-c/route_guide`:
+```shell
+$ cd examples/objective-c/route_guide
+```
+
+Our example is a simple route mapping application that lets clients get information about features
+on their route, create a summary of their route, and exchange route information such as traffic
+updates with the server and other clients.
+
+You also should have [Cocoapods](https://cocoapods.org/#install) installed, as well as the relevant
+tools to generate the client library code (and a server in another language, for testing). You can
+obtain the latter by following [these setup instructions](https://github.com/grpc/homebrew-grpc).
+
+
+<a name="try"></a>
+## Try it out!
+
+To try the sample app, we need a gRPC server running locally. Let's compile and run, for example,
+the C++ server in this repository:
+
+```shell
+$ pushd ../../cpp/route_guide
+$ make
+$ ./route_guide_server &
+$ popd
+```
+
+Now have Cocoapods generate and install the client library for our .proto files:
+
+```shell
+$ pod install
+```
+
+(This might have to compile OpenSSL, which takes around 15 minutes if Cocoapods doesn't have it yet
+on your computer's cache).
+
+Finally, open the XCode workspace created by Cocoapods, and run the app. You can check the calling
+code in `ViewControllers.m` and see the results in XCode's log console.
+
+The next sections guide you step-by-step through how this proto service is defined, how to generate
+a client library from it, and how to create an app that uses that library.
+
+
+<a name="proto"></a>
+## Defining the service
+
+First let's look at how the service we're using is defined. A gRPC *service* and its method
+*request* and *response* types using [protocol buffers](https://developers.google.com/protocol-buffers/docs/overview).
+You can see the complete .proto file for our example in [`examples/protos/route_guide.proto`](examples/protos/route_guide.proto).
+
+To define a service, you specify a named `service` in your .proto file:
+
+```protobuf
+service RouteGuide {
+ ...
+}
+```
+
+Then you define `rpc` methods inside your service definition, specifying their request and response
+types. Protocol buffers let you define four kinds of service method, all of which are used in the
+`RouteGuide` service:
+
+- A *simple RPC* where the client sends a request to the server and receives a response later, just
+like a normal remote procedure call.
+```protobuf
+ // Obtains the feature at a given position.
+ rpc GetFeature(Point) returns (Feature) {}
+```
+
+- A *response-streaming RPC* where the client sends a request to the server and gets back a stream
+of response messages. You specify a response-streaming method by placing the `stream` keyword before
+the *response* type.
+```protobuf
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+```
+
+- A *request-streaming RPC* where the client sends a sequence of messages to the server. Once the
+client has finished writing the messages, it waits for the server to read them all and return its
+response. You specify a request-streaming method by placing the `stream` keyword before the
+*request* type.
+```protobuf
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+```
+
+- A *bidirectional streaming RPC* where both sides send a sequence of messages to the other. The two
+streams operate independently, so clients and servers can read and write in whatever order they
+like: for example, the server could wait to receive all the client messages before writing its
+responses, or it could alternately read a message then write a message, or some other combination of
+reads and writes. The order of messages in each stream is preserved. You specify this type of method
+by placing the `stream` keyword before both the request and the response.
+```protobuf
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+```
+
+Our .proto file also contains protocol buffer message type definitions for all the request and
+response types used in our service methods - for example, here's the `Point` message type:
+```protobuf
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ int32 latitude = 1;
+ int32 longitude = 2;
+}
+```
+
+You can specify a prefix to be used for your generated classes by adding the `objc_class_prefix`
+option at the top of the file. For example:
+```protobuf
+option objc_class_prefix = "RTG";
+```
+
+
+<a name="protoc"></a>
+## Generating client code
+
+Next we need to generate the gRPC client interfaces from our .proto service definition. We do this
+using the protocol buffer compiler (`protoc`) with a special gRPC Objective-C plugin.
+
+For simplicity, we've provided a [Podspec file](examples/objective-c/route_guide/RouteGuide.podspec)
+that runs `protoc` for you with the appropriate plugin, input, and output, and describes how to
+compile the generated files. You just need to run in this directory (`examples/objective-c/route_guide`):
+
+```shell
+$ pod install
+```
+
+which, before installing the generated library in the XCode project of this sample, runs:
+
+```shell
+$ protoc -I ../../protos --objc_out=Pods/RouteGuide --objcgrpc_out=Pods/RouteGuide ../../protos/route_guide.proto
+```
+
+Running this command generates the following files under `Pods/RouteGuide/`:
+- `RouteGuide.pbobjc.h`, the header which declares your generated message classes.
+- `RouteGuide.pbobjc.m`, which contains the implementation of your message classes.
+- `RouteGuide.pbrpc.h`, the header which declares your generated service classes.
+- `RouteGuide.pbrpc.m`, which contains the implementation of your service classes.
+
+These contain:
+- All the protocol buffer code to populate, serialize, and retrieve our request and response message
+types.
+- A class called `RTGRouteGuide` that lets clients call the methods defined in the `RouteGuide`
+service.
+
+You can also use the provided Podspec file to generate client code from any other proto service
+definition; just replace the name (matching the file name), version, and other metadata.
+
+
+<a name="client"></a>
+## Creating the client
+
+In this section, we'll look at creating an Objective-C client for our `RouteGuide` service. You can
+see our complete example client code in [examples/objective-c/route_guide/ViewControllers.m](examples/objective-c/route_guide/ViewControllers.m).
+(Note: In your apps, for maintainability and readability reasons, you shouldn't put all of your view
+controllers in a single file; it's done here only to simplify the learning process).
+
+### Constructing a client object
+
+To call service methods, we first need to create a client object, an instance of the generated
+`RTGRouteGuide` class. The designated initializer of the class expects a `NSString *` with the
+server address and port we want to connect to:
+
+```objective-c
+#import <RouteGuide/RouteGuide.pbrpc.h>
+
+static NSString * const kHostAddress = @"http://localhost:50051";
+
+...
+
+RTGRouteGuide *client = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
+```
+
+Notice that we've specified the HTTP scheme in the host address. This is because the server we will
+be using to test our client doesn't use [TLS](http://en.wikipedia.org/wiki/Transport_Layer_Security).
+This is fine because it will be running locally on our development machine. The most common case,
+though, is connecting with a gRPC server on the internet, running gRPC over TLS. For that case, the
+HTTPS scheme can be specified (or no scheme at all, as HTTPS is the default value). The default
+value of the port is that of the scheme selected: 443 for HTTPS and 80 for HTTP.
+
+
+### Calling service methods
+
+Now let's look at how we call our service methods. As you will see, all these methods are
+asynchronous, so you can call them from the main thread of your app without worrying about freezing
+your UI or the OS killing your app.
+
+#### Simple RPC
+
+Calling the simple RPC `GetFeature` is nearly as straightforward as calling any other asynchronous
+method on Cocoa.
+
+```objective-c
+RTGPoint *point = [RTGPoint message];
+point.latitude = 40E7;
+point.longitude = -74E7;
+
+[client getFeatureWithRequest:point handler:^(RTGFeature *response, NSError *error) {
+ if (response) {
+ // Successful response received
+ } else {
+ // RPC error
+ }
+}];
+```
+
+As you can see, we create and populate a request protocol buffer object (in our case `RTGPoint`).
+Then, we call the method on the client object, passing it the request, and a block to handle the
+response (or any RPC error). If the RPC finishes successfully, the handler block is called with a
+`nil` error argument, and we can read the response information from the server from the response
+argument. If, instead, some RPC error happens, the handler block is called with a `nil` response
+argument, and we can read the details of the problem from the error argument.
+
+```objective-c
+NSLog(@"Found feature called %@ at %@.", response.name, response.location);
+```
+
+#### Streaming RPCs
+
+Now let's look at our streaming methods. Here's where we call the response-streaming method
+`ListFeatures`, which results in our client receiving a stream of geographical `RTGFeature`s:
+
+```objective-c
+[client listFeaturesWithRequest:rectangle
+ eventHandler:^(BOOL done, RTGFeature *response, NSError *error) {
+ if (response) {
+ // Element of the stream of responses received
+ } else if (error) {
+ // RPC error; the stream is over.
+ }
+ if (done) {
+ // The stream is over (all the responses were received, or an error occured). Do any cleanup.
+ }
+}];
+```
+
+Notice how the signature of the `eventHandler` block now includes a `BOOL done` parameter. The
+`eventHandler` block can be called any number of times; only on the last call is the `done` argument
+value set to `YES`. If an error occurs, the RPC finishes and the block is called with the arguments
+`(YES, nil, error)`.
+
+The request-streaming method `RecordRoute` expects a stream of `RTGPoint`s from the cient. This
+stream is passed to the method as an object of class `GRXWriter`. The simplest way to create one is
+to initialize one from a `NSArray` object:
+
+
+```objective-c
+#import <RxLibrary/GRXWriter+Immediate.h>
+
+...
+
+RTGPoint *point1 = [RTGPoint message];
+point.latitude = 40E7;
+point.longitude = -74E7;
+
+RTGPoint *point2 = [RTGPoint message];
+point.latitude = 40E7;
+point.longitude = -74E7;
+
+GRXWriter *locationsWriter = [GRXWriter writerWithContainer:@[point1, point2]];
+
+[client recordRouteWithRequestsWriter:locationsWriter
+ handler:^(RTGRouteSummary *response, NSError *error) {
+ if (response) {
+ NSLog(@"Finished trip with %i points", response.pointCount);
+ NSLog(@"Passed %i features", response.featureCount);
+ NSLog(@"Travelled %i meters", response.distance);
+ NSLog(@"It took %i seconds", response.elapsedTime);
+ } else {
+ NSLog(@"RPC error: %@", error);
+ }
+}];
+
+```
+
+The `GRXWriter` class is generic enough to allow for asynchronous streams, streams of future values,
+or even infinite streams.
+
+Finally, let's look at our bidirectional streaming RPC `RouteChat()`. The way to call a
+bidirectional streaming RPC is just a combination of how to call request-streaming RPCs and
+response-streaming RPCs.
+
+```objective-c
+[client routeChatWithRequestsWriter:notesWriter
+ eventHandler:^(BOOL done, RTGRouteNote *note, NSError *error) {
+ if (note) {
+ NSLog(@"Got message %@ at %@", note.message, note.location);
+ } else if (error) {
+ NSLog(@"RPC error: %@", error);
+ }
+ if (done) {
+ NSLog(@"Chat ended.");
+ }
+}];
+```
+
+The semantics for the handler block and the `GRXWriter` argument here are exactly the same as for
+our request-streaming and response-streaming methods. Although both client and server will always
+get the other's messages in the order they were written, the two streams operate completely
+independently.
diff --git a/examples/objective-c/route_guide/RouteGuide.podspec b/examples/objective-c/route_guide/RouteGuide.podspec
new file mode 100644
index 0000000000..7b99a6c6a7
--- /dev/null
+++ b/examples/objective-c/route_guide/RouteGuide.podspec
@@ -0,0 +1,35 @@
+Pod::Spec.new do |s|
+ s.name = "RouteGuide"
+ s.version = "0.0.1"
+ s.license = "New BSD"
+
+ s.ios.deployment_target = "6.0"
+ s.osx.deployment_target = "10.8"
+
+ # Base directory where the .proto files are.
+ src = "../../protos"
+
+ # Directory where the generated files will be place.
+ dir = "Pods/" + s.name
+
+ # Run protoc with the Objective-C and gRPC plugins to generate protocol messages and gRPC clients.
+ s.prepare_command = <<-CMD
+ mkdir -p #{dir}
+ protoc -I #{src} --objc_out=#{dir} --objcgrpc_out=#{dir} #{src}/route_guide.proto
+ CMD
+
+ s.subspec "Messages" do |ms|
+ ms.source_files = "#{dir}/*.pbobjc.{h,m}", "#{dir}/**/*.pbobjc.{h,m}"
+ ms.header_mappings_dir = dir
+ ms.requires_arc = false
+ ms.dependency "Protobuf", "~> 3.0.0-alpha-3"
+ end
+
+ s.subspec "Services" do |ss|
+ ss.source_files = "#{dir}/*.pbrpc.{h,m}", "#{dir}/**/*.pbrpc.{h,m}"
+ ss.header_mappings_dir = dir
+ ss.requires_arc = true
+ ss.dependency "gRPC", "~> 0.6"
+ ss.dependency "#{s.name}/Messages"
+ end
+end
diff --git a/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.pbxproj b/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..6ab6b27a1b
--- /dev/null
+++ b/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.pbxproj
@@ -0,0 +1,366 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 124E20A2FC8EAE54460D4ED2 /* libPods-RouteGuideClient.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 71CEE03D66D40FC37264D6E4 /* libPods-RouteGuideClient.a */; };
+ 632527831B1D0396003073D9 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 632527821B1D0396003073D9 /* main.m */; };
+ 632527861B1D0396003073D9 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 632527851B1D0396003073D9 /* AppDelegate.m */; };
+ 6325278F1B1D0396003073D9 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6325278D1B1D0396003073D9 /* Main.storyboard */; };
+ 632527911B1D0396003073D9 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 632527901B1D0396003073D9 /* Images.xcassets */; };
+ 6367B55B1B223AFA008861F5 /* route_guide_db.json in Resources */ = {isa = PBXBuildFile; fileRef = 6367B55A1B223AFA008861F5 /* route_guide_db.json */; };
+ 63A6015C1B1DAB5000FA5B86 /* ViewControllers.m in Sources */ = {isa = PBXBuildFile; fileRef = 63A6015B1B1DAB5000FA5B86 /* ViewControllers.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 6325277D1B1D0396003073D9 /* RouteGuideClient.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RouteGuideClient.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 632527811B1D0396003073D9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+ 632527821B1D0396003073D9 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+ 632527841B1D0396003073D9 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
+ 632527851B1D0396003073D9 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
+ 6325278E1B1D0396003073D9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+ 632527901B1D0396003073D9 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
+ 6367B55A1B223AFA008861F5 /* route_guide_db.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = route_guide_db.json; sourceTree = "<group>"; };
+ 63A6015B1B1DAB5000FA5B86 /* ViewControllers.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewControllers.m; sourceTree = "<group>"; };
+ 71CEE03D66D40FC37264D6E4 /* libPods-RouteGuideClient.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RouteGuideClient.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ ADA4C647BAE906F79AD9A45E /* Pods-RouteGuideClient.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RouteGuideClient.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RouteGuideClient/Pods-RouteGuideClient.debug.xcconfig"; sourceTree = "<group>"; };
+ C83C5A54D1A4EA07569F1AED /* Pods-RouteGuideClient.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RouteGuideClient.release.xcconfig"; path = "Pods/Target Support Files/Pods-RouteGuideClient/Pods-RouteGuideClient.release.xcconfig"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 6325277A1B1D0395003073D9 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 124E20A2FC8EAE54460D4ED2 /* libPods-RouteGuideClient.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 56849C29DC376BF4B902CD77 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ ADA4C647BAE906F79AD9A45E /* Pods-RouteGuideClient.debug.xcconfig */,
+ C83C5A54D1A4EA07569F1AED /* Pods-RouteGuideClient.release.xcconfig */,
+ );
+ name = Pods;
+ sourceTree = "<group>";
+ };
+ 631C63891B1DBC41001295D5 /* Misc */ = {
+ isa = PBXGroup;
+ children = (
+ 632527841B1D0396003073D9 /* AppDelegate.h */,
+ 632527851B1D0396003073D9 /* AppDelegate.m */,
+ 632527901B1D0396003073D9 /* Images.xcassets */,
+ 632527801B1D0396003073D9 /* Supporting Files */,
+ );
+ path = Misc;
+ sourceTree = "<group>";
+ };
+ 632527741B1D0395003073D9 = {
+ isa = PBXGroup;
+ children = (
+ 6325277F1B1D0396003073D9 /* RouteGuideClient */,
+ 6325277E1B1D0396003073D9 /* Products */,
+ 56849C29DC376BF4B902CD77 /* Pods */,
+ 7482B8A18481F7B13ADE4530 /* Frameworks */,
+ );
+ sourceTree = "<group>";
+ };
+ 6325277E1B1D0396003073D9 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 6325277D1B1D0396003073D9 /* RouteGuideClient.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ 6325277F1B1D0396003073D9 /* RouteGuideClient */ = {
+ isa = PBXGroup;
+ children = (
+ 63A6015B1B1DAB5000FA5B86 /* ViewControllers.m */,
+ 6367B55A1B223AFA008861F5 /* route_guide_db.json */,
+ 6325278D1B1D0396003073D9 /* Main.storyboard */,
+ 631C63891B1DBC41001295D5 /* Misc */,
+ );
+ name = RouteGuideClient;
+ sourceTree = SOURCE_ROOT;
+ };
+ 632527801B1D0396003073D9 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 632527811B1D0396003073D9 /* Info.plist */,
+ 632527821B1D0396003073D9 /* main.m */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ 7482B8A18481F7B13ADE4530 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 71CEE03D66D40FC37264D6E4 /* libPods-RouteGuideClient.a */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 6325277C1B1D0395003073D9 /* RouteGuideClient */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 632527A31B1D0396003073D9 /* Build configuration list for PBXNativeTarget "RouteGuideClient" */;
+ buildPhases = (
+ C6FC30AD2376EC04317237C5 /* Check Pods Manifest.lock */,
+ 632527791B1D0395003073D9 /* Sources */,
+ 6325277A1B1D0395003073D9 /* Frameworks */,
+ 6325277B1B1D0395003073D9 /* Resources */,
+ FFE0BCF30339E7A50A989EAB /* Copy Pods Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = RouteGuideClient;
+ productName = RouteGuideClient;
+ productReference = 6325277D1B1D0396003073D9 /* RouteGuideClient.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 632527751B1D0395003073D9 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0630;
+ ORGANIZATIONNAME = gRPC;
+ TargetAttributes = {
+ 6325277C1B1D0395003073D9 = {
+ CreatedOnToolsVersion = 6.3.1;
+ };
+ };
+ };
+ buildConfigurationList = 632527781B1D0395003073D9 /* Build configuration list for PBXProject "RouteGuideClient" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 632527741B1D0395003073D9;
+ productRefGroup = 6325277E1B1D0396003073D9 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 6325277C1B1D0395003073D9 /* RouteGuideClient */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 6325277B1B1D0395003073D9 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6325278F1B1D0396003073D9 /* Main.storyboard in Resources */,
+ 632527911B1D0396003073D9 /* Images.xcassets in Resources */,
+ 6367B55B1B223AFA008861F5 /* route_guide_db.json in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ C6FC30AD2376EC04317237C5 /* Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Check Pods Manifest.lock";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
+ showEnvVarsInLog = 0;
+ };
+ FFE0BCF30339E7A50A989EAB /* Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Copy Pods Resources";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RouteGuideClient/Pods-RouteGuideClient-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 632527791B1D0395003073D9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 632527861B1D0396003073D9 /* AppDelegate.m in Sources */,
+ 632527831B1D0396003073D9 /* main.m in Sources */,
+ 63A6015C1B1DAB5000FA5B86 /* ViewControllers.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 6325278D1B1D0396003073D9 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 6325278E1B1D0396003073D9 /* Base */,
+ );
+ name = Main.storyboard;
+ path = Misc;
+ sourceTree = "<group>";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 632527A11B1D0396003073D9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.3;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 632527A21B1D0396003073D9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.3;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 632527A41B1D0396003073D9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = ADA4C647BAE906F79AD9A45E /* Pods-RouteGuideClient.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ INFOPLIST_FILE = Misc/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 632527A51B1D0396003073D9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = C83C5A54D1A4EA07569F1AED /* Pods-RouteGuideClient.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ INFOPLIST_FILE = Misc/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 632527781B1D0395003073D9 /* Build configuration list for PBXProject "RouteGuideClient" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 632527A11B1D0396003073D9 /* Debug */,
+ 632527A21B1D0396003073D9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 632527A31B1D0396003073D9 /* Build configuration list for PBXNativeTarget "RouteGuideClient" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 632527A41B1D0396003073D9 /* Debug */,
+ 632527A51B1D0396003073D9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 632527751B1D0395003073D9 /* Project object */;
+}
diff --git a/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000000..f208589e44
--- /dev/null
+++ b/examples/objective-c/route_guide/RouteGuideClient.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+ version = "1.0">
+ <FileRef
+ location = "self:RouteGuideClient.xcodeproj">
+ </FileRef>
+</Workspace>
diff --git a/examples/objective-c/route_guide/ViewControllers.m b/examples/objective-c/route_guide/ViewControllers.m
new file mode 100644
index 0000000000..cfc3338bca
--- /dev/null
+++ b/examples/objective-c/route_guide/ViewControllers.m
@@ -0,0 +1,228 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#import <UIKit/UIKit.h>
+#import <RouteGuide/RouteGuide.pbrpc.h>
+#import <RxLibrary/GRXWriter+Immediate.h>
+#import <RxLibrary/GRXWriter+Transformations.h>
+
+static NSString * const kHostAddress = @"http://localhost:50051";
+
+// Category to override RTGPoint's description.
+@interface RTGPoint (Description)
+- (NSString *)description;
+@end
+
+@implementation RTGPoint (Description)
+- (NSString *)description {
+ NSString *verticalDirection = self.latitude >= 0 ? @"N" : @"S";
+ NSString *horizontalDirection = self.longitude >= 0 ? @"E" : @"W";
+ return [NSString stringWithFormat:@"%.02f%@ %.02f%@",
+ abs(self.latitude) / 1E7f, verticalDirection,
+ abs(self.longitude) / 1E7f, horizontalDirection];
+}
+@end
+
+// Category to give RTGRouteNote a convenience constructor.
+@interface RTGRouteNote (Constructors)
++ (instancetype)noteWithMessage:(NSString *)message
+ latitude:(float)latitude
+ longitude:(float)longitude;
+@end
+
+@implementation RTGRouteNote (Constructors)
++ (instancetype)noteWithMessage:(NSString *)message
+ latitude:(float)latitude
+ longitude:(float)longitude {
+ RTGRouteNote *note = [self message];
+ note.message = message;
+ note.location.latitude = (int32_t) latitude * 1E7;
+ note.location.longitude = (int32_t) longitude * 1E7;
+ return note;
+}
+@end
+
+
+#pragma mark Demo: Get Feature
+
+// Run the getFeature demo. Calls getFeature with a point known to have a feature and a point known
+// not to have a feature.
+
+@interface GetFeatureViewController : UIViewController
+@end
+
+@implementation GetFeatureViewController
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+
+ RTGRouteGuide *client = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
+
+ void (^handler)(RTGFeature *response, NSError *error) = ^(RTGFeature *response, NSError *error) {
+ if (response.name.length) {
+ NSLog(@"Found feature called %@ at %@.", response.name, response.location);
+ } else if (response) {
+ NSLog(@"Found no features at %@", response.location);
+ } else {
+ NSLog(@"RPC error: %@", error);
+ }
+ };
+
+ RTGPoint *point = [RTGPoint message];
+ point.latitude = 409146138;
+ point.longitude = -746188906;
+
+ [client getFeatureWithRequest:point handler:handler];
+ [client getFeatureWithRequest:[RTGPoint message] handler:handler];
+}
+
+@end
+
+
+#pragma mark Demo: List Features
+
+// Run the listFeatures demo. Calls listFeatures with a rectangle containing all of the features in
+// the pre-generated database. Prints each response as it comes in.
+
+@interface ListFeaturesViewController : UIViewController
+@end
+
+@implementation ListFeaturesViewController
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+
+ RTGRouteGuide *client = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
+
+ RTGRectangle *rectangle = [RTGRectangle message];
+ rectangle.lo.latitude = 405E6;
+ rectangle.lo.longitude = -750E6;
+ rectangle.hi.latitude = 410E6;
+ rectangle.hi.longitude = -745E6;
+
+ NSLog(@"Looking for features between %@ and %@", rectangle.lo, rectangle.hi);
+ [client listFeaturesWithRequest:rectangle
+ eventHandler:^(BOOL done, RTGFeature *response, NSError *error) {
+ if (response) {
+ NSLog(@"Found feature at %@ called %@.", response.location, response.name);
+ } else if (error) {
+ NSLog(@"RPC error: %@", error);
+ }
+ }];
+}
+
+@end
+
+
+#pragma mark Demo: Record Route
+
+// Run the recordRoute demo. Sends several randomly chosen points from the pre-generated feature
+// database with a variable delay in between. Prints the statistics when they are sent from the
+// server.
+
+@interface RecordRouteViewController : UIViewController
+@end
+
+@implementation RecordRouteViewController
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+
+ NSString *dataBasePath = [NSBundle.mainBundle pathForResource:@"route_guide_db"
+ ofType:@"json"];
+ NSData *dataBaseContent = [NSData dataWithContentsOfFile:dataBasePath];
+ NSArray *features = [NSJSONSerialization JSONObjectWithData:dataBaseContent options:0 error:NULL];
+
+ GRXWriter *locations = [[GRXWriter writerWithContainer:features] map:^id(id feature) {
+ RTGPoint *location = [RTGPoint message];
+ location.longitude = [((NSNumber *) feature[@"location"][@"longitude"]) intValue];
+ location.latitude = [((NSNumber *) feature[@"location"][@"latitude"]) intValue];
+ NSLog(@"Visiting point %@", location);
+ return location;
+ }];
+
+ RTGRouteGuide *client = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
+
+ [client recordRouteWithRequestsWriter:locations handler:^(RTGRouteSummary *response, NSError *error) {
+ if (response) {
+ NSLog(@"Finished trip with %i points", response.pointCount);
+ NSLog(@"Passed %i features", response.featureCount);
+ NSLog(@"Travelled %i meters", response.distance);
+ NSLog(@"It took %i seconds", response.elapsedTime);
+ } else {
+ NSLog(@"RPC error: %@", error);
+ }
+ }];
+}
+
+@end
+
+
+#pragma mark Demo: Route Chat
+
+// Run the routeChat demo. Send some chat messages, and print any chat messages that are sent from
+// the server.
+
+@interface RouteChatViewController : UIViewController
+@end
+
+@implementation RouteChatViewController
+
+- (void)viewDidLoad {
+ [super viewDidLoad];
+
+ NSArray *notes = @[[RTGRouteNote noteWithMessage:@"First message" latitude:0 longitude:0],
+ [RTGRouteNote noteWithMessage:@"Second message" latitude:0 longitude:1],
+ [RTGRouteNote noteWithMessage:@"Third message" latitude:1 longitude:0],
+ [RTGRouteNote noteWithMessage:@"Fourth message" latitude:0 longitude:0]];
+ GRXWriter *notesWriter = [[GRXWriter writerWithContainer:notes] map:^id(RTGRouteNote *note) {
+ NSLog(@"Sending message %@ at %@", note.message, note.location);
+ return note;
+ }];
+
+ RTGRouteGuide *client = [[RTGRouteGuide alloc] initWithHost:kHostAddress];
+
+ [client routeChatWithRequestsWriter:notesWriter
+ eventHandler:^(BOOL done, RTGRouteNote *note, NSError *error) {
+ if (note) {
+ NSLog(@"Got message %@ at %@", note.message, note.location);
+ } else if (error) {
+ NSLog(@"RPC error: %@", error);
+ }
+ if (done) {
+ NSLog(@"Chat ended.");
+ }
+ }];
+}
+
+@end
diff --git a/examples/objective-c/route_guide/route_guide_db.json b/examples/objective-c/route_guide/route_guide_db.json
new file mode 100644
index 0000000000..9caebaa433
--- /dev/null
+++ b/examples/objective-c/route_guide/route_guide_db.json
@@ -0,0 +1,121 @@
+[{
+ "location": {
+ "latitude": 407838351,
+ "longitude": -746143763
+ },
+ "name": "Patriots Path, Mendham, NJ 07945, USA"
+}, {
+ "location": {
+ "latitude": 408122808,
+ "longitude": -743999179
+ },
+ "name": "101 New Jersey 10, Whippany, NJ 07981, USA"
+}, {
+ "location": {
+ "latitude": 413628156,
+ "longitude": -749015468
+ },
+ "name": "U.S. 6, Shohola, PA 18458, USA"
+}, {
+ "location": {
+ "latitude": 419999544,
+ "longitude": -740371136
+ },
+ "name": "5 Conners Road, Kingston, NY 12401, USA"
+}, {
+ "location": {
+ "latitude": 414008389,
+ "longitude": -743951297
+ },
+ "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA"
+}, {
+ "location": {
+ "latitude": 419611318,
+ "longitude": -746524769
+ },
+ "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA"
+}, {
+ "location": {
+ "latitude": 406109563,
+ "longitude": -742186778
+ },
+ "name": "4001 Tremley Point Road, Linden, NJ 07036, USA"
+}, {
+ "location": {
+ "latitude": 416802456,
+ "longitude": -742370183
+ },
+ "name": "352 South Mountain Road, Wallkill, NY 12589, USA"
+}, {
+ "location": {
+ "latitude": 412950425,
+ "longitude": -741077389
+ },
+ "name": "Bailey Turn Road, Harriman, NY 10926, USA"
+}, {
+ "location": {
+ "latitude": 412144655,
+ "longitude": -743949739
+ },
+ "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA"
+}, {
+ "location": {
+ "latitude": 404306372,
+ "longitude": -741079661
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 403966326,
+ "longitude": -748519297
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 405002031,
+ "longitude": -748407866
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 409532885,
+ "longitude": -742200683
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 416851321,
+ "longitude": -742674555
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 406411633,
+ "longitude": -741722051
+ },
+ "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA"
+}, {
+ "location": {
+ "latitude": 413069058,
+ "longitude": -744597778
+ },
+ "name": "261 Van Sickle Road, Goshen, NY 10924, USA"
+}, {
+ "location": {
+ "latitude": 418465462,
+ "longitude": -746859398
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411733222,
+ "longitude": -744228360
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 410248224,
+ "longitude": -747127767
+ },
+ "name": "3 Hasta Way, Newton, NJ 07860, USA"
+}]
diff --git a/examples/php/.gitignore b/examples/php/.gitignore
new file mode 100644
index 0000000000..d8a7996ab3
--- /dev/null
+++ b/examples/php/.gitignore
@@ -0,0 +1,2 @@
+composer.lock
+vendor/
diff --git a/examples/php/README.md b/examples/php/README.md
new file mode 100644
index 0000000000..5c327f10fa
--- /dev/null
+++ b/examples/php/README.md
@@ -0,0 +1,64 @@
+gRPC in 3 minutes (PHP)
+===========================
+
+PREREQUISITES
+-------------
+
+This requires PHP 5.5 or greater.
+
+INSTALL
+-------
+ - On Mac OS X, install [homebrew][]. On Linux, install [linuxbrew][]. Run the following command to install gRPC.
+
+ ```sh
+ $ curl -fsSL https://goo.gl/getgrpc | bash -s php
+ ```
+ This will download and run the [gRPC install script][] and compile the gRPC PHP extension.
+
+ - Clone this repository
+
+ ```sh
+ $ git clone https://github.com/grpc/grpc.git
+ ```
+
+ - Install composer
+
+ ```
+ $ cd examples/php
+ $ curl -sS https://getcomposer.org/installer | php
+ $ php composer.phar install
+ ```
+
+TRY IT!
+-------
+
+ - Run the server
+
+ Please follow the instruction in [Node][] to run the server
+ ```
+ $ cd examples/node
+ $ nodejs greeter_server.js
+ ```
+
+ - Run the client
+
+ ```
+ $ cd examples/php
+ $ ./run_greeter_client.sh
+ ```
+
+NOTE
+----
+
+This directory has a copy of `helloworld.proto` because it currently depends on
+some Protocol Buffer 2.0 syntax. There is no proto3 support for PHP yet.
+
+TUTORIAL
+--------
+
+Coming soon
+
+[homebrew]:http://brew.sh
+[linuxbrew]:https://github.com/Homebrew/linuxbrew#installation
+[gRPC install script]:https://raw.githubusercontent.com/grpc/homebrew-grpc/master/scripts/install
+[Node]:https://github.com/grpc/grpc/tree/master/examples/node
diff --git a/examples/php/composer.json b/examples/php/composer.json
new file mode 100644
index 0000000000..f0ce3a2aff
--- /dev/null
+++ b/examples/php/composer.json
@@ -0,0 +1,17 @@
+{
+ "repositories": [
+ {
+ "type": "vcs",
+ "url": "https://github.com/stanley-cheung/Protobuf-PHP"
+ }
+ ],
+ "name": "grpc/grpc-demo",
+ "description": "gRPC example for PHP",
+ "minimum-stability": "dev",
+ "require": {
+ "php": ">=5.5.0",
+ "datto/protobuf-php": "dev-master",
+ "google/auth": "dev-master",
+ "grpc/grpc": "dev-master"
+ }
+}
diff --git a/examples/php/greeter_client.php b/examples/php/greeter_client.php
new file mode 100644
index 0000000000..8ae19ae46c
--- /dev/null
+++ b/examples/php/greeter_client.php
@@ -0,0 +1,49 @@
+<?php
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+require dirname(__FILE__) . '/vendor/autoload.php';
+require dirname(__FILE__) . '/helloworld.php';
+
+function greet($name) {
+ $client = new helloworld\GreeterClient(
+ new Grpc\BaseStub('localhost:50051', []));
+ $request = new helloworld\HelloRequest();
+ $request->setName($name);
+ list($reply, $status) = $client->SayHello($request)->wait();
+ $message = $reply->getMessage();
+ return $message;
+}
+
+$name = !empty($argv[1]) ? $argv[1] : 'world';
+print(greet($name)."\n");
diff --git a/examples/php/helloworld.php b/examples/php/helloworld.php
new file mode 100644
index 0000000000..22da3d3970
--- /dev/null
+++ b/examples/php/helloworld.php
@@ -0,0 +1,160 @@
+<?php
+// DO NOT EDIT! Generated by Protobuf-PHP protoc plugin 1.0
+// Source: helloworld.proto
+// Date: 2015-05-29 21:39:19
+
+namespace helloworld {
+
+ class HelloRequest extends \DrSlump\Protobuf\Message {
+
+ /** @var string */
+ public $name = null;
+
+
+ /** @var \Closure[] */
+ protected static $__extensions = array();
+
+ public static function descriptor()
+ {
+ $descriptor = new \DrSlump\Protobuf\Descriptor(__CLASS__, 'helloworld.HelloRequest');
+
+ // OPTIONAL STRING name = 1
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 1;
+ $f->name = "name";
+ $f->type = \DrSlump\Protobuf::TYPE_STRING;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $descriptor->addField($f);
+
+ foreach (self::$__extensions as $cb) {
+ $descriptor->addField($cb(), true);
+ }
+
+ return $descriptor;
+ }
+
+ /**
+ * Check if <name> has a value
+ *
+ * @return boolean
+ */
+ public function hasName(){
+ return $this->_has(1);
+ }
+
+ /**
+ * Clear <name> value
+ *
+ * @return \helloworld\HelloRequest
+ */
+ public function clearName(){
+ return $this->_clear(1);
+ }
+
+ /**
+ * Get <name> value
+ *
+ * @return string
+ */
+ public function getName(){
+ return $this->_get(1);
+ }
+
+ /**
+ * Set <name> value
+ *
+ * @param string $value
+ * @return \helloworld\HelloRequest
+ */
+ public function setName( $value){
+ return $this->_set(1, $value);
+ }
+ }
+}
+
+namespace helloworld {
+
+ class HelloReply extends \DrSlump\Protobuf\Message {
+
+ /** @var string */
+ public $message = null;
+
+
+ /** @var \Closure[] */
+ protected static $__extensions = array();
+
+ public static function descriptor()
+ {
+ $descriptor = new \DrSlump\Protobuf\Descriptor(__CLASS__, 'helloworld.HelloReply');
+
+ // OPTIONAL STRING message = 1
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 1;
+ $f->name = "message";
+ $f->type = \DrSlump\Protobuf::TYPE_STRING;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $descriptor->addField($f);
+
+ foreach (self::$__extensions as $cb) {
+ $descriptor->addField($cb(), true);
+ }
+
+ return $descriptor;
+ }
+
+ /**
+ * Check if <message> has a value
+ *
+ * @return boolean
+ */
+ public function hasMessage(){
+ return $this->_has(1);
+ }
+
+ /**
+ * Clear <message> value
+ *
+ * @return \helloworld\HelloReply
+ */
+ public function clearMessage(){
+ return $this->_clear(1);
+ }
+
+ /**
+ * Get <message> value
+ *
+ * @return string
+ */
+ public function getMessage(){
+ return $this->_get(1);
+ }
+
+ /**
+ * Set <message> value
+ *
+ * @param string $value
+ * @return \helloworld\HelloReply
+ */
+ public function setMessage( $value){
+ return $this->_set(1, $value);
+ }
+ }
+}
+
+namespace helloworld {
+
+ class GreeterClient{
+
+ private $rpc_impl;
+
+ public function __construct($rpc_impl) {
+ $this->rpc_impl = $rpc_impl;
+ }
+ /**
+ * @param helloworld\HelloRequest $input
+ */
+ public function SayHello(\helloworld\HelloRequest $argument, $metadata = array()) {
+ return $this->rpc_impl->_simpleRequest('/helloworld.Greeter/SayHello', $argument, '\helloworld\HelloReply::deserialize', $metadata);
+ }
+ }
+}
diff --git a/examples/php/helloworld.proto b/examples/php/helloworld.proto
new file mode 100644
index 0000000000..ad8f7a1524
--- /dev/null
+++ b/examples/php/helloworld.proto
@@ -0,0 +1,50 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto2";
+
+option java_package = "ex.grpc";
+
+package helloworld;
+
+// The greeting service definition.
+service Greeter {
+ // Sends a greeting
+ rpc SayHello (HelloRequest) returns (HelloReply) {}
+}
+
+// The request message containing the user's name.
+message HelloRequest {
+ optional string name = 1;
+}
+
+// The response message containing the greetings
+message HelloReply {
+ optional string message = 1;
+}
diff --git a/examples/php/route_guide/README.md b/examples/php/route_guide/README.md
new file mode 100644
index 0000000000..e5230ae4e4
--- /dev/null
+++ b/examples/php/route_guide/README.md
@@ -0,0 +1,262 @@
+#gRPC Basics: PHP
+
+This tutorial provides a basic PHP programmer's introduction to working with gRPC. By walking through this example you'll learn how to:
+
+- Define a service in a .proto file.
+- Generate client code using the protocol buffer compiler.
+- Use the PHP gRPC API to write a simple client for your service.
+
+It assumes a passing familiarity with [protocol buffers](https://developers.google.com/protocol-buffers/docs/overview). Note that the example in this tutorial uses the proto2 version of the protocol buffers language.
+
+Also note that currently you can only create clients in PHP for gRPC services - you can find out how to create gRPC servers in our other tutorials, e.g. [Node.js](examples/node/route_guide).
+
+This isn't a comprehensive guide to using gRPC in PHP: more reference documentation is coming soon.
+
+- [Why use gRPC?](#why-grpc)
+- [Example code and setup](#setup)
+- [Try it out!](#try)
+- [Defining the service](#proto)
+- [Generating client code](#protoc)
+- [Creating the client](#client)
+
+
+<a name="why-grpc"></a>
+## Why use gRPC?
+
+With gRPC you can define your service once in a .proto file and implement clients and servers in any of gRPC's supported languages, which in turn can be run in environments ranging from servers inside Google to your own tablet - all the complexity of communication between different languages and environments is handled for you by gRPC. You also get all the advantages of working with protocol buffers, including efficient serialization, a simple IDL, and easy interface updating.
+
+
+<a name="setup"></a>
+## Example code and setup
+
+The example code for our tutorial is in [examples/php/route_guide](examples/php/route_guide). To download the example, clone this repository by running the following command:
+```shell
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Then change your current directory to `examples/php/route_guide`:
+```shell
+$ cd examples/php/route_guide
+```
+
+Our example is a simple route mapping application that lets clients get information about features on their route, create a summary of their route, and exchange route information such as traffic updates with the server and other clients.
+
+You also should have the relevant tools installed to generate the client interface code (and a server in another language, for testing). You can obtain the latter by following [these setup instructions](https://github.com/grpc/homebrew-grpc).
+
+
+<a name="try"></a>
+## Try it out!
+
+To try the sample app, we need a gRPC server running locally. Let's compile and run, for example, the Node.js server in this repository:
+
+```shell
+$ cd ../../node
+$ npm install
+$ cd route_guide
+$ nodejs ./route_guide_server.js --db_path=route_guide_db.json
+```
+
+Run the PHP client (in a different terminal):
+
+```shell
+$ ./run_route_guide_client.sh
+```
+
+The next sections guide you step-by-step through how this proto service is defined, how to generate a client library from it, and how to create a client stub that uses that library.
+
+
+<a name="proto"></a>
+## Defining the service
+
+First let's look at how the service we're using is defined. A gRPC *service* and its method *request* and *response* types using [protocol buffers](https://developers.google.com/protocol-buffers/docs/overview). You can see the complete .proto file for our example in [`examples/protos/route_guide.proto`](examples/protos/route_guide.proto).
+
+To define a service, you specify a named `service` in your .proto file:
+
+```protobuf
+service RouteGuide {
+ ...
+}
+```
+
+Then you define `rpc` methods inside your service definition, specifying their request and response types. Protocol buffers let you define four kinds of service method, all of which are used in the `RouteGuide` service:
+
+- A *simple RPC* where the client sends a request to the server and receives a response later, just like a normal remote procedure call.
+```protobuf
+ // Obtains the feature at a given position.
+ rpc GetFeature(Point) returns (Feature) {}
+```
+
+- A *response-streaming RPC* where the client sends a request to the server and gets back a stream of response messages. You specify a response-streaming method by placing the `stream` keyword before the *response* type.
+```protobuf
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+```
+
+- A *request-streaming RPC* where the client sends a sequence of messages to the server. Once the client has finished writing the messages, it waits for the server to read them all and return its response. You specify a request-streaming method by placing the `stream` keyword before the *request* type.
+```protobuf
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+```
+
+- A *bidirectional streaming RPC* where both sides send a sequence of messages to the other. The two streams operate independently, so clients and servers can read and write in whatever order they like: for example, the server could wait to receive all the client messages before writing its responses, or it could alternately read a message then write a message, or some other combination of reads and writes. The order of messages in each stream is preserved. You specify this type of method by placing the `stream` keyword before both the request and the response.
+```protobuf
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+```
+
+Our .proto file also contains protocol buffer message type definitions for all the request and response types used in our service methods - for example, here's the `Point` message type:
+```protobuf
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ int32 latitude = 1;
+ int32 longitude = 2;
+}
+```
+
+
+<a name="protoc"></a>
+## Generating client code
+
+The PHP client stub implementation of the proto files can be generated by the [`protoc-gen-php`](https://github.com/datto/protobuf-php) tool. To install the tool:
+
+```sh
+$ cd examples/php
+$ php composer.phar install
+$ cd vendor/datto/protobuf-php
+$ gem install rake ronn
+$ rake pear:package version=1.0
+$ sudo pear install Protobuf-1.0.tgz
+```
+
+To generate the client stub implementation .php file:
+
+```sh
+$ cd php/route_guide
+$ protoc-gen-php -i . -o . ./route_guide.proto
+```
+
+A `route_guide.php` file will be generated in the `php/route_guide` directory. You do not need to modify the file.
+
+To load the generated client stub file, simply `require` it in your PHP application:
+
+```php
+require dirname(__FILE__) . '/route_guide.php';
+```
+
+The file contains:
+- All the protocol buffer code to populate, serialize, and retrieve our request and response message types.
+- A class called `examples\RouteGuideClient` that lets clients call the methods defined in the `RouteGuide` service.
+
+
+<a name="client"></a>
+## Creating the client
+
+In this section, we'll look at creating a PHP client for our `RouteGuide` service. You can see our complete example client code in [examples/php/route_guide/route_guide_client.php](examples/php/route_guide/route_guide_client.php).
+
+### Constructing a client object
+
+To call service methods, we first need to create a client object, an instance of the generated `RouteGuideClient` class. The constructor of the class expects the server address and port we want to connect to:
+
+```php
+$client = new examples\RouteGuideClient(new Grpc\BaseStub('localhost:50051', []));
+```
+
+### Calling service methods
+
+Now let's look at how we call our service methods.
+
+#### Simple RPC
+
+Calling the simple RPC `GetFeature` is nearly as straightforward as calling a local asynchronous method.
+
+```php
+ $point = new examples\Point();
+ $point->setLatitude(409146138);
+ $point->setLongitude(-746188906);
+ list($feature, $status) = $client->GetFeature($point)->wait();
+```
+
+As you can see, we create and populate a request object, i.e. an `examples\Point` object. Then, we call the method on the stub, passing it the request object. If there is no error, then we can read the response information from the server from our response object, i.e. an `examples\Feature` object.
+
+```php
+ print sprintf("Found %s \n at %f, %f\n", $feature->getName(),
+ $feature->getLocation()->getLatitude() / COORD_FACTOR,
+ $feature->getLocation()->getLongitude() / COORD_FACTOR);
+```
+
+#### Streaming RPCs
+
+Now let's look at our streaming methods. Here's where we call the server-side streaming method `ListFeatures`, which returns a stream of geographical `Feature`s:
+
+```php
+ $lo_point = new examples\Point();
+ $hi_point = new examples\Point();
+
+ $lo_point->setLatitude(400000000);
+ $lo_point->setLongitude(-750000000);
+ $hi_point->setLatitude(420000000);
+ $hi_point->setLongitude(-730000000);
+
+ $rectangle = new examples\Rectangle();
+ $rectangle->setLo($lo_point);
+ $rectangle->setHi($hi_point);
+
+ $call = $client->ListFeatures($rectangle);
+ // an iterator over the server streaming responses
+ $features = $call->responses();
+ foreach ($features as $feature) {
+ // process each feature
+ } // the loop will end when the server indicates there is no more responses to be sent.
+```
+
+The `$call->responses()` method call returns an iterator. When the server sends a response, a `$feature` object will be returned in the `foreach` loop, until the server indiciates that there will be no more responses to be sent.
+
+The client-side streaming method `RecordRoute` is similar, except there we pass the method an iterator and get back a `examples\RouteSummary`.
+
+```php
+ $points_iter = function($db) {
+ for ($i = 0; $i < $num_points; $i++) {
+ $point = new examples\Point();
+ $point->setLatitude($lat);
+ $point->setLongitude($long);
+ yield $point;
+ }
+ };
+ // $points_iter is an iterator simulating client streaming
+ list($route_summary, $status) =
+ $client->RecordRoute($points_iter($db))->wait();
+```
+
+Finally, let's look at our bidirectional streaming RPC `routeChat()`. In this case, we just pass a context to the method and get back a `BidiStreamingCall` stream object, which we can use to both write and read messages.
+
+```php
+$call = $client->RouteChat();
+```
+
+To write messages from the client:
+
+```php
+ foreach ($notes as $n) {
+ $route_note = new examples\RouteNote();
+ $call->write($route_note);
+ }
+ $call->writesDone();
+```
+
+To read messages from the server:
+
+```php
+ while ($route_note_reply = $call->read()) {
+ // process $route_note_reply
+ }
+```
+
+Each side will always get the other's messages in the order they were written, both the client and server can read and write in any order — the streams operate completely independently.
diff --git a/examples/php/route_guide/route_guide.php b/examples/php/route_guide/route_guide.php
new file mode 100644
index 0000000000..a836e03b55
--- /dev/null
+++ b/examples/php/route_guide/route_guide.php
@@ -0,0 +1,731 @@
+<?php
+// DO NOT EDIT! Generated by Protobuf-PHP protoc plugin 1.0
+// Source: route_guide.proto
+// Date: 2015-06-12 00:32:41
+
+namespace examples {
+
+ class Point extends \DrSlump\Protobuf\Message {
+
+ /** @var int */
+ public $latitude = 0;
+
+ /** @var int */
+ public $longitude = 0;
+
+
+ /** @var \Closure[] */
+ protected static $__extensions = array();
+
+ public static function descriptor()
+ {
+ $descriptor = new \DrSlump\Protobuf\Descriptor(__CLASS__, 'examples.Point');
+
+ // OPTIONAL INT32 latitude = 1
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 1;
+ $f->name = "latitude";
+ $f->type = \DrSlump\Protobuf::TYPE_INT32;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $f->default = 0;
+ $descriptor->addField($f);
+
+ // OPTIONAL INT32 longitude = 2
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 2;
+ $f->name = "longitude";
+ $f->type = \DrSlump\Protobuf::TYPE_INT32;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $f->default = 0;
+ $descriptor->addField($f);
+
+ foreach (self::$__extensions as $cb) {
+ $descriptor->addField($cb(), true);
+ }
+
+ return $descriptor;
+ }
+
+ /**
+ * Check if <latitude> has a value
+ *
+ * @return boolean
+ */
+ public function hasLatitude(){
+ return $this->_has(1);
+ }
+
+ /**
+ * Clear <latitude> value
+ *
+ * @return \examples\Point
+ */
+ public function clearLatitude(){
+ return $this->_clear(1);
+ }
+
+ /**
+ * Get <latitude> value
+ *
+ * @return int
+ */
+ public function getLatitude(){
+ return $this->_get(1);
+ }
+
+ /**
+ * Set <latitude> value
+ *
+ * @param int $value
+ * @return \examples\Point
+ */
+ public function setLatitude( $value){
+ return $this->_set(1, $value);
+ }
+
+ /**
+ * Check if <longitude> has a value
+ *
+ * @return boolean
+ */
+ public function hasLongitude(){
+ return $this->_has(2);
+ }
+
+ /**
+ * Clear <longitude> value
+ *
+ * @return \examples\Point
+ */
+ public function clearLongitude(){
+ return $this->_clear(2);
+ }
+
+ /**
+ * Get <longitude> value
+ *
+ * @return int
+ */
+ public function getLongitude(){
+ return $this->_get(2);
+ }
+
+ /**
+ * Set <longitude> value
+ *
+ * @param int $value
+ * @return \examples\Point
+ */
+ public function setLongitude( $value){
+ return $this->_set(2, $value);
+ }
+ }
+}
+
+namespace examples {
+
+ class Rectangle extends \DrSlump\Protobuf\Message {
+
+ /** @var \examples\Point */
+ public $lo = null;
+
+ /** @var \examples\Point */
+ public $hi = null;
+
+
+ /** @var \Closure[] */
+ protected static $__extensions = array();
+
+ public static function descriptor()
+ {
+ $descriptor = new \DrSlump\Protobuf\Descriptor(__CLASS__, 'examples.Rectangle');
+
+ // OPTIONAL MESSAGE lo = 1
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 1;
+ $f->name = "lo";
+ $f->type = \DrSlump\Protobuf::TYPE_MESSAGE;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $f->reference = '\examples\Point';
+ $descriptor->addField($f);
+
+ // OPTIONAL MESSAGE hi = 2
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 2;
+ $f->name = "hi";
+ $f->type = \DrSlump\Protobuf::TYPE_MESSAGE;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $f->reference = '\examples\Point';
+ $descriptor->addField($f);
+
+ foreach (self::$__extensions as $cb) {
+ $descriptor->addField($cb(), true);
+ }
+
+ return $descriptor;
+ }
+
+ /**
+ * Check if <lo> has a value
+ *
+ * @return boolean
+ */
+ public function hasLo(){
+ return $this->_has(1);
+ }
+
+ /**
+ * Clear <lo> value
+ *
+ * @return \examples\Rectangle
+ */
+ public function clearLo(){
+ return $this->_clear(1);
+ }
+
+ /**
+ * Get <lo> value
+ *
+ * @return \examples\Point
+ */
+ public function getLo(){
+ return $this->_get(1);
+ }
+
+ /**
+ * Set <lo> value
+ *
+ * @param \examples\Point $value
+ * @return \examples\Rectangle
+ */
+ public function setLo(\examples\Point $value){
+ return $this->_set(1, $value);
+ }
+
+ /**
+ * Check if <hi> has a value
+ *
+ * @return boolean
+ */
+ public function hasHi(){
+ return $this->_has(2);
+ }
+
+ /**
+ * Clear <hi> value
+ *
+ * @return \examples\Rectangle
+ */
+ public function clearHi(){
+ return $this->_clear(2);
+ }
+
+ /**
+ * Get <hi> value
+ *
+ * @return \examples\Point
+ */
+ public function getHi(){
+ return $this->_get(2);
+ }
+
+ /**
+ * Set <hi> value
+ *
+ * @param \examples\Point $value
+ * @return \examples\Rectangle
+ */
+ public function setHi(\examples\Point $value){
+ return $this->_set(2, $value);
+ }
+ }
+}
+
+namespace examples {
+
+ class Feature extends \DrSlump\Protobuf\Message {
+
+ /** @var string */
+ public $name = null;
+
+ /** @var \examples\Point */
+ public $location = null;
+
+
+ /** @var \Closure[] */
+ protected static $__extensions = array();
+
+ public static function descriptor()
+ {
+ $descriptor = new \DrSlump\Protobuf\Descriptor(__CLASS__, 'examples.Feature');
+
+ // OPTIONAL STRING name = 1
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 1;
+ $f->name = "name";
+ $f->type = \DrSlump\Protobuf::TYPE_STRING;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $descriptor->addField($f);
+
+ // OPTIONAL MESSAGE location = 2
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 2;
+ $f->name = "location";
+ $f->type = \DrSlump\Protobuf::TYPE_MESSAGE;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $f->reference = '\examples\Point';
+ $descriptor->addField($f);
+
+ foreach (self::$__extensions as $cb) {
+ $descriptor->addField($cb(), true);
+ }
+
+ return $descriptor;
+ }
+
+ /**
+ * Check if <name> has a value
+ *
+ * @return boolean
+ */
+ public function hasName(){
+ return $this->_has(1);
+ }
+
+ /**
+ * Clear <name> value
+ *
+ * @return \examples\Feature
+ */
+ public function clearName(){
+ return $this->_clear(1);
+ }
+
+ /**
+ * Get <name> value
+ *
+ * @return string
+ */
+ public function getName(){
+ return $this->_get(1);
+ }
+
+ /**
+ * Set <name> value
+ *
+ * @param string $value
+ * @return \examples\Feature
+ */
+ public function setName( $value){
+ return $this->_set(1, $value);
+ }
+
+ /**
+ * Check if <location> has a value
+ *
+ * @return boolean
+ */
+ public function hasLocation(){
+ return $this->_has(2);
+ }
+
+ /**
+ * Clear <location> value
+ *
+ * @return \examples\Feature
+ */
+ public function clearLocation(){
+ return $this->_clear(2);
+ }
+
+ /**
+ * Get <location> value
+ *
+ * @return \examples\Point
+ */
+ public function getLocation(){
+ return $this->_get(2);
+ }
+
+ /**
+ * Set <location> value
+ *
+ * @param \examples\Point $value
+ * @return \examples\Feature
+ */
+ public function setLocation(\examples\Point $value){
+ return $this->_set(2, $value);
+ }
+ }
+}
+
+namespace examples {
+
+ class RouteNote extends \DrSlump\Protobuf\Message {
+
+ /** @var \examples\Point */
+ public $location = null;
+
+ /** @var string */
+ public $message = null;
+
+
+ /** @var \Closure[] */
+ protected static $__extensions = array();
+
+ public static function descriptor()
+ {
+ $descriptor = new \DrSlump\Protobuf\Descriptor(__CLASS__, 'examples.RouteNote');
+
+ // OPTIONAL MESSAGE location = 1
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 1;
+ $f->name = "location";
+ $f->type = \DrSlump\Protobuf::TYPE_MESSAGE;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $f->reference = '\examples\Point';
+ $descriptor->addField($f);
+
+ // OPTIONAL STRING message = 2
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 2;
+ $f->name = "message";
+ $f->type = \DrSlump\Protobuf::TYPE_STRING;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $descriptor->addField($f);
+
+ foreach (self::$__extensions as $cb) {
+ $descriptor->addField($cb(), true);
+ }
+
+ return $descriptor;
+ }
+
+ /**
+ * Check if <location> has a value
+ *
+ * @return boolean
+ */
+ public function hasLocation(){
+ return $this->_has(1);
+ }
+
+ /**
+ * Clear <location> value
+ *
+ * @return \examples\RouteNote
+ */
+ public function clearLocation(){
+ return $this->_clear(1);
+ }
+
+ /**
+ * Get <location> value
+ *
+ * @return \examples\Point
+ */
+ public function getLocation(){
+ return $this->_get(1);
+ }
+
+ /**
+ * Set <location> value
+ *
+ * @param \examples\Point $value
+ * @return \examples\RouteNote
+ */
+ public function setLocation(\examples\Point $value){
+ return $this->_set(1, $value);
+ }
+
+ /**
+ * Check if <message> has a value
+ *
+ * @return boolean
+ */
+ public function hasMessage(){
+ return $this->_has(2);
+ }
+
+ /**
+ * Clear <message> value
+ *
+ * @return \examples\RouteNote
+ */
+ public function clearMessage(){
+ return $this->_clear(2);
+ }
+
+ /**
+ * Get <message> value
+ *
+ * @return string
+ */
+ public function getMessage(){
+ return $this->_get(2);
+ }
+
+ /**
+ * Set <message> value
+ *
+ * @param string $value
+ * @return \examples\RouteNote
+ */
+ public function setMessage( $value){
+ return $this->_set(2, $value);
+ }
+ }
+}
+
+namespace examples {
+
+ class RouteSummary extends \DrSlump\Protobuf\Message {
+
+ /** @var int */
+ public $point_count = 0;
+
+ /** @var int */
+ public $feature_count = 0;
+
+ /** @var int */
+ public $distance = 0;
+
+ /** @var int */
+ public $elapsed_time = 0;
+
+
+ /** @var \Closure[] */
+ protected static $__extensions = array();
+
+ public static function descriptor()
+ {
+ $descriptor = new \DrSlump\Protobuf\Descriptor(__CLASS__, 'examples.RouteSummary');
+
+ // OPTIONAL INT32 point_count = 1
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 1;
+ $f->name = "point_count";
+ $f->type = \DrSlump\Protobuf::TYPE_INT32;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $f->default = 0;
+ $descriptor->addField($f);
+
+ // OPTIONAL INT32 feature_count = 2
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 2;
+ $f->name = "feature_count";
+ $f->type = \DrSlump\Protobuf::TYPE_INT32;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $f->default = 0;
+ $descriptor->addField($f);
+
+ // OPTIONAL INT32 distance = 3
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 3;
+ $f->name = "distance";
+ $f->type = \DrSlump\Protobuf::TYPE_INT32;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $f->default = 0;
+ $descriptor->addField($f);
+
+ // OPTIONAL INT32 elapsed_time = 4
+ $f = new \DrSlump\Protobuf\Field();
+ $f->number = 4;
+ $f->name = "elapsed_time";
+ $f->type = \DrSlump\Protobuf::TYPE_INT32;
+ $f->rule = \DrSlump\Protobuf::RULE_OPTIONAL;
+ $f->default = 0;
+ $descriptor->addField($f);
+
+ foreach (self::$__extensions as $cb) {
+ $descriptor->addField($cb(), true);
+ }
+
+ return $descriptor;
+ }
+
+ /**
+ * Check if <point_count> has a value
+ *
+ * @return boolean
+ */
+ public function hasPointCount(){
+ return $this->_has(1);
+ }
+
+ /**
+ * Clear <point_count> value
+ *
+ * @return \examples\RouteSummary
+ */
+ public function clearPointCount(){
+ return $this->_clear(1);
+ }
+
+ /**
+ * Get <point_count> value
+ *
+ * @return int
+ */
+ public function getPointCount(){
+ return $this->_get(1);
+ }
+
+ /**
+ * Set <point_count> value
+ *
+ * @param int $value
+ * @return \examples\RouteSummary
+ */
+ public function setPointCount( $value){
+ return $this->_set(1, $value);
+ }
+
+ /**
+ * Check if <feature_count> has a value
+ *
+ * @return boolean
+ */
+ public function hasFeatureCount(){
+ return $this->_has(2);
+ }
+
+ /**
+ * Clear <feature_count> value
+ *
+ * @return \examples\RouteSummary
+ */
+ public function clearFeatureCount(){
+ return $this->_clear(2);
+ }
+
+ /**
+ * Get <feature_count> value
+ *
+ * @return int
+ */
+ public function getFeatureCount(){
+ return $this->_get(2);
+ }
+
+ /**
+ * Set <feature_count> value
+ *
+ * @param int $value
+ * @return \examples\RouteSummary
+ */
+ public function setFeatureCount( $value){
+ return $this->_set(2, $value);
+ }
+
+ /**
+ * Check if <distance> has a value
+ *
+ * @return boolean
+ */
+ public function hasDistance(){
+ return $this->_has(3);
+ }
+
+ /**
+ * Clear <distance> value
+ *
+ * @return \examples\RouteSummary
+ */
+ public function clearDistance(){
+ return $this->_clear(3);
+ }
+
+ /**
+ * Get <distance> value
+ *
+ * @return int
+ */
+ public function getDistance(){
+ return $this->_get(3);
+ }
+
+ /**
+ * Set <distance> value
+ *
+ * @param int $value
+ * @return \examples\RouteSummary
+ */
+ public function setDistance( $value){
+ return $this->_set(3, $value);
+ }
+
+ /**
+ * Check if <elapsed_time> has a value
+ *
+ * @return boolean
+ */
+ public function hasElapsedTime(){
+ return $this->_has(4);
+ }
+
+ /**
+ * Clear <elapsed_time> value
+ *
+ * @return \examples\RouteSummary
+ */
+ public function clearElapsedTime(){
+ return $this->_clear(4);
+ }
+
+ /**
+ * Get <elapsed_time> value
+ *
+ * @return int
+ */
+ public function getElapsedTime(){
+ return $this->_get(4);
+ }
+
+ /**
+ * Set <elapsed_time> value
+ *
+ * @param int $value
+ * @return \examples\RouteSummary
+ */
+ public function setElapsedTime( $value){
+ return $this->_set(4, $value);
+ }
+ }
+}
+
+namespace examples {
+
+ class RouteGuideClient{
+
+ private $rpc_impl;
+
+ public function __construct($rpc_impl) {
+ $this->rpc_impl = $rpc_impl;
+ }
+ /**
+ * @param examples\Point $input
+ */
+ public function GetFeature(\examples\Point $argument, $metadata = array()) {
+ return $this->rpc_impl->_simpleRequest('/examples.RouteGuide/GetFeature', $argument, '\examples\Feature::deserialize', $metadata);
+ }
+ /**
+ * @param examples\Rectangle $input
+ */
+ public function ListFeatures($argument, $metadata = array()) {
+ return $this->rpc_impl->_serverStreamRequest('/examples.RouteGuide/ListFeatures', $argument, '\examples\Feature::deserialize', $metadata);
+ }
+ /**
+ * @param examples\Point $input
+ */
+ public function RecordRoute($arguments, $metadata = array()) {
+ return $this->rpc_impl->_clientStreamRequest('/examples.RouteGuide/RecordRoute', $arguments, '\examples\RouteSummary::deserialize', $metadata);
+ }
+ /**
+ * @param examples\RouteNote $input
+ */
+ public function RouteChat($metadata = array()) {
+ return $this->rpc_impl->_bidiRequest('/examples.RouteGuide/RouteChat', '\examples\RouteNote::deserialize', $metadata);
+ }
+ }
+}
diff --git a/examples/php/route_guide/route_guide.proto b/examples/php/route_guide/route_guide.proto
new file mode 100644
index 0000000000..0947184dbb
--- /dev/null
+++ b/examples/php/route_guide/route_guide.proto
@@ -0,0 +1,120 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto2";
+
+option java_package = "io.grpc.examples";
+
+package examples;
+
+// Interface exported by the server.
+service RouteGuide {
+ // A simple RPC.
+ //
+ // Obtains the feature at a given position.
+ rpc GetFeature(Point) returns (Feature) {}
+
+ // A server-to-client streaming RPC.
+ //
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+
+ // A client-to-server streaming RPC.
+ //
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+
+ // A Bidirectional streaming RPC.
+ //
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+}
+
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ optional int32 latitude = 1 [default = 0];
+ optional int32 longitude = 2 [default = 0];
+}
+
+// A latitude-longitude rectangle, represented as two diagonally opposite
+// points "lo" and "hi".
+message Rectangle {
+ // One corner of the rectangle.
+ optional Point lo = 1;
+
+ // The other corner of the rectangle.
+ optional Point hi = 2;
+}
+
+// A feature names something at a given point.
+//
+// If a feature could not be named, the name is empty.
+message Feature {
+ // The name of the feature.
+ optional string name = 1;
+
+ // The point where the feature is detected.
+ optional Point location = 2;
+}
+
+// A RouteNote is a message sent while at a given point.
+message RouteNote {
+ // The location from which the message is sent.
+ optional Point location = 1;
+
+ // The message to be sent.
+ optional string message = 2;
+}
+
+// A RouteSummary is received in response to a RecordRoute rpc.
+//
+// It contains the number of individual points received, the number of
+// detected features, and the total distance covered as the cumulative sum of
+// the distance between each point.
+message RouteSummary {
+ // The number of points received.
+ optional int32 point_count = 1 [default = 0];
+
+ // The number of known features passed while traversing the route.
+ optional int32 feature_count = 2 [default = 0];
+
+ // The distance covered in metres.
+ optional int32 distance = 3 [default = 0];
+
+ // The duration of the traversal in seconds.
+ optional int32 elapsed_time = 4 [default = 0];
+}
diff --git a/examples/php/route_guide/route_guide_client.php b/examples/php/route_guide/route_guide_client.php
new file mode 100644
index 0000000000..6d9ae58b66
--- /dev/null
+++ b/examples/php/route_guide/route_guide_client.php
@@ -0,0 +1,205 @@
+<?php
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+require dirname(__FILE__) . '/../vendor/autoload.php';
+require dirname(__FILE__) . '/route_guide.php';
+
+define('COORD_FACTOR', 1e7);
+
+$client = new examples\RouteGuideClient(
+ new Grpc\BaseStub('localhost:50051', []));
+
+function printFeature($feature) {
+ $name = $feature->getName();
+ if (!$name) {
+ $name_str = "no feature";
+ } else {
+ $name_str = "feature called $name";
+ }
+ print sprintf("Found %s \n at %f, %f\n", $name_str,
+ $feature->getLocation()->getLatitude() / COORD_FACTOR,
+ $feature->getLocation()->getLongitude() / COORD_FACTOR);
+}
+
+/**
+ * Run the getFeature demo. Calls getFeature with a point known to have a
+ * feature and a point known not to have a feature.
+ */
+function runGetFeature() {
+ print "Running GetFeature...\n";
+ global $client;
+
+ $point = new examples\Point();
+ $points = array(
+ array(409146138, -746188906),
+ array(0, 0),
+ );
+
+ foreach ($points as $p) {
+ $point->setLatitude($p[0]);
+ $point->setLongitude($p[1]);
+ // make a unary grpc call
+ list($feature, $status) = $client->GetFeature($point)->wait();
+ printFeature($feature);
+ }
+}
+
+/**
+ * Run the listFeatures demo. Calls listFeatures with a rectangle
+ * containing all of the features in the pre-generated
+ * database. Prints each response as it comes in.
+ */
+function runListFeatures() {
+ print "Running ListFeatures...\n";
+ global $client;
+
+ $lo_point = new examples\Point();
+ $hi_point = new examples\Point();
+
+ $lo_point->setLatitude(400000000);
+ $lo_point->setLongitude(-750000000);
+ $hi_point->setLatitude(420000000);
+ $hi_point->setLongitude(-730000000);
+
+ $rectangle = new examples\Rectangle();
+ $rectangle->setLo($lo_point);
+ $rectangle->setHi($hi_point);
+
+ $call = $client->ListFeatures($rectangle);
+ // an iterator over the server streaming responses
+ $features = $call->responses();
+ foreach ($features as $feature) {
+ printFeature($feature);
+ }
+}
+
+/**
+ * Run the recordRoute demo. Sends several randomly chosen points from the
+ * pre-generated feature database with a variable delay in between. Prints
+ * the statistics when they are sent from the server.
+ */
+function runRecordRoute() {
+ print "Running RecordRoute...\n";
+ global $client, $argv;
+
+ $db = json_decode(file_get_contents($argv[1]), true);
+ $points_iter = function($db) {
+ $num_points_in_db = count($db);
+ $num_points = 10;
+ for ($i = 0; $i < $num_points; $i++) {
+ $point = new examples\Point();
+ $index = rand(0, $num_points_in_db - 1);
+ $lat = $db[$index]['location']['latitude'];
+ $long = $db[$index]['location']['longitude'];
+ $feature_name = $db[$index]['name'];
+ $point->setLatitude($lat);
+ $point->setLongitude($long);
+ print sprintf("Visiting point %f, %f,\n with feature name: %s\n",
+ $lat / COORD_FACTOR, $long / COORD_FACTOR,
+ $feature_name ? $feature_name : '<empty>');
+ usleep(rand(300000, 800000));
+ yield $point;
+ }
+ };
+ // $points_iter is an iterator simulating client streaming
+ list($route_summary, $status) =
+ $client->RecordRoute($points_iter($db))->wait();
+ print sprintf("Finished trip with %d points\nPassed %d features\n".
+ "Travelled %d meters\nIt took %d seconds\n",
+ $route_summary->getPointCount(),
+ $route_summary->getFeatureCount(),
+ $route_summary->getDistance(),
+ $route_summary->getElapsedTime());
+}
+
+/**
+ * Run the routeChat demo. Send some chat messages, and print any chat
+ * messages that are sent from the server.
+ */
+function runRouteChat() {
+ print "Running RouteChat...\n";
+ global $client;
+
+ // start the bidirectional streaming call
+ $call = $client->RouteChat();
+
+ $notes = array(
+ array(1, 1, 'first message'),
+ array(1, 2, 'second message'),
+ array(2, 1, 'third message'),
+ array(1, 1, 'fourth message'),
+ array(1, 1, 'fifth message'),
+ );
+
+ foreach ($notes as $n) {
+ $point = new examples\Point();
+ $point->setLatitude($lat = $n[0]);
+ $point->setLongitude($long = $n[1]);
+
+ $route_note = new examples\RouteNote();
+ $route_note->setLocation($point);
+ $route_note->setMessage($message = $n[2]);
+
+ print sprintf("Sending message: '%s' at (%d, %d)\n",
+ $message, $lat, $long);
+ // send a bunch of messages to the server
+ $call->write($route_note);
+ }
+ $call->writesDone();
+
+ // read from the server until there's no more
+ while ($route_note_reply = $call->read()) {
+ print sprintf("Previous left message at (%d, %d): '%s'\n",
+ $route_note_reply->getLocation()->getLatitude(),
+ $route_note_reply->getLocation()->getLongitude(),
+ $route_note_reply->getMessage());
+ }
+}
+
+/**
+ * Run all of the demos in order
+ */
+function main() {
+ runGetFeature();
+ runListFeatures();
+ runRecordRoute();
+ runRouteChat();
+}
+
+if (empty($argv[1])) {
+ print "Usage: php -d extension=grpc.so route_guide_client.php " .
+ "<path to route_guide_db.json>\n";
+ exit(1);
+}
+main();
diff --git a/examples/php/route_guide/run_route_guide_client.sh b/examples/php/route_guide/run_route_guide_client.sh
new file mode 100755
index 0000000000..e5ca07796b
--- /dev/null
+++ b/examples/php/route_guide/run_route_guide_client.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+set -e
+cd $(dirname $0)
+command -v brew >/dev/null 2>&1 && \
+ extension_dir="-d extension_dir="`brew --prefix`/opt/grpc-php
+php $extension_dir -d extension=grpc.so \
+ route_guide_client.php ../../node/route_guide/route_guide_db.json
diff --git a/examples/php/run_greeter_client.sh b/examples/php/run_greeter_client.sh
new file mode 100755
index 0000000000..2906de9af8
--- /dev/null
+++ b/examples/php/run_greeter_client.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+set -e
+cd $(dirname $0)
+command -v brew >/dev/null 2>&1 && \
+ extension_dir="-d extension_dir="`brew --prefix`/opt/grpc-php
+php $extension_dir -d extension=grpc.so greeter_client.php $1
diff --git a/examples/protos/README.md b/examples/protos/README.md
new file mode 100644
index 0000000000..48df7c8943
--- /dev/null
+++ b/examples/protos/README.md
@@ -0,0 +1,8 @@
+# Example protos
+
+## Contents
+
+- [helloworld.proto]
+ - The simple example used in the overview.
+- [route_guide.proto]
+ - An example service described in detail in the tutorial.
diff --git a/examples/protos/auth_sample.proto b/examples/protos/auth_sample.proto
new file mode 100644
index 0000000000..a49caca657
--- /dev/null
+++ b/examples/protos/auth_sample.proto
@@ -0,0 +1,57 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+package grpc.testing;
+
+option objc_class_prefix = "AUTH";
+
+// Unary request.
+message Request {
+ // Whether Response should include username.
+ bool fill_username = 4;
+
+ // Whether Response should include OAuth scope.
+ bool fill_oauth_scope = 5;
+}
+
+// Unary response, as configured by the request.
+message Response {
+ // The user the request came from, for verifying authentication was
+ // successful.
+ string username = 2;
+ // OAuth scope.
+ string oauth_scope = 3;
+}
+
+service TestService {
+ // One request followed by one response.
+ rpc UnaryCall(Request) returns (Response);
+}
diff --git a/examples/protos/hellostreamingworld.proto b/examples/protos/hellostreamingworld.proto
new file mode 100644
index 0000000000..bd5af3b2d5
--- /dev/null
+++ b/examples/protos/hellostreamingworld.proto
@@ -0,0 +1,54 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+option java_package = "ex.grpc";
+option objc_class_prefix = "HSW";
+
+package hellostreamingworld;
+
+// The greeting service definition.
+service MultiGreeter {
+ // Sends multiple greetings
+ rpc sayHello (HelloRequest) returns (stream HelloReply) {}
+}
+
+// The request message containing the user's name and how many greetings
+// they want.
+message HelloRequest {
+ string name = 1;
+ string num_greetings = 2;
+}
+
+// A response message containing a greeting
+message HelloReply {
+ string message = 1;
+}
+
diff --git a/examples/protos/helloworld.proto b/examples/protos/helloworld.proto
new file mode 100644
index 0000000000..7d58870a70
--- /dev/null
+++ b/examples/protos/helloworld.proto
@@ -0,0 +1,51 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+option java_package = "io.grpc.examples";
+option objc_class_prefix = "HLW";
+
+package helloworld;
+
+// The greeting service definition.
+service Greeter {
+ // Sends a greeting
+ rpc SayHello (HelloRequest) returns (HelloReply) {}
+}
+
+// The request message containing the user's name.
+message HelloRequest {
+ string name = 1;
+}
+
+// The response message containing the greetings
+message HelloReply {
+ string message = 1;
+}
diff --git a/examples/protos/route_guide.proto b/examples/protos/route_guide.proto
new file mode 100644
index 0000000000..bfde5f1ead
--- /dev/null
+++ b/examples/protos/route_guide.proto
@@ -0,0 +1,124 @@
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+syntax = "proto3";
+
+option java_package = "ex.grpc";
+option objc_class_prefix = "RTG";
+
+package examples;
+
+// Interface exported by the server.
+service RouteGuide {
+ // A simple RPC.
+ //
+ // Obtains the feature at a given position.
+ //
+ // A feature with an empty name is returned if there's no feature at the given
+ // position.
+ rpc GetFeature(Point) returns (Feature) {}
+
+ // A server-to-client streaming RPC.
+ //
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+
+ // A client-to-server streaming RPC.
+ //
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+
+ // A Bidirectional streaming RPC.
+ //
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+}
+
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ int32 latitude = 1;
+ int32 longitude = 2;
+}
+
+// A latitude-longitude rectangle, represented as two diagonally opposite
+// points "lo" and "hi".
+message Rectangle {
+ // One corner of the rectangle.
+ Point lo = 1;
+
+ // The other corner of the rectangle.
+ Point hi = 2;
+}
+
+// A feature names something at a given point.
+//
+// If a feature could not be named, the name is empty.
+message Feature {
+ // The name of the feature.
+ string name = 1;
+
+ // The point where the feature is detected.
+ Point location = 2;
+}
+
+// A RouteNote is a message sent while at a given point.
+message RouteNote {
+ // The location from which the message is sent.
+ Point location = 1;
+
+ // The message to be sent.
+ string message = 2;
+}
+
+// A RouteSummary is received in response to a RecordRoute rpc.
+//
+// It contains the number of individual points received, the number of
+// detected features, and the total distance covered as the cumulative sum of
+// the distance between each point.
+message RouteSummary {
+ // The number of points received.
+ int32 point_count = 1;
+
+ // The number of known features passed while traversing the route.
+ int32 feature_count = 2;
+
+ // The distance covered in metres.
+ int32 distance = 3;
+
+ // The duration of the traversal in seconds.
+ int32 elapsed_time = 4;
+}
diff --git a/examples/pubsub/README b/examples/pubsub/README
deleted file mode 100644
index 36fcb08483..0000000000
--- a/examples/pubsub/README
+++ /dev/null
@@ -1,22 +0,0 @@
-NOTE: This example does not build and is being updated.
-Experimental example code, likely to change.
-Users should not attempt to run this code till this warning is removed.
-
-C++ Client implementation for Cloud Pub/Sub service
-(https://developers.google.com/apis-explorer/#p/pubsub/v1beta1/).
-
-"Google Cloud Pub/Sub" API needs to be enabled at
-https://console.developers.google.com/project to open the access for a client.
-Select the project name, select the "APIs" under "APIs & auth", and turn
-on "Google Cloud Pub/Sub" API.
-
-To run the client from Google Compute Engine (GCE), the GCE instance needs to
-be created with scope "https://www.googleapis.com/auth/cloud-platform" as below:
-
-gcloud compute instances create instance-name
- --image debian-7 --scopes https://www.googleapis.com/auth/cloud-platform
-
-
-To run the client:
-make pubsub_client
-bins/opt/pubsub_client --project_id="your project id"
diff --git a/examples/pubsub/main.cc b/examples/pubsub/main.cc
deleted file mode 100644
index b1898f18d9..0000000000
--- a/examples/pubsub/main.cc
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- *
- * Copyright 2015, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <fstream>
-#include <memory>
-#include <sstream>
-#include <string>
-#include <thread>
-
-#include <grpc/grpc.h>
-#include <grpc/support/log.h>
-#include <gflags/gflags.h>
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
-#include <grpc++/create_channel.h>
-#include <grpc++/credentials.h>
-#include <grpc++/status.h>
-#include "test/cpp/util/test_config.h"
-
-#include "examples/pubsub/publisher.h"
-#include "examples/pubsub/subscriber.h"
-
-DEFINE_int32(server_port, 443, "Server port.");
-DEFINE_string(server_host, "pubsub-staging.googleapis.com",
- "Server host to connect to");
-DEFINE_string(project_id, "", "GCE project id such as stoked-keyword-656");
-
-namespace {
-
-const char kTopic[] = "testtopics";
-const char kSubscriptionName[] = "testsubscription";
-const char kMessageData[] = "Test Data";
-
-} // namespace
-
-int main(int argc, char** argv) {
- grpc::testing::InitTest(&argc, &argv, true);
- gpr_log(GPR_INFO, "Start PUBSUB client");
-
- std::ostringstream ss;
-
- ss << FLAGS_server_host << ":" << FLAGS_server_port;
-
- std::shared_ptr<grpc::Credentials> creds = grpc::GoogleDefaultCredentials();
- std::shared_ptr<grpc::ChannelInterface> channel =
- grpc::CreateChannel(ss.str(), creds, grpc::ChannelArguments());
-
- grpc::examples::pubsub::Publisher publisher(channel);
- grpc::examples::pubsub::Subscriber subscriber(channel);
-
- GPR_ASSERT(FLAGS_project_id != "");
- ss.str("");
- ss << "/topics/" << FLAGS_project_id << "/" << kTopic;
- grpc::string topic = ss.str();
-
- ss.str("");
- ss << FLAGS_project_id << "/" << kSubscriptionName;
- grpc::string subscription_name = ss.str();
-
- // Clean up test topic and subcription if they exist before.
- grpc::string subscription_topic;
- if (subscriber.GetSubscription(subscription_name, &subscription_topic)
- .IsOk()) {
- subscriber.DeleteSubscription(subscription_name);
- }
-
- if (publisher.GetTopic(topic).IsOk()) publisher.DeleteTopic(topic);
-
- grpc::Status s = publisher.CreateTopic(topic);
- gpr_log(GPR_INFO, "Create topic returns code %d, %s", s.code(),
- s.details().c_str());
- GPR_ASSERT(s.IsOk());
-
- s = publisher.GetTopic(topic);
- gpr_log(GPR_INFO, "Get topic returns code %d, %s", s.code(),
- s.details().c_str());
- GPR_ASSERT(s.IsOk());
-
- std::vector<grpc::string> topics;
- s = publisher.ListTopics(FLAGS_project_id, &topics);
- gpr_log(GPR_INFO, "List topic returns code %d, %s", s.code(),
- s.details().c_str());
- bool topic_found = false;
- for (unsigned int i = 0; i < topics.size(); i++) {
- if (topics[i] == topic) topic_found = true;
- gpr_log(GPR_INFO, "topic: %s", topics[i].c_str());
- }
- GPR_ASSERT(s.IsOk());
- GPR_ASSERT(topic_found);
-
- s = subscriber.CreateSubscription(topic, subscription_name);
- gpr_log(GPR_INFO, "create subscrption returns code %d, %s", s.code(),
- s.details().c_str());
- GPR_ASSERT(s.IsOk());
-
- s = publisher.Publish(topic, kMessageData);
- gpr_log(GPR_INFO, "Publish %s returns code %d, %s", kMessageData, s.code(),
- s.details().c_str());
- GPR_ASSERT(s.IsOk());
-
- grpc::string data;
- s = subscriber.Pull(subscription_name, &data);
- gpr_log(GPR_INFO, "Pull %s", data.c_str());
-
- s = subscriber.DeleteSubscription(subscription_name);
- gpr_log(GPR_INFO, "Delete subscription returns code %d, %s", s.code(),
- s.details().c_str());
- GPR_ASSERT(s.IsOk());
-
- s = publisher.DeleteTopic(topic);
- gpr_log(GPR_INFO, "Delete topic returns code %d, %s", s.code(),
- s.details().c_str());
- GPR_ASSERT(s.IsOk());
-
- subscriber.Shutdown();
- publisher.Shutdown();
- return 0;
-}
diff --git a/examples/pubsub/publisher.cc b/examples/pubsub/publisher.cc
deleted file mode 100644
index 458050af73..0000000000
--- a/examples/pubsub/publisher.cc
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- *
- * Copyright 2015, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <sstream>
-
-#include <grpc++/client_context.h>
-
-#include "examples/pubsub/publisher.h"
-
-using tech::pubsub::Topic;
-using tech::pubsub::DeleteTopicRequest;
-using tech::pubsub::GetTopicRequest;
-using tech::pubsub::PublisherService;
-using tech::pubsub::ListTopicsRequest;
-using tech::pubsub::ListTopicsResponse;
-using tech::pubsub::PublishRequest;
-using tech::pubsub::PubsubMessage;
-
-namespace grpc {
-namespace examples {
-namespace pubsub {
-
-Publisher::Publisher(std::shared_ptr<ChannelInterface> channel)
- : stub_(PublisherService::NewStub(channel)) {}
-
-void Publisher::Shutdown() { stub_.reset(); }
-
-Status Publisher::CreateTopic(const grpc::string& topic) {
- Topic request;
- Topic response;
- request.set_name(topic);
- ClientContext context;
-
- return stub_->CreateTopic(&context, request, &response);
-}
-
-Status Publisher::ListTopics(const grpc::string& project_id,
- std::vector<grpc::string>* topics) {
- ListTopicsRequest request;
- ListTopicsResponse response;
- ClientContext context;
-
- std::ostringstream ss;
- ss << "cloud.googleapis.com/project in (/projects/" << project_id << ")";
- request.set_query(ss.str());
-
- Status s = stub_->ListTopics(&context, request, &response);
-
- tech::pubsub::Topic topic;
- for (int i = 0; i < response.topic_size(); i++) {
- topic = response.topic(i);
- topics->push_back(topic.name());
- }
-
- return s;
-}
-
-Status Publisher::GetTopic(const grpc::string& topic) {
- GetTopicRequest request;
- Topic response;
- ClientContext context;
-
- request.set_topic(topic);
-
- return stub_->GetTopic(&context, request, &response);
-}
-
-Status Publisher::DeleteTopic(const grpc::string& topic) {
- DeleteTopicRequest request;
- proto2::Empty response;
- ClientContext context;
-
- request.set_topic(topic);
-
- return stub_->DeleteTopic(&context, request, &response);
-}
-
-Status Publisher::Publish(const grpc::string& topic, const grpc::string& data) {
- PublishRequest request;
- proto2::Empty response;
- ClientContext context;
-
- request.mutable_message()->set_data(data);
- request.set_topic(topic);
-
- return stub_->Publish(&context, request, &response);
-}
-
-} // namespace pubsub
-} // namespace examples
-} // namespace grpc
diff --git a/examples/pubsub/publisher_test.cc b/examples/pubsub/publisher_test.cc
deleted file mode 100644
index 6b9dcacc49..0000000000
--- a/examples/pubsub/publisher_test.cc
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- *
- * Copyright 2015, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
-#include <grpc++/client_context.h>
-#include <grpc++/create_channel.h>
-#include <grpc++/server.h>
-#include <grpc++/server_builder.h>
-#include <grpc++/server_context.h>
-#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <gtest/gtest.h>
-
-#include "examples/pubsub/publisher.h"
-#include "test/core/util/port.h"
-#include "test/core/util/test_config.h"
-
-using grpc::ChannelInterface;
-
-namespace grpc {
-namespace testing {
-namespace {
-
-const char kProjectId[] = "project id";
-const char kTopic[] = "test topic";
-const char kMessageData[] = "test message data";
-
-class PublisherServiceImpl : public tech::pubsub::PublisherService::Service {
- public:
- Status CreateTopic(::grpc::ServerContext* context,
- const ::tech::pubsub::Topic* request,
- ::tech::pubsub::Topic* response) GRPC_OVERRIDE {
- EXPECT_EQ(request->name(), kTopic);
- return Status::OK;
- }
-
- Status Publish(ServerContext* context,
- const ::tech::pubsub::PublishRequest* request,
- ::proto2::Empty* response) GRPC_OVERRIDE {
- EXPECT_EQ(request->message().data(), kMessageData);
- return Status::OK;
- }
-
- Status GetTopic(ServerContext* context,
- const ::tech::pubsub::GetTopicRequest* request,
- ::tech::pubsub::Topic* response) GRPC_OVERRIDE {
- EXPECT_EQ(request->topic(), kTopic);
- return Status::OK;
- }
-
- Status ListTopics(
- ServerContext* context, const ::tech::pubsub::ListTopicsRequest* request,
- ::tech::pubsub::ListTopicsResponse* response) GRPC_OVERRIDE {
- std::ostringstream ss;
- ss << "cloud.googleapis.com/project in (/projects/" << kProjectId << ")";
- EXPECT_EQ(request->query(), ss.str());
- response->add_topic()->set_name(kTopic);
- return Status::OK;
- }
-
- Status DeleteTopic(ServerContext* context,
- const ::tech::pubsub::DeleteTopicRequest* request,
- ::proto2::Empty* response) GRPC_OVERRIDE {
- EXPECT_EQ(request->topic(), kTopic);
- return Status::OK;
- }
-};
-
-class PublisherTest : public ::testing::Test {
- protected:
- // Setup a server and a client for PublisherService.
- void SetUp() GRPC_OVERRIDE {
- int port = grpc_pick_unused_port_or_die();
- server_address_ << "localhost:" << port;
- ServerBuilder builder;
- builder.AddListeningPort(server_address_.str(),
- grpc::InsecureServerCredentials());
- builder.RegisterService(&service_);
- server_ = builder.BuildAndStart();
-
- channel_ = CreateChannel(server_address_.str(), grpc::InsecureCredentials(),
- ChannelArguments());
-
- publisher_.reset(new grpc::examples::pubsub::Publisher(channel_));
- }
-
- void TearDown() GRPC_OVERRIDE {
- server_->Shutdown();
- publisher_->Shutdown();
- }
-
- std::ostringstream server_address_;
- std::unique_ptr<Server> server_;
- PublisherServiceImpl service_;
-
- std::shared_ptr<ChannelInterface> channel_;
-
- std::unique_ptr<grpc::examples::pubsub::Publisher> publisher_;
-};
-
-TEST_F(PublisherTest, TestPublisher) {
- EXPECT_TRUE(publisher_->CreateTopic(kTopic).IsOk());
-
- EXPECT_TRUE(publisher_->Publish(kTopic, kMessageData).IsOk());
-
- EXPECT_TRUE(publisher_->GetTopic(kTopic).IsOk());
-
- std::vector<grpc::string> topics;
- EXPECT_TRUE(publisher_->ListTopics(kProjectId, &topics).IsOk());
- EXPECT_EQ(topics.size(), static_cast<size_t>(1));
- EXPECT_EQ(topics[0], kTopic);
-}
-
-} // namespace
-} // namespace testing
-} // namespace grpc
-
-int main(int argc, char** argv) {
- grpc_test_init(argc, argv);
- ::testing::InitGoogleTest(&argc, argv);
- gpr_log(GPR_INFO, "Start test ...");
- int result = RUN_ALL_TESTS();
- return result;
-}
diff --git a/examples/pubsub/subscriber.cc b/examples/pubsub/subscriber.cc
deleted file mode 100644
index d9e0292ba0..0000000000
--- a/examples/pubsub/subscriber.cc
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- *
- * Copyright 2015, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <grpc++/client_context.h>
-
-#include "examples/pubsub/subscriber.h"
-
-using tech::pubsub::Topic;
-using tech::pubsub::DeleteTopicRequest;
-using tech::pubsub::GetTopicRequest;
-using tech::pubsub::SubscriberService;
-using tech::pubsub::ListTopicsRequest;
-using tech::pubsub::ListTopicsResponse;
-using tech::pubsub::PublishRequest;
-using tech::pubsub::PubsubMessage;
-
-namespace grpc {
-namespace examples {
-namespace pubsub {
-
-Subscriber::Subscriber(std::shared_ptr<ChannelInterface> channel)
- : stub_(SubscriberService::NewStub(channel)) {}
-
-void Subscriber::Shutdown() { stub_.reset(); }
-
-Status Subscriber::CreateSubscription(const grpc::string& topic,
- const grpc::string& name) {
- tech::pubsub::Subscription request;
- tech::pubsub::Subscription response;
- ClientContext context;
-
- request.set_topic(topic);
- request.set_name(name);
-
- return stub_->CreateSubscription(&context, request, &response);
-}
-
-Status Subscriber::GetSubscription(const grpc::string& name,
- grpc::string* topic) {
- tech::pubsub::GetSubscriptionRequest request;
- tech::pubsub::Subscription response;
- ClientContext context;
-
- request.set_subscription(name);
-
- Status s = stub_->GetSubscription(&context, request, &response);
- *topic = response.topic();
- return s;
-}
-
-Status Subscriber::DeleteSubscription(const grpc::string& name) {
- tech::pubsub::DeleteSubscriptionRequest request;
- proto2::Empty response;
- ClientContext context;
-
- request.set_subscription(name);
-
- return stub_->DeleteSubscription(&context, request, &response);
-}
-
-Status Subscriber::Pull(const grpc::string& name, grpc::string* data) {
- tech::pubsub::PullRequest request;
- tech::pubsub::PullResponse response;
- ClientContext context;
-
- request.set_subscription(name);
- Status s = stub_->Pull(&context, request, &response);
- if (s.IsOk()) {
- tech::pubsub::PubsubEvent event = response.pubsub_event();
- if (event.has_message()) {
- *data = event.message().data();
- }
- tech::pubsub::AcknowledgeRequest ack;
- proto2::Empty empty;
- ClientContext ack_context;
- ack.set_subscription(name);
- ack.add_ack_id(response.ack_id());
- stub_->Acknowledge(&ack_context, ack, &empty);
- }
- return s;
-}
-
-} // namespace pubsub
-} // namespace examples
-} // namespace grpc
diff --git a/examples/pubsub/subscriber_test.cc b/examples/pubsub/subscriber_test.cc
deleted file mode 100644
index b0e7fc034b..0000000000
--- a/examples/pubsub/subscriber_test.cc
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- *
- * Copyright 2015, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
-
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
-#include <grpc++/client_context.h>
-#include <grpc++/create_channel.h>
-#include <grpc++/server.h>
-#include <grpc++/server_builder.h>
-#include <grpc++/server_context.h>
-#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <gtest/gtest.h>
-
-#include "examples/pubsub/subscriber.h"
-#include "test/core/util/port.h"
-#include "test/core/util/test_config.h"
-
-namespace grpc {
-namespace testing {
-namespace {
-
-const char kTopic[] = "test topic";
-const char kSubscriptionName[] = "subscription name";
-const char kData[] = "Message data";
-
-class SubscriberServiceImpl : public tech::pubsub::SubscriberService::Service {
- public:
- Status CreateSubscription(
- ServerContext* context, const tech::pubsub::Subscription* request,
- tech::pubsub::Subscription* response) GRPC_OVERRIDE {
- EXPECT_EQ(request->topic(), kTopic);
- EXPECT_EQ(request->name(), kSubscriptionName);
- return Status::OK;
- }
-
- Status GetSubscription(ServerContext* context,
- const tech::pubsub::GetSubscriptionRequest* request,
- tech::pubsub::Subscription* response) GRPC_OVERRIDE {
- EXPECT_EQ(request->subscription(), kSubscriptionName);
- response->set_topic(kTopic);
- return Status::OK;
- }
-
- Status DeleteSubscription(
- ServerContext* context,
- const tech::pubsub::DeleteSubscriptionRequest* request,
- proto2::Empty* response) GRPC_OVERRIDE {
- EXPECT_EQ(request->subscription(), kSubscriptionName);
- return Status::OK;
- }
-
- Status Pull(ServerContext* context, const tech::pubsub::PullRequest* request,
- tech::pubsub::PullResponse* response) GRPC_OVERRIDE {
- EXPECT_EQ(request->subscription(), kSubscriptionName);
- response->set_ack_id("1");
- response->mutable_pubsub_event()->mutable_message()->set_data(kData);
- return Status::OK;
- }
-
- Status Acknowledge(ServerContext* context,
- const tech::pubsub::AcknowledgeRequest* request,
- proto2::Empty* response) GRPC_OVERRIDE {
- return Status::OK;
- }
-};
-
-class SubscriberTest : public ::testing::Test {
- protected:
- // Setup a server and a client for SubscriberService.
- void SetUp() GRPC_OVERRIDE {
- int port = grpc_pick_unused_port_or_die();
- server_address_ << "localhost:" << port;
- ServerBuilder builder;
- builder.AddListeningPort(server_address_.str(),
- grpc::InsecureServerCredentials());
- builder.RegisterService(&service_);
- server_ = builder.BuildAndStart();
-
- channel_ = CreateChannel(server_address_.str(), grpc::InsecureCredentials(),
- ChannelArguments());
-
- subscriber_.reset(new grpc::examples::pubsub::Subscriber(channel_));
- }
-
- void TearDown() GRPC_OVERRIDE {
- server_->Shutdown();
- subscriber_->Shutdown();
- }
-
- std::ostringstream server_address_;
- std::unique_ptr<Server> server_;
- SubscriberServiceImpl service_;
-
- std::shared_ptr<ChannelInterface> channel_;
-
- std::unique_ptr<grpc::examples::pubsub::Subscriber> subscriber_;
-};
-
-TEST_F(SubscriberTest, TestSubscriber) {
- EXPECT_TRUE(
- subscriber_->CreateSubscription(kTopic, kSubscriptionName).IsOk());
-
- grpc::string topic;
- EXPECT_TRUE(subscriber_->GetSubscription(kSubscriptionName, &topic).IsOk());
- EXPECT_EQ(topic, kTopic);
-
- grpc::string data;
- EXPECT_TRUE(subscriber_->Pull(kSubscriptionName, &data).IsOk());
-
- EXPECT_TRUE(subscriber_->DeleteSubscription(kSubscriptionName).IsOk());
-}
-
-} // namespace
-} // namespace testing
-} // namespace grpc
-
-int main(int argc, char** argv) {
- grpc_test_init(argc, argv);
- ::testing::InitGoogleTest(&argc, argv);
- gpr_log(GPR_INFO, "Start test ...");
- int result = RUN_ALL_TESTS();
- return result;
-}
diff --git a/examples/python/helloworld/.gitignore b/examples/python/helloworld/.gitignore
new file mode 100644
index 0000000000..0d20b6487c
--- /dev/null
+++ b/examples/python/helloworld/.gitignore
@@ -0,0 +1 @@
+*.pyc
diff --git a/examples/python/helloworld/README.md b/examples/python/helloworld/README.md
new file mode 100644
index 0000000000..d199c401ec
--- /dev/null
+++ b/examples/python/helloworld/README.md
@@ -0,0 +1,116 @@
+# gRPC Python Hello World
+
+This is a quick introduction with a simple example and installation instructions: for a more complete tutorial see [gRPC Basics: Python](examples/python/route_guide).
+
+### Install gRPC
+Make sure you have built gRPC Python from source on your system. Follow the instructions here:
+[https://github.com/grpc/grpc/blob/master/src/python/README.md](https://github.com/grpc/grpc/blob/master/src/python/README.md).
+
+This gives you a python virtual environment with installed gRPC Python
+in GRPC_ROOT/python2.7_virtual_environment. GRPC_ROOT is the path to which you
+have cloned the [gRPC git repo](https://github.com/grpc/grpc).
+
+### Get the source code
+
+The example code for our Hello World and our other examples live in the `examples`
+directory. Clone this repository to your local machine by running the
+following command:
+
+
+```sh
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Change your current directory to examples/python/helloworld
+
+```sh
+$ cd examples/python/helloworld/
+```
+
+### Defining a service
+
+The first step in creating our example is to define a *service*: an RPC
+service specifies the methods that can be called remotely with their parameters
+and return types. As you saw in the
+[overview](#protocolbuffers) above, gRPC does this using [protocol
+buffers](https://developers.google.com/protocol-buffers/docs/overview). We
+use the protocol buffers interface definition language (IDL) to define our
+service methods, and define the parameters and return
+types as protocol buffer message types. Both the client and the
+server use interface code generated from the service definition.
+
+Here's our example service definition. The `Greeting`
+service has one method, `hello`, that lets the server receive a single
+`HelloRequest`
+message from the remote client containing the user's name, then send back
+a greeting in a single `HelloReply`. This is the simplest type of RPC you
+can specify in gRPC.
+
+```
+syntax = "proto3";
+
+option java_package = "io.grpc.examples";
+
+package helloworld;
+
+// The greeting service definition.
+service Greeter {
+ // Sends a greeting
+ rpc SayHello (HelloRequest) returns (HelloReply) {}
+}
+
+// The request message containing the user's name.
+message HelloRequest {
+ string name = 1;
+}
+
+// The response message containing the greetings
+message HelloReply {
+ string message = 1;
+}
+
+```
+
+<a name="generating"></a>
+### Generating gRPC code
+
+Once we've defined our service, we use the protocol buffer compiler
+`protoc` to generate the special client and server code we need to create
+our application. The generated code contains both stub code for clients to
+use and an abstract interface for servers to implement, both with the method
+defined in our `Greeting` service.
+
+To generate the client and server side interfaces:
+
+```sh
+$ ./run_codegen.sh
+```
+Which internally invokes the proto-compiler as:
+
+```sh
+$ protoc -I ../../protos --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_python_plugin` ../../protos/helloworld.proto
+```
+
+Optionally, you can just skip the code generation step as the generated python module has already
+been generated for you (helloworld_pb2.py).
+
+### The client
+
+Client-side code can be found in [greeter_client.py](examples/python/helloworld/greeter_client.py).
+
+You can run the client using:
+
+```sh
+$ ./run_client.sh
+```
+
+
+### The server
+
+Server side code can be found in [greeter_server.py](examples/python/helloworld/greeter_server.py).
+
+You can run the server using:
+
+```sh
+$ ./run_server.sh
+```
diff --git a/examples/python/helloworld/greeter_client.py b/examples/python/helloworld/greeter_client.py
new file mode 100755
index 0000000000..370ce46770
--- /dev/null
+++ b/examples/python/helloworld/greeter_client.py
@@ -0,0 +1,44 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""The Python implementation of the GRPC helloworld.Greeter client."""
+
+import helloworld_pb2
+
+_TIMEOUT_SECONDS = 10
+
+
+def run():
+ with helloworld_pb2.early_adopter_create_Greeter_stub('localhost', 50051) as stub:
+ response = stub.SayHello(helloworld_pb2.HelloRequest(name='you'), _TIMEOUT_SECONDS)
+ print "Greeter client received: " + response.message
+
+
+if __name__ == '__main__':
+ run()
diff --git a/examples/python/helloworld/greeter_server.py b/examples/python/helloworld/greeter_server.py
new file mode 100644
index 0000000000..81353666b1
--- /dev/null
+++ b/examples/python/helloworld/greeter_server.py
@@ -0,0 +1,56 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""The Python implementation of the GRPC helloworld.Greeter server."""
+
+import time
+
+import helloworld_pb2
+
+_ONE_DAY_IN_SECONDS = 60 * 60 * 24
+
+
+class Greeter(helloworld_pb2.EarlyAdopterGreeterServicer):
+
+ def SayHello(self, request, context):
+ return helloworld_pb2.HelloReply(message='Hello, %s!' % request.name)
+
+
+def serve():
+ server = helloworld_pb2.early_adopter_create_Greeter_server(
+ Greeter(), 50051, None, None)
+ server.start()
+ try:
+ while True:
+ time.sleep(_ONE_DAY_IN_SECONDS)
+ except KeyboardInterrupt:
+ server.stop()
+
+if __name__ == '__main__':
+ serve()
diff --git a/examples/python/helloworld/run_client.sh b/examples/python/helloworld/run_client.sh
new file mode 100755
index 0000000000..095e6bc2f0
--- /dev/null
+++ b/examples/python/helloworld/run_client.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This is where you have cloned out the https://github.com/grpc/grpc repository
+# And built gRPC Python.
+# ADJUST THIS PATH TO WHERE YOUR ACTUAL LOCATION IS
+GRPC_ROOT=~/github/grpc
+
+$GRPC_ROOT/python2.7_virtual_environment/bin/python greeter_client.py
diff --git a/examples/python/helloworld/run_codegen.sh b/examples/python/helloworld/run_codegen.sh
new file mode 100755
index 0000000000..4d826c7946
--- /dev/null
+++ b/examples/python/helloworld/run_codegen.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+# Runs the protoc with gRPC plugin to generate protocol messages and gRPC stubs.
+protoc -I ../../protos --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_python_plugin` ../../protos/helloworld.proto
diff --git a/examples/python/helloworld/run_server.sh b/examples/python/helloworld/run_server.sh
new file mode 100755
index 0000000000..13b009e6cc
--- /dev/null
+++ b/examples/python/helloworld/run_server.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# This is where you have cloned out the https://github.com/grpc/grpc repository
+# And built gRPC Python.
+# ADJUST THIS PATH TO WHERE YOUR ACTUAL LOCATION IS
+GRPC_ROOT=~/github/grpc
+
+$GRPC_ROOT/python2.7_virtual_environment/bin/python greeter_server.py
+
diff --git a/examples/python/route_guide/.gitignore b/examples/python/route_guide/.gitignore
new file mode 100644
index 0000000000..0d20b6487c
--- /dev/null
+++ b/examples/python/route_guide/.gitignore
@@ -0,0 +1 @@
+*.pyc
diff --git a/examples/python/route_guide/README.md b/examples/python/route_guide/README.md
new file mode 100644
index 0000000000..dc97892ea5
--- /dev/null
+++ b/examples/python/route_guide/README.md
@@ -0,0 +1,303 @@
+#gRPC Basics: Python
+
+This tutorial provides a basic Python programmer's introduction to working with gRPC. By walking through this example you'll learn how to:
+
+- Define a service in a .proto file.
+- Generate server and client code using the protocol buffer compiler.
+- Use the Python gRPC API to write a simple client and server for your service.
+
+It assumes that you have read the [Getting started](https://github.com/grpc/grpc/tree/master/examples) guide and are familiar with [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). Note that the example in this tutorial uses the proto3 version of the protocol buffers language, which is currently in alpha release:you can find out more in the [proto3 language guide](https://developers.google.com/protocol-buffers/docs/proto3) and see the [release notes](https://github.com/google/protobuf/releases) for the new version in the protocol buffers Github repository.
+
+This isn't a comprehensive guide to using gRPC in Python: more reference documentation is coming soon.
+
+
+## Why use gRPC?
+
+This example is a simple route mapping application that lets clients get information about features on their route, create a summary of their route, and exchange route information such as traffic updates with the server and other clients.
+
+With gRPC you can define your service once in a .proto file and implement clients and servers in any of gRPC's supported languages, which in turn can be run in environments ranging from servers inside Google to your own tablet, with all the complexity of communication between different languages and environments is handled for you by gRPC. You also get all the advantages of working with protocol buffers, including efficient serialization, a simple IDL, and easy interface updating.
+
+## Example code and setup
+
+The example code for this tutorial is in [examples/python/route_guide](examples/python/route_guide). To download the example, clone this repository by running the following command:
+```shell
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Then change your current directory to `examples/python/route_guide`:
+```shell
+$ cd examples/python/route_guide
+```
+
+You also should have the relevant tools installed to generate the server and client interface code - if you don't already, follow the setup instructions in [the Python quick start guide](examples/python).
+
+## Defining the service
+
+Your first step (as you'll know from [Getting started](https://github.com/grpc/grpc/tree/master/examples)) is to define the gRPC *service* and the method *request* and *response* types using [protocol buffers](https://developers.google.com/protocol-buffers/docs/overview). You can see the complete .proto file in [`examples/protos/route_guide.proto`](examples/protos/route_guide.proto).
+
+To define a service, you specify a named `service` in your .proto file:
+
+```protobuf
+service RouteGuide {
+ // (Method definitions not shown)
+}
+```
+
+Then you define `rpc` methods inside your service definition, specifying their request and response types. gRPC lets you define four kinds of service method, all of which are used in the `RouteGuide` service:
+
+- A *simple RPC* where the client sends a request to the server using the stub and waits for a response to come back, just like a normal function call.
+```protobuf
+ // Obtains the feature at a given position.
+ rpc GetFeature(Point) returns (Feature) {}
+```
+
+- A *response-streaming RPC* where the client sends a request to the server and gets a stream to read a sequence of messages back. The client reads from the returned stream until there are no more messages. As you can see in the example, you specify a response-streaming method by placing the `stream` keyword before the *response* type.
+```protobuf
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+```
+
+- A *request-streaming RPC* where the client writes a sequence of messages and sends them to the server, again using a provided stream. Once the client has finished writing the messages, it waits for the server to read them all and return its response. You specify a request-streaming method by placing the `stream` keyword before the *request* type.
+```protobuf
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+```
+
+- A *bidirectionally-streaming RPC* where both sides send a sequence of messages using a read-write stream. The two streams operate independently, so clients and servers can read and write in whatever order they like: for example, the server could wait to receive all the client messages before writing its responses, or it could alternately read a message then write a message, or some other combination of reads and writes. The order of messages in each stream is preserved. You specify this type of method by placing the `stream` keyword before both the request and the response.
+```protobuf
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+```
+
+Your .proto file also contains protocol buffer message type definitions for all the request and response types used in our service methods - for example, here's the `Point` message type:
+```protobuf
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ int32 latitude = 1;
+ int32 longitude = 2;
+}
+```
+
+## Generating client and server code
+
+Next you need to generate the gRPC client and server interfaces from your .proto service definition. You do this using the protocol buffer compiler `protoc` with a special gRPC Python plugin. Make sure you've installed protoc and followed the gRPC Python plugin [installation instructions](https://github.com/grpc/grpc/blob/master/INSTALL) first):
+
+With `protoc` and the gRPC Python plugin installed, use the following command to generate the Python code:
+
+```shell
+$ protoc -I ../../protos --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_python_plugin` ../../protos/route_guide.proto
+```
+
+Note that as we've already provided a version of the generated code in the example repository, running this command regenerates the appropriate file rather than creates a new one. The generated code file is called `route_guide_pb2.py` and contains:
+- classes for the messages defined in route_guide.proto
+- abstract classes for the service defined in route_guide.proto
+ - `EarlyAdopterRouteGuideServicer`, which defines the interface for implementations of the RouteGuide service
+ - `EarlyAdopterRouteGuideServer`, which may be started and stopped
+ - `EarlyAdopterRouteGuideStub`, which can be used by clients to invoke RouteGuide RPCs
+- functions for application use
+ - `early_adopter_create_RouteGuide_server`, which creates a gRPC server given an `EarlyAdopterRouteGuideServicer` object
+ - `early_adopter_create_RouteGuide_stub`, which can be used by clients to create a stub object
+
+<a name="server"></a>
+## Creating the server
+
+First let's look at how you create a `RouteGuide` server. If you're only interested in creating gRPC clients, you can skip this section and go straight to [Creating the client](#client) (though you might find it interesting anyway!).
+
+Creating and running a `RouteGuide` server breaks down into two work items:
+- Implementing the servicer interface generated from our service definition with functions that perform the actual "work" of the service.
+- Running a gRPC server to listen for requests from clients and transmit responses.
+
+You can find the example `RouteGuide` server in [examples/python/route_guide/route_guide_server.py](examples/python/route_guide/route_guide_server.py).
+
+### Implementing RouteGuide
+
+`route_guide_server.py` has a `RouteGuideServicer` class that implements the generated interface `route_guide_pb2.EarlyAdopterRouteGuideServicer`:
+
+```python
+# RouteGuideServicer provides an implementation of the methods of the RouteGuide service.
+class RouteGuideServicer(route_guide_pb2.EarlyAdopterRouteGuideServicer):
+```
+
+`RouteGuideServicer` implements all the `RouteGuide` service methods.
+
+#### Simple RPC
+
+Let's look at the simplest type first, `GetFeature`, which just gets a `Point` from the client and returns the corresponding feature information from its database in a `Feature`.
+
+```python
+ def GetFeature(self, request, context):
+ feature = get_feature(self.db, request)
+ if feature is None:
+ return route_guide_pb2.Feature(name="", location=request)
+ else:
+ return feature
+```
+
+The method is passed a `route_guide_pb2.Point` request for the RPC, and an `RpcContext` object that provides RPC-specific information such as timeout limits. It returns a `route_guide_pb2.Feature` response.
+
+#### Response-streaming RPC
+
+Now let's look at the next method. `ListFeatures` is a response-streaming RPC that sends multiple `Feature`s to the client.
+
+```python
+ def ListFeatures(self, request, context):
+ left = min(request.lo.longitude, request.hi.longitude)
+ right = max(request.lo.longitude, request.hi.longitude)
+ top = max(request.lo.latitude, request.hi.latitude)
+ bottom = min(request.lo.latitude, request.hi.latitude)
+ for feature in self.db:
+ if (feature.location.longitude >= left and
+ feature.location.longitude <= right and
+ feature.location.latitude >= bottom and
+ feature.location.latitude <= top):
+ yield feature
+```
+
+Here the request message is a `route_guide_pb2.Rectangle` within which the client wants to find `Feature`s. Instead of returning a single response the method yields zero or more responses.
+
+#### Request-streaming RPC
+
+The request-streaming method `RecordRoute` uses an [iterator](https://docs.python.org/2/library/stdtypes.html#iterator-types) of request values and returns a single response value.
+
+```python
+ def RecordRoute(self, request_iterator, context):
+ point_count = 0
+ feature_count = 0
+ distance = 0.0
+ prev_point = None
+
+ start_time = time.time()
+ for point in request_iterator:
+ point_count += 1
+ if get_feature(self.db, point):
+ feature_count += 1
+ if prev_point:
+ distance += get_distance(prev_point, point)
+ prev_point = point
+
+ elapsed_time = time.time() - start_time
+ return route_guide_pb2.RouteSummary(point_count=point_count,
+ feature_count=feature_count,
+ distance=int(distance),
+ elapsed_time=int(elapsed_time))
+```
+
+#### Bidirectional streaming RPC
+
+Lastly let's look at the bidirectionally-streaming method `RouteChat`.
+
+```python
+ def RouteChat(self, request_iterator, context):
+ prev_notes = []
+ for new_note in request_iterator:
+ for prev_note in prev_notes:
+ if prev_note.location == new_note.location:
+ yield prev_note
+ prev_notes.append(new_note)
+```
+
+This method's semantics are a combination of those of the request-streaming method and the response-streaming method. It is passed an iterator of request values and is itself an iterator of response values.
+
+### Starting the server
+
+Once you have implemented all the `RouteGuide` methods, the next step is to start up a gRPC server so that clients can actually use your service:
+
+```python
+def serve():
+ server = route_guide_pb2.early_adopter_create_RouteGuide_server(
+ RouteGuideServicer(), 50051, None, None)
+ server.start()
+```
+
+Because `start()` does not block you may need to sleep-loop if there is nothing else for your code to do while serving.
+
+<a name="client"></a>
+## Creating the client
+
+You can see the complete example client code in [examples/python/route_guide/route_guide_client.py](examples/python/route_guide/route_guide_client.py).
+
+### Creating a stub
+
+To call service methods, we first need to create a *stub*.
+
+We use the `early_adopter_create_RouteGuide_stub` function of the `route_guide_pb2` module, generated from our .proto.
+
+```python
+stub = RouteGuide::Stub.new('localhost', 50051)
+```
+
+The returned object implements all the methods defined by the `EarlyAdopterRouteGuideStub` interface, and is also a [context manager](https://docs.python.org/2/library/stdtypes.html#typecontextmanager). All RPCs invoked on the stub must be invoked within the stub's context, so it is common for stubs to be created and used with a [with statement](https://docs.python.org/2/reference/compound_stmts.html#the-with-statement):
+
+```python
+with route_guide_pb2.early_adopter_create_RouteGuide_stub('localhost', 50051) as stub:
+```
+
+### Calling service methods
+
+For RPC methods that return a single response ("response-unary" methods), gRPC Python supports both synchronous (blocking) and asynchronous (non-blocking) control flow semantics. For response-streaming RPC methods, calls immediately return an iterator of response values. Calls to that iterator's `next()` method block until the response to be yielded from the iterator becomes available.
+
+#### Simple RPC
+
+A synchronous call to the simple RPC `GetFeature` is nearly as straightforward as calling a local method. The RPC call waits for the server to respond, and will either return a response or raise an exception:
+
+```python
+feature = stub.GetFeature(point, timeout_in_seconds)
+```
+
+An asynchronous call to `GetFeature` is similar, but like calling a local method asynchronously in a thread pool:
+
+```python
+feature_future = stub.GetFeature.async(point, timeout_in_seconds)
+feature = feature_future.result()
+```
+
+#### Response-streaming RPC
+
+Calling the response-streaming `ListFeatures` is similar to working with sequence types:
+
+```python
+for feature in stub.ListFeatures(rectangle, timeout_in_seconds):
+```
+
+#### Request-streaming RPC
+
+Calling the request-streaming `RecordRoute` is similar to passing a sequence to a local method. Like the simple RPC above that also returns a single response, it can be called synchronously or asynchronously:
+
+```python
+route_summary = stub.RecordRoute(point_sequence, timeout_in_seconds)
+```
+
+```python
+route_summary_future = stub.RecordRoute.async(point_sequence, timeout_in_seconds)
+route_summary = route_summary_future.result()
+```
+
+#### Bidirectional streaming RPC
+
+Calling the bidirectionally-streaming `RouteChat` has (as is the case on the service-side) a combination of the request-streaming and response-streaming semantics:
+
+```python
+for received_route_note in stub.RouteChat(sent_routes, timeout_in_seconds):
+```
+
+## Try it out!
+
+Run the server, which will listen on port 50051:
+
+```shell
+$ python route_guide_server.py
+```
+
+Run the client (in a different terminal):
+
+```shell
+$ python route_guide_client.py
+```
diff --git a/examples/python/route_guide/route_guide_client.py b/examples/python/route_guide/route_guide_client.py
new file mode 100755
index 0000000000..078231543e
--- /dev/null
+++ b/examples/python/route_guide/route_guide_client.py
@@ -0,0 +1,130 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""The Python implementation of the gRPC route guide client."""
+
+import random
+import time
+
+import route_guide_pb2
+import route_guide_resources
+
+_TIMEOUT_SECONDS = 30
+
+
+def make_route_note(message, latitude, longitude):
+ return route_guide_pb2.RouteNote(
+ message=message,
+ location=route_guide_pb2.Point(latitude=latitude, longitude=longitude))
+
+
+def guide_get_one_feature(stub, point):
+ feature = stub.GetFeature(point, _TIMEOUT_SECONDS)
+ if not feature.location:
+ print "Server returned incomplete feature"
+ return
+
+ if feature.name:
+ print "Feature called %s at %s" % (feature.name, feature.location)
+ else:
+ print "Found no feature at %s" % feature.location
+
+
+def guide_get_feature(stub):
+ guide_get_one_feature(stub, route_guide_pb2.Point(latitude=409146138, longitude=-746188906))
+ guide_get_one_feature(stub, route_guide_pb2.Point(latitude=0, longitude=0))
+
+
+def guide_list_features(stub):
+ rect = route_guide_pb2.Rectangle(
+ lo=route_guide_pb2.Point(
+ latitude=400000000, longitude = -750000000),
+ hi=route_guide_pb2.Point(
+ latitude = 420000000, longitude = -730000000))
+ print "Looking for features between 40, -75 and 42, -73"
+
+ features = stub.ListFeatures(rect, _TIMEOUT_SECONDS)
+
+ for feature in features:
+ print "Feature called %s at %s" % (feature.name, feature.location)
+
+
+def generate_route(feature_list):
+ for _ in range(0, 10):
+ random_feature = feature_list[random.randint(0, len(feature_list) - 1)]
+ print "Visiting point %s" % random_feature.location
+ yield random_feature.location
+ time.sleep(random.uniform(0.5, 1.5))
+
+
+def guide_record_route(stub):
+ feature_list = route_guide_resources.read_route_guide_database()
+
+ route_iter = generate_route(feature_list)
+ route_summary = stub.RecordRoute(route_iter, _TIMEOUT_SECONDS)
+ print "Finished trip with %s points " % route_summary.point_count
+ print "Passed %s features " % route_summary.feature_count
+ print "Travelled %s meters " % route_summary.distance
+ print "It took %s seconds " % route_summary.elapsed_time
+
+
+def generate_messages():
+ messages = [
+ make_route_note("First message", 0, 0),
+ make_route_note("Second message", 0, 1),
+ make_route_note("Third message", 1, 0),
+ make_route_note("Fourth message", 0, 0),
+ make_route_note("Fifth message", 1, 0),
+ ]
+ for msg in messages:
+ print "Sending %s at %s" % (msg.message, msg.location)
+ yield msg
+ time.sleep(random.uniform(0.5, 1.0))
+
+
+def guide_route_chat(stub):
+ responses = stub.RouteChat(generate_messages(), _TIMEOUT_SECONDS)
+ for response in responses:
+ print "Received message %s at %s" % (response.message, response.location)
+
+
+def run():
+ with route_guide_pb2.early_adopter_create_RouteGuide_stub('localhost', 50051) as stub:
+ print "-------------- GetFeature --------------"
+ guide_get_feature(stub)
+ print "-------------- ListFeatures --------------"
+ guide_list_features(stub)
+ print "-------------- RecordRoute --------------"
+ guide_record_route(stub)
+ print "-------------- RouteChat --------------"
+ guide_route_chat(stub)
+
+
+if __name__ == '__main__':
+ run()
diff --git a/examples/python/route_guide/route_guide_db.json b/examples/python/route_guide/route_guide_db.json
new file mode 100644
index 0000000000..9d6a980ab7
--- /dev/null
+++ b/examples/python/route_guide/route_guide_db.json
@@ -0,0 +1,601 @@
+[{
+ "location": {
+ "latitude": 407838351,
+ "longitude": -746143763
+ },
+ "name": "Patriots Path, Mendham, NJ 07945, USA"
+}, {
+ "location": {
+ "latitude": 408122808,
+ "longitude": -743999179
+ },
+ "name": "101 New Jersey 10, Whippany, NJ 07981, USA"
+}, {
+ "location": {
+ "latitude": 413628156,
+ "longitude": -749015468
+ },
+ "name": "U.S. 6, Shohola, PA 18458, USA"
+}, {
+ "location": {
+ "latitude": 419999544,
+ "longitude": -740371136
+ },
+ "name": "5 Conners Road, Kingston, NY 12401, USA"
+}, {
+ "location": {
+ "latitude": 414008389,
+ "longitude": -743951297
+ },
+ "name": "Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA"
+}, {
+ "location": {
+ "latitude": 419611318,
+ "longitude": -746524769
+ },
+ "name": "287 Flugertown Road, Livingston Manor, NY 12758, USA"
+}, {
+ "location": {
+ "latitude": 406109563,
+ "longitude": -742186778
+ },
+ "name": "4001 Tremley Point Road, Linden, NJ 07036, USA"
+}, {
+ "location": {
+ "latitude": 416802456,
+ "longitude": -742370183
+ },
+ "name": "352 South Mountain Road, Wallkill, NY 12589, USA"
+}, {
+ "location": {
+ "latitude": 412950425,
+ "longitude": -741077389
+ },
+ "name": "Bailey Turn Road, Harriman, NY 10926, USA"
+}, {
+ "location": {
+ "latitude": 412144655,
+ "longitude": -743949739
+ },
+ "name": "193-199 Wawayanda Road, Hewitt, NJ 07421, USA"
+}, {
+ "location": {
+ "latitude": 415736605,
+ "longitude": -742847522
+ },
+ "name": "406-496 Ward Avenue, Pine Bush, NY 12566, USA"
+}, {
+ "location": {
+ "latitude": 413843930,
+ "longitude": -740501726
+ },
+ "name": "162 Merrill Road, Highland Mills, NY 10930, USA"
+}, {
+ "location": {
+ "latitude": 410873075,
+ "longitude": -744459023
+ },
+ "name": "Clinton Road, West Milford, NJ 07480, USA"
+}, {
+ "location": {
+ "latitude": 412346009,
+ "longitude": -744026814
+ },
+ "name": "16 Old Brook Lane, Warwick, NY 10990, USA"
+}, {
+ "location": {
+ "latitude": 402948455,
+ "longitude": -747903913
+ },
+ "name": "3 Drake Lane, Pennington, NJ 08534, USA"
+}, {
+ "location": {
+ "latitude": 406337092,
+ "longitude": -740122226
+ },
+ "name": "6324 8th Avenue, Brooklyn, NY 11220, USA"
+}, {
+ "location": {
+ "latitude": 406421967,
+ "longitude": -747727624
+ },
+ "name": "1 Merck Access Road, Whitehouse Station, NJ 08889, USA"
+}, {
+ "location": {
+ "latitude": 416318082,
+ "longitude": -749677716
+ },
+ "name": "78-98 Schalck Road, Narrowsburg, NY 12764, USA"
+}, {
+ "location": {
+ "latitude": 415301720,
+ "longitude": -748416257
+ },
+ "name": "282 Lakeview Drive Road, Highland Lake, NY 12743, USA"
+}, {
+ "location": {
+ "latitude": 402647019,
+ "longitude": -747071791
+ },
+ "name": "330 Evelyn Avenue, Hamilton Township, NJ 08619, USA"
+}, {
+ "location": {
+ "latitude": 412567807,
+ "longitude": -741058078
+ },
+ "name": "New York State Reference Route 987E, Southfields, NY 10975, USA"
+}, {
+ "location": {
+ "latitude": 416855156,
+ "longitude": -744420597
+ },
+ "name": "103-271 Tempaloni Road, Ellenville, NY 12428, USA"
+}, {
+ "location": {
+ "latitude": 404663628,
+ "longitude": -744820157
+ },
+ "name": "1300 Airport Road, North Brunswick Township, NJ 08902, USA"
+}, {
+ "location": {
+ "latitude": 407113723,
+ "longitude": -749746483
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 402133926,
+ "longitude": -743613249
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 400273442,
+ "longitude": -741220915
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411236786,
+ "longitude": -744070769
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411633782,
+ "longitude": -746784970
+ },
+ "name": "211-225 Plains Road, Augusta, NJ 07822, USA"
+}, {
+ "location": {
+ "latitude": 415830701,
+ "longitude": -742952812
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 413447164,
+ "longitude": -748712898
+ },
+ "name": "165 Pedersen Ridge Road, Milford, PA 18337, USA"
+}, {
+ "location": {
+ "latitude": 405047245,
+ "longitude": -749800722
+ },
+ "name": "100-122 Locktown Road, Frenchtown, NJ 08825, USA"
+}, {
+ "location": {
+ "latitude": 418858923,
+ "longitude": -746156790
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 417951888,
+ "longitude": -748484944
+ },
+ "name": "650-652 Willi Hill Road, Swan Lake, NY 12783, USA"
+}, {
+ "location": {
+ "latitude": 407033786,
+ "longitude": -743977337
+ },
+ "name": "26 East 3rd Street, New Providence, NJ 07974, USA"
+}, {
+ "location": {
+ "latitude": 417548014,
+ "longitude": -740075041
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 410395868,
+ "longitude": -744972325
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404615353,
+ "longitude": -745129803
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 406589790,
+ "longitude": -743560121
+ },
+ "name": "611 Lawrence Avenue, Westfield, NJ 07090, USA"
+}, {
+ "location": {
+ "latitude": 414653148,
+ "longitude": -740477477
+ },
+ "name": "18 Lannis Avenue, New Windsor, NY 12553, USA"
+}, {
+ "location": {
+ "latitude": 405957808,
+ "longitude": -743255336
+ },
+ "name": "82-104 Amherst Avenue, Colonia, NJ 07067, USA"
+}, {
+ "location": {
+ "latitude": 411733589,
+ "longitude": -741648093
+ },
+ "name": "170 Seven Lakes Drive, Sloatsburg, NY 10974, USA"
+}, {
+ "location": {
+ "latitude": 412676291,
+ "longitude": -742606606
+ },
+ "name": "1270 Lakes Road, Monroe, NY 10950, USA"
+}, {
+ "location": {
+ "latitude": 409224445,
+ "longitude": -748286738
+ },
+ "name": "509-535 Alphano Road, Great Meadows, NJ 07838, USA"
+}, {
+ "location": {
+ "latitude": 406523420,
+ "longitude": -742135517
+ },
+ "name": "652 Garden Street, Elizabeth, NJ 07202, USA"
+}, {
+ "location": {
+ "latitude": 401827388,
+ "longitude": -740294537
+ },
+ "name": "349 Sea Spray Court, Neptune City, NJ 07753, USA"
+}, {
+ "location": {
+ "latitude": 410564152,
+ "longitude": -743685054
+ },
+ "name": "13-17 Stanley Street, West Milford, NJ 07480, USA"
+}, {
+ "location": {
+ "latitude": 408472324,
+ "longitude": -740726046
+ },
+ "name": "47 Industrial Avenue, Teterboro, NJ 07608, USA"
+}, {
+ "location": {
+ "latitude": 412452168,
+ "longitude": -740214052
+ },
+ "name": "5 White Oak Lane, Stony Point, NY 10980, USA"
+}, {
+ "location": {
+ "latitude": 409146138,
+ "longitude": -746188906
+ },
+ "name": "Berkshire Valley Management Area Trail, Jefferson, NJ, USA"
+}, {
+ "location": {
+ "latitude": 404701380,
+ "longitude": -744781745
+ },
+ "name": "1007 Jersey Avenue, New Brunswick, NJ 08901, USA"
+}, {
+ "location": {
+ "latitude": 409642566,
+ "longitude": -746017679
+ },
+ "name": "6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA"
+}, {
+ "location": {
+ "latitude": 408031728,
+ "longitude": -748645385
+ },
+ "name": "1358-1474 New Jersey 57, Port Murray, NJ 07865, USA"
+}, {
+ "location": {
+ "latitude": 413700272,
+ "longitude": -742135189
+ },
+ "name": "367 Prospect Road, Chester, NY 10918, USA"
+}, {
+ "location": {
+ "latitude": 404310607,
+ "longitude": -740282632
+ },
+ "name": "10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA"
+}, {
+ "location": {
+ "latitude": 409319800,
+ "longitude": -746201391
+ },
+ "name": "11 Ward Street, Mount Arlington, NJ 07856, USA"
+}, {
+ "location": {
+ "latitude": 406685311,
+ "longitude": -742108603
+ },
+ "name": "300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA"
+}, {
+ "location": {
+ "latitude": 419018117,
+ "longitude": -749142781
+ },
+ "name": "43 Dreher Road, Roscoe, NY 12776, USA"
+}, {
+ "location": {
+ "latitude": 412856162,
+ "longitude": -745148837
+ },
+ "name": "Swan Street, Pine Island, NY 10969, USA"
+}, {
+ "location": {
+ "latitude": 416560744,
+ "longitude": -746721964
+ },
+ "name": "66 Pleasantview Avenue, Monticello, NY 12701, USA"
+}, {
+ "location": {
+ "latitude": 405314270,
+ "longitude": -749836354
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 414219548,
+ "longitude": -743327440
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 415534177,
+ "longitude": -742900616
+ },
+ "name": "565 Winding Hills Road, Montgomery, NY 12549, USA"
+}, {
+ "location": {
+ "latitude": 406898530,
+ "longitude": -749127080
+ },
+ "name": "231 Rocky Run Road, Glen Gardner, NJ 08826, USA"
+}, {
+ "location": {
+ "latitude": 407586880,
+ "longitude": -741670168
+ },
+ "name": "100 Mount Pleasant Avenue, Newark, NJ 07104, USA"
+}, {
+ "location": {
+ "latitude": 400106455,
+ "longitude": -742870190
+ },
+ "name": "517-521 Huntington Drive, Manchester Township, NJ 08759, USA"
+}, {
+ "location": {
+ "latitude": 400066188,
+ "longitude": -746793294
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418803880,
+ "longitude": -744102673
+ },
+ "name": "40 Mountain Road, Napanoch, NY 12458, USA"
+}, {
+ "location": {
+ "latitude": 414204288,
+ "longitude": -747895140
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 414777405,
+ "longitude": -740615601
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 415464475,
+ "longitude": -747175374
+ },
+ "name": "48 North Road, Forestburgh, NY 12777, USA"
+}, {
+ "location": {
+ "latitude": 404062378,
+ "longitude": -746376177
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 405688272,
+ "longitude": -749285130
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 400342070,
+ "longitude": -748788996
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401809022,
+ "longitude": -744157964
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404226644,
+ "longitude": -740517141
+ },
+ "name": "9 Thompson Avenue, Leonardo, NJ 07737, USA"
+}, {
+ "location": {
+ "latitude": 410322033,
+ "longitude": -747871659
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 407100674,
+ "longitude": -747742727
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418811433,
+ "longitude": -741718005
+ },
+ "name": "213 Bush Road, Stone Ridge, NY 12484, USA"
+}, {
+ "location": {
+ "latitude": 415034302,
+ "longitude": -743850945
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411349992,
+ "longitude": -743694161
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404839914,
+ "longitude": -744759616
+ },
+ "name": "1-17 Bergen Court, New Brunswick, NJ 08901, USA"
+}, {
+ "location": {
+ "latitude": 414638017,
+ "longitude": -745957854
+ },
+ "name": "35 Oakland Valley Road, Cuddebackville, NY 12729, USA"
+}, {
+ "location": {
+ "latitude": 412127800,
+ "longitude": -740173578
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401263460,
+ "longitude": -747964303
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 412843391,
+ "longitude": -749086026
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 418512773,
+ "longitude": -743067823
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404318328,
+ "longitude": -740835638
+ },
+ "name": "42-102 Main Street, Belford, NJ 07718, USA"
+}, {
+ "location": {
+ "latitude": 419020746,
+ "longitude": -741172328
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404080723,
+ "longitude": -746119569
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 401012643,
+ "longitude": -744035134
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 404306372,
+ "longitude": -741079661
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 403966326,
+ "longitude": -748519297
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 405002031,
+ "longitude": -748407866
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 409532885,
+ "longitude": -742200683
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 416851321,
+ "longitude": -742674555
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 406411633,
+ "longitude": -741722051
+ },
+ "name": "3387 Richmond Terrace, Staten Island, NY 10303, USA"
+}, {
+ "location": {
+ "latitude": 413069058,
+ "longitude": -744597778
+ },
+ "name": "261 Van Sickle Road, Goshen, NY 10924, USA"
+}, {
+ "location": {
+ "latitude": 418465462,
+ "longitude": -746859398
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 411733222,
+ "longitude": -744228360
+ },
+ "name": ""
+}, {
+ "location": {
+ "latitude": 410248224,
+ "longitude": -747127767
+ },
+ "name": "3 Hasta Way, Newton, NJ 07860, USA"
+}]
diff --git a/examples/python/route_guide/route_guide_pb2.py b/examples/python/route_guide/route_guide_pb2.py
new file mode 100644
index 0000000000..2a4532bb75
--- /dev/null
+++ b/examples/python/route_guide/route_guide_pb2.py
@@ -0,0 +1,370 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: route_guide.proto
+
+import sys
+_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+from google.protobuf import descriptor_pb2
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor.FileDescriptor(
+ name='route_guide.proto',
+ package='',
+ serialized_pb=_b('\n\x11route_guide.proto\",\n\x05Point\x12\x10\n\x08latitude\x18\x01 \x01(\x05\x12\x11\n\tlongitude\x18\x02 \x01(\x05\"3\n\tRectangle\x12\x12\n\x02lo\x18\x01 \x01(\x0b\x32\x06.Point\x12\x12\n\x02hi\x18\x02 \x01(\x0b\x32\x06.Point\"1\n\x07\x46\x65\x61ture\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x18\n\x08location\x18\x02 \x01(\x0b\x32\x06.Point\"6\n\tRouteNote\x12\x18\n\x08location\x18\x01 \x01(\x0b\x32\x06.Point\x12\x0f\n\x07message\x18\x02 \x01(\t\"b\n\x0cRouteSummary\x12\x13\n\x0bpoint_count\x18\x01 \x01(\x05\x12\x15\n\rfeature_count\x18\x02 \x01(\x05\x12\x10\n\x08\x64istance\x18\x03 \x01(\x05\x12\x14\n\x0c\x65lapsed_time\x18\x04 \x01(\x05\x32\xad\x01\n\nRouteGuide\x12 \n\nGetFeature\x12\x06.Point\x1a\x08.Feature\"\x00\x12(\n\x0cListFeatures\x12\n.Rectangle\x1a\x08.Feature\"\x00\x30\x01\x12(\n\x0bRecordRoute\x12\x06.Point\x1a\r.RouteSummary\"\x00(\x01\x12)\n\tRouteChat\x12\n.RouteNote\x1a\n.RouteNote\"\x00(\x01\x30\x01')
+)
+_sym_db.RegisterFileDescriptor(DESCRIPTOR)
+
+
+
+
+_POINT = _descriptor.Descriptor(
+ name='Point',
+ full_name='Point',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='latitude', full_name='Point.latitude', index=0,
+ number=1, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='longitude', full_name='Point.longitude', index=1,
+ number=2, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=21,
+ serialized_end=65,
+)
+
+
+_RECTANGLE = _descriptor.Descriptor(
+ name='Rectangle',
+ full_name='Rectangle',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='lo', full_name='Rectangle.lo', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='hi', full_name='Rectangle.hi', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=67,
+ serialized_end=118,
+)
+
+
+_FEATURE = _descriptor.Descriptor(
+ name='Feature',
+ full_name='Feature',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='name', full_name='Feature.name', index=0,
+ number=1, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='location', full_name='Feature.location', index=1,
+ number=2, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=120,
+ serialized_end=169,
+)
+
+
+_ROUTENOTE = _descriptor.Descriptor(
+ name='RouteNote',
+ full_name='RouteNote',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='location', full_name='RouteNote.location', index=0,
+ number=1, type=11, cpp_type=10, label=1,
+ has_default_value=False, default_value=None,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='message', full_name='RouteNote.message', index=1,
+ number=2, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=171,
+ serialized_end=225,
+)
+
+
+_ROUTESUMMARY = _descriptor.Descriptor(
+ name='RouteSummary',
+ full_name='RouteSummary',
+ filename=None,
+ file=DESCRIPTOR,
+ containing_type=None,
+ fields=[
+ _descriptor.FieldDescriptor(
+ name='point_count', full_name='RouteSummary.point_count', index=0,
+ number=1, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='feature_count', full_name='RouteSummary.feature_count', index=1,
+ number=2, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='distance', full_name='RouteSummary.distance', index=2,
+ number=3, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ _descriptor.FieldDescriptor(
+ name='elapsed_time', full_name='RouteSummary.elapsed_time', index=3,
+ number=4, type=5, cpp_type=1, label=1,
+ has_default_value=False, default_value=0,
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None),
+ ],
+ extensions=[
+ ],
+ nested_types=[],
+ enum_types=[
+ ],
+ options=None,
+ is_extendable=False,
+ extension_ranges=[],
+ oneofs=[
+ ],
+ serialized_start=227,
+ serialized_end=325,
+)
+
+_RECTANGLE.fields_by_name['lo'].message_type = _POINT
+_RECTANGLE.fields_by_name['hi'].message_type = _POINT
+_FEATURE.fields_by_name['location'].message_type = _POINT
+_ROUTENOTE.fields_by_name['location'].message_type = _POINT
+DESCRIPTOR.message_types_by_name['Point'] = _POINT
+DESCRIPTOR.message_types_by_name['Rectangle'] = _RECTANGLE
+DESCRIPTOR.message_types_by_name['Feature'] = _FEATURE
+DESCRIPTOR.message_types_by_name['RouteNote'] = _ROUTENOTE
+DESCRIPTOR.message_types_by_name['RouteSummary'] = _ROUTESUMMARY
+
+Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), dict(
+ DESCRIPTOR = _POINT,
+ __module__ = 'route_guide_pb2'
+ # @@protoc_insertion_point(class_scope:Point)
+ ))
+_sym_db.RegisterMessage(Point)
+
+Rectangle = _reflection.GeneratedProtocolMessageType('Rectangle', (_message.Message,), dict(
+ DESCRIPTOR = _RECTANGLE,
+ __module__ = 'route_guide_pb2'
+ # @@protoc_insertion_point(class_scope:Rectangle)
+ ))
+_sym_db.RegisterMessage(Rectangle)
+
+Feature = _reflection.GeneratedProtocolMessageType('Feature', (_message.Message,), dict(
+ DESCRIPTOR = _FEATURE,
+ __module__ = 'route_guide_pb2'
+ # @@protoc_insertion_point(class_scope:Feature)
+ ))
+_sym_db.RegisterMessage(Feature)
+
+RouteNote = _reflection.GeneratedProtocolMessageType('RouteNote', (_message.Message,), dict(
+ DESCRIPTOR = _ROUTENOTE,
+ __module__ = 'route_guide_pb2'
+ # @@protoc_insertion_point(class_scope:RouteNote)
+ ))
+_sym_db.RegisterMessage(RouteNote)
+
+RouteSummary = _reflection.GeneratedProtocolMessageType('RouteSummary', (_message.Message,), dict(
+ DESCRIPTOR = _ROUTESUMMARY,
+ __module__ = 'route_guide_pb2'
+ # @@protoc_insertion_point(class_scope:RouteSummary)
+ ))
+_sym_db.RegisterMessage(RouteSummary)
+
+
+import abc
+from grpc._adapter import fore
+from grpc._adapter import rear
+from grpc.framework.assembly import implementations
+from grpc.framework.assembly import utilities
+class EarlyAdopterRouteGuideServicer(object):
+ """<fill me in later!>"""
+ __metaclass__ = abc.ABCMeta
+ @abc.abstractmethod
+ def GetFeature(self, request):
+ raise NotImplementedError()
+ @abc.abstractmethod
+ def ListFeatures(self, request):
+ raise NotImplementedError()
+ @abc.abstractmethod
+ def RecordRoute(self, request_iterator):
+ raise NotImplementedError()
+ @abc.abstractmethod
+ def RouteChat(self, request_iterator):
+ raise NotImplementedError()
+class EarlyAdopterRouteGuideServer(object):
+ """<fill me in later!>"""
+ __metaclass__ = abc.ABCMeta
+ @abc.abstractmethod
+ def start(self):
+ raise NotImplementedError()
+ @abc.abstractmethod
+ def stop(self):
+ raise NotImplementedError()
+class EarlyAdopterRouteGuideStub(object):
+ """<fill me in later!>"""
+ __metaclass__ = abc.ABCMeta
+ @abc.abstractmethod
+ def GetFeature(self, request):
+ raise NotImplementedError()
+ GetFeature.async = None
+ @abc.abstractmethod
+ def ListFeatures(self, request):
+ raise NotImplementedError()
+ ListFeatures.async = None
+ @abc.abstractmethod
+ def RecordRoute(self, request_iterator):
+ raise NotImplementedError()
+ RecordRoute.async = None
+ @abc.abstractmethod
+ def RouteChat(self, request_iterator):
+ raise NotImplementedError()
+ RouteChat.async = None
+def early_adopter_create_RouteGuide_server(servicer, port, root_certificates, key_chain_pairs):
+ method_implementations = {
+ "GetFeature": utilities.unary_unary_inline(servicer.GetFeature),
+ "ListFeatures": utilities.unary_stream_inline(servicer.ListFeatures),
+ "RecordRoute": utilities.stream_unary_inline(servicer.RecordRoute),
+ "RouteChat": utilities.stream_stream_inline(servicer.RouteChat),
+ }
+ import route_guide_pb2
+ import route_guide_pb2
+ import route_guide_pb2
+ import route_guide_pb2
+ request_deserializers = {
+ "GetFeature": route_guide_pb2.Point.FromString,
+ "ListFeatures": route_guide_pb2.Rectangle.FromString,
+ "RecordRoute": route_guide_pb2.Point.FromString,
+ "RouteChat": route_guide_pb2.RouteNote.FromString,
+ }
+ response_serializers = {
+ "GetFeature": lambda x: x.SerializeToString(),
+ "ListFeatures": lambda x: x.SerializeToString(),
+ "RecordRoute": lambda x: x.SerializeToString(),
+ "RouteChat": lambda x: x.SerializeToString(),
+ }
+ link = fore.activated_fore_link(port, request_deserializers, response_serializers, root_certificates, key_chain_pairs)
+ return implementations.assemble_service(method_implementations, link)
+def early_adopter_create_RouteGuide_stub(host, port):
+ method_implementations = {
+ "GetFeature": utilities.unary_unary_inline(None),
+ "ListFeatures": utilities.unary_stream_inline(None),
+ "RecordRoute": utilities.stream_unary_inline(None),
+ "RouteChat": utilities.stream_stream_inline(None),
+ }
+ import route_guide_pb2
+ import route_guide_pb2
+ import route_guide_pb2
+ import route_guide_pb2
+ response_deserializers = {
+ "GetFeature": route_guide_pb2.Feature.FromString,
+ "ListFeatures": route_guide_pb2.Feature.FromString,
+ "RecordRoute": route_guide_pb2.RouteSummary.FromString,
+ "RouteChat": route_guide_pb2.RouteNote.FromString,
+ }
+ request_serializers = {
+ "GetFeature": lambda x: x.SerializeToString(),
+ "ListFeatures": lambda x: x.SerializeToString(),
+ "RecordRoute": lambda x: x.SerializeToString(),
+ "RouteChat": lambda x: x.SerializeToString(),
+ }
+ link = rear.activated_rear_link(host, port, request_serializers, response_deserializers)
+ return implementations.assemble_dynamic_inline_stub(method_implementations, link)
+# @@protoc_insertion_point(module_scope)
diff --git a/examples/python/route_guide/route_guide_resources.py b/examples/python/route_guide/route_guide_resources.py
new file mode 100755
index 0000000000..30c7711019
--- /dev/null
+++ b/examples/python/route_guide/route_guide_resources.py
@@ -0,0 +1,53 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Common resources used in the gRPC route guide example."""
+
+import json
+
+import route_guide_pb2
+
+
+def read_route_guide_database():
+ """Reads the route guide database.
+
+ Returns:
+ The full contents of the route guide database as a sequence of
+ route_guide_pb2.Features.
+ """
+ feature_list = []
+ with open("route_guide_db.json") as route_guide_db_file:
+ for item in json.load(route_guide_db_file):
+ feature = route_guide_pb2.Feature(
+ name=item["name"],
+ location=route_guide_pb2.Point(
+ latitude=item["location"]["latitude"],
+ longitude=item["location"]["longitude"]))
+ feature_list.append(feature)
+ return feature_list
diff --git a/examples/python/route_guide/route_guide_server.py b/examples/python/route_guide/route_guide_server.py
new file mode 100644
index 0000000000..44bbacf5f3
--- /dev/null
+++ b/examples/python/route_guide/route_guide_server.py
@@ -0,0 +1,134 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""The Python implementation of the gRPC route guide server."""
+
+import time
+import math
+
+import route_guide_pb2
+import route_guide_resources
+
+_ONE_DAY_IN_SECONDS = 60 * 60 * 24
+
+
+def get_feature(feature_db, point):
+ """Returns Feature at given location or None."""
+ for feature in feature_db:
+ if feature.location == point:
+ return feature
+ return None
+
+
+def get_distance(start, end):
+ """Distance between two points."""
+ coord_factor = 10000000.0
+ lat_1 = start.latitude / coord_factor
+ lat_2 = end.latitude / coord_factor
+ lon_1 = start.latitude / coord_factor
+ lon_2 = end.longitude / coord_factor
+ lat_rad_1 = math.radians(lat_1)
+ lat_rad_2 = math.radians(lat_2)
+ delta_lat_rad = math.radians(lat_2 - lat_1)
+ delta_lon_rad = math.radians(lon_2 - lon_1)
+
+ a = (pow(math.sin(delta_lat_rad / 2), 2) +
+ (math.cos(lat_rad_1) * math.cos(lat_rad_2) *
+ pow(math.sin(delta_lon_rad / 2), 2)))
+ c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
+ R = 6371000; # metres
+ return R * c;
+
+class RouteGuideServicer(route_guide_pb2.EarlyAdopterRouteGuideServicer):
+ """Provides methods that implement functionality of route guide server."""
+
+ def __init__(self):
+ self.db = route_guide_resources.read_route_guide_database()
+
+ def GetFeature(self, request, context):
+ feature = get_feature(self.db, request)
+ if feature is None:
+ return route_guide_pb2.Feature(name="", location=request)
+ else:
+ return feature
+
+ def ListFeatures(self, request, context):
+ left = min(request.lo.longitude, request.hi.longitude)
+ right = max(request.lo.longitude, request.hi.longitude)
+ top = max(request.lo.latitude, request.hi.latitude)
+ bottom = min(request.lo.latitude, request.hi.latitude)
+ for feature in self.db:
+ if (feature.location.longitude >= left and
+ feature.location.longitude <= right and
+ feature.location.latitude >= bottom and
+ feature.location.latitude <= top):
+ yield feature
+
+ def RecordRoute(self, request_iterator, context):
+ point_count = 0
+ feature_count = 0
+ distance = 0.0
+ prev_point = None
+
+ start_time = time.time()
+ for point in request_iterator:
+ point_count += 1
+ if get_feature(self.db, point):
+ feature_count += 1
+ if prev_point:
+ distance += get_distance(prev_point, point)
+ prev_point = point
+
+ elapsed_time = time.time() - start_time
+ return route_guide_pb2.RouteSummary(point_count=point_count,
+ feature_count=feature_count,
+ distance=int(distance),
+ elapsed_time=int(elapsed_time))
+
+ def RouteChat(self, request_iterator, context):
+ prev_notes = []
+ for new_note in request_iterator:
+ for prev_note in prev_notes:
+ if prev_note.location == new_note.location:
+ yield prev_note
+ prev_notes.append(new_note)
+
+
+def serve():
+ server = route_guide_pb2.early_adopter_create_RouteGuide_server(
+ RouteGuideServicer(), 50051, None, None)
+ server.start()
+ try:
+ while True:
+ time.sleep(_ONE_DAY_IN_SECONDS)
+ except KeyboardInterrupt:
+ server.stop()
+
+if __name__ == '__main__':
+ serve()
diff --git a/examples/python/route_guide/run_client.sh b/examples/python/route_guide/run_client.sh
new file mode 100755
index 0000000000..d2552c2858
--- /dev/null
+++ b/examples/python/route_guide/run_client.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This is where you have cloned out the https://github.com/grpc/grpc repository
+# And built gRPC Python.
+# ADJUST THIS PATH TO WHERE YOUR ACTUAL LOCATION IS
+GRPC_ROOT=~/github/grpc
+
+$GRPC_ROOT/python2.7_virtual_environment/bin/python -B route_guide_client.py
diff --git a/examples/python/route_guide/run_codegen.sh b/examples/python/route_guide/run_codegen.sh
new file mode 100755
index 0000000000..689e0978de
--- /dev/null
+++ b/examples/python/route_guide/run_codegen.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+# Runs the protoc with gRPC plugin to generate protocol messages and gRPC stubs.
+protoc -I . --python_out=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_python_plugin` route_guide.proto
diff --git a/examples/python/route_guide/run_server.sh b/examples/python/route_guide/run_server.sh
new file mode 100755
index 0000000000..8f759250c8
--- /dev/null
+++ b/examples/python/route_guide/run_server.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# This is where you have cloned out the https://github.com/grpc/grpc repository
+# And built gRPC Python.
+# ADJUST THIS PATH TO WHERE YOUR ACTUAL LOCATION IS
+GRPC_ROOT=~/github/grpc
+
+$GRPC_ROOT/python2.7_virtual_environment/bin/python -B route_guide_server.py
diff --git a/examples/ruby/.gitignore b/examples/ruby/.gitignore
new file mode 100644
index 0000000000..62fcb4fa94
--- /dev/null
+++ b/examples/ruby/.gitignore
@@ -0,0 +1,15 @@
+/.bundle/
+/.yardoc
+/Gemfile.lock
+/_yardoc/
+/coverage/
+/doc/
+/pkg/
+/spec/reports/
+/tmp/
+*.bundle
+*.so
+*.o
+*.a
+mkmf.log
+vendor
diff --git a/examples/ruby/Gemfile b/examples/ruby/Gemfile
new file mode 100644
index 0000000000..65d3f0ad4a
--- /dev/null
+++ b/examples/ruby/Gemfile
@@ -0,0 +1,6 @@
+# -*- ruby -*-
+# encoding: utf-8
+
+source 'https://rubygems.org/'
+
+gem 'grpc', :git => 'https://github.com/grpc/grpc.git', :submodules => true, glob: 'src/ruby/*.gemspec'
diff --git a/examples/ruby/README.md b/examples/ruby/README.md
new file mode 100644
index 0000000000..dc21f5dd49
--- /dev/null
+++ b/examples/ruby/README.md
@@ -0,0 +1,61 @@
+gRPC in 3 minutes (Ruby)
+========================
+
+BACKGROUND
+-------------
+For this sample, we've already generated the server and client stubs from [helloworld.proto][]
+
+PREREQUISITES
+-------------
+
+- Ruby 2.x
+This requires Ruby 2.x, as the gRPC API surface uses keyword args.
+If you don't have that installed locally, you can use [RVM][] to use Ruby 2.x for testing without upgrading the version of Ruby on your whole system.
+RVM is also useful if you don't have the necessary privileges to update your system's Ruby.
+
+ ```sh
+ $ # RVM installation as specified at https://rvm.io/rvm/install
+ $ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
+ $ \curl -sSL https://get.rvm.io | bash -s stable --ruby=ruby-2
+ $
+ $ # follow the instructions to ensure that your're using the latest stable version of Ruby
+ $ # and that the rvm command is installed
+ ```
+- *N.B* Make sure your run `source $HOME/.rvm/scripts/rvm` as instructed to complete the set-up of RVM.
+
+INSTALL
+-------
+
+- Clone this repository
+- Use bundler to install the example package's dependencies
+
+ ```sh
+ $ # from this directory
+ $ gem install bundler # if you don't already have bundler available
+ $ bundle install
+ ```
+
+Try it!
+-------
+
+- Run the server
+
+ ```sh
+ $ # from this directory
+ $ bundle exec ./greeter_server.rb &
+ ```
+
+- Run the client
+
+ ```sh
+ $ # from this directory
+ $ bundle exec ./greeter_client.rb
+ ```
+
+Tutorial
+--------
+
+You can find a more detailed tutorial in [gRPC Basics: Ruby](examples/ruby/route_guide/README.md)
+
+[helloworld.proto]:examples/protos/helloworld.proto
+[RVM]:https://www.rvm.io/
diff --git a/examples/ruby/greeter_client.rb b/examples/ruby/greeter_client.rb
new file mode 100755
index 0000000000..e6cb4bad33
--- /dev/null
+++ b/examples/ruby/greeter_client.rb
@@ -0,0 +1,50 @@
+#!/usr/bin/env ruby
+
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Sample app that connects to a Greeter service.
+#
+# Usage: $ path/to/greeter_client.rb
+
+this_dir = File.expand_path(File.dirname(__FILE__))
+lib_dir = File.join(this_dir, 'lib')
+$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
+
+require 'grpc'
+require 'helloworld_services'
+
+def main
+ stub = Helloworld::Greeter::Stub.new('localhost:50051')
+ user = ARGV.size > 0 ? ARGV[0] : 'world'
+ message = stub.say_hello(Helloworld::HelloRequest.new(name: user)).message
+ p "Greeting: #{message}"
+end
+
+main
diff --git a/examples/ruby/greeter_server.rb b/examples/ruby/greeter_server.rb
new file mode 100755
index 0000000000..d4f9cf7d0f
--- /dev/null
+++ b/examples/ruby/greeter_server.rb
@@ -0,0 +1,60 @@
+#!/usr/bin/env ruby
+
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Sample gRPC server that implements the Greeter::Helloworld service.
+#
+# Usage: $ path/to/greeter_server.rb
+
+this_dir = File.expand_path(File.dirname(__FILE__))
+lib_dir = File.join(this_dir, 'lib')
+$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
+
+require 'grpc'
+require 'helloworld_services'
+
+# GreeterServer is simple server that implements the Helloworld Greeter server.
+class GreeterServer < Helloworld::Greeter::Service
+ # say_hello implements the SayHello rpc method.
+ def say_hello(hello_req, _unused_call)
+ Helloworld::HelloReply.new(message: "Hello #{hello_req.name}")
+ end
+end
+
+# main starts an RpcServer that receives requests to GreeterServer at the sample
+# server port.
+def main
+ s = GRPC::RpcServer.new
+ s.add_http2_port('0.0.0.0:50051')
+ s.handle(GreeterServer)
+ s.run
+end
+
+main
diff --git a/examples/ruby/grpc-demo.gemspec b/examples/ruby/grpc-demo.gemspec
new file mode 100644
index 0000000000..2cc1eb8f41
--- /dev/null
+++ b/examples/ruby/grpc-demo.gemspec
@@ -0,0 +1,23 @@
+# -*- ruby -*-
+# encoding: utf-8
+
+Gem::Specification.new do |s|
+ s.name = 'grpc-demo'
+ s.version = '0.5.0'
+ s.authors = ['gRPC Authors']
+ s.email = 'temiola@google.com'
+ s.homepage = 'https://github.com/grpc/grpc'
+ s.summary = 'gRPC Ruby overview sample'
+ s.description = 'Simple demo of using gRPC from Ruby'
+
+ s.files = `git ls-files -- ruby/*`.split("\n")
+ s.executables = `git ls-files -- ruby/greeter*.rb ruby/route_guide/*.rb`.split("\n").map do |f|
+ File.basename(f)
+ end
+ s.require_paths = ['lib']
+ s.platform = Gem::Platform::RUBY
+
+ s.add_dependency 'grpc', '~> 0.6'
+
+ s.add_development_dependency 'bundler', '~> 1.7'
+end
diff --git a/examples/ruby/lib/helloworld.rb b/examples/ruby/lib/helloworld.rb
new file mode 100644
index 0000000000..82bdd78e2a
--- /dev/null
+++ b/examples/ruby/lib/helloworld.rb
@@ -0,0 +1,18 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: helloworld.proto
+
+require 'google/protobuf'
+
+Google::Protobuf::DescriptorPool.generated_pool.build do
+ add_message "helloworld.HelloRequest" do
+ optional :name, :string, 1
+ end
+ add_message "helloworld.HelloReply" do
+ optional :message, :string, 1
+ end
+end
+
+module Helloworld
+ HelloRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloRequest").msgclass
+ HelloReply = Google::Protobuf::DescriptorPool.generated_pool.lookup("helloworld.HelloReply").msgclass
+end
diff --git a/examples/ruby/lib/helloworld_services.rb b/examples/ruby/lib/helloworld_services.rb
new file mode 100644
index 0000000000..7da45ebc6b
--- /dev/null
+++ b/examples/ruby/lib/helloworld_services.rb
@@ -0,0 +1,24 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# Source: helloworld.proto for package 'helloworld'
+
+require 'grpc'
+require 'helloworld'
+
+module Helloworld
+ module Greeter
+
+ # TODO: add proto service documentation here
+ class Service
+
+ include GRPC::GenericService
+
+ self.marshal_class_method = :encode
+ self.unmarshal_class_method = :decode
+ self.service_name = 'helloworld.Greeter'
+
+ rpc :SayHello, HelloRequest, HelloReply
+ end
+
+ Stub = Service.rpc_stub_class
+ end
+end
diff --git a/examples/ruby/lib/route_guide.rb b/examples/ruby/lib/route_guide.rb
new file mode 100644
index 0000000000..98bac8395c
--- /dev/null
+++ b/examples/ruby/lib/route_guide.rb
@@ -0,0 +1,37 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# source: route_guide.proto
+
+require 'google/protobuf'
+
+Google::Protobuf::DescriptorPool.generated_pool.build do
+ add_message "examples.Point" do
+ optional :latitude, :int32, 1
+ optional :longitude, :int32, 2
+ end
+ add_message "examples.Rectangle" do
+ optional :lo, :message, 1, "examples.Point"
+ optional :hi, :message, 2, "examples.Point"
+ end
+ add_message "examples.Feature" do
+ optional :name, :string, 1
+ optional :location, :message, 2, "examples.Point"
+ end
+ add_message "examples.RouteNote" do
+ optional :location, :message, 1, "examples.Point"
+ optional :message, :string, 2
+ end
+ add_message "examples.RouteSummary" do
+ optional :point_count, :int32, 1
+ optional :feature_count, :int32, 2
+ optional :distance, :int32, 3
+ optional :elapsed_time, :int32, 4
+ end
+end
+
+module Examples
+ Point = Google::Protobuf::DescriptorPool.generated_pool.lookup("examples.Point").msgclass
+ Rectangle = Google::Protobuf::DescriptorPool.generated_pool.lookup("examples.Rectangle").msgclass
+ Feature = Google::Protobuf::DescriptorPool.generated_pool.lookup("examples.Feature").msgclass
+ RouteNote = Google::Protobuf::DescriptorPool.generated_pool.lookup("examples.RouteNote").msgclass
+ RouteSummary = Google::Protobuf::DescriptorPool.generated_pool.lookup("examples.RouteSummary").msgclass
+end
diff --git a/examples/ruby/lib/route_guide_services.rb b/examples/ruby/lib/route_guide_services.rb
new file mode 100644
index 0000000000..6e07653c42
--- /dev/null
+++ b/examples/ruby/lib/route_guide_services.rb
@@ -0,0 +1,27 @@
+# Generated by the protocol buffer compiler. DO NOT EDIT!
+# Source: route_guide.proto for package 'examples'
+
+require 'grpc'
+require 'route_guide'
+
+module Examples
+ module RouteGuide
+
+ # TODO: add proto service documentation here
+ class Service
+
+ include GRPC::GenericService
+
+ self.marshal_class_method = :encode
+ self.unmarshal_class_method = :decode
+ self.service_name = 'examples.RouteGuide'
+
+ rpc :GetFeature, Point, Feature
+ rpc :ListFeatures, Rectangle, stream(Feature)
+ rpc :RecordRoute, stream(Point), RouteSummary
+ rpc :RouteChat, stream(RouteNote), stream(RouteNote)
+ end
+
+ Stub = Service.rpc_stub_class
+ end
+end
diff --git a/examples/ruby/route_guide/README.md b/examples/ruby/route_guide/README.md
new file mode 100644
index 0000000000..c7231fb43f
--- /dev/null
+++ b/examples/ruby/route_guide/README.md
@@ -0,0 +1,285 @@
+#gRPC Basics: Ruby
+
+This tutorial provides a basic Ruby programmer's introduction to working with gRPC. By walking through this example you'll learn how to:
+
+- Define a service in a .proto file.
+- Generate server and client code using the protocol buffer compiler.
+- Use the Ruby gRPC API to write a simple client and server for your service.
+
+It assumes that you have read the [Getting started](https://github.com/grpc/grpc/tree/master/examples) guide and are familiar with [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). Note that the example in this tutorial uses the proto3 version of the protocol buffers language, which is currently in alpha release:you can find out more in the [proto3 language guide](https://developers.google.com/protocol-buffers/docs/proto3) and see the [release notes](https://github.com/google/protobuf/releases) for the new version in the protocol buffers Github repository.
+
+This isn't a comprehensive guide to using gRPC in Ruby: more reference documentation is coming soon.
+
+## Why use gRPC?
+
+Our example is a simple route mapping application that lets clients get information about features on their route, create a summary of their route, and exchange route information such as traffic updates with the server and other clients.
+
+With gRPC we can define our service once in a .proto file and implement clients and servers in any of gRPC's supported languages, which in turn can be run in environments ranging from servers inside Google to your own tablet - all the complexity of communication between different languages and environments is handled for you by gRPC. We also get all the advantages of working with protocol buffers, including efficient serialization, a simple IDL, and easy interface updating.
+
+## Example code and setup
+
+The example code for our tutorial is in [examples/ruby/route_guide](examples/ruby/route_guide). To download the example, clone this repository by running the following command:
+```shell
+$ git clone https://github.com/grpc/grpc.git
+```
+
+Then change your current directory to `examples/ruby/route_guide`:
+```shell
+$ cd examples/ruby/route_guide
+```
+
+You also should have the relevant tools installed to generate the server and client interface code - if you don't already, follow the setup instructions in [the Ruby quick start guide](examples/ruby).
+
+
+## Defining the service
+
+Our first step (as you'll know from [Getting started](https://github.com/grpc/grpc/tree/master/examples)) is to define the gRPC *service* and the method *request* and *response* types using [protocol buffers] (https://developers.google.com/protocol-buffers/docs/overview). You can see the complete .proto file in [`examples/protos/route_guide.proto`](examples/protos/route_guide.proto).
+
+To define a service, you specify a named `service` in your .proto file:
+
+```protobuf
+service RouteGuide {
+ ...
+}
+```
+
+Then you define `rpc` methods inside your service definition, specifying their request and response types. gRPC lets you define four kinds of service method, all of which are used in the `RouteGuide` service:
+
+- A *simple RPC* where the client sends a request to the server using the stub and waits for a response to come back, just like a normal function call.
+```protobuf
+ // Obtains the feature at a given position.
+ rpc GetFeature(Point) returns (Feature) {}
+```
+
+- A *server-side streaming RPC* where the client sends a request to the server and gets a stream to read a sequence of messages back. The client reads from the returned stream until there are no more messages. As you can see in our example, you specify a server-side streaming method by placing the `stream` keyword before the *response* type.
+```protobuf
+ // Obtains the Features available within the given Rectangle. Results are
+ // streamed rather than returned at once (e.g. in a response message with a
+ // repeated field), as the rectangle may cover a large area and contain a
+ // huge number of features.
+ rpc ListFeatures(Rectangle) returns (stream Feature) {}
+```
+
+- A *client-side streaming RPC* where the client writes a sequence of messages and sends them to the server, again using a provided stream. Once the client has finished writing the messages, it waits for the server to read them all and return its response. You specify a server-side streaming method by placing the `stream` keyword before the *request* type.
+```protobuf
+ // Accepts a stream of Points on a route being traversed, returning a
+ // RouteSummary when traversal is completed.
+ rpc RecordRoute(stream Point) returns (RouteSummary) {}
+```
+
+- A *bidirectional streaming RPC* where both sides send a sequence of messages using a read-write stream. The two streams operate independently, so clients and servers can read and write in whatever order they like: for example, the server could wait to receive all the client messages before writing its responses, or it could alternately read a message then write a message, or some other combination of reads and writes. The order of messages in each stream is preserved. You specify this type of method by placing the `stream` keyword before both the request and the response.
+```protobuf
+ // Accepts a stream of RouteNotes sent while a route is being traversed,
+ // while receiving other RouteNotes (e.g. from other users).
+ rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}
+```
+
+Our .proto file also contains protocol buffer message type definitions for all the request and response types used in our service methods - for example, here's the `Point` message type:
+```protobuf
+// Points are represented as latitude-longitude pairs in the E7 representation
+// (degrees multiplied by 10**7 and rounded to the nearest integer).
+// Latitudes should be in the range +/- 90 degrees and longitude should be in
+// the range +/- 180 degrees (inclusive).
+message Point {
+ int32 latitude = 1;
+ int32 longitude = 2;
+}
+```
+
+
+## Generating client and server code
+
+Next we need to generate the gRPC client and server interfaces from our .proto service definition. We do this using the protocol buffer compiler `protoc` with a special gRPC Ruby plugin.
+
+If you want to run this yourself, make sure you've installed protoc and followed the gRPC Ruby plugin [installation instructions](https://github.com/grpc/grpc/blob/master/INSTALL) first):
+
+Once that's done, the following command can be used to generate the ruby code.
+
+```shell
+$ protoc -I ../../protos --ruby_out=lib --grpc_out=lib --plugin=protoc-gen-grpc=`which grpc_ruby_plugin` ../../protos/route_guide.proto
+```
+
+Running this command regenerates the following files in the lib directory:
+- `lib/route_guide.pb` defines a module `Examples::RouteGuide`
+ - This contain all the protocol buffer code to populate, serialize, and retrieve our request and response message types
+- `lib/route_guide_services.pb`, extends `Examples::RouteGuide` with stub and service classes
+ - a class `Service` for use as a base class when defining RouteGuide service implementations
+ - a class `Stub` that can be used to access remote RouteGuide instances
+
+
+<a name="server"></a>
+## Creating the server
+
+First let's look at how we create a `RouteGuide` server. If you're only interested in creating gRPC clients, you can skip this section and go straight to [Creating the client](#client) (though you might find it interesting anyway!).
+
+There are two parts to making our `RouteGuide` service do its job:
+- Implementing the service interface generated from our service definition: doing the actual "work" of our service.
+- Running a gRPC server to listen for requests from clients and return the service responses.
+
+You can find our example `RouteGuide` server in [examples/ruby/route_guide/route_guide_server.rb](examples/ruby/route_guide/route_guide_server.rb). Let's take a closer look at how it works.
+
+### Implementing RouteGuide
+
+As you can see, our server has a `ServerImpl` class that extends the generated `RouteGuide::Service`:
+
+```ruby
+# ServerImpl provides an implementation of the RouteGuide service.
+class ServerImpl < RouteGuide::Service
+```
+
+`ServerImpl` implements all our service methods. Let's look at the simplest type first, `GetFeature`, which just gets a `Point` from the client and returns the corresponding feature information from its database in a `Feature`.
+
+```ruby
+ def get_feature(point, _call)
+ name = @feature_db[{
+ 'longitude' => point.longitude,
+ 'latitude' => point.latitude }] || ''
+ Feature.new(location: point, name: name)
+ end
+```
+
+The method is passed a _call for the RPC, the client's `Point` protocol buffer request, and returns a `Feature` protocol buffer. In the method we create the `Feature` with the appropriate information, and then `return` it.
+
+Now let's look at something a bit more complicated - a streaming RPC. `ListFeatures` is a server-side streaming RPC, so we need to send back multiple `Feature`s to our client.
+
+```ruby
+# in ServerImpl
+
+ def list_features(rectangle, _call)
+ RectangleEnum.new(@feature_db, rectangle).each
+ end
+```
+
+As you can see, here the request object is a `Rectangle` in which our client wants to find `Feature`s, but instead of returning a simple response we need to return an [Enumerator](http://ruby-doc.org//core-2.2.0/Enumerator.html) that yields the responses. In the method, we use a helper class `RectangleEnum`, to act as an Enumerator implementation.
+
+Similarly, the client-side streaming method `record_route` uses an [Enumerable](http://ruby-doc.org//core-2.2.0/Enumerable.html), but here it's obtained from the call object, which we've ignored in the earlier examples. `call.each_remote_read` yields each message sent by the client in turn.
+
+```ruby
+ call.each_remote_read do |point|
+ ...
+ end
+```
+Finally, let's look at our bidirectional streaming RPC `route_chat`.
+
+```ruby
+ def route_chat(notes)
+ q = EnumeratorQueue.new(self)
+ t = Thread.new do
+ begin
+ notes.each do |n|
+ ...
+ end
+ end
+ q = EnumeratorQueue.new(self)
+ ...
+ return q.each_item
+ end
+```
+
+Here the method receives an [Enumerable](http://ruby-doc.org//core-2.2.0/Enumerable.html), but also returns an [Enumerator](http://ruby-doc.org//core-2.2.0/Enumerator.html) that yields the responses. The implementation demonstrates how to set these up so that the requests and responses can be handled concurrently. Although each side will always get the other's messages in the order they were written, both the client and server can read and write in any order — the streams operate completely independently.
+
+### Starting the server
+
+Once we've implemented all our methods, we also need to start up a gRPC server so that clients can actually use our service. The following snippet shows how we do this for our `RouteGuide` service:
+
+```ruby
+ s = GRPC::RpcServer.new
+ s.add_http2_port(port)
+ logger.info("... running insecurely on #{port}")
+ s.handle(ServerImpl.new(feature_db))
+ s.run
+```
+As you can see, we build and start our server using a `GRPC::RpcServer`. To do this, we:
+
+1. Create an instance of our service implementation class `ServerImpl`.
+2. Specify the address and port we want to use to listen for client requests using the builder's `add_http2_port` method.
+3. Register our service implementation with the `GRPC::RpcServer`.
+4. Call `run` on the`GRPC::RpcServer` to create and start an RPC server for our service.
+
+<a name="client"></a>
+## Creating the client
+
+In this section, we'll look at creating a Ruby client for our `RouteGuide` service. You can see our complete example client code in [examples/ruby/route_guide/route_guide_client.rb](examples/ruby/route_guide/route_guide_client.rb).
+
+### Creating a stub
+
+To call service methods, we first need to create a *stub*.
+
+We use the `Stub` class of the `RouteGuide` module generated from our .proto.
+
+```ruby
+ stub = RouteGuide::Stub.new('localhost:50051')
+```
+
+### Calling service methods
+
+Now let's look at how we call our service methods. Note that the gRPC Ruby only provides *blocking/synchronous* versions of each method: this means that the RPC call waits for the server to respond, and will either return a response or raise an exception.
+
+#### Simple RPC
+
+Calling the simple RPC `GetFeature` is nearly as straightforward as calling a local method.
+
+```ruby
+GET_FEATURE_POINTS = [
+ Point.new(latitude: 409_146_138, longitude: -746_188_906),
+ Point.new(latitude: 0, longitude: 0)
+]
+..
+ GET_FEATURE_POINTS.each do |pt|
+ resp = stub.get_feature(pt)
+ ...
+ p "- found '#{resp.name}' at #{pt.inspect}"
+ end
+```
+
+As you can see, we create and populate a request protocol buffer object (in our case `Point`), and create a response protocol buffer object for the server to fill in. Finally, we call the method on the stub, passing it the context, request, and response. If the method returns `OK`, then we can read the response information from the server from our response object.
+
+
+#### Streaming RPCs
+
+Now let's look at our streaming methods. If you've already read [Creating the server](#server) some of this may look very familiar - streaming RPCs are implemented in a similar way on both sides. Here's where we call the server-side streaming method `list_features`, which returns an `Enumerable` of `Features`
+
+```ruby
+ resps = stub.list_features(LIST_FEATURES_RECT)
+ resps.each do |r|
+ p "- found '#{r.name}' at #{r.location.inspect}"
+ end
+```
+
+The client-side streaming method `record_route` is similar, except there we pass the server an `Enumerable`.
+
+```ruby
+ ...
+ reqs = RandomRoute.new(features, points_on_route)
+ resp = stub.record_route(reqs.each, deadline)
+ ...
+```
+
+Finally, let's look at our bidirectional streaming RPC `route_chat`. In this case, we pass `Enumerable` to the method and get back an `Enumerable`.
+
+```ruby
+ resps = stub.route_chat(ROUTE_CHAT_NOTES)
+ resps.each { |r| p "received #{r.inspect}" }
+```
+
+Although it's not shown well by this example, each enumerable is independent of the other - both the client and server can read and write in any order — the streams operate completely independently.
+
+## Try it out!
+
+Build client and server:
+
+```shell
+$ # from examples/ruby
+$ gem install bundler && bundle install
+```
+Run the server, which will listen on port 50051:
+```shell
+$ # from examples/ruby
+$ bundle exec route_guide/route_guide_server.rb ../node/route_guide/route_guide_db.json &
+```
+Run the client (in a different terminal):
+```shell
+$ # from examples/ruby
+$ bundle exec route_guide/route_guide_client.rb ../node/route_guide/route_guide_db.json &
+```
+
diff --git a/examples/ruby/route_guide/route_guide_client.rb b/examples/ruby/route_guide/route_guide_client.rb
new file mode 100755
index 0000000000..181623a68a
--- /dev/null
+++ b/examples/ruby/route_guide/route_guide_client.rb
@@ -0,0 +1,165 @@
+#!/usr/bin/env ruby
+
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Sample app that connects to a Route Guide service.
+#
+# Usage: $ path/to/route_guide_client.rb path/to/route_guide_db.json &
+
+this_dir = File.expand_path(File.dirname(__FILE__))
+lib_dir = File.join(File.dirname(this_dir), 'lib')
+$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
+
+require 'grpc'
+require 'route_guide_services'
+
+include Examples
+
+GET_FEATURE_POINTS = [
+ Point.new(latitude: 409_146_138, longitude: -746_188_906),
+ Point.new(latitude: 0, longitude: 0)
+]
+
+# runs a GetFeature rpc.
+#
+# - once with a point known to be present in the sample route database
+# - once with a point that is not in the sample database
+def run_get_feature(stub)
+ p 'GetFeature'
+ p '----------'
+ GET_FEATURE_POINTS.each do |pt|
+ resp = stub.get_feature(pt)
+ if resp.name != ''
+ p "- found '#{resp.name}' at #{pt.inspect}"
+ else
+ p "- found nothing at #{pt.inspect}"
+ end
+ end
+end
+
+LIST_FEATURES_RECT = Rectangle.new(
+ lo: Point.new(latitude: 400_000_000, longitude: -750_000_000),
+ hi: Point.new(latitude: 420_000_000, longitude: -730_000_000))
+
+# runs a ListFeatures rpc.
+#
+# - the rectangle to chosen to include most of the known features
+# in the sample db.
+def run_list_features(stub)
+ p 'ListFeatures'
+ p '------------'
+ resps = stub.list_features(LIST_FEATURES_RECT)
+ resps.each do |r|
+ p "- found '#{r.name}' at #{r.location.inspect}"
+ end
+end
+
+# RandomRoute provides an Enumerable that yields a random 'route' of points
+# from a list of Features.
+class RandomRoute
+ def initialize(features, size)
+ @features = features
+ @size = size
+ end
+
+ # yields a point, waiting between 0 and 1 seconds between each yield
+ #
+ # @return an Enumerable that yields a random point
+ def each
+ return enum_for(:each) unless block_given?
+ @size.times do
+ json_feature = @features[rand(0..@features.length)]
+ next if json_feature.nil?
+ location = json_feature['location']
+ pt = Point.new(
+ Hash[location.each_pair.map { |k, v| [k.to_sym, v] }])
+ p "- next point is #{pt.inspect}"
+ yield pt
+ sleep(rand(0..1))
+ end
+ end
+end
+
+# runs a RecordRoute rpc.
+#
+# - the rectangle to chosen to include most of the known features
+# in the sample db.
+def run_record_route(stub, features)
+ p 'RecordRoute'
+ p '-----------'
+ points_on_route = 10 # arbitrary
+ deadline = points_on_route # as delay b/w each is max 1 second
+ reqs = RandomRoute.new(features, points_on_route)
+ resp = stub.record_route(reqs.each, deadline)
+ p "summary: #{resp.inspect}"
+end
+
+ROUTE_CHAT_NOTES = [
+ RouteNote.new(message: 'doh - a deer',
+ location: Point.new(latitude: 0, longitude: 0)),
+ RouteNote.new(message: 'ray - a drop of golden sun',
+ location: Point.new(latitude: 0, longitude: 1)),
+ RouteNote.new(message: 'me - the name I call myself',
+ location: Point.new(latitude: 1, longitude: 0)),
+ RouteNote.new(message: 'fa - a longer way to run',
+ location: Point.new(latitude: 1, longitude: 1)),
+ RouteNote.new(message: 'soh - with needle and a thread',
+ location: Point.new(latitude: 0, longitude: 1))
+]
+
+# runs a RouteChat rpc.
+#
+# sends a canned set of route notes and prints out the responses.
+def run_route_chat(stub)
+ p 'Route Chat'
+ p '----------'
+ # TODO: decouple sending and receiving, i.e have the response enumerator run
+ # on its own thread.
+ resps = stub.route_chat(ROUTE_CHAT_NOTES)
+ resps.each { |r| p "received #{r.inspect}" }
+end
+
+def main
+ stub = RouteGuide::Stub.new('localhost:50051')
+ run_get_feature(stub)
+ run_list_features(stub)
+ run_route_chat(stub)
+ if ARGV.length == 0
+ p 'no feature database; skipping record_route'
+ exit
+ end
+ raw_data = []
+ File.open(ARGV[0]) do |f|
+ raw_data = MultiJson.load(f.read)
+ end
+ run_record_route(stub, raw_data)
+end
+
+main
diff --git a/examples/ruby/route_guide/route_guide_server.rb b/examples/ruby/route_guide/route_guide_server.rb
new file mode 100755
index 0000000000..2b2b8084ef
--- /dev/null
+++ b/examples/ruby/route_guide/route_guide_server.rb
@@ -0,0 +1,211 @@
+#!/usr/bin/env ruby
+# -*- coding: utf-8 -*-
+
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+# Sample app that connects to a Route Guide service.
+#
+# Usage: $ path/to/route_guide_server.rb path/to/route_guide_db.json &
+
+this_dir = File.expand_path(File.dirname(__FILE__))
+lib_dir = File.join(File.dirname(this_dir), 'lib')
+$LOAD_PATH.unshift(lib_dir) unless $LOAD_PATH.include?(lib_dir)
+
+require 'grpc'
+require 'multi_json'
+require 'route_guide_services'
+
+include Examples
+COORD_FACTOR = 1e7
+RADIUS = 637_100
+
+# Determines the distance between two points.
+def calculate_distance(point_a, point_b)
+ to_radians = proc { |x| x * Math::PI / 180 }
+ lat_a = point_a.latitude / COORD_FACTOR
+ lat_b = point_b.latitude / COORD_FACTOR
+ long_a = point_a.longitude / COORD_FACTOR
+ long_b = point_b.longitude / COORD_FACTOR
+ φ1 = to_radians.call(lat_a)
+ φ2 = to_radians.call(lat_b)
+ Δφ = to_radians.call(lat_a - lat_b)
+ Δλ = to_radians.call(long_a - long_b)
+ a = Math.sin(Δφ / 2)**2 +
+ Math.cos(φ1) * Math.cos(φ2) +
+ Math.sin(Δλ / 2)**2
+ (2 * RADIUS * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))).to_i
+end
+
+# RectangleEnum provides an Enumerator of the points in a feature_db within a
+# given Rectangle.
+class RectangleEnum
+ # @param [Hash] feature_db
+ # @param [Rectangle] bounds
+ def initialize(feature_db, bounds)
+ @feature_db = feature_db
+ @bounds = bounds
+ lats = [@bounds.lo.latitude, @bounds.hi.latitude]
+ longs = [@bounds.lo.longitude, @bounds.hi.longitude]
+ @lo_lat, @hi_lat = lats.min, lats.max
+ @lo_long, @hi_long = longs.min, longs.max
+ end
+
+ # in? determines if location lies within the bounds of this instances
+ # Rectangle.
+ def in?(location)
+ location['longitude'] >= @lo_long &&
+ location['longitude'] <= @hi_long &&
+ location['latitude'] >= @lo_lat &&
+ location['latitude'] <= @hi_lat
+ end
+
+ # each yields the features in the instances feature_db that lie within the
+ # instance rectangle.
+ def each
+ return enum_for(:each) unless block_given?
+ @feature_db.each_pair do |location, name|
+ next unless in?(location)
+ next if name.nil? || name == ''
+ pt = Point.new(
+ Hash[location.each_pair.map { |k, v| [k.to_sym, v] }])
+ yield Feature.new(location: pt, name: name)
+ end
+ end
+end
+
+# A EnumeratorQueue wraps a Queue to yield the items added to it.
+class EnumeratorQueue
+ extend Forwardable
+ def_delegators :@q, :push
+
+ def initialize(sentinel)
+ @q = Queue.new
+ @sentinel = sentinel
+ @received_notes = {}
+ end
+
+ def each_item
+ return enum_for(:each_item) unless block_given?
+ loop do
+ r = @q.pop
+ break if r.equal?(@sentinel)
+ fail r if r.is_a? Exception
+ yield r
+ end
+ end
+end
+
+# ServerImpl provides an implementation of the RouteGuide service.
+class ServerImpl < RouteGuide::Service
+ # @param [Hash] feature_db {location => name}
+ def initialize(feature_db)
+ @feature_db = feature_db
+ @received_notes = Hash.new { |h, k| h[k] = [] }
+ end
+
+ def get_feature(point, _call)
+ name = @feature_db[{
+ 'longitude' => point.longitude,
+ 'latitude' => point.latitude }] || ''
+ Feature.new(location: point, name: name)
+ end
+
+ def list_features(rectangle, _call)
+ RectangleEnum.new(@feature_db, rectangle).each
+ end
+
+ def record_route(call)
+ started, elapsed_time = 0, 0
+ distance, count, features, last = 0, 0, 0, nil
+ call.each_remote_read do |point|
+ count += 1
+ name = @feature_db[{
+ 'longitude' => point.longitude,
+ 'latitude' => point.latitude }] || ''
+ features += 1 unless name == ''
+ if last.nil?
+ last = point
+ started = Time.now.to_i
+ next
+ end
+ elapsed_time = Time.now.to_i - started
+ distance += calculate_distance(point, last)
+ last = point
+ end
+ RouteSummary.new(point_count: count,
+ feature_count: features,
+ distance: distance,
+ elapsed_time: elapsed_time)
+ end
+
+ def route_chat(notes)
+ q = EnumeratorQueue.new(self)
+ # run a separate thread that processes the incoming requests
+ t = Thread.new do
+ begin
+ notes.each do |n|
+ key = {
+ 'latitude' => n.location.latitude,
+ 'longitude' => n.location.longitude
+ }
+ earlier_msgs = @received_notes[key]
+ @received_notes[key] << n.message
+ # send back the earlier messages at this point
+ earlier_msgs.each do |r|
+ q.push(RouteNote.new(location: n.location, message: r))
+ end
+ end
+ q.push(self) # signal completion
+ rescue StandardError => e
+ q.push(e) # signal completion via an error
+ end
+ end
+ q.each_item
+ end
+end
+
+def main
+ if ARGV.length == 0
+ fail 'Please specify the path to the route_guide json database'
+ end
+ raw_data = []
+ File.open(ARGV[0]) do |f|
+ raw_data = MultiJson.load(f.read)
+ end
+ feature_db = Hash[raw_data.map { |x| [x['location'], x['name']] }]
+ port = '0.0.0.0:50051'
+ s = GRPC::RpcServer.new
+ s.add_http2_port(port)
+ GRPC.logger.info("... running insecurely on #{port}")
+ s.handle(ServerImpl.new(feature_db))
+ s.run
+end
+
+main
diff --git a/gRPC.podspec b/gRPC.podspec
index d945c299b5..55f72c93d8 100644
--- a/gRPC.podspec
+++ b/gRPC.podspec
@@ -68,6 +68,7 @@ Pod::Spec.new do |s|
'src/core/support/grpc_string.h',
'src/core/support/string_win32.h',
'src/core/support/thd_internal.h',
+ 'src/core/support/time_precise.h',
'grpc/support/alloc.h',
'grpc/support/atm.h',
'grpc/support/atm_gcc_atomic.h',
@@ -145,7 +146,7 @@ Pod::Spec.new do |s|
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
- 'src/core/channel/census_filter.h',
+ 'src/core/census/grpc_filter.h',
'src/core/channel/channel_args.h',
'src/core/channel/channel_stack.h',
'src/core/channel/client_channel.h',
@@ -210,7 +211,8 @@ Pod::Spec.new do |s|
'src/core/json/json_reader.h',
'src/core/json/json_writer.h',
'src/core/profiling/timers.h',
- 'src/core/profiling/timers_preciseclock.h',
+ 'src/core/statistics/census_interface.h',
+ 'src/core/statistics/census_rpc_stats.h',
'src/core/surface/byte_buffer_queue.h',
'src/core/surface/call.h',
'src/core/surface/channel.h',
@@ -276,6 +278,7 @@ Pod::Spec.new do |s|
'src/core/tsi/ssl_transport_security.c',
'src/core/tsi/transport_security.c',
'src/core/census/grpc_context.c',
+ 'src/core/census/grpc_filter.c',
'src/core/channel/channel_args.c',
'src/core/channel/channel_stack.c',
'src/core/channel/client_channel.c',
@@ -401,6 +404,7 @@ Pod::Spec.new do |s|
'src/core/support/string.h',
'src/core/support/string_win32.h',
'src/core/support/thd_internal.h',
+ 'src/core/support/time_precise.h',
'src/core/security/auth_filters.h',
'src/core/security/base64.h',
'src/core/security/credentials.h',
@@ -414,7 +418,7 @@ Pod::Spec.new do |s|
'src/core/tsi/ssl_transport_security.h',
'src/core/tsi/transport_security.h',
'src/core/tsi/transport_security_interface.h',
- 'src/core/channel/census_filter.h',
+ 'src/core/census/grpc_filter.h',
'src/core/channel/channel_args.h',
'src/core/channel/channel_stack.h',
'src/core/channel/client_channel.h',
@@ -479,7 +483,8 @@ Pod::Spec.new do |s|
'src/core/json/json_reader.h',
'src/core/json/json_writer.h',
'src/core/profiling/timers.h',
- 'src/core/profiling/timers_preciseclock.h',
+ 'src/core/statistics/census_interface.h',
+ 'src/core/statistics/census_rpc_stats.h',
'src/core/surface/byte_buffer_queue.h',
'src/core/surface/call.h',
'src/core/surface/channel.h',
diff --git a/include/grpc++/channel_interface.h b/include/grpc++/channel.h
index 4176cded7b..a8af74175b 100644
--- a/include/grpc++/channel_interface.h
+++ b/include/grpc++/channel.h
@@ -31,36 +31,49 @@
*
*/
-#ifndef GRPCXX_CHANNEL_INTERFACE_H
-#define GRPCXX_CHANNEL_INTERFACE_H
+#ifndef GRPCXX_CHANNEL_H
+#define GRPCXX_CHANNEL_H
#include <memory>
#include <grpc/grpc.h>
-#include <grpc++/status.h>
#include <grpc++/impl/call.h>
+#include <grpc++/impl/grpc_library.h>
+#include <grpc++/support/config.h>
-struct grpc_call;
+struct grpc_channel;
namespace grpc {
-class Call;
-class CallOpBuffer;
-class ClientContext;
+class CallOpSetInterface;
+class ChannelArguments;
class CompletionQueue;
-class RpcMethod;
+class Credentials;
+class SecureCredentials;
-class ChannelInterface : public CallHook,
- public std::enable_shared_from_this<ChannelInterface> {
- public:
- virtual ~ChannelInterface() {}
+template <class R>
+class ClientReader;
+template <class W>
+class ClientWriter;
+template <class R, class W>
+class ClientReaderWriter;
+template <class R>
+class ClientAsyncReader;
+template <class W>
+class ClientAsyncWriter;
+template <class R, class W>
+class ClientAsyncReaderWriter;
+template <class R>
+class ClientAsyncResponseReader;
- virtual void* RegisterMethod(const char* method_name) = 0;
- virtual Call CreateCall(const RpcMethod& method, ClientContext* context,
- CompletionQueue* cq) = 0;
+class Channel GRPC_FINAL : public GrpcLibrary,
+ public CallHook,
+ public std::enable_shared_from_this<Channel> {
+ public:
+ ~Channel();
// Get the current channel state. If the channel is in IDLE and try_to_connect
// is set to true, try to connect.
- virtual grpc_connectivity_state GetState(bool try_to_connect) = 0;
+ grpc_connectivity_state GetState(bool try_to_connect);
// Return the tag on cq when the channel state is changed or deadline expires.
// GetState needs to called to get the current state.
@@ -80,13 +93,46 @@ class ChannelInterface : public CallHook,
}
private:
- virtual void NotifyOnStateChangeImpl(grpc_connectivity_state last_observed,
- gpr_timespec deadline,
- CompletionQueue* cq, void* tag) = 0;
- virtual bool WaitForStateChangeImpl(grpc_connectivity_state last_observed,
- gpr_timespec deadline) = 0;
+ template <class R>
+ friend class ::grpc::ClientReader;
+ template <class W>
+ friend class ::grpc::ClientWriter;
+ template <class R, class W>
+ friend class ::grpc::ClientReaderWriter;
+ template <class R>
+ friend class ::grpc::ClientAsyncReader;
+ template <class W>
+ friend class ::grpc::ClientAsyncWriter;
+ template <class R, class W>
+ friend class ::grpc::ClientAsyncReaderWriter;
+ template <class R>
+ friend class ::grpc::ClientAsyncResponseReader;
+ template <class InputMessage, class OutputMessage>
+ friend Status BlockingUnaryCall(Channel* channel, const RpcMethod& method,
+ ClientContext* context,
+ const InputMessage& request,
+ OutputMessage* result);
+ friend class ::grpc::RpcMethod;
+ friend std::shared_ptr<Channel> CreateChannelInternal(
+ const grpc::string& host, grpc_channel* c_channel);
+
+ Channel(const grpc::string& host, grpc_channel* c_channel);
+
+ Call CreateCall(const RpcMethod& method, ClientContext* context,
+ CompletionQueue* cq);
+ void PerformOpsOnCall(CallOpSetInterface* ops, Call* call);
+ void* RegisterMethod(const char* method);
+
+ void NotifyOnStateChangeImpl(grpc_connectivity_state last_observed,
+ gpr_timespec deadline, CompletionQueue* cq,
+ void* tag);
+ bool WaitForStateChangeImpl(grpc_connectivity_state last_observed,
+ gpr_timespec deadline);
+
+ const grpc::string host_;
+ grpc_channel* const c_channel_; // owned
};
} // namespace grpc
-#endif // GRPCXX_CHANNEL_INTERFACE_H
+#endif // GRPCXX_CHANNEL_H
diff --git a/include/grpc++/client_context.h b/include/grpc++/client_context.h
index 8de2ba4877..62e5260a18 100644
--- a/include/grpc++/client_context.h
+++ b/include/grpc++/client_context.h
@@ -42,16 +42,17 @@
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include <grpc/support/time.h>
-#include <grpc++/auth_context.h>
-#include <grpc++/config.h>
-#include <grpc++/status.h>
-#include <grpc++/time.h>
+#include <grpc++/support/auth_context.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/status.h>
+#include <grpc++/support/string_ref.h>
+#include <grpc++/support/time.h>
struct census_context;
namespace grpc {
-class ChannelInterface;
+class Channel;
class CompletionQueue;
class Credentials;
class RpcMethod;
@@ -138,12 +139,14 @@ class ClientContext {
void AddMetadata(const grpc::string& meta_key,
const grpc::string& meta_value);
- const std::multimap<grpc::string, grpc::string>& GetServerInitialMetadata() {
+ const std::multimap<grpc::string_ref, grpc::string_ref>&
+ GetServerInitialMetadata() {
GPR_ASSERT(initial_metadata_received_);
return recv_initial_metadata_;
}
- const std::multimap<grpc::string, grpc::string>& GetServerTrailingMetadata() {
+ const std::multimap<grpc::string_ref, grpc::string_ref>&
+ GetServerTrailingMetadata() {
// TODO(yangg) check finished
return trailing_metadata_;
}
@@ -215,20 +218,18 @@ class ClientContext {
template <class R>
friend class ::grpc::ClientAsyncResponseReader;
template <class InputMessage, class OutputMessage>
- friend Status BlockingUnaryCall(ChannelInterface* channel,
- const RpcMethod& method,
+ friend Status BlockingUnaryCall(Channel* channel, const RpcMethod& method,
ClientContext* context,
const InputMessage& request,
OutputMessage* result);
grpc_call* call() { return call_; }
- void set_call(grpc_call* call,
- const std::shared_ptr<ChannelInterface>& channel);
+ void set_call(grpc_call* call, const std::shared_ptr<Channel>& channel);
grpc::string authority() { return authority_; }
bool initial_metadata_received_;
- std::shared_ptr<ChannelInterface> channel_;
+ std::shared_ptr<Channel> channel_;
grpc_call* call_;
gpr_timespec deadline_;
grpc::string authority_;
@@ -236,8 +237,8 @@ class ClientContext {
mutable std::shared_ptr<const AuthContext> auth_context_;
struct census_context* census_context_;
std::multimap<grpc::string, grpc::string> send_initial_metadata_;
- std::multimap<grpc::string, grpc::string> recv_initial_metadata_;
- std::multimap<grpc::string, grpc::string> trailing_metadata_;
+ std::multimap<grpc::string_ref, grpc::string_ref> recv_initial_metadata_;
+ std::multimap<grpc::string_ref, grpc::string_ref> trailing_metadata_;
grpc_call* propagate_from_call_;
PropagationOptions propagation_options_;
diff --git a/include/grpc++/completion_queue.h b/include/grpc++/completion_queue.h
index 2f30211145..d81d2e735d 100644
--- a/include/grpc++/completion_queue.h
+++ b/include/grpc++/completion_queue.h
@@ -36,8 +36,8 @@
#include <grpc/support/time.h>
#include <grpc++/impl/grpc_library.h>
-#include <grpc++/status.h>
-#include <grpc++/time.h>
+#include <grpc++/support/status.h>
+#include <grpc++/support/time.h>
struct grpc_completion_queue;
@@ -65,7 +65,7 @@ template <class ServiceType, class RequestType, class ResponseType>
class BidiStreamingHandler;
class UnknownMethodHandler;
-class ChannelInterface;
+class Channel;
class ClientContext;
class CompletionQueue;
class RpcMethod;
@@ -143,8 +143,7 @@ class CompletionQueue : public GrpcLibrary {
friend class ::grpc::Server;
friend class ::grpc::ServerContext;
template <class InputMessage, class OutputMessage>
- friend Status BlockingUnaryCall(ChannelInterface* channel,
- const RpcMethod& method,
+ friend Status BlockingUnaryCall(Channel* channel, const RpcMethod& method,
ClientContext* context,
const InputMessage& request,
OutputMessage* result);
diff --git a/include/grpc++/create_channel.h b/include/grpc++/create_channel.h
index 424a93a64c..916f3b0b97 100644
--- a/include/grpc++/create_channel.h
+++ b/include/grpc++/create_channel.h
@@ -36,15 +36,20 @@
#include <memory>
-#include <grpc++/config.h>
#include <grpc++/credentials.h>
+#include <grpc++/support/channel_arguments.h>
+#include <grpc++/support/config.h>
namespace grpc {
-class ChannelArguments;
-class ChannelInterface;
// If creds does not hold an object or is invalid, a lame channel is returned.
-std::shared_ptr<ChannelInterface> CreateChannel(
+std::shared_ptr<Channel> CreateChannel(
+ const grpc::string& target, const std::shared_ptr<Credentials>& creds);
+
+// For advanced use and testing ONLY. Override default channel arguments only
+// if necessary.
+// If creds does not hold an object or is invalid, a lame channel is returned.
+std::shared_ptr<Channel> CreateCustomChannel(
const grpc::string& target, const std::shared_ptr<Credentials>& creds,
const ChannelArguments& args);
diff --git a/include/grpc++/credentials.h b/include/grpc++/credentials.h
index a4f1e73118..d623bcef60 100644
--- a/include/grpc++/credentials.h
+++ b/include/grpc++/credentials.h
@@ -36,12 +36,12 @@
#include <memory>
-#include <grpc++/config.h>
#include <grpc++/impl/grpc_library.h>
+#include <grpc++/support/config.h>
namespace grpc {
class ChannelArguments;
-class ChannelInterface;
+class Channel;
class SecureCredentials;
class Credentials : public GrpcLibrary {
@@ -57,11 +57,11 @@ class Credentials : public GrpcLibrary {
virtual SecureCredentials* AsSecureCredentials() = 0;
private:
- friend std::shared_ptr<ChannelInterface> CreateChannel(
+ friend std::shared_ptr<Channel> CreateCustomChannel(
const grpc::string& target, const std::shared_ptr<Credentials>& creds,
const ChannelArguments& args);
- virtual std::shared_ptr<ChannelInterface> CreateChannel(
+ virtual std::shared_ptr<Channel> CreateChannel(
const grpc::string& target, const ChannelArguments& args) = 0;
};
diff --git a/include/grpc++/async_generic_service.h b/include/grpc++/generic/async_generic_service.h
index b435c6e73d..8578d850ff 100644
--- a/include/grpc++/async_generic_service.h
+++ b/include/grpc++/generic/async_generic_service.h
@@ -31,11 +31,11 @@
*
*/
-#ifndef GRPCXX_ASYNC_GENERIC_SERVICE_H
-#define GRPCXX_ASYNC_GENERIC_SERVICE_H
+#ifndef GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H
+#define GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H
-#include <grpc++/byte_buffer.h>
-#include <grpc++/stream.h>
+#include <grpc++/support/byte_buffer.h>
+#include <grpc++/support/async_stream.h>
struct grpc_server;
@@ -75,4 +75,4 @@ class AsyncGenericService GRPC_FINAL {
} // namespace grpc
-#endif // GRPCXX_ASYNC_GENERIC_SERVICE_H
+#endif // GRPCXX_GENERIC_ASYNC_GENERIC_SERVICE_H
diff --git a/include/grpc++/generic_stub.h b/include/grpc++/generic/generic_stub.h
index 172f10e45a..1bb7900b06 100644
--- a/include/grpc++/generic_stub.h
+++ b/include/grpc++/generic/generic_stub.h
@@ -31,11 +31,11 @@
*
*/
-#ifndef GRPCXX_GENERIC_STUB_H
-#define GRPCXX_GENERIC_STUB_H
+#ifndef GRPCXX_GENERIC_GENERIC_STUB_H
+#define GRPCXX_GENERIC_GENERIC_STUB_H
-#include <grpc++/byte_buffer.h>
-#include <grpc++/stream.h>
+#include <grpc++/support/async_stream.h>
+#include <grpc++/support/byte_buffer.h>
namespace grpc {
@@ -47,8 +47,7 @@ typedef ClientAsyncReaderWriter<ByteBuffer, ByteBuffer>
// by name.
class GenericStub GRPC_FINAL {
public:
- explicit GenericStub(std::shared_ptr<ChannelInterface> channel)
- : channel_(channel) {}
+ explicit GenericStub(std::shared_ptr<Channel> channel) : channel_(channel) {}
// begin a call to a named method
std::unique_ptr<GenericClientAsyncReaderWriter> Call(
@@ -56,9 +55,9 @@ class GenericStub GRPC_FINAL {
void* tag);
private:
- std::shared_ptr<ChannelInterface> channel_;
+ std::shared_ptr<Channel> channel_;
};
} // namespace grpc
-#endif // GRPCXX_GENERIC_STUB_H
+#endif // GRPCXX_GENERIC_GENERIC_STUB_H
diff --git a/include/grpc++/impl/call.h b/include/grpc++/impl/call.h
index bc1db4c12c..fca5603047 100644
--- a/include/grpc++/impl/call.h
+++ b/include/grpc++/impl/call.h
@@ -34,18 +34,17 @@
#ifndef GRPCXX_IMPL_CALL_H
#define GRPCXX_IMPL_CALL_H
-#include <grpc/support/alloc.h>
-#include <grpc++/client_context.h>
-#include <grpc++/completion_queue.h>
-#include <grpc++/config.h>
-#include <grpc++/status.h>
-#include <grpc++/impl/serialization_traits.h>
-
#include <functional>
#include <memory>
#include <map>
+#include <cstring>
-#include <string.h>
+#include <grpc/support/alloc.h>
+#include <grpc++/client_context.h>
+#include <grpc++/completion_queue.h>
+#include <grpc++/impl/serialization_traits.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/status.h>
struct grpc_call;
struct grpc_op;
@@ -55,8 +54,9 @@ namespace grpc {
class ByteBuffer;
class Call;
-void FillMetadataMap(grpc_metadata_array* arr,
- std::multimap<grpc::string, grpc::string>* metadata);
+void FillMetadataMap(
+ grpc_metadata_array* arr,
+ std::multimap<grpc::string_ref, grpc::string_ref>* metadata);
grpc_metadata* FillMetadataArray(
const std::multimap<grpc::string, grpc::string>& metadata);
@@ -419,7 +419,7 @@ class CallOpRecvInitialMetadata {
}
private:
- std::multimap<grpc::string, grpc::string>* recv_initial_metadata_;
+ std::multimap<grpc::string_ref, grpc::string_ref>* recv_initial_metadata_;
grpc_metadata_array recv_initial_metadata_arr_;
};
@@ -462,7 +462,7 @@ class CallOpClientRecvStatus {
}
private:
- std::multimap<grpc::string, grpc::string>* recv_trailing_metadata_;
+ std::multimap<grpc::string_ref, grpc::string_ref>* recv_trailing_metadata_;
Status* recv_status_;
grpc_metadata_array recv_trailing_metadata_arr_;
grpc_status_code status_code_;
@@ -541,8 +541,7 @@ class CallOpSet : public CallOpSetInterface,
template <class Op1 = CallNoOp<1>, class Op2 = CallNoOp<2>,
class Op3 = CallNoOp<3>, class Op4 = CallNoOp<4>,
class Op5 = CallNoOp<5>, class Op6 = CallNoOp<6>>
-class SneakyCallOpSet GRPC_FINAL
- : public CallOpSet<Op1, Op2, Op3, Op4, Op5, Op6> {
+class SneakyCallOpSet : public CallOpSet<Op1, Op2, Op3, Op4, Op5, Op6> {
public:
bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE {
typedef CallOpSet<Op1, Op2, Op3, Op4, Op5, Op6> Base;
diff --git a/include/grpc++/impl/client_unary_call.h b/include/grpc++/impl/client_unary_call.h
index b77ce7d02c..4cdc800267 100644
--- a/include/grpc++/impl/client_unary_call.h
+++ b/include/grpc++/impl/client_unary_call.h
@@ -34,21 +34,20 @@
#ifndef GRPCXX_IMPL_CLIENT_UNARY_CALL_H
#define GRPCXX_IMPL_CLIENT_UNARY_CALL_H
-#include <grpc++/config.h>
-#include <grpc++/status.h>
-
#include <grpc++/impl/call.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/status.h>
namespace grpc {
-class ChannelInterface;
+class Channel;
class ClientContext;
class CompletionQueue;
class RpcMethod;
// Wrapper that performs a blocking unary call
template <class InputMessage, class OutputMessage>
-Status BlockingUnaryCall(ChannelInterface* channel, const RpcMethod& method,
+Status BlockingUnaryCall(Channel* channel, const RpcMethod& method,
ClientContext* context, const InputMessage& request,
OutputMessage* result) {
CompletionQueue cq;
diff --git a/include/grpc++/impl/proto_utils.h b/include/grpc++/impl/proto_utils.h
index ebefa3e1be..283e33486d 100644
--- a/include/grpc++/impl/proto_utils.h
+++ b/include/grpc++/impl/proto_utils.h
@@ -38,8 +38,8 @@
#include <grpc/grpc.h>
#include <grpc++/impl/serialization_traits.h>
-#include <grpc++/config_protobuf.h>
-#include <grpc++/status.h>
+#include <grpc++/support/config_protobuf.h>
+#include <grpc++/support/status.h>
namespace grpc {
diff --git a/include/grpc++/impl/rpc_method.h b/include/grpc++/impl/rpc_method.h
index 50a160b08c..9800268062 100644
--- a/include/grpc++/impl/rpc_method.h
+++ b/include/grpc++/impl/rpc_method.h
@@ -34,6 +34,10 @@
#ifndef GRPCXX_IMPL_RPC_METHOD_H
#define GRPCXX_IMPL_RPC_METHOD_H
+#include <memory>
+
+#include <grpc++/channel.h>
+
namespace grpc {
class RpcMethod {
@@ -45,8 +49,14 @@ class RpcMethod {
BIDI_STREAMING
};
- RpcMethod(const char* name, RpcType type, void* channel_tag)
- : name_(name), method_type_(type), channel_tag_(channel_tag) {}
+ RpcMethod(const char* name, RpcType type)
+ : name_(name), method_type_(type), channel_tag_(NULL) {}
+
+ RpcMethod(const char* name, RpcType type,
+ const std::shared_ptr<Channel>& channel)
+ : name_(name),
+ method_type_(type),
+ channel_tag_(channel->RegisterMethod(name)) {}
const char* name() const { return name_; }
RpcType method_type() const { return method_type_; }
diff --git a/include/grpc++/impl/rpc_service_method.h b/include/grpc++/impl/rpc_service_method.h
index 925801e1ce..fcb0b7ccce 100644
--- a/include/grpc++/impl/rpc_service_method.h
+++ b/include/grpc++/impl/rpc_service_method.h
@@ -39,10 +39,10 @@
#include <memory>
#include <vector>
-#include <grpc++/config.h>
#include <grpc++/impl/rpc_method.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/status.h>
+#include <grpc++/support/sync_stream.h>
namespace grpc {
class ServerContext;
@@ -211,13 +211,19 @@ class BidiStreamingHandler : public MethodHandler {
// Handle unknown method by returning UNIMPLEMENTED error.
class UnknownMethodHandler : public MethodHandler {
public:
- void RunHandler(const HandlerParameter& param) GRPC_FINAL {
+ template <class T>
+ static void FillOps(ServerContext* context, T* ops) {
Status status(StatusCode::UNIMPLEMENTED, "");
- CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> ops;
- if (!param.server_context->sent_initial_metadata_) {
- ops.SendInitialMetadata(param.server_context->initial_metadata_);
+ if (!context->sent_initial_metadata_) {
+ ops->SendInitialMetadata(context->initial_metadata_);
+ context->sent_initial_metadata_ = true;
}
- ops.ServerSendStatus(param.server_context->trailing_metadata_, status);
+ ops->ServerSendStatus(context->trailing_metadata_, status);
+ }
+
+ void RunHandler(const HandlerParameter& param) GRPC_FINAL {
+ CallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus> ops;
+ FillOps(param.server_context, &ops);
param.call->PerformOps(&ops);
param.call->cq()->Pluck(&ops);
}
@@ -229,7 +235,7 @@ class RpcServiceMethod : public RpcMethod {
// Takes ownership of the handler
RpcServiceMethod(const char* name, RpcMethod::RpcType type,
MethodHandler* handler)
- : RpcMethod(name, type, nullptr), handler_(handler) {}
+ : RpcMethod(name, type), handler_(handler) {}
MethodHandler* handler() { return handler_.get(); }
diff --git a/include/grpc++/impl/service_type.h b/include/grpc++/impl/service_type.h
index c33a278f5b..3b6ac1de77 100644
--- a/include/grpc++/impl/service_type.h
+++ b/include/grpc++/impl/service_type.h
@@ -34,10 +34,10 @@
#ifndef GRPCXX_IMPL_SERVICE_TYPE_H
#define GRPCXX_IMPL_SERVICE_TYPE_H
-#include <grpc++/config.h>
#include <grpc++/impl/serialization_traits.h>
#include <grpc++/server.h>
-#include <grpc++/status.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/status.h>
namespace grpc {
diff --git a/include/grpc++/impl/sync.h b/include/grpc++/impl/sync.h
index 2f41d2bdeb..999c4303cb 100644
--- a/include/grpc++/impl/sync.h
+++ b/include/grpc++/impl/sync.h
@@ -34,7 +34,7 @@
#ifndef GRPCXX_IMPL_SYNC_H
#define GRPCXX_IMPL_SYNC_H
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
#ifdef GRPC_CXX0X_NO_THREAD
#include <grpc++/impl/sync_no_cxx11.h>
diff --git a/include/grpc++/impl/thd.h b/include/grpc++/impl/thd.h
index 4c4578a92d..f8d4258ac6 100644
--- a/include/grpc++/impl/thd.h
+++ b/include/grpc++/impl/thd.h
@@ -34,7 +34,7 @@
#ifndef GRPCXX_IMPL_THD_H
#define GRPCXX_IMPL_THD_H
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
#ifdef GRPC_CXX0X_NO_THREAD
#include <grpc++/impl/thd_no_cxx11.h>
diff --git a/include/grpc++/server.h b/include/grpc++/server.h
index a2bc097c7f..c8979e433c 100644
--- a/include/grpc++/server.h
+++ b/include/grpc++/server.h
@@ -38,11 +38,11 @@
#include <memory>
#include <grpc++/completion_queue.h>
-#include <grpc++/config.h>
#include <grpc++/impl/call.h>
#include <grpc++/impl/grpc_library.h>
#include <grpc++/impl/sync.h>
-#include <grpc++/status.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/status.h>
struct grpc_server;
@@ -98,7 +98,7 @@ class Server GRPC_FINAL : public GrpcLibrary, private CallHook {
// Add a listening port. Can be called multiple times.
int AddListeningPort(const grpc::string& addr, ServerCredentials* creds);
// Start the server.
- bool Start();
+ bool Start(ServerCompletionQueue** cqs, size_t num_cqs);
void HandleQueueClosed();
void RunRpc();
@@ -112,7 +112,8 @@ class Server GRPC_FINAL : public GrpcLibrary, private CallHook {
public:
BaseAsyncRequest(Server* server, ServerContext* context,
ServerAsyncStreamingInterface* stream,
- CompletionQueue* call_cq, void* tag);
+ CompletionQueue* call_cq, void* tag,
+ bool delete_on_finalize);
virtual ~BaseAsyncRequest();
bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE;
@@ -123,6 +124,7 @@ class Server GRPC_FINAL : public GrpcLibrary, private CallHook {
ServerAsyncStreamingInterface* const stream_;
CompletionQueue* const call_cq_;
void* const tag_;
+ const bool delete_on_finalize_;
grpc_call* call_;
grpc_metadata_array initial_metadata_array_;
};
@@ -184,12 +186,13 @@ class Server GRPC_FINAL : public GrpcLibrary, private CallHook {
Message* const request_;
};
- class GenericAsyncRequest GRPC_FINAL : public BaseAsyncRequest {
+ class GenericAsyncRequest : public BaseAsyncRequest {
public:
GenericAsyncRequest(Server* server, GenericServerContext* context,
ServerAsyncStreamingInterface* stream,
CompletionQueue* call_cq,
- ServerCompletionQueue* notification_cq, void* tag);
+ ServerCompletionQueue* notification_cq, void* tag,
+ bool delete_on_finalize);
bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE;
@@ -197,6 +200,10 @@ class Server GRPC_FINAL : public GrpcLibrary, private CallHook {
grpc_call_details call_details_;
};
+ class UnimplementedAsyncRequestContext;
+ class UnimplementedAsyncRequest;
+ class UnimplementedAsyncResponse;
+
template <class Message>
void RequestAsyncCall(void* registered_method, ServerContext* context,
ServerAsyncStreamingInterface* stream,
@@ -221,7 +228,7 @@ class Server GRPC_FINAL : public GrpcLibrary, private CallHook {
ServerCompletionQueue* notification_cq,
void* tag) {
new GenericAsyncRequest(this, context, stream, call_cq, notification_cq,
- tag);
+ tag, true);
}
const int max_message_size_;
diff --git a/include/grpc++/server_builder.h b/include/grpc++/server_builder.h
index 906daf1370..8cd2048592 100644
--- a/include/grpc++/server_builder.h
+++ b/include/grpc++/server_builder.h
@@ -37,7 +37,7 @@
#include <memory>
#include <vector>
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
namespace grpc {
@@ -96,13 +96,9 @@ class ServerBuilder {
std::shared_ptr<ServerCredentials> creds,
int* selected_port = nullptr);
- // Set the thread pool used for running appliation rpc handlers.
- // Does not take ownership.
- void SetThreadPool(ThreadPoolInterface* thread_pool);
-
// Add a completion queue for handling asynchronous services
- // Caller is required to keep this completion queue live until calling
- // BuildAndStart()
+ // Caller is required to keep this completion queue live until
+ // the server is destroyed.
std::unique_ptr<ServerCompletionQueue> AddCompletionQueue();
// Return a running server which is ready for processing rpcs.
diff --git a/include/grpc++/server_context.h b/include/grpc++/server_context.h
index b87a1f0379..4b17a28047 100644
--- a/include/grpc++/server_context.h
+++ b/include/grpc++/server_context.h
@@ -39,9 +39,10 @@
#include <grpc/compression.h>
#include <grpc/support/time.h>
-#include <grpc++/auth_context.h>
-#include <grpc++/config.h>
-#include <grpc++/time.h>
+#include <grpc++/support/auth_context.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/string_ref.h>
+#include <grpc++/support/time.h>
struct gpr_timespec;
struct grpc_metadata;
@@ -103,7 +104,7 @@ class ServerContext {
bool IsCancelled() const;
- const std::multimap<grpc::string, grpc::string>& client_metadata() {
+ const std::multimap<grpc::string_ref, grpc::string_ref>& client_metadata() {
return client_metadata_;
}
@@ -185,7 +186,7 @@ class ServerContext {
CompletionQueue* cq_;
bool sent_initial_metadata_;
mutable std::shared_ptr<const AuthContext> auth_context_;
- std::multimap<grpc::string, grpc::string> client_metadata_;
+ std::multimap<grpc::string_ref, grpc::string_ref> client_metadata_;
std::multimap<grpc::string, grpc::string> initial_metadata_;
std::multimap<grpc::string, grpc::string> trailing_metadata_;
diff --git a/include/grpc++/server_credentials.h b/include/grpc++/server_credentials.h
index 11acd67e8a..16b78c08af 100644
--- a/include/grpc++/server_credentials.h
+++ b/include/grpc++/server_credentials.h
@@ -37,7 +37,7 @@
#include <memory>
#include <vector>
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
struct grpc_server;
diff --git a/include/grpc++/stream.h b/include/grpc++/support/async_stream.h
index 45dafcd282..4c12fda12f 100644
--- a/include/grpc++/stream.h
+++ b/include/grpc++/support/async_stream.h
@@ -31,362 +31,20 @@
*
*/
-#ifndef GRPCXX_STREAM_H
-#define GRPCXX_STREAM_H
+#ifndef GRPCXX_SUPPORT_ASYNC_STREAM_H
+#define GRPCXX_SUPPORT_ASYNC_STREAM_H
-#include <grpc++/channel_interface.h>
+#include <grpc/support/log.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/completion_queue.h>
-#include <grpc++/server_context.h>
#include <grpc++/impl/call.h>
#include <grpc++/impl/service_type.h>
-#include <grpc++/status.h>
-#include <grpc/support/log.h>
+#include <grpc++/server_context.h>
+#include <grpc++/support/status.h>
namespace grpc {
-// Common interface for all client side streaming.
-class ClientStreamingInterface {
- public:
- virtual ~ClientStreamingInterface() {}
-
- // Wait until the stream finishes, and return the final status. When the
- // client side declares it has no more message to send, either implicitly or
- // by calling WritesDone, it needs to make sure there is no more message to
- // be received from the server, either implicitly or by getting a false from
- // a Read().
- // This function will return either:
- // - when all incoming messages have been read and the server has returned
- // status
- // - OR when the server has returned a non-OK status
- virtual Status Finish() = 0;
-};
-
-// An interface that yields a sequence of R messages.
-template <class R>
-class ReaderInterface {
- public:
- virtual ~ReaderInterface() {}
-
- // Blocking read a message and parse to msg. Returns true on success.
- // The method returns false when there will be no more incoming messages,
- // either because the other side has called WritesDone or the stream has
- // failed (or been cancelled).
- virtual bool Read(R* msg) = 0;
-};
-
-// An interface that can be fed a sequence of W messages.
-template <class W>
-class WriterInterface {
- public:
- virtual ~WriterInterface() {}
-
- // Blocking write msg to the stream. Returns true on success.
- // Returns false when the stream has been closed.
- virtual bool Write(const W& msg, const WriteOptions& options) = 0;
-
- inline bool Write(const W& msg) { return Write(msg, WriteOptions()); }
-};
-
-template <class R>
-class ClientReaderInterface : public ClientStreamingInterface,
- public ReaderInterface<R> {
- public:
- virtual void WaitForInitialMetadata() = 0;
-};
-
-template <class R>
-class ClientReader GRPC_FINAL : public ClientReaderInterface<R> {
- public:
- // Blocking create a stream and write the first request out.
- template <class W>
- ClientReader(ChannelInterface* channel, const RpcMethod& method,
- ClientContext* context, const W& request)
- : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
- CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
- CallOpClientSendClose> ops;
- ops.SendInitialMetadata(context->send_initial_metadata_);
- // TODO(ctiller): don't assert
- GPR_ASSERT(ops.SendMessage(request).ok());
- ops.ClientSendClose();
- call_.PerformOps(&ops);
- cq_.Pluck(&ops);
- }
-
- // Blocking wait for initial metadata from server. The received metadata
- // can only be accessed after this call returns. Should only be called before
- // the first read. Calling this method is optional, and if it is not called
- // the metadata will be available in ClientContext after the first read.
- void WaitForInitialMetadata() {
- GPR_ASSERT(!context_->initial_metadata_received_);
-
- CallOpSet<CallOpRecvInitialMetadata> ops;
- ops.RecvInitialMetadata(context_);
- call_.PerformOps(&ops);
- cq_.Pluck(&ops); // status ignored
- }
-
- bool Read(R* msg) GRPC_OVERRIDE {
- CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>> ops;
- if (!context_->initial_metadata_received_) {
- ops.RecvInitialMetadata(context_);
- }
- ops.RecvMessage(msg);
- call_.PerformOps(&ops);
- return cq_.Pluck(&ops) && ops.got_message;
- }
-
- Status Finish() GRPC_OVERRIDE {
- CallOpSet<CallOpClientRecvStatus> ops;
- Status status;
- ops.ClientRecvStatus(context_, &status);
- call_.PerformOps(&ops);
- GPR_ASSERT(cq_.Pluck(&ops));
- return status;
- }
-
- private:
- ClientContext* context_;
- CompletionQueue cq_;
- Call call_;
-};
-
-template <class W>
-class ClientWriterInterface : public ClientStreamingInterface,
- public WriterInterface<W> {
- public:
- virtual bool WritesDone() = 0;
-};
-
-template <class W>
-class ClientWriter : public ClientWriterInterface<W> {
- public:
- // Blocking create a stream.
- template <class R>
- ClientWriter(ChannelInterface* channel, const RpcMethod& method,
- ClientContext* context, R* response)
- : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
- finish_ops_.RecvMessage(response);
-
- CallOpSet<CallOpSendInitialMetadata> ops;
- ops.SendInitialMetadata(context->send_initial_metadata_);
- call_.PerformOps(&ops);
- cq_.Pluck(&ops);
- }
-
- using WriterInterface<W>::Write;
- bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
- CallOpSet<CallOpSendMessage> ops;
- if (!ops.SendMessage(msg, options).ok()) {
- return false;
- }
- call_.PerformOps(&ops);
- return cq_.Pluck(&ops);
- }
-
- bool WritesDone() GRPC_OVERRIDE {
- CallOpSet<CallOpClientSendClose> ops;
- ops.ClientSendClose();
- call_.PerformOps(&ops);
- return cq_.Pluck(&ops);
- }
-
- // Read the final response and wait for the final status.
- Status Finish() GRPC_OVERRIDE {
- Status status;
- finish_ops_.ClientRecvStatus(context_, &status);
- call_.PerformOps(&finish_ops_);
- GPR_ASSERT(cq_.Pluck(&finish_ops_));
- return status;
- }
-
- private:
- ClientContext* context_;
- CallOpSet<CallOpGenericRecvMessage, CallOpClientRecvStatus> finish_ops_;
- CompletionQueue cq_;
- Call call_;
-};
-
-// Client-side interface for bi-directional streaming.
-template <class W, class R>
-class ClientReaderWriterInterface : public ClientStreamingInterface,
- public WriterInterface<W>,
- public ReaderInterface<R> {
- public:
- virtual void WaitForInitialMetadata() = 0;
- virtual bool WritesDone() = 0;
-};
-
-template <class W, class R>
-class ClientReaderWriter GRPC_FINAL : public ClientReaderWriterInterface<W, R> {
- public:
- // Blocking create a stream.
- ClientReaderWriter(ChannelInterface* channel, const RpcMethod& method,
- ClientContext* context)
- : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
- CallOpSet<CallOpSendInitialMetadata> ops;
- ops.SendInitialMetadata(context->send_initial_metadata_);
- call_.PerformOps(&ops);
- cq_.Pluck(&ops);
- }
-
- // Blocking wait for initial metadata from server. The received metadata
- // can only be accessed after this call returns. Should only be called before
- // the first read. Calling this method is optional, and if it is not called
- // the metadata will be available in ClientContext after the first read.
- void WaitForInitialMetadata() {
- GPR_ASSERT(!context_->initial_metadata_received_);
-
- CallOpSet<CallOpRecvInitialMetadata> ops;
- ops.RecvInitialMetadata(context_);
- call_.PerformOps(&ops);
- cq_.Pluck(&ops); // status ignored
- }
-
- bool Read(R* msg) GRPC_OVERRIDE {
- CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>> ops;
- if (!context_->initial_metadata_received_) {
- ops.RecvInitialMetadata(context_);
- }
- ops.RecvMessage(msg);
- call_.PerformOps(&ops);
- return cq_.Pluck(&ops) && ops.got_message;
- }
-
- using WriterInterface<W>::Write;
- bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
- CallOpSet<CallOpSendMessage> ops;
- if (!ops.SendMessage(msg, options).ok()) return false;
- call_.PerformOps(&ops);
- return cq_.Pluck(&ops);
- }
-
- bool WritesDone() GRPC_OVERRIDE {
- CallOpSet<CallOpClientSendClose> ops;
- ops.ClientSendClose();
- call_.PerformOps(&ops);
- return cq_.Pluck(&ops);
- }
-
- Status Finish() GRPC_OVERRIDE {
- CallOpSet<CallOpClientRecvStatus> ops;
- Status status;
- ops.ClientRecvStatus(context_, &status);
- call_.PerformOps(&ops);
- GPR_ASSERT(cq_.Pluck(&ops));
- return status;
- }
-
- private:
- ClientContext* context_;
- CompletionQueue cq_;
- Call call_;
-};
-
-template <class R>
-class ServerReader GRPC_FINAL : public ReaderInterface<R> {
- public:
- ServerReader(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
-
- void SendInitialMetadata() {
- GPR_ASSERT(!ctx_->sent_initial_metadata_);
-
- CallOpSet<CallOpSendInitialMetadata> ops;
- ops.SendInitialMetadata(ctx_->initial_metadata_);
- ctx_->sent_initial_metadata_ = true;
- call_->PerformOps(&ops);
- call_->cq()->Pluck(&ops);
- }
-
- bool Read(R* msg) GRPC_OVERRIDE {
- CallOpSet<CallOpRecvMessage<R>> ops;
- ops.RecvMessage(msg);
- call_->PerformOps(&ops);
- return call_->cq()->Pluck(&ops) && ops.got_message;
- }
-
- private:
- Call* const call_;
- ServerContext* const ctx_;
-};
-
-template <class W>
-class ServerWriter GRPC_FINAL : public WriterInterface<W> {
- public:
- ServerWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
-
- void SendInitialMetadata() {
- GPR_ASSERT(!ctx_->sent_initial_metadata_);
-
- CallOpSet<CallOpSendInitialMetadata> ops;
- ops.SendInitialMetadata(ctx_->initial_metadata_);
- ctx_->sent_initial_metadata_ = true;
- call_->PerformOps(&ops);
- call_->cq()->Pluck(&ops);
- }
-
- using WriterInterface<W>::Write;
- bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
- CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> ops;
- if (!ops.SendMessage(msg, options).ok()) {
- return false;
- }
- if (!ctx_->sent_initial_metadata_) {
- ops.SendInitialMetadata(ctx_->initial_metadata_);
- ctx_->sent_initial_metadata_ = true;
- }
- call_->PerformOps(&ops);
- return call_->cq()->Pluck(&ops);
- }
-
- private:
- Call* const call_;
- ServerContext* const ctx_;
-};
-
-// Server-side interface for bi-directional streaming.
-template <class W, class R>
-class ServerReaderWriter GRPC_FINAL : public WriterInterface<W>,
- public ReaderInterface<R> {
- public:
- ServerReaderWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
-
- void SendInitialMetadata() {
- GPR_ASSERT(!ctx_->sent_initial_metadata_);
-
- CallOpSet<CallOpSendInitialMetadata> ops;
- ops.SendInitialMetadata(ctx_->initial_metadata_);
- ctx_->sent_initial_metadata_ = true;
- call_->PerformOps(&ops);
- call_->cq()->Pluck(&ops);
- }
-
- bool Read(R* msg) GRPC_OVERRIDE {
- CallOpSet<CallOpRecvMessage<R>> ops;
- ops.RecvMessage(msg);
- call_->PerformOps(&ops);
- return call_->cq()->Pluck(&ops) && ops.got_message;
- }
-
- using WriterInterface<W>::Write;
- bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
- CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> ops;
- if (!ops.SendMessage(msg, options).ok()) {
- return false;
- }
- if (!ctx_->sent_initial_metadata_) {
- ops.SendInitialMetadata(ctx_->initial_metadata_);
- ctx_->sent_initial_metadata_ = true;
- }
- call_->PerformOps(&ops);
- return call_->cq()->Pluck(&ops);
- }
-
- private:
- Call* const call_;
- ServerContext* const ctx_;
-};
-
// Async interfaces
// Common interface for all client side streaming.
class ClientAsyncStreamingInterface {
@@ -425,7 +83,7 @@ class ClientAsyncReader GRPC_FINAL : public ClientAsyncReaderInterface<R> {
public:
// Create a stream and write the first request out.
template <class W>
- ClientAsyncReader(ChannelInterface* channel, CompletionQueue* cq,
+ ClientAsyncReader(Channel* channel, CompletionQueue* cq,
const RpcMethod& method, ClientContext* context,
const W& request, void* tag)
: context_(context), call_(channel->CreateCall(method, context, cq)) {
@@ -484,7 +142,7 @@ template <class W>
class ClientAsyncWriter GRPC_FINAL : public ClientAsyncWriterInterface<W> {
public:
template <class R>
- ClientAsyncWriter(ChannelInterface* channel, CompletionQueue* cq,
+ ClientAsyncWriter(Channel* channel, CompletionQueue* cq,
const RpcMethod& method, ClientContext* context,
R* response, void* tag)
: context_(context), call_(channel->CreateCall(method, context, cq)) {
@@ -549,7 +207,7 @@ template <class W, class R>
class ClientAsyncReaderWriter GRPC_FINAL
: public ClientAsyncReaderWriterInterface<W, R> {
public:
- ClientAsyncReaderWriter(ChannelInterface* channel, CompletionQueue* cq,
+ ClientAsyncReaderWriter(Channel* channel, CompletionQueue* cq,
const RpcMethod& method, ClientContext* context,
void* tag)
: context_(context), call_(channel->CreateCall(method, context, cq)) {
@@ -761,6 +419,8 @@ class ServerAsyncReaderWriter GRPC_FINAL : public ServerAsyncStreamingInterface,
}
private:
+ friend class ::grpc::Server;
+
void BindCall(Call* call) GRPC_OVERRIDE { call_ = *call; }
Call call_;
@@ -773,4 +433,4 @@ class ServerAsyncReaderWriter GRPC_FINAL : public ServerAsyncStreamingInterface,
} // namespace grpc
-#endif // GRPCXX_STREAM_H
+#endif // GRPCXX_SUPPORT_ASYNC_STREAM_H
diff --git a/include/grpc++/async_unary_call.h b/include/grpc++/support/async_unary_call.h
index 3d22df4b33..0f4ad2656f 100644
--- a/include/grpc++/async_unary_call.h
+++ b/include/grpc++/support/async_unary_call.h
@@ -31,17 +31,17 @@
*
*/
-#ifndef GRPCXX_ASYNC_UNARY_CALL_H
-#define GRPCXX_ASYNC_UNARY_CALL_H
+#ifndef GRPCXX_SUPPORT_ASYNC_UNARY_CALL_H
+#define GRPCXX_SUPPORT_ASYNC_UNARY_CALL_H
-#include <grpc++/channel_interface.h>
+#include <grpc/support/log.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/completion_queue.h>
#include <grpc++/server_context.h>
#include <grpc++/impl/call.h>
#include <grpc++/impl/service_type.h>
-#include <grpc++/status.h>
-#include <grpc/support/log.h>
+#include <grpc++/support/status.h>
namespace grpc {
@@ -58,7 +58,7 @@ class ClientAsyncResponseReader GRPC_FINAL
: public ClientAsyncResponseReaderInterface<R> {
public:
template <class W>
- ClientAsyncResponseReader(ChannelInterface* channel, CompletionQueue* cq,
+ ClientAsyncResponseReader(Channel* channel, CompletionQueue* cq,
const RpcMethod& method, ClientContext* context,
const W& request)
: context_(context), call_(channel->CreateCall(method, context, cq)) {
@@ -152,4 +152,4 @@ class ServerAsyncResponseWriter GRPC_FINAL
} // namespace grpc
-#endif // GRPCXX_ASYNC_UNARY_CALL_H
+#endif // GRPCXX_SUPPORT_ASYNC_UNARY_CALL_H
diff --git a/include/grpc++/auth_context.h b/include/grpc++/support/auth_context.h
index 7dced90ce5..67e3e66c05 100644
--- a/include/grpc++/auth_context.h
+++ b/include/grpc++/support/auth_context.h
@@ -31,13 +31,14 @@
*
*/
-#ifndef GRPCXX_AUTH_CONTEXT_H
-#define GRPCXX_AUTH_CONTEXT_H
+#ifndef GRPCXX_SUPPORT_AUTH_CONTEXT_H
+#define GRPCXX_SUPPORT_AUTH_CONTEXT_H
#include <iterator>
#include <vector>
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/string_ref.h>
struct grpc_auth_context;
struct grpc_auth_property;
@@ -46,7 +47,7 @@ struct grpc_auth_property_iterator;
namespace grpc {
class SecureAuthContext;
-typedef std::pair<grpc::string, grpc::string> AuthProperty;
+typedef std::pair<grpc::string_ref, grpc::string_ref> AuthProperty;
class AuthPropertyIterator
: public std::iterator<std::input_iterator_tag, const AuthProperty> {
@@ -78,11 +79,11 @@ class AuthContext {
// A peer identity, in general is one or more properties (in which case they
// have the same name).
- virtual std::vector<grpc::string> GetPeerIdentity() const = 0;
+ virtual std::vector<grpc::string_ref> GetPeerIdentity() const = 0;
virtual grpc::string GetPeerIdentityPropertyName() const = 0;
// Returns all the property values with the given name.
- virtual std::vector<grpc::string> FindPropertyValues(
+ virtual std::vector<grpc::string_ref> FindPropertyValues(
const grpc::string& name) const = 0;
// Iteration over all the properties.
@@ -92,4 +93,4 @@ class AuthContext {
} // namespace grpc
-#endif // GRPCXX_AUTH_CONTEXT_H
+#endif // GRPCXX_SUPPORT_AUTH_CONTEXT_H
diff --git a/include/grpc++/byte_buffer.h b/include/grpc++/support/byte_buffer.h
index 6467776398..3f8cc25f47 100644
--- a/include/grpc++/byte_buffer.h
+++ b/include/grpc++/support/byte_buffer.h
@@ -31,16 +31,16 @@
*
*/
-#ifndef GRPCXX_BYTE_BUFFER_H
-#define GRPCXX_BYTE_BUFFER_H
+#ifndef GRPCXX_SUPPORT_BYTE_BUFFER_H
+#define GRPCXX_SUPPORT_BYTE_BUFFER_H
#include <grpc/grpc.h>
#include <grpc/byte_buffer.h>
#include <grpc/support/log.h>
-#include <grpc++/config.h>
-#include <grpc++/slice.h>
-#include <grpc++/status.h>
#include <grpc++/impl/serialization_traits.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/slice.h>
+#include <grpc++/support/status.h>
#include <vector>
@@ -101,4 +101,4 @@ class SerializationTraits<ByteBuffer, void> {
} // namespace grpc
-#endif // GRPCXX_BYTE_BUFFER_H
+#endif // GRPCXX_SUPPORT_BYTE_BUFFER_H
diff --git a/include/grpc++/channel_arguments.h b/include/grpc++/support/channel_arguments.h
index 4d926377ec..cee68467c7 100644
--- a/include/grpc++/channel_arguments.h
+++ b/include/grpc++/support/channel_arguments.h
@@ -31,15 +31,15 @@
*
*/
-#ifndef GRPCXX_CHANNEL_ARGUMENTS_H
-#define GRPCXX_CHANNEL_ARGUMENTS_H
+#ifndef GRPCXX_SUPPORT_CHANNEL_ARGUMENTS_H
+#define GRPCXX_SUPPORT_CHANNEL_ARGUMENTS_H
#include <vector>
#include <list>
-#include <grpc++/config.h>
#include <grpc/compression.h>
#include <grpc/grpc.h>
+#include <grpc++/support/config.h>
namespace grpc {
namespace testing {
@@ -90,4 +90,4 @@ class ChannelArguments {
} // namespace grpc
-#endif // GRPCXX_CHANNEL_ARGUMENTS_H
+#endif // GRPCXX_SUPPORT_CHANNEL_ARGUMENTS_H
diff --git a/include/grpc++/config.h b/include/grpc++/support/config.h
index 889dc39eb7..836bd47283 100644
--- a/include/grpc++/config.h
+++ b/include/grpc++/support/config.h
@@ -31,8 +31,8 @@
*
*/
-#ifndef GRPCXX_CONFIG_H
-#define GRPCXX_CONFIG_H
+#ifndef GRPCXX_SUPPORT_CONFIG_H
+#define GRPCXX_SUPPORT_CONFIG_H
#if !defined(GRPC_NO_AUTODETECT_PLATFORM)
@@ -113,4 +113,4 @@ typedef GRPC_CUSTOM_STRING string;
} // namespace grpc
-#endif // GRPCXX_CONFIG_H
+#endif // GRPCXX_SUPPORT_CONFIG_H
diff --git a/include/grpc++/config_protobuf.h b/include/grpc++/support/config_protobuf.h
index 3afc7a58e2..8235590d41 100644
--- a/include/grpc++/config_protobuf.h
+++ b/include/grpc++/support/config_protobuf.h
@@ -31,8 +31,8 @@
*
*/
-#ifndef GRPCXX_CONFIG_PROTOBUF_H
-#define GRPCXX_CONFIG_PROTOBUF_H
+#ifndef GRPCXX_SUPPORT_CONFIG_PROTOBUF_H
+#define GRPCXX_SUPPORT_CONFIG_PROTOBUF_H
#ifndef GRPC_CUSTOM_PROTOBUF_INT64
#include <google/protobuf/stubs/common.h>
@@ -69,4 +69,4 @@ typedef GRPC_CUSTOM_CODEDINPUTSTREAM CodedInputStream;
} // namespace protobuf
} // namespace grpc
-#endif // GRPCXX_CONFIG_PROTOBUF_H
+#endif // GRPCXX_SUPPORT_CONFIG_PROTOBUF_H
diff --git a/include/grpc++/slice.h b/include/grpc++/support/slice.h
index 3e01bcf0ad..b2343a7f3d 100644
--- a/include/grpc++/slice.h
+++ b/include/grpc++/support/slice.h
@@ -31,11 +31,11 @@
*
*/
-#ifndef GRPCXX_SLICE_H
-#define GRPCXX_SLICE_H
+#ifndef GRPCXX_SUPPORT_SLICE_H
+#define GRPCXX_SUPPORT_SLICE_H
#include <grpc/support/slice.h>
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
namespace grpc {
@@ -71,4 +71,4 @@ class Slice GRPC_FINAL {
} // namespace grpc
-#endif // GRPCXX_SLICE_H
+#endif // GRPCXX_SUPPORT_SLICE_H
diff --git a/include/grpc++/status.h b/include/grpc++/support/status.h
index fb8526ddce..05750ff600 100644
--- a/include/grpc++/status.h
+++ b/include/grpc++/support/status.h
@@ -31,11 +31,11 @@
*
*/
-#ifndef GRPCXX_STATUS_H
-#define GRPCXX_STATUS_H
+#ifndef GRPCXX_SUPPORT_STATUS_H
+#define GRPCXX_SUPPORT_STATUS_H
-#include <grpc++/status_code_enum.h>
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/status_code_enum.h>
namespace grpc {
@@ -61,4 +61,4 @@ class Status {
} // namespace grpc
-#endif // GRPCXX_STATUS_H
+#endif // GRPCXX_SUPPORT_STATUS_H
diff --git a/include/grpc++/status_code_enum.h b/include/grpc++/support/status_code_enum.h
index 2211c964cd..7cb40452c8 100644
--- a/include/grpc++/status_code_enum.h
+++ b/include/grpc++/support/status_code_enum.h
@@ -31,8 +31,8 @@
*
*/
-#ifndef GRPCXX_STATUS_CODE_ENUM_H
-#define GRPCXX_STATUS_CODE_ENUM_H
+#ifndef GRPCXX_SUPPORT_STATUS_CODE_ENUM_H
+#define GRPCXX_SUPPORT_STATUS_CODE_ENUM_H
namespace grpc {
@@ -156,4 +156,4 @@ enum StatusCode {
} // namespace grpc
-#endif // GRPCXX_STATUS_CODE_ENUM_H
+#endif // GRPCXX_SUPPORT_STATUS_CODE_ENUM_H
diff --git a/include/grpc++/support/string_ref.h b/include/grpc++/support/string_ref.h
new file mode 100644
index 0000000000..2bc1fecefe
--- /dev/null
+++ b/include/grpc++/support/string_ref.h
@@ -0,0 +1,120 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPCXX_SUPPORT_STRING_REF_H
+#define GRPCXX_SUPPORT_STRING_REF_H
+
+#include <iterator>
+#include <iosfwd>
+
+#include <grpc++/support/config.h>
+
+namespace grpc {
+
+// This class is a non owning reference to a string.
+// It should be a strict subset of the upcoming std::string_ref. See:
+// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3442.html
+// The constexpr is dropped or replaced with const for legacy compiler
+// compatibility.
+class string_ref {
+ public:
+ // types
+ typedef const char* const_iterator;
+ typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
+
+ // constants
+ const static size_t npos = size_t(-1);
+
+ // construct/copy.
+ string_ref() : data_(nullptr), length_(0) {}
+ string_ref(const string_ref& other)
+ : data_(other.data_), length_(other.length_) {}
+ string_ref& operator=(const string_ref& rhs);
+ string_ref(const char* s);
+ string_ref(const char* s, size_t l) : data_(s), length_(l) {}
+ string_ref(const grpc::string& s) : data_(s.data()), length_(s.length()) {}
+
+ // iterators
+ const_iterator begin() const { return data_; }
+ const_iterator end() const { return data_ + length_; }
+ const_iterator cbegin() const { return data_; }
+ const_iterator cend() const { return data_ + length_; }
+ const_reverse_iterator rbegin() const {
+ return const_reverse_iterator(end());
+ }
+ const_reverse_iterator rend() const {
+ return const_reverse_iterator(begin());
+ }
+ const_reverse_iterator crbegin() const {
+ return const_reverse_iterator(end());
+ }
+ const_reverse_iterator crend() const {
+ return const_reverse_iterator(begin());
+ }
+
+ // capacity
+ size_t size() const { return length_; }
+ size_t length() const { return length_; }
+ size_t max_size() const { return length_; }
+ bool empty() const { return length_ == 0; }
+
+ // element access
+ const char* data() const { return data_; }
+
+ // string operations
+ int compare(string_ref x) const;
+ bool starts_with(string_ref x) const;
+ bool ends_with(string_ref x) const;
+ size_t find(string_ref s) const;
+ size_t find(char c) const;
+
+ string_ref substr(size_t pos, size_t n = npos) const;
+
+ private:
+ const char* data_;
+ size_t length_;
+};
+
+// Comparison operators
+bool operator==(string_ref x, string_ref y);
+bool operator!=(string_ref x, string_ref y);
+bool operator<(string_ref x, string_ref y);
+bool operator>(string_ref x, string_ref y);
+bool operator<=(string_ref x, string_ref y);
+bool operator>=(string_ref x, string_ref y);
+
+std::ostream& operator<<(std::ostream& stream, const string_ref& string);
+
+} // namespace grpc
+
+#endif // GRPCXX_SUPPORT_STRING_REF_H
diff --git a/include/grpc++/stub_options.h b/include/grpc++/support/stub_options.h
index c7c16dcd55..973aa9bc83 100644
--- a/include/grpc++/stub_options.h
+++ b/include/grpc++/support/stub_options.h
@@ -31,8 +31,8 @@
*
*/
-#ifndef GRPCXX_STUB_OPTIONS_H
-#define GRPCXX_STUB_OPTIONS_H
+#ifndef GRPCXX_SUPPORT_STUB_OPTIONS_H
+#define GRPCXX_SUPPORT_STUB_OPTIONS_H
namespace grpc {
@@ -40,4 +40,4 @@ class StubOptions {};
} // namespace grpc
-#endif // GRPCXX_STUB_OPTIONS_H
+#endif // GRPCXX_SUPPORT_STUB_OPTIONS_H
diff --git a/include/grpc++/support/sync_stream.h b/include/grpc++/support/sync_stream.h
new file mode 100644
index 0000000000..b4bb637ff2
--- /dev/null
+++ b/include/grpc++/support/sync_stream.h
@@ -0,0 +1,392 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPCXX_SUPPORT_SYNC_STREAM_H
+#define GRPCXX_SUPPORT_SYNC_STREAM_H
+
+#include <grpc/support/log.h>
+#include <grpc++/channel.h>
+#include <grpc++/client_context.h>
+#include <grpc++/completion_queue.h>
+#include <grpc++/impl/call.h>
+#include <grpc++/impl/service_type.h>
+#include <grpc++/server_context.h>
+#include <grpc++/support/status.h>
+
+namespace grpc {
+
+// Common interface for all client side streaming.
+class ClientStreamingInterface {
+ public:
+ virtual ~ClientStreamingInterface() {}
+
+ // Wait until the stream finishes, and return the final status. When the
+ // client side declares it has no more message to send, either implicitly or
+ // by calling WritesDone, it needs to make sure there is no more message to
+ // be received from the server, either implicitly or by getting a false from
+ // a Read().
+ // This function will return either:
+ // - when all incoming messages have been read and the server has returned
+ // status
+ // - OR when the server has returned a non-OK status
+ virtual Status Finish() = 0;
+};
+
+// An interface that yields a sequence of R messages.
+template <class R>
+class ReaderInterface {
+ public:
+ virtual ~ReaderInterface() {}
+
+ // Blocking read a message and parse to msg. Returns true on success.
+ // The method returns false when there will be no more incoming messages,
+ // either because the other side has called WritesDone or the stream has
+ // failed (or been cancelled).
+ virtual bool Read(R* msg) = 0;
+};
+
+// An interface that can be fed a sequence of W messages.
+template <class W>
+class WriterInterface {
+ public:
+ virtual ~WriterInterface() {}
+
+ // Blocking write msg to the stream. Returns true on success.
+ // Returns false when the stream has been closed.
+ virtual bool Write(const W& msg, const WriteOptions& options) = 0;
+
+ inline bool Write(const W& msg) { return Write(msg, WriteOptions()); }
+};
+
+template <class R>
+class ClientReaderInterface : public ClientStreamingInterface,
+ public ReaderInterface<R> {
+ public:
+ virtual void WaitForInitialMetadata() = 0;
+};
+
+template <class R>
+class ClientReader GRPC_FINAL : public ClientReaderInterface<R> {
+ public:
+ // Blocking create a stream and write the first request out.
+ template <class W>
+ ClientReader(Channel* channel, const RpcMethod& method,
+ ClientContext* context, const W& request)
+ : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
+ CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage,
+ CallOpClientSendClose> ops;
+ ops.SendInitialMetadata(context->send_initial_metadata_);
+ // TODO(ctiller): don't assert
+ GPR_ASSERT(ops.SendMessage(request).ok());
+ ops.ClientSendClose();
+ call_.PerformOps(&ops);
+ cq_.Pluck(&ops);
+ }
+
+ // Blocking wait for initial metadata from server. The received metadata
+ // can only be accessed after this call returns. Should only be called before
+ // the first read. Calling this method is optional, and if it is not called
+ // the metadata will be available in ClientContext after the first read.
+ void WaitForInitialMetadata() {
+ GPR_ASSERT(!context_->initial_metadata_received_);
+
+ CallOpSet<CallOpRecvInitialMetadata> ops;
+ ops.RecvInitialMetadata(context_);
+ call_.PerformOps(&ops);
+ cq_.Pluck(&ops); // status ignored
+ }
+
+ bool Read(R* msg) GRPC_OVERRIDE {
+ CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>> ops;
+ if (!context_->initial_metadata_received_) {
+ ops.RecvInitialMetadata(context_);
+ }
+ ops.RecvMessage(msg);
+ call_.PerformOps(&ops);
+ return cq_.Pluck(&ops) && ops.got_message;
+ }
+
+ Status Finish() GRPC_OVERRIDE {
+ CallOpSet<CallOpClientRecvStatus> ops;
+ Status status;
+ ops.ClientRecvStatus(context_, &status);
+ call_.PerformOps(&ops);
+ GPR_ASSERT(cq_.Pluck(&ops));
+ return status;
+ }
+
+ private:
+ ClientContext* context_;
+ CompletionQueue cq_;
+ Call call_;
+};
+
+template <class W>
+class ClientWriterInterface : public ClientStreamingInterface,
+ public WriterInterface<W> {
+ public:
+ virtual bool WritesDone() = 0;
+};
+
+template <class W>
+class ClientWriter : public ClientWriterInterface<W> {
+ public:
+ // Blocking create a stream.
+ template <class R>
+ ClientWriter(Channel* channel, const RpcMethod& method,
+ ClientContext* context, R* response)
+ : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
+ finish_ops_.RecvMessage(response);
+
+ CallOpSet<CallOpSendInitialMetadata> ops;
+ ops.SendInitialMetadata(context->send_initial_metadata_);
+ call_.PerformOps(&ops);
+ cq_.Pluck(&ops);
+ }
+
+ using WriterInterface<W>::Write;
+ bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
+ CallOpSet<CallOpSendMessage> ops;
+ if (!ops.SendMessage(msg, options).ok()) {
+ return false;
+ }
+ call_.PerformOps(&ops);
+ return cq_.Pluck(&ops);
+ }
+
+ bool WritesDone() GRPC_OVERRIDE {
+ CallOpSet<CallOpClientSendClose> ops;
+ ops.ClientSendClose();
+ call_.PerformOps(&ops);
+ return cq_.Pluck(&ops);
+ }
+
+ // Read the final response and wait for the final status.
+ Status Finish() GRPC_OVERRIDE {
+ Status status;
+ finish_ops_.ClientRecvStatus(context_, &status);
+ call_.PerformOps(&finish_ops_);
+ GPR_ASSERT(cq_.Pluck(&finish_ops_));
+ return status;
+ }
+
+ private:
+ ClientContext* context_;
+ CallOpSet<CallOpGenericRecvMessage, CallOpClientRecvStatus> finish_ops_;
+ CompletionQueue cq_;
+ Call call_;
+};
+
+// Client-side interface for bi-directional streaming.
+template <class W, class R>
+class ClientReaderWriterInterface : public ClientStreamingInterface,
+ public WriterInterface<W>,
+ public ReaderInterface<R> {
+ public:
+ virtual void WaitForInitialMetadata() = 0;
+ virtual bool WritesDone() = 0;
+};
+
+template <class W, class R>
+class ClientReaderWriter GRPC_FINAL : public ClientReaderWriterInterface<W, R> {
+ public:
+ // Blocking create a stream.
+ ClientReaderWriter(Channel* channel, const RpcMethod& method,
+ ClientContext* context)
+ : context_(context), call_(channel->CreateCall(method, context, &cq_)) {
+ CallOpSet<CallOpSendInitialMetadata> ops;
+ ops.SendInitialMetadata(context->send_initial_metadata_);
+ call_.PerformOps(&ops);
+ cq_.Pluck(&ops);
+ }
+
+ // Blocking wait for initial metadata from server. The received metadata
+ // can only be accessed after this call returns. Should only be called before
+ // the first read. Calling this method is optional, and if it is not called
+ // the metadata will be available in ClientContext after the first read.
+ void WaitForInitialMetadata() {
+ GPR_ASSERT(!context_->initial_metadata_received_);
+
+ CallOpSet<CallOpRecvInitialMetadata> ops;
+ ops.RecvInitialMetadata(context_);
+ call_.PerformOps(&ops);
+ cq_.Pluck(&ops); // status ignored
+ }
+
+ bool Read(R* msg) GRPC_OVERRIDE {
+ CallOpSet<CallOpRecvInitialMetadata, CallOpRecvMessage<R>> ops;
+ if (!context_->initial_metadata_received_) {
+ ops.RecvInitialMetadata(context_);
+ }
+ ops.RecvMessage(msg);
+ call_.PerformOps(&ops);
+ return cq_.Pluck(&ops) && ops.got_message;
+ }
+
+ using WriterInterface<W>::Write;
+ bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
+ CallOpSet<CallOpSendMessage> ops;
+ if (!ops.SendMessage(msg, options).ok()) return false;
+ call_.PerformOps(&ops);
+ return cq_.Pluck(&ops);
+ }
+
+ bool WritesDone() GRPC_OVERRIDE {
+ CallOpSet<CallOpClientSendClose> ops;
+ ops.ClientSendClose();
+ call_.PerformOps(&ops);
+ return cq_.Pluck(&ops);
+ }
+
+ Status Finish() GRPC_OVERRIDE {
+ CallOpSet<CallOpClientRecvStatus> ops;
+ Status status;
+ ops.ClientRecvStatus(context_, &status);
+ call_.PerformOps(&ops);
+ GPR_ASSERT(cq_.Pluck(&ops));
+ return status;
+ }
+
+ private:
+ ClientContext* context_;
+ CompletionQueue cq_;
+ Call call_;
+};
+
+template <class R>
+class ServerReader GRPC_FINAL : public ReaderInterface<R> {
+ public:
+ ServerReader(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
+
+ void SendInitialMetadata() {
+ GPR_ASSERT(!ctx_->sent_initial_metadata_);
+
+ CallOpSet<CallOpSendInitialMetadata> ops;
+ ops.SendInitialMetadata(ctx_->initial_metadata_);
+ ctx_->sent_initial_metadata_ = true;
+ call_->PerformOps(&ops);
+ call_->cq()->Pluck(&ops);
+ }
+
+ bool Read(R* msg) GRPC_OVERRIDE {
+ CallOpSet<CallOpRecvMessage<R>> ops;
+ ops.RecvMessage(msg);
+ call_->PerformOps(&ops);
+ return call_->cq()->Pluck(&ops) && ops.got_message;
+ }
+
+ private:
+ Call* const call_;
+ ServerContext* const ctx_;
+};
+
+template <class W>
+class ServerWriter GRPC_FINAL : public WriterInterface<W> {
+ public:
+ ServerWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
+
+ void SendInitialMetadata() {
+ GPR_ASSERT(!ctx_->sent_initial_metadata_);
+
+ CallOpSet<CallOpSendInitialMetadata> ops;
+ ops.SendInitialMetadata(ctx_->initial_metadata_);
+ ctx_->sent_initial_metadata_ = true;
+ call_->PerformOps(&ops);
+ call_->cq()->Pluck(&ops);
+ }
+
+ using WriterInterface<W>::Write;
+ bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
+ CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> ops;
+ if (!ops.SendMessage(msg, options).ok()) {
+ return false;
+ }
+ if (!ctx_->sent_initial_metadata_) {
+ ops.SendInitialMetadata(ctx_->initial_metadata_);
+ ctx_->sent_initial_metadata_ = true;
+ }
+ call_->PerformOps(&ops);
+ return call_->cq()->Pluck(&ops);
+ }
+
+ private:
+ Call* const call_;
+ ServerContext* const ctx_;
+};
+
+// Server-side interface for bi-directional streaming.
+template <class W, class R>
+class ServerReaderWriter GRPC_FINAL : public WriterInterface<W>,
+ public ReaderInterface<R> {
+ public:
+ ServerReaderWriter(Call* call, ServerContext* ctx) : call_(call), ctx_(ctx) {}
+
+ void SendInitialMetadata() {
+ GPR_ASSERT(!ctx_->sent_initial_metadata_);
+
+ CallOpSet<CallOpSendInitialMetadata> ops;
+ ops.SendInitialMetadata(ctx_->initial_metadata_);
+ ctx_->sent_initial_metadata_ = true;
+ call_->PerformOps(&ops);
+ call_->cq()->Pluck(&ops);
+ }
+
+ bool Read(R* msg) GRPC_OVERRIDE {
+ CallOpSet<CallOpRecvMessage<R>> ops;
+ ops.RecvMessage(msg);
+ call_->PerformOps(&ops);
+ return call_->cq()->Pluck(&ops) && ops.got_message;
+ }
+
+ using WriterInterface<W>::Write;
+ bool Write(const W& msg, const WriteOptions& options) GRPC_OVERRIDE {
+ CallOpSet<CallOpSendInitialMetadata, CallOpSendMessage> ops;
+ if (!ops.SendMessage(msg, options).ok()) {
+ return false;
+ }
+ if (!ctx_->sent_initial_metadata_) {
+ ops.SendInitialMetadata(ctx_->initial_metadata_);
+ ctx_->sent_initial_metadata_ = true;
+ }
+ call_->PerformOps(&ops);
+ return call_->cq()->Pluck(&ops);
+ }
+
+ private:
+ Call* const call_;
+ ServerContext* const ctx_;
+};
+
+} // namespace grpc
+
+#endif // GRPCXX_SUPPORT_SYNC_STREAM_H
diff --git a/include/grpc++/time.h b/include/grpc++/support/time.h
index 8fb2f8505c..2d4196b93b 100644
--- a/include/grpc++/time.h
+++ b/include/grpc++/support/time.h
@@ -31,10 +31,10 @@
*
*/
-#ifndef GRPCXX_TIME_H
-#define GRPCXX_TIME_H
+#ifndef GRPCXX_SUPPORT_TIME_H
+#define GRPCXX_SUPPORT_TIME_H
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
namespace grpc {
@@ -107,4 +107,4 @@ class TimePoint<std::chrono::system_clock::time_point> {
#endif // !GRPC_CXX0X_NO_CHRONO
-#endif // GRPCXX_TIME_H
+#endif // GRPCXX_SUPPORT_TIME_H
diff --git a/include/grpc/compression.h b/include/grpc/compression.h
index 9924baeca1..82e326fe0e 100644
--- a/include/grpc/compression.h
+++ b/include/grpc/compression.h
@@ -36,12 +36,15 @@
#include <stdlib.h>
+#include <grpc/support/port_platform.h>
+
#ifdef __cplusplus
extern "C" {
#endif
/** To be used in channel arguments */
#define GRPC_COMPRESSION_ALGORITHM_ARG "grpc.compression_algorithm"
+#define GRPC_COMPRESSION_ALGORITHM_STATE_ARG "grpc.compression_algorithm_state"
/* The various compression algorithms supported by GRPC */
typedef enum {
@@ -60,6 +63,11 @@ typedef enum {
GRPC_COMPRESS_LEVEL_COUNT
} grpc_compression_level;
+typedef struct grpc_compression_options {
+ gpr_uint32 enabled_algorithms_bitset; /**< All algs are enabled by default */
+ grpc_compression_algorithm default_compression_algorithm; /**< for channel */
+} grpc_compression_options;
+
/** Parses the first \a name_length bytes of \a name as a
* grpc_compression_algorithm instance, updating \a algorithm. Returns 1 upon
* success, 0 otherwise. */
@@ -67,9 +75,7 @@ int grpc_compression_algorithm_parse(const char *name, size_t name_length,
grpc_compression_algorithm *algorithm);
/** Updates \a name with the encoding name corresponding to a valid \a
- * algorithm. Note that the string returned through \a name upon success is
- * statically allocated and shouldn't be freed. Returns 1 upon success, 0
- * otherwise. */
+ * algorithm. Returns 1 upon success, 0 otherwise. */
int grpc_compression_algorithm_name(grpc_compression_algorithm algorithm,
char **name);
@@ -85,6 +91,20 @@ grpc_compression_level grpc_compression_level_for_algorithm(
grpc_compression_algorithm grpc_compression_algorithm_for_level(
grpc_compression_level level);
+void grpc_compression_options_init(grpc_compression_options *opts);
+
+/** Mark \a algorithm as enabled in \a opts. */
+void grpc_compression_options_enable_algorithm(
+ grpc_compression_options *opts, grpc_compression_algorithm algorithm);
+
+/** Mark \a algorithm as disabled in \a opts. */
+void grpc_compression_options_disable_algorithm(
+ grpc_compression_options *opts, grpc_compression_algorithm algorithm);
+
+/** Returns true if \a algorithm is marked as enabled in \a opts. */
+int grpc_compression_options_is_algorithm_enabled(
+ const grpc_compression_options *opts, grpc_compression_algorithm algorithm);
+
#ifdef __cplusplus
}
#endif
diff --git a/include/grpc/grpc.h b/include/grpc/grpc.h
index 7869e9272e..a75f356312 100644
--- a/include/grpc/grpc.h
+++ b/include/grpc/grpc.h
@@ -134,6 +134,14 @@ typedef struct {
/** Secondary user agent: goes at the end of the user-agent metadata
sent on each request */
#define GRPC_ARG_SECONDARY_USER_AGENT_STRING "grpc.secondary_user_agent"
+/* The caller of the secure_channel_create functions may override the target
+ name used for SSL host name checking using this channel argument which is of
+ type GRPC_ARG_STRING. This *should* be used for testing only.
+ If this argument is not specified, the name used for SSL host name checking
+ will be the target parameter (assuming that the secure channel is an SSL
+ channel). If this parameter is specified and the underlying is not an SSL
+ channel, it will just be ignored. */
+#define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG "grpc.ssl_target_name_override"
/** Connectivity state of a channel. */
typedef enum {
@@ -206,8 +214,7 @@ typedef struct grpc_metadata {
/** The following fields are reserved for grpc internal use.
There is no need to initialize them, and they will be set to garbage
- during
- calls to grpc. */
+ during calls to grpc. */
struct {
void *obfuscated[4];
} internal_data;
@@ -589,9 +596,14 @@ grpc_call_error grpc_call_cancel_with_status(grpc_call *call,
THREAD SAFETY: grpc_call_destroy is thread-compatible */
void grpc_call_destroy(grpc_call *call);
-/** Request notification of a new call. 'cq_for_notification' must
- have been registered to the server via
- grpc_server_register_completion_queue. */
+/** Request notification of a new call.
+ Once a call is received, a notification tagged with \a tag_new is added to
+ \a cq_for_notification. \a call, \a details and \a request_metadata are
+ updated with the appropriate call information. \a cq_bound_to_call is bound
+ to \a call, and batch operation notifications for that call will be posted
+ to \a cq_bound_to_call.
+ Note that \a cq_for_notification must have been registered to the server via
+ \a grpc_server_register_completion_queue. */
grpc_call_error grpc_server_request_call(
grpc_server *server, grpc_call **call, grpc_call_details *details,
grpc_metadata_array *request_metadata,
diff --git a/include/grpc/grpc_security.h b/include/grpc/grpc_security.h
index 640c1fda98..6ee6933207 100644
--- a/include/grpc/grpc_security.h
+++ b/include/grpc/grpc_security.h
@@ -89,16 +89,18 @@ typedef struct {
key and certificate chain. This parameter can be NULL if the client does
not have such a key/cert pair. */
grpc_credentials *grpc_ssl_credentials_create(
- const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair);
+ const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair,
+ void *reserved);
/* Creates a composite credentials object. */
grpc_credentials *grpc_composite_credentials_create(grpc_credentials *creds1,
- grpc_credentials *creds2);
+ grpc_credentials *creds2,
+ void *reserved);
/* Creates a compute engine credentials object.
WARNING: Do NOT use this credentials to connect to a non-google service as
this could result in an oauth2 token leak. */
-grpc_credentials *grpc_compute_engine_credentials_create(void);
+grpc_credentials *grpc_compute_engine_credentials_create(void *reserved);
extern const gpr_timespec grpc_max_auth_token_lifetime;
@@ -112,7 +114,8 @@ extern const gpr_timespec grpc_max_auth_token_lifetime;
account credentials. It should not exceed grpc_max_auth_token_lifetime
or will be cropped to this value. */
grpc_credentials *grpc_service_account_credentials_create(
- const char *json_key, const char *scope, gpr_timespec token_lifetime);
+ const char *json_key, const char *scope, gpr_timespec token_lifetime,
+ void *reserved);
/* Creates a JWT credentials object. May return NULL if the input is invalid.
- json_key is the JSON key string containing the client's private key.
@@ -120,7 +123,7 @@ grpc_credentials *grpc_service_account_credentials_create(
this credentials. It should not exceed grpc_max_auth_token_lifetime or
will be cropped to this value. */
grpc_credentials *grpc_service_account_jwt_access_credentials_create(
- const char *json_key, gpr_timespec token_lifetime);
+ const char *json_key, gpr_timespec token_lifetime, void *reserved);
/* Creates an Oauth2 Refresh Token credentials object. May return NULL if the
input is invalid.
@@ -129,32 +132,25 @@ grpc_credentials *grpc_service_account_jwt_access_credentials_create(
- json_refresh_token is the JSON string containing the refresh token itself
along with a client_id and client_secret. */
grpc_credentials *grpc_refresh_token_credentials_create(
- const char *json_refresh_token);
+ const char *json_refresh_token, void *reserved);
/* Creates an Oauth2 Access Token credentials with an access token that was
aquired by an out of band mechanism. */
grpc_credentials *grpc_access_token_credentials_create(
- const char *access_token);
+ const char *access_token, void *reserved);
/* Creates an IAM credentials object. */
grpc_credentials *grpc_iam_credentials_create(const char *authorization_token,
- const char *authority_selector);
+ const char *authority_selector,
+ void *reserved);
/* --- Secure channel creation. --- */
-/* The caller of the secure_channel_create functions may override the target
- name used for SSL host name checking using this channel argument which is of
- type GRPC_ARG_STRING. This *should* be used for testing only.
- If this argument is not specified, the name used for SSL host name checking
- will be the target parameter (assuming that the secure channel is an SSL
- channel). If this parameter is specified and the underlying is not an SSL
- channel, it will just be ignored. */
-#define GRPC_SSL_TARGET_NAME_OVERRIDE_ARG "grpc.ssl_target_name_override"
-
/* Creates a secure channel using the passed-in credentials. */
grpc_channel *grpc_secure_channel_create(grpc_credentials *creds,
const char *target,
- const grpc_channel_args *args);
+ const grpc_channel_args *args,
+ void *reserved);
/* --- grpc_server_credentials object. ---
@@ -180,7 +176,7 @@ void grpc_server_credentials_release(grpc_server_credentials *creds);
NULL. */
grpc_server_credentials *grpc_ssl_server_credentials_create(
const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
- size_t num_key_cert_pairs, int force_client_auth);
+ size_t num_key_cert_pairs, int force_client_auth, void *reserved);
/* --- Server-side secure ports. --- */
@@ -275,12 +271,18 @@ int grpc_auth_context_set_peer_identity_property_name(grpc_auth_context *ctx,
/* --- Auth Metadata Processing --- */
/* Callback function that is called when the metadata processing is done.
- success is 1 if processing succeeded, 0 otherwise.
- Consumed metadata will be removed from the set of metadata available on the
- call. */
+ - Consumed metadata will be removed from the set of metadata available on the
+ call. consumed_md may be NULL if no metadata has been consumed.
+ - Response metadata will be set on the response. response_md may be NULL.
+ - status is GRPC_STATUS_OK for success or a specific status for an error.
+ Common error status for auth metadata processing is either
+ GRPC_STATUS_UNAUTHENTICATED in case of an authentication failure or
+ GRPC_STATUS PERMISSION_DENIED in case of an authorization failure.
+ - error_details gives details about the error. May be NULL. */
typedef void (*grpc_process_auth_metadata_done_cb)(
void *user_data, const grpc_metadata *consumed_md, size_t num_consumed_md,
- int success);
+ const grpc_metadata *response_md, size_t num_response_md,
+ grpc_status_code status, const char *error_details);
/* Pluggable server-side metadata processor object. */
typedef struct {
diff --git a/include/grpc/support/time.h b/include/grpc/support/time.h
index 4ef9c76459..f8ed893bc0 100644
--- a/include/grpc/support/time.h
+++ b/include/grpc/support/time.h
@@ -52,6 +52,9 @@ typedef enum {
/* Realtime clock. May jump forwards or backwards. Settable by
the system administrator. Has its epoch at 0:00:00 UTC 1 Jan 1970. */
GPR_CLOCK_REALTIME,
+ /* CPU cycle time obtained by rdtsc instruction on x86 platforms. Epoch
+ undefined. Degrades to GPR_CLOCK_REALTIME on other platforms. */
+ GPR_CLOCK_PRECISE,
/* Unmeasurable clock type: no base, created by taking the difference
between two times */
GPR_TIMESPAN
diff --git a/src/compiler/config.h b/src/compiler/config.h
index cd52aca57d..fea976c318 100644
--- a/src/compiler/config.h
+++ b/src/compiler/config.h
@@ -34,8 +34,8 @@
#ifndef SRC_COMPILER_CONFIG_H
#define SRC_COMPILER_CONFIG_H
-#include <grpc++/config.h>
-#include <grpc++/config_protobuf.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/config_protobuf.h>
#ifndef GRPC_CUSTOM_DESCRIPTOR
#include <google/protobuf/descriptor.h>
diff --git a/src/compiler/cpp_generator.cc b/src/compiler/cpp_generator.cc
index ea487bcd89..1bf2b16ed6 100644
--- a/src/compiler/cpp_generator.cc
+++ b/src/compiler/cpp_generator.cc
@@ -112,18 +112,18 @@ grpc::string GetHeaderPrologue(const grpc::protobuf::FileDescriptor *file,
grpc::string GetHeaderIncludes(const grpc::protobuf::FileDescriptor *file,
const Parameters &params) {
grpc::string temp =
- "#include <grpc++/impl/internal_stub.h>\n"
+ "#include <grpc++/support/async_stream.h>\n"
"#include <grpc++/impl/rpc_method.h>\n"
"#include <grpc++/impl/proto_utils.h>\n"
"#include <grpc++/impl/service_type.h>\n"
- "#include <grpc++/async_unary_call.h>\n"
- "#include <grpc++/status.h>\n"
- "#include <grpc++/stream.h>\n"
- "#include <grpc++/stub_options.h>\n"
+ "#include <grpc++/support/async_unary_call.h>\n"
+ "#include <grpc++/support/status.h>\n"
+ "#include <grpc++/support/stub_options.h>\n"
+ "#include <grpc++/support/sync_stream.h>\n"
"\n"
"namespace grpc {\n"
"class CompletionQueue;\n"
- "class ChannelInterface;\n"
+ "class Channel;\n"
"class RpcService;\n"
"class ServerCompletionQueue;\n"
"class ServerContext;\n"
@@ -554,17 +554,17 @@ void PrintHeaderService(grpc::protobuf::io::Printer *printer,
printer->Outdent();
printer->Print("};\n");
printer->Print(
- "class Stub GRPC_FINAL : public StubInterface,"
- " public ::grpc::InternalStub {\n public:\n");
+ "class Stub GRPC_FINAL : public StubInterface"
+ " {\n public:\n");
printer->Indent();
- printer->Print(
- "Stub(const std::shared_ptr< ::grpc::ChannelInterface>& channel);\n");
+ printer->Print("Stub(const std::shared_ptr< ::grpc::Channel>& channel);\n");
for (int i = 0; i < service->method_count(); ++i) {
PrintHeaderClientMethod(printer, service->method(i), vars, true);
}
printer->Outdent();
printer->Print("\n private:\n");
printer->Indent();
+ printer->Print("std::shared_ptr< ::grpc::Channel> channel_;\n");
for (int i = 0; i < service->method_count(); ++i) {
PrintHeaderClientMethod(printer, service->method(i), vars, false);
}
@@ -575,7 +575,7 @@ void PrintHeaderService(grpc::protobuf::io::Printer *printer,
printer->Print("};\n");
printer->Print(
"static std::unique_ptr<Stub> NewStub(const std::shared_ptr< "
- "::grpc::ChannelInterface>& channel, "
+ "::grpc::Channel>& channel, "
"const ::grpc::StubOptions& options = ::grpc::StubOptions());\n");
printer->Print("\n");
@@ -702,12 +702,13 @@ grpc::string GetSourceIncludes(const grpc::protobuf::FileDescriptor *file,
grpc::protobuf::io::Printer printer(&output_stream, '$');
std::map<grpc::string, grpc::string> vars;
- printer.Print(vars, "#include <grpc++/async_unary_call.h>\n");
- printer.Print(vars, "#include <grpc++/channel_interface.h>\n");
+ printer.Print(vars, "#include <grpc++/channel.h>\n");
printer.Print(vars, "#include <grpc++/impl/client_unary_call.h>\n");
printer.Print(vars, "#include <grpc++/impl/rpc_service_method.h>\n");
printer.Print(vars, "#include <grpc++/impl/service_type.h>\n");
- printer.Print(vars, "#include <grpc++/stream.h>\n");
+ printer.Print(vars, "#include <grpc++/support/async_unary_call.h>\n");
+ printer.Print(vars, "#include <grpc++/support/async_stream.h>\n");
+ printer.Print(vars, "#include <grpc++/support/sync_stream.h>\n");
if (!file->package().empty()) {
std::vector<grpc::string> parts =
@@ -738,7 +739,7 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
"::grpc::ClientContext* context, "
"const $Request$& request, $Response$* response) {\n");
printer->Print(*vars,
- " return ::grpc::BlockingUnaryCall(channel(), "
+ " return ::grpc::BlockingUnaryCall(channel_.get(), "
"rpcmethod_$Method$_, "
"context, request, response);\n"
"}\n\n");
@@ -751,7 +752,7 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
printer->Print(*vars,
" return new "
"::grpc::ClientAsyncResponseReader< $Response$>("
- "channel(), cq, "
+ "channel_.get(), cq, "
"rpcmethod_$Method$_, "
"context, request);\n"
"}\n\n");
@@ -762,7 +763,7 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
"::grpc::ClientContext* context, $Response$* response) {\n");
printer->Print(*vars,
" return new ::grpc::ClientWriter< $Request$>("
- "channel(), "
+ "channel_.get(), "
"rpcmethod_$Method$_, "
"context, response);\n"
"}\n\n");
@@ -773,7 +774,7 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
"::grpc::CompletionQueue* cq, void* tag) {\n");
printer->Print(*vars,
" return new ::grpc::ClientAsyncWriter< $Request$>("
- "channel(), cq, "
+ "channel_.get(), cq, "
"rpcmethod_$Method$_, "
"context, response, tag);\n"
"}\n\n");
@@ -785,7 +786,7 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
"::grpc::ClientContext* context, const $Request$& request) {\n");
printer->Print(*vars,
" return new ::grpc::ClientReader< $Response$>("
- "channel(), "
+ "channel_.get(), "
"rpcmethod_$Method$_, "
"context, request);\n"
"}\n\n");
@@ -796,7 +797,7 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
"::grpc::CompletionQueue* cq, void* tag) {\n");
printer->Print(*vars,
" return new ::grpc::ClientAsyncReader< $Response$>("
- "channel(), cq, "
+ "channel_.get(), cq, "
"rpcmethod_$Method$_, "
"context, request, tag);\n"
"}\n\n");
@@ -808,7 +809,7 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
printer->Print(*vars,
" return new ::grpc::ClientReaderWriter< "
"$Request$, $Response$>("
- "channel(), "
+ "channel_.get(), "
"rpcmethod_$Method$_, "
"context);\n"
"}\n\n");
@@ -820,7 +821,7 @@ void PrintSourceClientMethod(grpc::protobuf::io::Printer *printer,
printer->Print(*vars,
" return new "
"::grpc::ClientAsyncReaderWriter< $Request$, $Response$>("
- "channel(), cq, "
+ "channel_.get(), cq, "
"rpcmethod_$Method$_, "
"context, tag);\n"
"}\n\n");
@@ -964,20 +965,19 @@ void PrintSourceService(grpc::protobuf::io::Printer *printer,
}
printer->Print(*vars, "};\n\n");
- printer->Print(
- *vars,
- "std::unique_ptr< $ns$$Service$::Stub> $ns$$Service$::NewStub("
- "const std::shared_ptr< ::grpc::ChannelInterface>& channel, "
- "const ::grpc::StubOptions& options) {\n"
- " std::unique_ptr< $ns$$Service$::Stub> stub(new "
- "$ns$$Service$::Stub(channel));\n"
- " return stub;\n"
- "}\n\n");
+ printer->Print(*vars,
+ "std::unique_ptr< $ns$$Service$::Stub> $ns$$Service$::NewStub("
+ "const std::shared_ptr< ::grpc::Channel>& channel, "
+ "const ::grpc::StubOptions& options) {\n"
+ " std::unique_ptr< $ns$$Service$::Stub> stub(new "
+ "$ns$$Service$::Stub(channel));\n"
+ " return stub;\n"
+ "}\n\n");
printer->Print(*vars,
"$ns$$Service$::Stub::Stub(const std::shared_ptr< "
- "::grpc::ChannelInterface>& channel)\n");
+ "::grpc::Channel>& channel)\n");
printer->Indent();
- printer->Print(": ::grpc::InternalStub(channel)");
+ printer->Print(": channel_(channel)");
for (int i = 0; i < service->method_count(); ++i) {
const grpc::protobuf::MethodDescriptor *method = service->method(i);
(*vars)["Method"] = method->name();
@@ -991,13 +991,12 @@ void PrintSourceService(grpc::protobuf::io::Printer *printer,
} else {
(*vars)["StreamingType"] = "BIDI_STREAMING";
}
- printer->Print(
- *vars,
- ", rpcmethod_$Method$_("
- "$prefix$$Service$_method_names[$Idx$], "
- "::grpc::RpcMethod::$StreamingType$, "
- "channel->RegisterMethod($prefix$$Service$_method_names[$Idx$])"
- ")\n");
+ printer->Print(*vars,
+ ", rpcmethod_$Method$_("
+ "$prefix$$Service$_method_names[$Idx$], "
+ "::grpc::RpcMethod::$StreamingType$, "
+ "channel"
+ ")\n");
}
printer->Print("{}\n\n");
printer->Outdent();
diff --git a/src/compiler/csharp_generator.cc b/src/compiler/csharp_generator.cc
index 9432bdda96..51d8d982e2 100644
--- a/src/compiler/csharp_generator.cc
+++ b/src/compiler/csharp_generator.cc
@@ -35,10 +35,16 @@
#include <map>
#include <vector>
+#include "src/compiler/csharp_generator.h"
#include "src/compiler/config.h"
#include "src/compiler/csharp_generator_helpers.h"
#include "src/compiler/csharp_generator.h"
+
+using google::protobuf::compiler::csharp::GetFileNamespace;
+using google::protobuf::compiler::csharp::GetClassName;
+using google::protobuf::compiler::csharp::GetUmbrellaClassName;
+using google::protobuf::SimpleItoa;
using grpc::protobuf::FileDescriptor;
using grpc::protobuf::Descriptor;
using grpc::protobuf::ServiceDescriptor;
@@ -55,47 +61,10 @@ using grpc_generator::StringReplace;
using std::map;
using std::vector;
+
namespace grpc_csharp_generator {
namespace {
-// TODO(jtattermusch): make GetFileNamespace part of libprotoc public API.
-// NOTE: Implementation needs to match exactly to GetFileNamespace
-// defined in csharp_helpers.h in protoc csharp plugin.
-// We cannot reference it directly because google3 protobufs
-// don't have a csharp protoc plugin.
-std::string GetFileNamespace(const FileDescriptor* file) {
- if (file->options().has_csharp_namespace()) {
- return file->options().csharp_namespace();
- }
- return file->package();
-}
-
-std::string ToCSharpName(const std::string& name, const FileDescriptor* file) {
- std::string result = GetFileNamespace(file);
- if (result != "") {
- result += '.';
- }
- std::string classname;
- if (file->package().empty()) {
- classname = name;
- } else {
- // Strip the proto package from full_name since we've replaced it with
- // the C# namespace.
- classname = name.substr(file->package().size() + 1);
- }
- result += StringReplace(classname, ".", ".Types.", false);
- return "global::" + result;
-}
-
-// TODO(jtattermusch): make GetClassName part of libprotoc public API.
-// NOTE: Implementation needs to match exactly to GetClassName
-// defined in csharp_helpers.h in protoc csharp plugin.
-// We cannot reference it directly because google3 protobufs
-// don't have a csharp protoc plugin.
-std::string GetClassName(const Descriptor* message) {
- return ToCSharpName(message->full_name(), message->file());
-}
-
std::string GetServiceClassName(const ServiceDescriptor* service) {
return service->name();
}
@@ -229,7 +198,7 @@ void GenerateMarshallerFields(Printer* out, const ServiceDescriptor *service) {
for (size_t i = 0; i < used_messages.size(); i++) {
const Descriptor *message = used_messages[i];
out->Print(
- "static readonly Marshaller<$type$> $fieldname$ = Marshallers.Create((arg) => arg.ToByteArray(), $type$.ParseFrom);\n",
+ "static readonly Marshaller<$type$> $fieldname$ = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), $type$.Parser.ParseFrom);\n",
"fieldname", GetMarshallerFieldName(message), "type",
GetClassName(message));
}
@@ -258,6 +227,16 @@ void GenerateStaticMethodField(Printer* out, const MethodDescriptor *method) {
out->Outdent();
}
+void GenerateServiceDescriptorProperty(Printer* out, const ServiceDescriptor *service) {
+ out->Print("// service descriptor\n");
+ out->Print("public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor\n");
+ out->Print("{\n");
+ out->Print(" get { return $umbrella$.Descriptor.Services[$index$]; }\n",
+ "umbrella", GetUmbrellaClassName(service->file()), "index", SimpleItoa(service->index()));
+ out->Print("}\n");
+ out->Print("\n");
+}
+
void GenerateClientInterface(Printer* out, const ServiceDescriptor *service) {
out->Print("// client interface\n");
out->Print("public interface $name$\n", "name",
@@ -504,6 +483,7 @@ void GenerateService(Printer* out, const ServiceDescriptor *service) {
for (int i = 0; i < service->method_count(); i++) {
GenerateStaticMethodField(out, service->method(i));
}
+ GenerateServiceDescriptorProperty(out, service);
GenerateClientInterface(out, service);
GenerateServerInterface(out, service);
GenerateClientStub(out, service);
@@ -539,7 +519,6 @@ grpc::string GetServices(const FileDescriptor *file) {
out.Print("using System.Threading;\n");
out.Print("using System.Threading.Tasks;\n");
out.Print("using Grpc.Core;\n");
- // TODO(jtattermusch): add using for protobuf message classes
out.Print("\n");
out.Print("namespace $namespace$ {\n", "namespace", GetFileNamespace(file));
diff --git a/src/compiler/csharp_generator.h b/src/compiler/csharp_generator.h
index ec537d3f1d..67e3ee30b5 100644
--- a/src/compiler/csharp_generator.h
+++ b/src/compiler/csharp_generator.h
@@ -36,6 +36,11 @@
#include "src/compiler/config.h"
+using namespace std;
+
+#include <google/protobuf/compiler/csharp/csharp_names.h>
+#include <google/protobuf/stubs/strutil.h>
+
namespace grpc_csharp_generator {
grpc::string GetServices(const grpc::protobuf::FileDescriptor *file);
diff --git a/src/compiler/python_generator.cc b/src/compiler/python_generator.cc
index 2982a89fad..72c457ac6b 100644
--- a/src/compiler/python_generator.cc
+++ b/src/compiler/python_generator.cc
@@ -42,7 +42,7 @@
#include <tuple>
#include <vector>
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
#include "src/compiler/config.h"
#include "src/compiler/generator_helpers.h"
#include "src/compiler/python_generator.h"
diff --git a/src/core/channel/census_filter.c b/src/core/census/grpc_filter.c
index d996c3475e..b78445595c 100644
--- a/src/core/channel/census_filter.c
+++ b/src/core/census/grpc_filter.c
@@ -31,15 +31,17 @@
*
*/
-#include "src/core/channel/census_filter.h"
+#include "src/core/census/grpc_filter.h"
#include <stdio.h>
#include <string.h>
+#include "src/core/census/rpc_stat_id.h"
#include "src/core/channel/channel_stack.h"
#include "src/core/channel/noop_filter.h"
#include "src/core/statistics/census_interface.h"
#include "src/core/statistics/census_rpc_stats.h"
+#include <grpc/census.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/slice.h>
@@ -47,24 +49,19 @@
typedef struct call_data {
census_op_id op_id;
- census_rpc_stats stats;
+ census_context* ctxt;
gpr_timespec start_ts;
+ int error;
/* recv callback */
grpc_stream_op_buffer* recv_ops;
- void (*on_done_recv)(void* user_data, int success);
- void* recv_user_data;
+ grpc_iomgr_closure* on_done_recv;
} call_data;
typedef struct channel_data {
grpc_mdstr* path_str; /* pointer to meta data str with key == ":path" */
} channel_data;
-static void init_rpc_stats(census_rpc_stats* stats) {
- memset(stats, 0, sizeof(census_rpc_stats));
- stats->cnt = 1;
-}
-
static void extract_and_annotate_method_tag(grpc_stream_op_buffer* sopb,
call_data* calld,
channel_data* chand) {
@@ -77,8 +74,7 @@ static void extract_and_annotate_method_tag(grpc_stream_op_buffer* sopb,
if (m->md->key == chand->path_str) {
gpr_log(GPR_DEBUG, "%s",
(const char*)GPR_SLICE_START_PTR(m->md->value->slice));
- census_add_method_tag(calld->op_id, (const char*)GPR_SLICE_START_PTR(
- m->md->value->slice));
+ /* Add method tag here */
}
}
}
@@ -95,8 +91,6 @@ static void client_mutate_op(grpc_call_element* elem,
static void client_start_transport_op(grpc_call_element* elem,
grpc_transport_stream_op* op) {
- call_data* calld = elem->call_data;
- GPR_ASSERT((calld->op_id.upper != 0) || (calld->op_id.lower != 0));
client_mutate_op(elem, op);
grpc_call_next_op(elem, op);
}
@@ -108,7 +102,7 @@ static void server_on_done_recv(void* ptr, int success) {
if (success) {
extract_and_annotate_method_tag(calld->recv_ops, calld, chand);
}
- calld->on_done_recv(calld->recv_user_data, success);
+ calld->on_done_recv->cb(calld->on_done_recv->cb_arg, success);
}
static void server_mutate_op(grpc_call_element* elem,
@@ -118,9 +112,7 @@ static void server_mutate_op(grpc_call_element* elem,
/* substitute our callback for the op callback */
calld->recv_ops = op->recv_ops;
calld->on_done_recv = op->on_done_recv;
- calld->recv_user_data = op->recv_user_data;
- op->on_done_recv = server_on_done_recv;
- op->recv_user_data = elem;
+ op->on_done_recv = calld->on_done_recv;
}
}
@@ -132,35 +124,19 @@ static void server_start_transport_op(grpc_call_element* elem,
grpc_call_next_op(elem, op);
}
-static void channel_op(grpc_channel_element* elem,
- grpc_channel_element* from_elem, grpc_channel_op* op) {
- switch (op->type) {
- case GRPC_TRANSPORT_CLOSED:
- /* TODO(hongyu): Annotate trace information for all calls of the channel
- */
- break;
- default:
- break;
- }
- grpc_channel_next_op(elem, op);
-}
-
static void client_init_call_elem(grpc_call_element* elem,
const void* server_transport_data,
grpc_transport_stream_op* initial_op) {
call_data* d = elem->call_data;
GPR_ASSERT(d != NULL);
- init_rpc_stats(&d->stats);
d->start_ts = gpr_now(GPR_CLOCK_REALTIME);
- d->op_id = census_tracing_start_op();
if (initial_op) client_mutate_op(elem, initial_op);
}
static void client_destroy_call_elem(grpc_call_element* elem) {
call_data* d = elem->call_data;
GPR_ASSERT(d != NULL);
- census_record_rpc_client_stats(d->op_id, &d->stats);
- census_tracing_end_op(d->op_id);
+ /* TODO(hongyu): record rpc client stats and census_rpc_end_op here */
}
static void server_init_call_elem(grpc_call_element* elem,
@@ -168,29 +144,24 @@ static void server_init_call_elem(grpc_call_element* elem,
grpc_transport_stream_op* initial_op) {
call_data* d = elem->call_data;
GPR_ASSERT(d != NULL);
- init_rpc_stats(&d->stats);
d->start_ts = gpr_now(GPR_CLOCK_REALTIME);
- d->op_id = census_tracing_start_op();
+ /* TODO(hongyu): call census_tracing_start_op here. */
+ grpc_iomgr_closure_init(d->on_done_recv, server_on_done_recv, elem);
if (initial_op) server_mutate_op(elem, initial_op);
}
static void server_destroy_call_elem(grpc_call_element* elem) {
call_data* d = elem->call_data;
GPR_ASSERT(d != NULL);
- d->stats.elapsed_time_ms = gpr_timespec_to_micros(
- gpr_time_sub(gpr_now(GPR_CLOCK_REALTIME), d->start_ts));
- census_record_rpc_server_stats(d->op_id, &d->stats);
- census_tracing_end_op(d->op_id);
+ /* TODO(hongyu): record rpc server stats and census_tracing_end_op here */
}
-static void init_channel_elem(grpc_channel_element* elem,
+static void init_channel_elem(grpc_channel_element* elem, grpc_channel* master,
const grpc_channel_args* args, grpc_mdctx* mdctx,
int is_first, int is_last) {
channel_data* chand = elem->channel_data;
GPR_ASSERT(chand != NULL);
- GPR_ASSERT(!is_first);
- GPR_ASSERT(!is_last);
- chand->path_str = grpc_mdstr_from_string(mdctx, ":path");
+ chand->path_str = grpc_mdstr_from_string(mdctx, ":path", 0);
}
static void destroy_channel_elem(grpc_channel_element* elem) {
@@ -203,22 +174,24 @@ static void destroy_channel_elem(grpc_channel_element* elem) {
const grpc_channel_filter grpc_client_census_filter = {
client_start_transport_op,
- channel_op,
+ grpc_channel_next_op,
sizeof(call_data),
client_init_call_elem,
client_destroy_call_elem,
sizeof(channel_data),
init_channel_elem,
destroy_channel_elem,
+ grpc_call_next_get_peer,
"census-client"};
const grpc_channel_filter grpc_server_census_filter = {
server_start_transport_op,
- channel_op,
+ grpc_channel_next_op,
sizeof(call_data),
server_init_call_elem,
server_destroy_call_elem,
sizeof(channel_data),
init_channel_elem,
destroy_channel_elem,
+ grpc_call_next_get_peer,
"census-server"};
diff --git a/src/core/channel/census_filter.h b/src/core/census/grpc_filter.h
index 1453c05d28..b3de3adc94 100644
--- a/src/core/channel/census_filter.h
+++ b/src/core/census/grpc_filter.h
@@ -31,8 +31,8 @@
*
*/
-#ifndef GRPC_INTERNAL_CORE_CHANNEL_CENSUS_FILTER_H
-#define GRPC_INTERNAL_CORE_CHANNEL_CENSUS_FILTER_H
+#ifndef GRPC_INTERNAL_CORE_CENSUS_GRPC_FILTER_H
+#define GRPC_INTERNAL_CORE_CENSUS_GRPC_FILTER_H
#include "src/core/channel/channel_stack.h"
@@ -41,4 +41,4 @@
extern const grpc_channel_filter grpc_client_census_filter;
extern const grpc_channel_filter grpc_server_census_filter;
-#endif /* GRPC_INTERNAL_CORE_CHANNEL_CENSUS_FILTER_H */
+#endif /* GRPC_INTERNAL_CORE_CENSUS_GRPC_FILTER_H */
diff --git a/src/core/channel/channel_args.c b/src/core/channel/channel_args.c
index c430b56fa2..54ee75af28 100644
--- a/src/core/channel/channel_args.c
+++ b/src/core/channel/channel_args.c
@@ -37,6 +37,7 @@
#include <grpc/support/alloc.h>
#include <grpc/support/string_util.h>
+#include <grpc/support/useful.h>
#include <string.h>
@@ -146,3 +147,65 @@ grpc_channel_args *grpc_channel_args_set_compression_algorithm(
tmp.value.integer = algorithm;
return grpc_channel_args_copy_and_add(a, &tmp, 1);
}
+
+/** Returns 1 if the argument for compression algorithm's enabled states bitset
+ * was found in \a a, returning the arg's value in \a states. Otherwise, returns
+ * 0. */
+static int find_compression_algorithm_states_bitset(
+ const grpc_channel_args *a, int **states_arg) {
+ if (a != NULL) {
+ size_t i;
+ for (i = 0; i < a->num_args; ++i) {
+ if (a->args[i].type == GRPC_ARG_INTEGER &&
+ !strcmp(GRPC_COMPRESSION_ALGORITHM_STATE_ARG, a->args[i].key)) {
+ *states_arg = &a->args[i].value.integer;
+ return 1; /* GPR_TRUE */
+ }
+ }
+ }
+ return 0; /* GPR_FALSE */
+}
+
+grpc_channel_args *grpc_channel_args_compression_algorithm_set_state(
+ grpc_channel_args **a,
+ grpc_compression_algorithm algorithm,
+ int state) {
+ int *states_arg;
+ grpc_channel_args *result = *a;
+ const int states_arg_found =
+ find_compression_algorithm_states_bitset(*a, &states_arg);
+
+ if (states_arg_found) {
+ if (state != 0) {
+ GPR_BITSET(states_arg, algorithm);
+ } else {
+ GPR_BITCLEAR(states_arg, algorithm);
+ }
+ } else {
+ /* create a new arg */
+ grpc_arg tmp;
+ tmp.type = GRPC_ARG_INTEGER;
+ tmp.key = GRPC_COMPRESSION_ALGORITHM_STATE_ARG;
+ /* all enabled by default */
+ tmp.value.integer = (1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1;
+ if (state != 0) {
+ GPR_BITSET(&tmp.value.integer, algorithm);
+ } else {
+ GPR_BITCLEAR(&tmp.value.integer, algorithm);
+ }
+ result = grpc_channel_args_copy_and_add(*a, &tmp, 1);
+ grpc_channel_args_destroy(*a);
+ *a = result;
+ }
+ return result;
+}
+
+int grpc_channel_args_compression_algorithm_get_states(
+ const grpc_channel_args *a) {
+ int *states_arg;
+ if (find_compression_algorithm_states_bitset(a, &states_arg)) {
+ return *states_arg;
+ } else {
+ return (1u << GRPC_COMPRESS_ALGORITHMS_COUNT) - 1; /* All algs. enabled */
+ }
+}
diff --git a/src/core/channel/channel_args.h b/src/core/channel/channel_args.h
index 7e6ddd3997..06a6012dee 100644
--- a/src/core/channel/channel_args.h
+++ b/src/core/channel/channel_args.h
@@ -67,4 +67,24 @@ grpc_compression_algorithm grpc_channel_args_get_compression_algorithm(
grpc_channel_args *grpc_channel_args_set_compression_algorithm(
grpc_channel_args *a, grpc_compression_algorithm algorithm);
+/** Sets the support for the given compression algorithm. By default, all
+ * compression algorithms are enabled. It's an error to disable an algorithm set
+ * by grpc_channel_args_set_compression_algorithm.
+ *
+ * Returns an instance will the updated algorithm states. The \a a pointer is
+ * modified to point to the returned instance (which may be different from the
+ * input value of \a a). */
+grpc_channel_args *grpc_channel_args_compression_algorithm_set_state(
+ grpc_channel_args **a,
+ grpc_compression_algorithm algorithm,
+ int enabled);
+
+/** Returns the bitset representing the support state (true for enabled, false
+ * for disabled) for compression algorithms.
+ *
+ * The i-th bit of the returned bitset corresponds to the i-th entry in the
+ * grpc_compression_algorithm enum. */
+int grpc_channel_args_compression_algorithm_get_states(
+ const grpc_channel_args *a);
+
#endif /* GRPC_INTERNAL_CORE_CHANNEL_CHANNEL_ARGS_H */
diff --git a/src/core/channel/compress_filter.h b/src/core/channel/compress_filter.h
index 0917e81ca4..415459bca6 100644
--- a/src/core/channel/compress_filter.h
+++ b/src/core/channel/compress_filter.h
@@ -36,7 +36,7 @@
#include "src/core/channel/channel_stack.h"
-#define GRPC_COMPRESS_REQUEST_ALGORITHM_KEY "internal:grpc-encoding-request"
+#define GRPC_COMPRESS_REQUEST_ALGORITHM_KEY "grpc-internal-encoding-request"
/** Compression filter for outgoing data.
*
diff --git a/src/core/channel/http_client_filter.c b/src/core/channel/http_client_filter.c
index 48c623d359..2b61d33c29 100644
--- a/src/core/channel/http_client_filter.c
+++ b/src/core/channel/http_client_filter.c
@@ -45,7 +45,6 @@ typedef struct call_data {
grpc_linked_mdelem content_type;
grpc_linked_mdelem user_agent;
int sent_initial_metadata;
- int sent_authority;
int got_initial_metadata;
grpc_stream_op_buffer *recv_ops;
@@ -64,7 +63,6 @@ typedef struct channel_data {
grpc_mdelem *scheme;
grpc_mdelem *content_type;
grpc_mdelem *status;
- grpc_mdelem *default_authority;
/** complete user agent mdelem */
grpc_mdelem *user_agent;
} channel_data;
@@ -103,7 +101,6 @@ static void hc_on_recv(void *user_data, int success) {
static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) {
grpc_call_element *elem = user_data;
- call_data *calld = elem->call_data;
channel_data *channeld = elem->channel_data;
/* eat the things we'd like to set ourselves */
if (md->key == channeld->method->key) return NULL;
@@ -111,10 +108,6 @@ static grpc_mdelem *client_strip_filter(void *user_data, grpc_mdelem *md) {
if (md->key == channeld->te_trailers->key) return NULL;
if (md->key == channeld->content_type->key) return NULL;
if (md->key == channeld->user_agent->key) return NULL;
- if (channeld->default_authority &&
- channeld->default_authority->key == md->key) {
- calld->sent_authority = 1;
- }
return md;
}
@@ -138,11 +131,6 @@ static void hc_mutate_op(grpc_call_element *elem,
GRPC_MDELEM_REF(channeld->method));
grpc_metadata_batch_add_head(&op->data.metadata, &calld->scheme,
GRPC_MDELEM_REF(channeld->scheme));
- if (channeld->default_authority && !calld->sent_authority) {
- grpc_metadata_batch_add_head(
- &op->data.metadata, &calld->authority,
- GRPC_MDELEM_REF(channeld->default_authority));
- }
grpc_metadata_batch_add_tail(&op->data.metadata, &calld->te_trailers,
GRPC_MDELEM_REF(channeld->te_trailers));
grpc_metadata_batch_add_tail(&op->data.metadata, &calld->content_type,
@@ -175,7 +163,6 @@ static void init_call_elem(grpc_call_element *elem,
call_data *calld = elem->call_data;
calld->sent_initial_metadata = 0;
calld->got_initial_metadata = 0;
- calld->sent_authority = 0;
calld->on_done_recv = NULL;
grpc_iomgr_closure_init(&calld->hc_on_recv, hc_on_recv, elem);
if (initial_op) hc_mutate_op(elem, initial_op);
@@ -257,8 +244,6 @@ static grpc_mdstr *user_agent_from_args(grpc_mdctx *mdctx,
static void init_channel_elem(grpc_channel_element *elem, grpc_channel *master,
const grpc_channel_args *channel_args,
grpc_mdctx *mdctx, int is_first, int is_last) {
- size_t i;
-
/* grab pointers to our data from the channel element */
channel_data *channeld = elem->channel_data;
@@ -267,21 +252,6 @@ static void init_channel_elem(grpc_channel_element *elem, grpc_channel *master,
path */
GPR_ASSERT(!is_last);
- channeld->default_authority = NULL;
- if (channel_args) {
- for (i = 0; i < channel_args->num_args; i++) {
- if (0 == strcmp(channel_args->args[i].key, GRPC_ARG_DEFAULT_AUTHORITY)) {
- if (channel_args->args[i].type != GRPC_ARG_STRING) {
- gpr_log(GPR_ERROR, "%s: must be an string",
- GRPC_ARG_DEFAULT_AUTHORITY);
- } else {
- channeld->default_authority = grpc_mdelem_from_strings(
- mdctx, ":authority", channel_args->args[i].value.string);
- }
- }
- }
- }
-
/* initialize members */
channeld->te_trailers = grpc_mdelem_from_strings(mdctx, "te", "trailers");
channeld->method = grpc_mdelem_from_strings(mdctx, ":method", "POST");
@@ -306,9 +276,6 @@ static void destroy_channel_elem(grpc_channel_element *elem) {
GRPC_MDELEM_UNREF(channeld->content_type);
GRPC_MDELEM_UNREF(channeld->status);
GRPC_MDELEM_UNREF(channeld->user_agent);
- if (channeld->default_authority) {
- GRPC_MDELEM_UNREF(channeld->default_authority);
- }
}
const grpc_channel_filter grpc_http_client_filter = {
diff --git a/src/core/client_config/resolver_factory.c b/src/core/client_config/resolver_factory.c
index 6721977e21..5b859a8d10 100644
--- a/src/core/client_config/resolver_factory.c
+++ b/src/core/client_config/resolver_factory.c
@@ -45,6 +45,12 @@ void grpc_resolver_factory_unref(grpc_resolver_factory *factory) {
grpc_resolver *grpc_resolver_factory_create_resolver(
grpc_resolver_factory *factory, grpc_uri *uri,
grpc_subchannel_factory *subchannel_factory) {
- if (!factory) return NULL;
+ if (factory == NULL) return NULL;
return factory->vtable->create_resolver(factory, uri, subchannel_factory);
}
+
+char *grpc_resolver_factory_get_default_authority(
+ grpc_resolver_factory *factory, grpc_uri *uri) {
+ if (factory == NULL) return NULL;
+ return factory->vtable->get_default_authority(factory, uri);
+}
diff --git a/src/core/client_config/resolver_factory.h b/src/core/client_config/resolver_factory.h
index c5d85499c6..e243b23988 100644
--- a/src/core/client_config/resolver_factory.h
+++ b/src/core/client_config/resolver_factory.h
@@ -51,9 +51,16 @@ struct grpc_resolver_factory_vtable {
void (*ref)(grpc_resolver_factory *factory);
void (*unref)(grpc_resolver_factory *factory);
+ /** Implementation of grpc_resolver_factory_create_resolver */
grpc_resolver *(*create_resolver)(
grpc_resolver_factory *factory, grpc_uri *uri,
grpc_subchannel_factory *subchannel_factory);
+
+ /** Implementation of grpc_resolver_factory_get_default_authority */
+ char *(*get_default_authority)(grpc_resolver_factory *factory, grpc_uri *uri);
+
+ /** URI scheme that this factory implements */
+ const char *scheme;
};
void grpc_resolver_factory_ref(grpc_resolver_factory *resolver);
@@ -64,4 +71,9 @@ grpc_resolver *grpc_resolver_factory_create_resolver(
grpc_resolver_factory *factory, grpc_uri *uri,
grpc_subchannel_factory *subchannel_factory);
+/** Return a (freshly allocated with gpr_malloc) string representing
+ the default authority to use for this scheme. */
+char *grpc_resolver_factory_get_default_authority(
+ grpc_resolver_factory *factory, grpc_uri *uri);
+
#endif /* GRPC_INTERNAL_CORE_CONFIG_RESOLVER_FACTORY_H */
diff --git a/src/core/client_config/resolver_registry.c b/src/core/client_config/resolver_registry.c
index 16be2da994..37979b3b86 100644
--- a/src/core/client_config/resolver_registry.c
+++ b/src/core/client_config/resolver_registry.c
@@ -41,41 +41,33 @@
#define MAX_RESOLVERS 10
-typedef struct {
- char *scheme;
- grpc_resolver_factory *factory;
-} registered_resolver;
-
-static registered_resolver g_all_of_the_resolvers[MAX_RESOLVERS];
+static grpc_resolver_factory *g_all_of_the_resolvers[MAX_RESOLVERS];
static int g_number_of_resolvers = 0;
-static char *g_default_resolver_scheme;
+static char *g_default_resolver_prefix;
-void grpc_resolver_registry_init(const char *default_resolver_scheme) {
+void grpc_resolver_registry_init(const char *default_resolver_prefix) {
g_number_of_resolvers = 0;
- g_default_resolver_scheme = gpr_strdup(default_resolver_scheme);
+ g_default_resolver_prefix = gpr_strdup(default_resolver_prefix);
}
void grpc_resolver_registry_shutdown(void) {
int i;
for (i = 0; i < g_number_of_resolvers; i++) {
- gpr_free(g_all_of_the_resolvers[i].scheme);
- grpc_resolver_factory_unref(g_all_of_the_resolvers[i].factory);
+ grpc_resolver_factory_unref(g_all_of_the_resolvers[i]);
}
- gpr_free(g_default_resolver_scheme);
+ gpr_free(g_default_resolver_prefix);
}
-void grpc_register_resolver_type(const char *scheme,
- grpc_resolver_factory *factory) {
+void grpc_register_resolver_type(grpc_resolver_factory *factory) {
int i;
for (i = 0; i < g_number_of_resolvers; i++) {
- GPR_ASSERT(0 != strcmp(scheme, g_all_of_the_resolvers[i].scheme));
+ GPR_ASSERT(0 != strcmp(factory->vtable->scheme,
+ g_all_of_the_resolvers[i]->vtable->scheme));
}
GPR_ASSERT(g_number_of_resolvers != MAX_RESOLVERS);
- g_all_of_the_resolvers[g_number_of_resolvers].scheme = gpr_strdup(scheme);
grpc_resolver_factory_ref(factory);
- g_all_of_the_resolvers[g_number_of_resolvers].factory = factory;
- g_number_of_resolvers++;
+ g_all_of_the_resolvers[g_number_of_resolvers++] = factory;
}
static grpc_resolver_factory *lookup_factory(grpc_uri *uri) {
@@ -85,40 +77,57 @@ static grpc_resolver_factory *lookup_factory(grpc_uri *uri) {
if (!uri) return NULL;
for (i = 0; i < g_number_of_resolvers; i++) {
- if (0 == strcmp(uri->scheme, g_all_of_the_resolvers[i].scheme)) {
- return g_all_of_the_resolvers[i].factory;
+ if (0 == strcmp(uri->scheme, g_all_of_the_resolvers[i]->vtable->scheme)) {
+ return g_all_of_the_resolvers[i];
}
}
return NULL;
}
-grpc_resolver *grpc_resolver_create(
- const char *name, grpc_subchannel_factory *subchannel_factory) {
- grpc_uri *uri;
+static grpc_resolver_factory *resolve_factory(const char *target,
+ grpc_uri **uri) {
char *tmp;
grpc_resolver_factory *factory = NULL;
- grpc_resolver *resolver;
-
- uri = grpc_uri_parse(name, 1);
- factory = lookup_factory(uri);
- if (factory == NULL && g_default_resolver_scheme != NULL) {
- grpc_uri_destroy(uri);
- gpr_asprintf(&tmp, "%s%s", g_default_resolver_scheme, name);
- uri = grpc_uri_parse(tmp, 1);
- factory = lookup_factory(uri);
- if (factory == NULL) {
- grpc_uri_destroy(grpc_uri_parse(name, 0));
- grpc_uri_destroy(grpc_uri_parse(tmp, 0));
- gpr_log(GPR_ERROR, "don't know how to resolve '%s' or '%s'", name, tmp);
+
+ GPR_ASSERT(uri != NULL);
+ *uri = grpc_uri_parse(target, 1);
+ factory = lookup_factory(*uri);
+ if (factory == NULL) {
+ if (g_default_resolver_prefix != NULL) {
+ grpc_uri_destroy(*uri);
+ gpr_asprintf(&tmp, "%s%s", g_default_resolver_prefix, target);
+ *uri = grpc_uri_parse(tmp, 1);
+ factory = lookup_factory(*uri);
+ if (factory == NULL) {
+ grpc_uri_destroy(grpc_uri_parse(target, 0));
+ grpc_uri_destroy(grpc_uri_parse(tmp, 0));
+ gpr_log(GPR_ERROR, "don't know how to resolve '%s' or '%s'", target,
+ tmp);
+ }
+ gpr_free(tmp);
+ } else {
+ grpc_uri_destroy(grpc_uri_parse(target, 0));
+ gpr_log(GPR_ERROR, "don't know how to resolve '%s'", target);
}
- gpr_free(tmp);
- } else if (factory == NULL) {
- grpc_uri_destroy(grpc_uri_parse(name, 0));
- gpr_log(GPR_ERROR, "don't know how to resolve '%s'", name);
}
- resolver =
+ return factory;
+}
+
+grpc_resolver *grpc_resolver_create(
+ const char *target, grpc_subchannel_factory *subchannel_factory) {
+ grpc_uri *uri = NULL;
+ grpc_resolver_factory *factory = resolve_factory(target, &uri);
+ grpc_resolver *resolver =
grpc_resolver_factory_create_resolver(factory, uri, subchannel_factory);
grpc_uri_destroy(uri);
return resolver;
}
+
+char *grpc_get_default_authority(const char *target) {
+ grpc_uri *uri = NULL;
+ grpc_resolver_factory *factory = resolve_factory(target, &uri);
+ char *authority = grpc_resolver_factory_get_default_authority(factory, uri);
+ grpc_uri_destroy(uri);
+ return authority;
+}
diff --git a/src/core/client_config/resolver_registry.h b/src/core/client_config/resolver_registry.h
index 31aa47620a..5a7193b7ae 100644
--- a/src/core/client_config/resolver_registry.h
+++ b/src/core/client_config/resolver_registry.h
@@ -44,19 +44,22 @@ void grpc_resolver_registry_shutdown(void);
If \a priority is greater than zero, then the resolver will be eligible
to resolve names that are passed in with no scheme. Higher priority
resolvers will be tried before lower priority schemes. */
-void grpc_register_resolver_type(const char *scheme,
- grpc_resolver_factory *factory);
+void grpc_register_resolver_type(grpc_resolver_factory *factory);
-/** Create a resolver given \a name.
- First tries to parse \a name as a URI. If this succeeds, tries
+/** Create a resolver given \a target.
+ First tries to parse \a target as a URI. If this succeeds, tries
to locate a registered resolver factory based on the URI scheme.
If parsing or location fails, prefixes default_prefix from
- grpc_resolver_registry_init to name, and tries again (if default_prefix
+ grpc_resolver_registry_init to target, and tries again (if default_prefix
was not NULL).
If a resolver factory was found, use it to instantiate a resolver and
return it.
If a resolver factory was not found, return NULL. */
grpc_resolver *grpc_resolver_create(
- const char *name, grpc_subchannel_factory *subchannel_factory);
+ const char *target, grpc_subchannel_factory *subchannel_factory);
+
+/** Given a target, return a (freshly allocated with gpr_malloc) string
+ representing the default authority to pass from a client. */
+char *grpc_get_default_authority(const char *target);
#endif /* GRPC_INTERNAL_CORE_CLIENT_CONFIG_RESOLVER_REGISTRY_H */
diff --git a/src/core/client_config/resolvers/dns_resolver.c b/src/core/client_config/resolvers/dns_resolver.c
index 7b35b7902f..84643c464a 100644
--- a/src/core/client_config/resolvers/dns_resolver.c
+++ b/src/core/client_config/resolvers/dns_resolver.c
@@ -203,9 +203,6 @@ static grpc_resolver *dns_create(
grpc_subchannel_factory *subchannel_factory) {
dns_resolver *r;
const char *path = uri->path;
- grpc_arg default_host_arg;
- char *host;
- char *port;
if (0 != strcmp(uri->authority, "")) {
gpr_log(GPR_ERROR, "authority based uri's not supported");
@@ -214,17 +211,6 @@ static grpc_resolver *dns_create(
if (path[0] == '/') ++path;
- gpr_split_host_port(path, &host, &port);
-
- default_host_arg.type = GRPC_ARG_STRING;
- default_host_arg.key = GRPC_ARG_DEFAULT_AUTHORITY;
- default_host_arg.value.string = host;
- subchannel_factory = grpc_subchannel_factory_add_channel_arg(
- subchannel_factory, &default_host_arg);
-
- gpr_free(host);
- gpr_free(port);
-
r = gpr_malloc(sizeof(dns_resolver));
memset(r, 0, sizeof(*r));
gpr_ref_init(&r->refs, 1);
@@ -233,6 +219,7 @@ static grpc_resolver *dns_create(
r->name = gpr_strdup(path);
r->default_port = gpr_strdup(default_port);
r->subchannel_factory = subchannel_factory;
+ grpc_subchannel_factory_ref(subchannel_factory);
r->lb_policy_factory = lb_policy_factory;
return &r->base;
}
@@ -252,8 +239,16 @@ static grpc_resolver *dns_factory_create_resolver(
subchannel_factory);
}
+char *dns_factory_get_default_host_name(grpc_resolver_factory *factory,
+ grpc_uri *uri) {
+ const char *path = uri->path;
+ if (path[0] == '/') ++path;
+ return gpr_strdup(path);
+}
+
static const grpc_resolver_factory_vtable dns_factory_vtable = {
- dns_factory_ref, dns_factory_unref, dns_factory_create_resolver};
+ dns_factory_ref, dns_factory_unref, dns_factory_create_resolver,
+ dns_factory_get_default_host_name, "dns"};
static grpc_resolver_factory dns_resolver_factory = {&dns_factory_vtable};
grpc_resolver_factory *grpc_dns_resolver_factory_create() {
diff --git a/src/core/client_config/resolvers/sockaddr_resolver.c b/src/core/client_config/resolvers/sockaddr_resolver.c
index 74584e7e2c..0d8540a566 100644
--- a/src/core/client_config/resolvers/sockaddr_resolver.c
+++ b/src/core/client_config/resolvers/sockaddr_resolver.c
@@ -60,9 +60,12 @@ typedef struct {
grpc_lb_policy *(*lb_policy_factory)(grpc_subchannel **subchannels,
size_t num_subchannels);
- /** the address that we've 'resolved' */
- struct sockaddr_storage addr;
- int addr_len;
+ /** the addresses that we've 'resolved' */
+ struct sockaddr_storage *addrs;
+ /** the corresponding length of the addresses */
+ int *addrs_len;
+ /** how many elements in \a addrs */
+ size_t num_addrs;
/** mutex guarding the rest of the state */
gpr_mu mu;
@@ -119,17 +122,22 @@ static void sockaddr_next(grpc_resolver *resolver,
static void sockaddr_maybe_finish_next_locked(sockaddr_resolver *r) {
grpc_client_config *cfg;
grpc_lb_policy *lb_policy;
- grpc_subchannel *subchannel;
+ grpc_subchannel **subchannels;
grpc_subchannel_args args;
if (r->next_completion != NULL && !r->published) {
+ size_t i;
cfg = grpc_client_config_create();
- memset(&args, 0, sizeof(args));
- args.addr = (struct sockaddr *)&r->addr;
- args.addr_len = r->addr_len;
- subchannel =
- grpc_subchannel_factory_create_subchannel(r->subchannel_factory, &args);
- lb_policy = r->lb_policy_factory(&subchannel, 1);
+ subchannels = gpr_malloc(sizeof(grpc_subchannel *) * r->num_addrs);
+ for (i = 0; i < r->num_addrs; i++) {
+ memset(&args, 0, sizeof(args));
+ args.addr = (struct sockaddr *)&r->addrs[i];
+ args.addr_len = r->addrs_len[i];
+ subchannels[i] = grpc_subchannel_factory_create_subchannel(
+ r->subchannel_factory, &args);
+ }
+ lb_policy = r->lb_policy_factory(subchannels, r->num_addrs);
+ gpr_free(subchannels);
grpc_client_config_set_lb_policy(cfg, lb_policy);
GRPC_LB_POLICY_UNREF(lb_policy, "unix");
r->published = 1;
@@ -143,6 +151,8 @@ static void sockaddr_destroy(grpc_resolver *gr) {
sockaddr_resolver *r = (sockaddr_resolver *)gr;
gpr_mu_destroy(&r->mu);
grpc_subchannel_factory_unref(r->subchannel_factory);
+ gpr_free(r->addrs);
+ gpr_free(r->addrs_len);
gpr_free(r);
}
@@ -156,8 +166,29 @@ static int parse_unix(grpc_uri *uri, struct sockaddr_storage *addr, int *len) {
return 1;
}
+
+static char *unix_get_default_authority(grpc_resolver_factory *factory,
+ grpc_uri *uri) {
+ return gpr_strdup("localhost");
+}
#endif
+static char *ip_get_default_authority(grpc_uri *uri) {
+ const char *path = uri->path;
+ if (path[0] == '/') ++path;
+ return gpr_strdup(path);
+}
+
+static char *ipv4_get_default_authority(grpc_resolver_factory *factory,
+ grpc_uri *uri) {
+ return ip_get_default_authority(uri);
+}
+
+static char *ipv6_get_default_authority(grpc_resolver_factory *factory,
+ grpc_uri *uri) {
+ return ip_get_default_authority(uri);
+}
+
static int parse_ipv4(grpc_uri *uri, struct sockaddr_storage *addr, int *len) {
const char *host_port = uri->path;
char *host;
@@ -238,13 +269,18 @@ done:
return result;
}
+static void do_nothing(void *ignored) {}
static grpc_resolver *sockaddr_create(
grpc_uri *uri,
grpc_lb_policy *(*lb_policy_factory)(grpc_subchannel **subchannels,
size_t num_subchannels),
grpc_subchannel_factory *subchannel_factory,
int parse(grpc_uri *uri, struct sockaddr_storage *dst, int *len)) {
+ size_t i;
+ int errors_found = 0; /* GPR_FALSE */
sockaddr_resolver *r;
+ gpr_slice path_slice;
+ gpr_slice_buffer path_parts;
if (0 != strcmp(uri->authority, "")) {
gpr_log(GPR_ERROR, "authority based uri's not supported");
@@ -253,7 +289,29 @@ static grpc_resolver *sockaddr_create(
r = gpr_malloc(sizeof(sockaddr_resolver));
memset(r, 0, sizeof(*r));
- if (!parse(uri, &r->addr, &r->addr_len)) {
+
+ path_slice = gpr_slice_new(uri->path, strlen(uri->path), do_nothing);
+ gpr_slice_buffer_init(&path_parts);
+
+ gpr_slice_split(path_slice, ",", &path_parts);
+ r->num_addrs = path_parts.count;
+ r->addrs = gpr_malloc(sizeof(struct sockaddr_storage) * r->num_addrs);
+ r->addrs_len = gpr_malloc(sizeof(int) * r->num_addrs);
+
+ for(i = 0; i < r->num_addrs; i++) {
+ grpc_uri ith_uri = *uri;
+ char* part_str = gpr_dump_slice(path_parts.slices[i], GPR_DUMP_ASCII);
+ ith_uri.path = part_str;
+ if (!parse(&ith_uri, &r->addrs[i], &r->addrs_len[i])) {
+ errors_found = 1; /* GPR_TRUE */
+ }
+ gpr_free(part_str);
+ if (errors_found) break;
+ }
+
+ gpr_slice_buffer_destroy(&path_parts);
+ gpr_slice_unref(path_slice);
+ if (errors_found) {
gpr_free(r);
return NULL;
}
@@ -276,20 +334,20 @@ static void sockaddr_factory_ref(grpc_resolver_factory *factory) {}
static void sockaddr_factory_unref(grpc_resolver_factory *factory) {}
-#define DECL_FACTORY(name) \
- static grpc_resolver *name##_factory_create_resolver( \
- grpc_resolver_factory *factory, grpc_uri *uri, \
- grpc_subchannel_factory *subchannel_factory) { \
- return sockaddr_create(uri, grpc_create_pick_first_lb_policy, \
- subchannel_factory, parse_##name); \
- } \
- static const grpc_resolver_factory_vtable name##_factory_vtable = { \
- sockaddr_factory_ref, sockaddr_factory_unref, \
- name##_factory_create_resolver}; \
- static grpc_resolver_factory name##_resolver_factory = { \
- &name##_factory_vtable}; \
- grpc_resolver_factory *grpc_##name##_resolver_factory_create() { \
- return &name##_resolver_factory; \
+#define DECL_FACTORY(name) \
+ static grpc_resolver *name##_factory_create_resolver( \
+ grpc_resolver_factory *factory, grpc_uri *uri, \
+ grpc_subchannel_factory *subchannel_factory) { \
+ return sockaddr_create(uri, grpc_create_pick_first_lb_policy, \
+ subchannel_factory, parse_##name); \
+ } \
+ static const grpc_resolver_factory_vtable name##_factory_vtable = { \
+ sockaddr_factory_ref, sockaddr_factory_unref, \
+ name##_factory_create_resolver, name##_get_default_authority, #name}; \
+ static grpc_resolver_factory name##_resolver_factory = { \
+ &name##_factory_vtable}; \
+ grpc_resolver_factory *grpc_##name##_resolver_factory_create() { \
+ return &name##_resolver_factory; \
}
#ifdef GPR_POSIX_SOCKET
diff --git a/src/core/client_config/resolvers/zookeeper_resolver.c b/src/core/client_config/resolvers/zookeeper_resolver.c
index acb2ba136e..da399f9954 100644
--- a/src/core/client_config/resolvers/zookeeper_resolver.c
+++ b/src/core/client_config/resolvers/zookeeper_resolver.c
@@ -467,8 +467,7 @@ static grpc_resolver *zookeeper_create(
}
static void zookeeper_plugin_init() {
- grpc_register_resolver_type("zookeeper",
- grpc_zookeeper_resolver_factory_create());
+ grpc_register_resolver_type(grpc_zookeeper_resolver_factory_create());
}
void grpc_zookeeper_register() {
@@ -483,6 +482,11 @@ static void zookeeper_factory_ref(grpc_resolver_factory *factory) {}
static void zookeeper_factory_unref(grpc_resolver_factory *factory) {}
+static char *zookeeper_factory_get_default_hostname(
+ grpc_resolver_factory *factory, grpc_uri *uri) {
+ return NULL;
+}
+
static grpc_resolver *zookeeper_factory_create_resolver(
grpc_resolver_factory *factory, grpc_uri *uri,
grpc_subchannel_factory *subchannel_factory) {
@@ -492,7 +496,8 @@ static grpc_resolver *zookeeper_factory_create_resolver(
static const grpc_resolver_factory_vtable zookeeper_factory_vtable = {
zookeeper_factory_ref, zookeeper_factory_unref,
- zookeeper_factory_create_resolver};
+ zookeeper_factory_create_resolver, zookeeper_factory_get_default_hostname,
+ "zookeeper"};
static grpc_resolver_factory zookeeper_resolver_factory = {
&zookeeper_factory_vtable};
diff --git a/src/core/iomgr/pollset.h b/src/core/iomgr/pollset.h
index c474e4dbf1..337596cb74 100644
--- a/src/core/iomgr/pollset.h
+++ b/src/core/iomgr/pollset.h
@@ -74,10 +74,9 @@ void grpc_pollset_destroy(grpc_pollset *pollset);
grpc_pollset_work, and it is guaranteed that GRPC_POLLSET_MU(pollset) will
not be released by grpc_pollset_work AFTER worker has been destroyed.
- Returns true if some work has been done, and false if the deadline
- expired. */
-int grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker *worker,
- gpr_timespec deadline);
+ Tries not to block past deadline. */
+void grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker *worker,
+ gpr_timespec now, gpr_timespec deadline);
/* Break one polling thread out of polling work for this pollset.
If specific_worker is GRPC_POLLSET_KICK_BROADCAST, kick ALL the workers.
diff --git a/src/core/iomgr/pollset_multipoller_with_epoll.c b/src/core/iomgr/pollset_multipoller_with_epoll.c
index 5ea9dd2101..fe66ebed77 100644
--- a/src/core/iomgr/pollset_multipoller_with_epoll.c
+++ b/src/core/iomgr/pollset_multipoller_with_epoll.c
@@ -181,7 +181,7 @@ static void multipoll_with_epoll_pollset_maybe_work(
pfds[1].events = POLLIN;
pfds[1].revents = 0;
- poll_rv = poll(pfds, 2, timeout_ms);
+ poll_rv = grpc_poll_function(pfds, 2, timeout_ms);
if (poll_rv < 0) {
if (errno != EINTR) {
diff --git a/src/core/iomgr/pollset_multipoller_with_poll_posix.c b/src/core/iomgr/pollset_multipoller_with_poll_posix.c
index 001fcecf76..30ee6e24db 100644
--- a/src/core/iomgr/pollset_multipoller_with_poll_posix.c
+++ b/src/core/iomgr/pollset_multipoller_with_poll_posix.c
@@ -144,7 +144,7 @@ static void multipoll_with_poll_pollset_maybe_work(
POLLOUT, &watchers[i]);
}
- r = poll(pfds, pfd_count, timeout);
+ r = grpc_poll_function(pfds, pfd_count, timeout);
for (i = 1; i < pfd_count; i++) {
grpc_fd_end_poll(&watchers[i], pfds[i].revents & POLLIN,
diff --git a/src/core/iomgr/pollset_posix.c b/src/core/iomgr/pollset_posix.c
index a01f9ff727..6bd1b61f24 100644
--- a/src/core/iomgr/pollset_posix.c
+++ b/src/core/iomgr/pollset_posix.c
@@ -38,7 +38,6 @@
#include "src/core/iomgr/pollset_posix.h"
#include <errno.h>
-#include <poll.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
@@ -57,6 +56,8 @@
GPR_TLS_DECL(g_current_thread_poller);
GPR_TLS_DECL(g_current_thread_worker);
+grpc_poll_function_type grpc_poll_function = poll;
+
static void remove_worker(grpc_pollset *p, grpc_pollset_worker *worker) {
worker->prev->next = worker->next;
worker->next->prev = worker->prev;
@@ -89,6 +90,7 @@ static void push_front_worker(grpc_pollset *p, grpc_pollset_worker *worker) {
}
void grpc_pollset_kick(grpc_pollset *p, grpc_pollset_worker *specific_worker) {
+ /* pollset->mu already held */
if (specific_worker != NULL) {
if (specific_worker == GRPC_POLLSET_KICK_BROADCAST) {
for (specific_worker = p->root_worker.next;
@@ -168,14 +170,10 @@ static void finish_shutdown(grpc_pollset *pollset) {
pollset->shutdown_done_cb(pollset->shutdown_done_arg);
}
-int grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker *worker,
- gpr_timespec deadline) {
+void grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker *worker,
+ gpr_timespec now, gpr_timespec deadline) {
/* pollset->mu already held */
- gpr_timespec now = gpr_now(GPR_CLOCK_MONOTONIC);
int added_worker = 0;
- if (gpr_time_cmp(now, deadline) > 0) {
- return 0;
- }
/* this must happen before we (potentially) drop pollset->mu */
worker->next = worker->prev = NULL;
/* TODO(ctiller): pool these */
@@ -217,7 +215,6 @@ done:
gpr_mu_lock(&pollset->mu);
}
}
- return 1;
}
void grpc_pollset_shutdown(grpc_pollset *pollset,
@@ -456,7 +453,7 @@ static void basic_pollset_maybe_work(grpc_pollset *pollset,
/* poll fd count (argument 2) is shortened by one if we have no events
to poll on - such that it only includes the kicker */
- r = poll(pfd, nfds, timeout);
+ r = grpc_poll_function(pfd, nfds, timeout);
GRPC_TIMER_MARK(GRPC_PTAG_POLL_FINISHED, r);
if (fd) {
diff --git a/src/core/iomgr/pollset_posix.h b/src/core/iomgr/pollset_posix.h
index a3ea353de6..69bd9cca8c 100644
--- a/src/core/iomgr/pollset_posix.h
+++ b/src/core/iomgr/pollset_posix.h
@@ -34,6 +34,8 @@
#ifndef GRPC_INTERNAL_CORE_IOMGR_POLLSET_POSIX_H
#define GRPC_INTERNAL_CORE_IOMGR_POLLSET_POSIX_H
+#include <poll.h>
+
#include <grpc/support/sync.h>
#include "src/core/iomgr/wakeup_fd_posix.h"
@@ -118,4 +120,8 @@ void grpc_poll_become_multipoller(grpc_pollset *pollset, struct grpc_fd **fds,
* be locked) */
int grpc_pollset_has_workers(grpc_pollset *pollset);
+/* override to allow tests to hook poll() usage */
+typedef int (*grpc_poll_function_type)(struct pollfd *, nfds_t, int);
+extern grpc_poll_function_type grpc_poll_function;
+
#endif /* GRPC_INTERNAL_CORE_IOMGR_POLLSET_POSIX_H */
diff --git a/src/core/iomgr/pollset_windows.c b/src/core/iomgr/pollset_windows.c
index 8710395ab3..07522c8a0c 100644
--- a/src/core/iomgr/pollset_windows.c
+++ b/src/core/iomgr/pollset_windows.c
@@ -99,14 +99,9 @@ void grpc_pollset_destroy(grpc_pollset *pollset) {
gpr_mu_destroy(&pollset->mu);
}
-int grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker *worker,
- gpr_timespec deadline) {
- gpr_timespec now;
+void grpc_pollset_work(grpc_pollset *pollset, grpc_pollset_worker *worker,
+ gpr_timespec now, gpr_timespec deadline) {
int added_worker = 0;
- now = gpr_now(GPR_CLOCK_MONOTONIC);
- if (gpr_time_cmp(now, deadline) > 0) {
- return 0 /* GPR_FALSE */;
- }
worker->next = worker->prev = NULL;
gpr_cv_init(&worker->cv);
if (grpc_maybe_call_delayed_callbacks(&pollset->mu, 1 /* GPR_TRUE */)) {
@@ -127,7 +122,6 @@ done:
if (added_worker) {
remove_worker(pollset, worker);
}
- return 1 /* GPR_TRUE */;
}
void grpc_pollset_kick(grpc_pollset *p, grpc_pollset_worker *specific_worker) {
diff --git a/src/core/iomgr/tcp_windows.c b/src/core/iomgr/tcp_windows.c
index 123f46d71d..901793ec43 100644
--- a/src/core/iomgr/tcp_windows.c
+++ b/src/core/iomgr/tcp_windows.c
@@ -152,6 +152,7 @@ static void on_read(void *tcpp, int from_iocp) {
gpr_log(GPR_ERROR, "ReadFile overlapped error: %s", utf8_message);
gpr_free(utf8_message);
}
+ gpr_slice_unref(tcp->read_slice);
status = GRPC_ENDPOINT_CB_ERROR;
} else {
if (info->bytes_transfered != 0) {
diff --git a/src/core/iomgr/udp_server.c b/src/core/iomgr/udp_server.c
index 16482c08f7..6429c38b28 100644
--- a/src/core/iomgr/udp_server.c
+++ b/src/core/iomgr/udp_server.c
@@ -235,8 +235,10 @@ static int prepare_socket(int fd, const struct sockaddr *addr, int addr_len) {
rc = setsockopt(fd, IPPROTO_IP, IP_PKTINFO, &get_local_ip,
sizeof(get_local_ip));
if (rc == 0 && addr->sa_family == AF_INET6) {
+#if !TARGET_OS_IPHONE
rc = setsockopt(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO, &get_local_ip,
sizeof(get_local_ip));
+#endif
}
if (bind(fd, addr, addr_len) < 0) {
diff --git a/src/core/profiling/basic_timers.c b/src/core/profiling/basic_timers.c
index ae37f584eb..4b6a0d2f56 100644
--- a/src/core/profiling/basic_timers.c
+++ b/src/core/profiling/basic_timers.c
@@ -36,7 +36,6 @@
#ifdef GRPC_BASIC_PROFILER
#include "src/core/profiling/timers.h"
-#include "src/core/profiling/timers_preciseclock.h"
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
@@ -53,7 +52,7 @@ typedef enum {
} marker_type;
typedef struct grpc_timer_entry {
- grpc_precise_clock tm;
+ gpr_timespec tm;
int tag;
const char* tagstr;
marker_type type;
@@ -71,9 +70,8 @@ static void log_report() {
int i;
for (i = 0; i < count; i++) {
grpc_timer_entry* entry = &(log[i]);
- printf("GRPC_LAT_PROF " GRPC_PRECISE_CLOCK_FORMAT
- " %p %c %d(%s) %p %s %d\n",
- GRPC_PRECISE_CLOCK_PRINTF_ARGS(&entry->tm),
+ printf("GRPC_LAT_PROF %ld.%09d %p %c %d(%s) %p %s %d\n",
+ entry->tm.tv_sec, entry->tm.tv_nsec,
(void*)(gpr_intptr)gpr_thd_currentid(), entry->type, entry->tag,
entry->tagstr, entry->id, entry->file, entry->line);
}
@@ -93,7 +91,7 @@ static void grpc_timers_log_add(int tag, const char* tagstr, marker_type type,
entry = &log[count++];
- grpc_precise_clock_now(&entry->tm);
+ entry->tm = gpr_now(GPR_CLOCK_PRECISE);
entry->tag = tag;
entry->tagstr = tagstr;
entry->type = type;
diff --git a/src/core/security/client_auth_filter.c b/src/core/security/client_auth_filter.c
index 8e63978b82..f3ecfd0e60 100644
--- a/src/core/security/client_auth_filter.c
+++ b/src/core/security/client_auth_filter.c
@@ -153,7 +153,8 @@ static void send_security_metadata(grpc_call_element *elem,
}
if (channel_creds_has_md && call_creds_has_md) {
- calld->creds = grpc_composite_credentials_create(channel_creds, ctx->creds);
+ calld->creds =
+ grpc_composite_credentials_create(channel_creds, ctx->creds, NULL);
if (calld->creds == NULL) {
bubble_up_error(elem, GRPC_STATUS_INVALID_ARGUMENT,
"Incompatible credentials set on channel and call.");
diff --git a/src/core/security/credentials.c b/src/core/security/credentials.c
index 8852cab3e7..362d5f4b6f 100644
--- a/src/core/security/credentials.c
+++ b/src/core/security/credentials.c
@@ -298,8 +298,10 @@ static void ssl_build_server_config(
}
grpc_credentials *grpc_ssl_credentials_create(
- const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair) {
+ const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pair,
+ void *reserved) {
grpc_ssl_credentials *c = gpr_malloc(sizeof(grpc_ssl_credentials));
+ GPR_ASSERT(reserved == NULL);
memset(c, 0, sizeof(grpc_ssl_credentials));
c->base.type = GRPC_CREDENTIALS_TYPE_SSL;
c->base.vtable = &ssl_vtable;
@@ -310,9 +312,11 @@ grpc_credentials *grpc_ssl_credentials_create(
grpc_server_credentials *grpc_ssl_server_credentials_create(
const char *pem_root_certs, grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
- size_t num_key_cert_pairs, int force_client_auth) {
+ size_t num_key_cert_pairs, int force_client_auth, void *reserved) {
grpc_ssl_server_credentials *c =
gpr_malloc(sizeof(grpc_ssl_server_credentials));
+ GPR_ASSERT(reserved == NULL);
+ memset(c, 0, sizeof(grpc_ssl_credentials));
memset(c, 0, sizeof(grpc_ssl_server_credentials));
c->base.type = GRPC_CREDENTIALS_TYPE_SSL;
c->base.vtable = &ssl_server_vtable;
@@ -430,7 +434,8 @@ grpc_service_account_jwt_access_credentials_create_from_auth_json_key(
}
grpc_credentials *grpc_service_account_jwt_access_credentials_create(
- const char *json_key, gpr_timespec token_lifetime) {
+ const char *json_key, gpr_timespec token_lifetime, void *reserved) {
+ GPR_ASSERT(reserved == NULL);
return grpc_service_account_jwt_access_credentials_create_from_auth_json_key(
grpc_auth_json_key_create_from_string(json_key), token_lifetime);
}
@@ -635,9 +640,10 @@ static void compute_engine_fetch_oauth2(
metadata_req);
}
-grpc_credentials *grpc_compute_engine_credentials_create(void) {
+grpc_credentials *grpc_compute_engine_credentials_create(void *reserved) {
grpc_oauth2_token_fetcher_credentials *c =
gpr_malloc(sizeof(grpc_oauth2_token_fetcher_credentials));
+ GPR_ASSERT(reserved == NULL);
init_oauth2_token_fetcher(c, compute_engine_fetch_oauth2);
c->base.vtable = &compute_engine_vtable;
return &c->base;
@@ -693,10 +699,11 @@ static void service_account_fetch_oauth2(
}
grpc_credentials *grpc_service_account_credentials_create(
- const char *json_key, const char *scope, gpr_timespec token_lifetime) {
+ const char *json_key, const char *scope, gpr_timespec token_lifetime,
+ void *reserved) {
grpc_service_account_credentials *c;
grpc_auth_json_key key = grpc_auth_json_key_create_from_string(json_key);
-
+ GPR_ASSERT(reserved == NULL);
if (scope == NULL || (strlen(scope) == 0) ||
!grpc_auth_json_key_is_valid(&key)) {
gpr_log(GPR_ERROR,
@@ -766,7 +773,8 @@ grpc_credentials *grpc_refresh_token_credentials_create_from_auth_refresh_token(
}
grpc_credentials *grpc_refresh_token_credentials_create(
- const char *json_refresh_token) {
+ const char *json_refresh_token, void *reserved) {
+ GPR_ASSERT(reserved == NULL);
return grpc_refresh_token_credentials_create_from_auth_refresh_token(
grpc_auth_refresh_token_create_from_string(json_refresh_token));
}
@@ -867,11 +875,12 @@ static grpc_credentials_vtable access_token_vtable = {
access_token_has_request_metadata_only, access_token_get_request_metadata,
NULL};
-grpc_credentials *grpc_access_token_credentials_create(
- const char *access_token) {
+grpc_credentials *grpc_access_token_credentials_create(const char *access_token,
+ void *reserved) {
grpc_access_token_credentials *c =
gpr_malloc(sizeof(grpc_access_token_credentials));
char *token_md_value;
+ GPR_ASSERT(reserved == NULL);
memset(c, 0, sizeof(grpc_access_token_credentials));
c->base.type = GRPC_CREDENTIALS_TYPE_OAUTH2;
c->base.vtable = &access_token_vtable;
@@ -1101,12 +1110,14 @@ static grpc_credentials_array get_creds_array(grpc_credentials **creds_addr) {
}
grpc_credentials *grpc_composite_credentials_create(grpc_credentials *creds1,
- grpc_credentials *creds2) {
+ grpc_credentials *creds2,
+ void *reserved) {
size_t i;
size_t creds_array_byte_size;
grpc_credentials_array creds1_array;
grpc_credentials_array creds2_array;
grpc_composite_credentials *c;
+ GPR_ASSERT(reserved == NULL);
GPR_ASSERT(creds1 != NULL);
GPR_ASSERT(creds2 != NULL);
c = gpr_malloc(sizeof(grpc_composite_credentials));
@@ -1209,8 +1220,10 @@ static grpc_credentials_vtable iam_vtable = {
iam_get_request_metadata, NULL};
grpc_credentials *grpc_iam_credentials_create(const char *token,
- const char *authority_selector) {
+ const char *authority_selector,
+ void *reserved) {
grpc_iam_credentials *c;
+ GPR_ASSERT(reserved == NULL);
GPR_ASSERT(token != NULL);
GPR_ASSERT(authority_selector != NULL);
c = gpr_malloc(sizeof(grpc_iam_credentials));
diff --git a/src/core/security/google_default_credentials.c b/src/core/security/google_default_credentials.c
index d6092ece32..f9aa5187ce 100644
--- a/src/core/security/google_default_credentials.c
+++ b/src/core/security/google_default_credentials.c
@@ -115,7 +115,7 @@ static int is_stack_running_on_compute_engine(void) {
gpr_mu_lock(GRPC_POLLSET_MU(&detector.pollset));
while (!detector.is_done) {
grpc_pollset_worker worker;
- grpc_pollset_work(&detector.pollset, &worker,
+ grpc_pollset_work(&detector.pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
gpr_inf_future(GPR_CLOCK_MONOTONIC));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&detector.pollset));
@@ -194,7 +194,7 @@ grpc_credentials *grpc_google_default_credentials_create(void) {
int need_compute_engine_creds = is_stack_running_on_compute_engine();
compute_engine_detection_done = 1;
if (need_compute_engine_creds) {
- result = grpc_compute_engine_credentials_create();
+ result = grpc_compute_engine_credentials_create(NULL);
}
}
@@ -202,9 +202,9 @@ end:
if (!serving_cached_credentials && result != NULL) {
/* Blend with default ssl credentials and add a global reference so that it
can be cached and re-served. */
- grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL);
+ grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL, NULL);
default_credentials = grpc_credentials_ref(
- grpc_composite_credentials_create(ssl_creds, result));
+ grpc_composite_credentials_create(ssl_creds, result, NULL));
GPR_ASSERT(default_credentials != NULL);
grpc_credentials_unref(ssl_creds);
grpc_credentials_unref(result);
diff --git a/src/core/security/security_connector.c b/src/core/security/security_connector.c
index a354536dcd..ba9ac68c5f 100644
--- a/src/core/security/security_connector.c
+++ b/src/core/security/security_connector.c
@@ -575,6 +575,16 @@ grpc_security_status grpc_ssl_channel_security_connector_create(
if (!check_request_metadata_creds(request_metadata_creds)) {
goto error;
}
+ if (config->pem_root_certs == NULL) {
+ pem_root_certs_size = grpc_get_default_ssl_roots(&pem_root_certs);
+ if (pem_root_certs == NULL || pem_root_certs_size == 0) {
+ gpr_log(GPR_ERROR, "Could not get default pem root certs.");
+ goto error;
+ }
+ } else {
+ pem_root_certs = config->pem_root_certs;
+ pem_root_certs_size = config->pem_root_certs_size;
+ }
c = gpr_malloc(sizeof(grpc_ssl_channel_security_connector));
memset(c, 0, sizeof(grpc_ssl_channel_security_connector));
@@ -590,16 +600,6 @@ grpc_security_status grpc_ssl_channel_security_connector_create(
if (overridden_target_name != NULL) {
c->overridden_target_name = gpr_strdup(overridden_target_name);
}
- if (config->pem_root_certs == NULL) {
- pem_root_certs_size = grpc_get_default_ssl_roots(&pem_root_certs);
- if (pem_root_certs == NULL || pem_root_certs_size == 0) {
- gpr_log(GPR_ERROR, "Could not get default pem root certs.");
- goto error;
- }
- } else {
- pem_root_certs = config->pem_root_certs;
- pem_root_certs_size = config->pem_root_certs_size;
- }
result = tsi_create_ssl_client_handshaker_factory(
config->pem_private_key, config->pem_private_key_size,
config->pem_cert_chain, config->pem_cert_chain_size, pem_root_certs,
diff --git a/src/core/security/server_auth_filter.c b/src/core/security/server_auth_filter.c
index 2f42f01f53..6e831431fa 100644
--- a/src/core/security/server_auth_filter.c
+++ b/src/core/security/server_auth_filter.c
@@ -104,24 +104,34 @@ static grpc_mdelem *remove_consumed_md(void *user_data, grpc_mdelem *md) {
return md;
}
-static void on_md_processing_done(void *user_data,
- const grpc_metadata *consumed_md,
- size_t num_consumed_md, int success) {
+static void on_md_processing_done(
+ void *user_data, const grpc_metadata *consumed_md, size_t num_consumed_md,
+ const grpc_metadata *response_md, size_t num_response_md,
+ grpc_status_code status, const char *error_details) {
grpc_call_element *elem = user_data;
call_data *calld = elem->call_data;
- if (success) {
+ /* TODO(jboeuf): Implement support for response_md. */
+ if (response_md != NULL && num_response_md > 0) {
+ gpr_log(GPR_INFO,
+ "response_md in auth metadata processing not supported for now. "
+ "Ignoring...");
+ }
+
+ if (status == GRPC_STATUS_OK) {
calld->consumed_md = consumed_md;
calld->num_consumed_md = num_consumed_md;
grpc_metadata_batch_filter(&calld->md_op->data.metadata, remove_consumed_md,
elem);
- calld->on_done_recv->cb(calld->on_done_recv->cb_arg, success);
+ calld->on_done_recv->cb(calld->on_done_recv->cb_arg, 1);
} else {
- gpr_slice message = gpr_slice_from_copied_string(
- "Authentication metadata processing failed.");
+ gpr_slice message;
+ error_details = error_details != NULL
+ ? error_details
+ : "Authentication metadata processing failed.";
+ message = gpr_slice_from_copied_string(error_details);
grpc_sopb_reset(calld->recv_ops);
- grpc_transport_stream_op_add_close(&calld->transport_op,
- GRPC_STATUS_UNAUTHENTICATED, &message);
+ grpc_transport_stream_op_add_close(&calld->transport_op, status, &message);
grpc_call_next_op(elem, &calld->transport_op);
}
}
diff --git a/src/core/support/log_win32.c b/src/core/support/log_win32.c
index 629781da8a..b68239f8f5 100644
--- a/src/core/support/log_win32.c
+++ b/src/core/support/log_win32.c
@@ -81,10 +81,18 @@ void gpr_log(const char *file, int line, gpr_log_severity severity,
/* Simple starter implementation */
void gpr_default_log(gpr_log_func_args *args) {
+ char *final_slash;
+ const char *display_file;
char time_buffer[64];
gpr_timespec now = gpr_now(GPR_CLOCK_REALTIME);
struct tm tm;
+ final_slash = strrchr(args->file, '\\');
+ if (final_slash == NULL)
+ display_file = args->file;
+ else
+ display_file = final_slash + 1;
+
if (localtime_s(&tm, &now.tv_sec)) {
strcpy(time_buffer, "error:localtime");
} else if (0 ==
@@ -94,7 +102,7 @@ void gpr_default_log(gpr_log_func_args *args) {
fprintf(stderr, "%s%s.%09u %5lu %s:%d] %s\n",
gpr_log_severity_string(args->severity), time_buffer,
- (int)(now.tv_nsec), GetCurrentThreadId(), args->file, args->line,
+ (int)(now.tv_nsec), GetCurrentThreadId(), display_file, args->line,
args->message);
}
diff --git a/src/core/support/time_posix.c b/src/core/support/time_posix.c
index 841485c4b4..a274400243 100644
--- a/src/core/support/time_posix.c
+++ b/src/core/support/time_posix.c
@@ -32,6 +32,7 @@
*/
#include <grpc/support/port_platform.h>
+#include <src/core/support/time_precise.h>
#ifdef GPR_POSIX_TIME
@@ -66,8 +67,14 @@ void gpr_time_init(void) {}
gpr_timespec gpr_now(gpr_clock_type clock) {
struct timespec now;
GPR_ASSERT(clock != GPR_TIMESPAN);
- clock_gettime(clockid_for_gpr_clock[clock], &now);
- return gpr_from_timespec(now, clock);
+ if (clock == GPR_CLOCK_PRECISE) {
+ gpr_timespec ret;
+ gpr_precise_clock_now(&ret);
+ return ret;
+ } else {
+ clock_gettime(clockid_for_gpr_clock[clock], &now);
+ return gpr_from_timespec(now, clock);
+ }
}
#else
/* For some reason Apple's OSes haven't implemented clock_gettime. */
@@ -104,6 +111,9 @@ gpr_timespec gpr_now(gpr_clock_type clock) {
now.tv_sec = now_dbl * 1e-9;
now.tv_nsec = now_dbl - now.tv_sec * 1e9;
break;
+ case GPR_CLOCK_PRECISE:
+ gpr_precise_clock_now(&now);
+ break;
case GPR_TIMESPAN:
abort();
}
diff --git a/src/core/profiling/timers_preciseclock.h b/src/core/support/time_precise.h
index 5c251b47e6..574ebb8448 100644
--- a/src/core/profiling/timers_preciseclock.h
+++ b/src/core/support/time_precise.h
@@ -31,65 +31,63 @@
*
*/
-#ifndef GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H
-#define GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H
+#ifndef GRPC_CORE_SUPPORT_TIME_PRECISE_H_
+#define GRPC_CORE_SUPPORT_TIME_PRECISE_H_
#include <grpc/support/sync.h>
#include <grpc/support/time.h>
#include <stdio.h>
#ifdef GRPC_TIMERS_RDTSC
-typedef long long int grpc_precise_clock;
#if defined(__i386__)
-static void grpc_precise_clock_now(grpc_precise_clock *clk) {
- grpc_precise_clock ret;
+static void gpr_get_cycle_counter(long long int *clk) {
+ long long int ret;
__asm__ volatile("rdtsc" : "=A"(ret));
*clk = ret;
}
// ----------------------------------------------------------------
#elif defined(__x86_64__) || defined(__amd64__)
-static void grpc_precise_clock_now(grpc_precise_clock *clk) {
+static void gpr_get_cycle_counter(long long int *clk) {
unsigned long long low, high;
__asm__ volatile("rdtsc" : "=a"(low), "=d"(high));
*clk = (high << 32) | low;
}
#endif
+
static gpr_once precise_clock_init = GPR_ONCE_INIT;
-static double cycles_per_second = 0.0;
-static void grpc_precise_clock_init() {
+static long long cycles_per_second = 0;
+static void gpr_precise_clock_init() {
time_t start = time(NULL);
- grpc_precise_clock start_time;
- grpc_precise_clock end_time;
+ gpr_precise_clock start_cycle;
+ gpr_precise_clock end_cycle;
while (time(NULL) == start)
;
- grpc_precise_clock_now(&start_time);
+ gpr_get_cycle_counter(&start_cycle);
while (time(NULL) == start + 1)
;
- grpc_precise_clock_now(&end_time);
- cycles_per_second = end_time - start_time;
+ gpr_get_cycle_counter(&end_cycle);
+ cycles_per_second = end_cycle - start_cycle;
}
+
static double grpc_precise_clock_scaling_factor() {
gpr_once_init(&precise_clock_init, grpc_precise_clock_init);
return 1e6 / cycles_per_second;
}
-#define GRPC_PRECISE_CLOCK_FORMAT "%f"
-#define GRPC_PRECISE_CLOCK_PRINTF_ARGS(clk) \
- (*(clk)*grpc_precise_clock_scaling_factor())
-#else
-typedef struct grpc_precise_clock grpc_precise_clock;
-struct grpc_precise_clock {
- gpr_timespec clock;
-};
-static void grpc_precise_clock_now(grpc_precise_clock* clk) {
- clk->clock = gpr_now(GPR_CLOCK_REALTIME);
+
+static void gpr_precise_clock_now(gpr_timespec *clk) {
+ long long int counter;
+ gpr_get_cycle_counter(&counter);
+ clk->clock = GPR_CLOCK_REALTIME;
+ clk->tv_sec = counter / cycles_per_second;
+ clk->tv_nsec = counter % cycles_per_second;
}
-#define GRPC_PRECISE_CLOCK_FORMAT "%ld.%09d"
-#define GRPC_PRECISE_CLOCK_PRINTF_ARGS(clk) \
- (clk)->clock.tv_sec, (clk)->clock.tv_nsec
-static void grpc_precise_clock_print(const grpc_precise_clock* clk, FILE* fp) {
- fprintf(fp, "%ld.%09d", clk->clock.tv_sec, clk->clock.tv_nsec);
+
+#else /* GRPC_TIMERS_RDTSC */
+static void gpr_precise_clock_now(gpr_timespec *clk) {
+ *clk = gpr_now(GPR_CLOCK_REALTIME);
+ clk->clock_type = GPR_CLOCK_PRECISE;
}
#endif /* GRPC_TIMERS_RDTSC */
-#endif /* GRPC_CORE_PROFILING_TIMERS_PRECISECLOCK_H */
+#endif /* GRPC_CORE_SUPPORT_TIME_PRECISE_ */
diff --git a/src/core/support/time_win32.c b/src/core/support/time_win32.c
index 7f64c80e27..f794855429 100644
--- a/src/core/support/time_win32.c
+++ b/src/core/support/time_win32.c
@@ -38,6 +38,7 @@
#ifdef GPR_WIN32
#include <grpc/support/time.h>
+#include <src/core/support/time_precise.h>
#include <sys/timeb.h>
static LARGE_INTEGER g_start_time;
@@ -68,6 +69,9 @@ gpr_timespec gpr_now(gpr_clock_type clock) {
now_tv.tv_sec = (time_t)now_dbl;
now_tv.tv_nsec = (int)((now_dbl - (double)now_tv.tv_sec) * 1e9);
break;
+ case GPR_CLOCK_PRECISE:
+ gpr_precise_clock_now(&now_tv);
+ break;
}
return now_tv;
}
diff --git a/src/core/surface/call.c b/src/core/surface/call.c
index 33f277da46..4426bbbce9 100644
--- a/src/core/surface/call.c
+++ b/src/core/surface/call.c
@@ -1046,10 +1046,11 @@ static int prepare_application_metadata(grpc_call *call, size_t count,
(const gpr_uint8 *)md->value,
md->value_length, 1);
if (!grpc_mdstr_is_legal_header(l->md->key)) {
- gpr_log(GPR_ERROR, "attempt to send invalid metadata key");
+ gpr_log(GPR_ERROR, "attempt to send invalid metadata key: %s",
+ grpc_mdstr_as_c_string(l->md->key));
return 0;
} else if (!grpc_mdstr_is_bin_suffixed(l->md->key) &&
- !grpc_mdstr_is_legal_header(l->md->value)) {
+ !grpc_mdstr_is_legal_nonbin_header(l->md->value)) {
gpr_log(GPR_ERROR, "attempt to send invalid metadata value");
return 0;
}
diff --git a/src/core/surface/channel.c b/src/core/surface/channel.c
index e50251566d..586402e21c 100644
--- a/src/core/surface/channel.c
+++ b/src/core/surface/channel.c
@@ -40,6 +40,7 @@
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
+#include "src/core/client_config/resolver_registry.h"
#include "src/core/iomgr/iomgr.h"
#include "src/core/support/string.h"
#include "src/core/surface/call.h"
@@ -70,6 +71,7 @@ struct grpc_channel {
grpc_mdstr *grpc_message_string;
grpc_mdstr *path_string;
grpc_mdstr *authority_string;
+ grpc_mdelem *default_authority;
/** mdelem for grpc-status: 0 thru grpc-status: 2 */
grpc_mdelem *grpc_status_elem[NUM_CACHED_STATUS_ELEMS];
@@ -134,10 +136,47 @@ grpc_channel *grpc_channel_create_from_filters(
} else {
channel->max_message_length = args->args[i].value.integer;
}
+ } else if (0 == strcmp(args->args[i].key, GRPC_ARG_DEFAULT_AUTHORITY)) {
+ if (args->args[i].type != GRPC_ARG_STRING) {
+ gpr_log(GPR_ERROR, "%s: must be an string",
+ GRPC_ARG_DEFAULT_AUTHORITY);
+ } else {
+ if (channel->default_authority) {
+ /* setting this takes precedence over anything else */
+ GRPC_MDELEM_UNREF(channel->default_authority);
+ }
+ channel->default_authority = grpc_mdelem_from_strings(
+ mdctx, ":authority", args->args[i].value.string);
+ }
+ } else if (0 ==
+ strcmp(args->args[i].key, GRPC_SSL_TARGET_NAME_OVERRIDE_ARG)) {
+ if (args->args[i].type != GRPC_ARG_STRING) {
+ gpr_log(GPR_ERROR, "%s: must be an string",
+ GRPC_SSL_TARGET_NAME_OVERRIDE_ARG);
+ } else {
+ if (channel->default_authority) {
+ /* other ways of setting this (notably ssl) take precedence */
+ gpr_log(GPR_ERROR, "%s: default host already set some other way",
+ GRPC_ARG_DEFAULT_AUTHORITY);
+ } else {
+ channel->default_authority = grpc_mdelem_from_strings(
+ mdctx, ":authority", args->args[i].value.string);
+ }
+ }
}
}
}
+ if (channel->is_client && channel->default_authority == NULL &&
+ target != NULL) {
+ char *default_authority = grpc_get_default_authority(target);
+ if (default_authority) {
+ channel->default_authority = grpc_mdelem_from_strings(
+ channel->metadata_context, ":authority", default_authority);
+ }
+ gpr_free(default_authority);
+ }
+
grpc_channel_stack_init(filters, num_filters, channel, args,
channel->metadata_context,
CHANNEL_STACK_FROM_CHANNEL(channel));
@@ -161,6 +200,8 @@ static grpc_call *grpc_channel_create_call_internal(
send_metadata[num_metadata++] = path_mdelem;
if (authority_mdelem != NULL) {
send_metadata[num_metadata++] = authority_mdelem;
+ } else if (channel->default_authority != NULL) {
+ send_metadata[num_metadata++] = GRPC_MDELEM_REF(channel->default_authority);
}
return grpc_call_create(channel, parent_call, propagation_mask, cq, NULL,
@@ -251,6 +292,9 @@ static void destroy_channel(void *p, int ok) {
}
gpr_free(rc);
}
+ if (channel->default_authority != NULL) {
+ GRPC_MDELEM_UNREF(channel->default_authority);
+ }
grpc_mdctx_unref(channel->metadata_context);
gpr_mu_destroy(&channel->registered_call_mu);
gpr_free(channel->target);
diff --git a/src/core/surface/channel_create.c b/src/core/surface/channel_create.c
index 82ddfac757..707251da89 100644
--- a/src/core/surface/channel_create.c
+++ b/src/core/surface/channel_create.c
@@ -38,6 +38,7 @@
#include <grpc/support/alloc.h>
+#include "src/core/census/grpc_filter.h"
#include "src/core/channel/channel_args.h"
#include "src/core/channel/client_channel.h"
#include "src/core/channel/compress_filter.h"
@@ -165,10 +166,9 @@ grpc_channel *grpc_insecure_channel_create(const char *target,
grpc_mdctx *mdctx = grpc_mdctx_create();
int n = 0;
GPR_ASSERT(!reserved);
- /* TODO(census)
if (grpc_channel_args_is_census_enabled(args)) {
filters[n++] = &grpc_client_census_filter;
- } */
+ }
filters[n++] = &grpc_compress_filter;
filters[n++] = &grpc_client_channel_filter;
GPR_ASSERT(n <= MAX_FILTERS);
diff --git a/src/core/surface/completion_queue.c b/src/core/surface/completion_queue.c
index 77443a7ae8..b58115a93f 100644
--- a/src/core/surface/completion_queue.c
+++ b/src/core/surface/completion_queue.c
@@ -170,6 +170,9 @@ grpc_event grpc_completion_queue_next(grpc_completion_queue *cc,
gpr_timespec deadline, void *reserved) {
grpc_event ret;
grpc_pollset_worker worker;
+ int first_loop = 1;
+ gpr_timespec now;
+
GPR_ASSERT(!reserved);
deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
@@ -196,12 +199,15 @@ grpc_event grpc_completion_queue_next(grpc_completion_queue *cc,
ret.type = GRPC_QUEUE_SHUTDOWN;
break;
}
- if (!grpc_pollset_work(&cc->pollset, &worker, deadline)) {
+ now = gpr_now(GPR_CLOCK_MONOTONIC);
+ if (!first_loop && gpr_time_cmp(now, deadline) >= 0) {
gpr_mu_unlock(GRPC_POLLSET_MU(&cc->pollset));
memset(&ret, 0, sizeof(ret));
ret.type = GRPC_QUEUE_TIMEOUT;
break;
}
+ first_loop = 0;
+ grpc_pollset_work(&cc->pollset, &worker, now, deadline);
}
GRPC_SURFACE_TRACE_RETURNED_EVENT(cc, &ret);
GRPC_CQ_INTERNAL_UNREF(cc, "next");
@@ -239,6 +245,9 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag,
grpc_cq_completion *c;
grpc_cq_completion *prev;
grpc_pollset_worker worker;
+ gpr_timespec now;
+ int first_loop = 1;
+
GPR_ASSERT(!reserved);
deadline = gpr_convert_clock_type(deadline, GPR_CLOCK_MONOTONIC);
@@ -281,13 +290,16 @@ grpc_event grpc_completion_queue_pluck(grpc_completion_queue *cc, void *tag,
ret.type = GRPC_QUEUE_TIMEOUT;
break;
}
- if (!grpc_pollset_work(&cc->pollset, &worker, deadline)) {
+ now = gpr_now(GPR_CLOCK_MONOTONIC);
+ if (!first_loop && gpr_time_cmp(now, deadline) >= 0) {
del_plucker(cc, tag, &worker);
gpr_mu_unlock(GRPC_POLLSET_MU(&cc->pollset));
memset(&ret, 0, sizeof(ret));
ret.type = GRPC_QUEUE_TIMEOUT;
break;
}
+ first_loop = 0;
+ grpc_pollset_work(&cc->pollset, &worker, now, deadline);
del_plucker(cc, tag, &worker);
}
done:
diff --git a/src/core/surface/init.c b/src/core/surface/init.c
index d9044549f2..0d48cd42d7 100644
--- a/src/core/surface/init.c
+++ b/src/core/surface/init.c
@@ -86,11 +86,11 @@ void grpc_init(void) {
if (++g_initializations == 1) {
gpr_time_init();
grpc_resolver_registry_init("dns:///");
- grpc_register_resolver_type("dns", grpc_dns_resolver_factory_create());
- grpc_register_resolver_type("ipv4", grpc_ipv4_resolver_factory_create());
- grpc_register_resolver_type("ipv6", grpc_ipv6_resolver_factory_create());
+ grpc_register_resolver_type(grpc_dns_resolver_factory_create());
+ grpc_register_resolver_type(grpc_ipv4_resolver_factory_create());
+ grpc_register_resolver_type(grpc_ipv6_resolver_factory_create());
#ifdef GPR_POSIX_SOCKET
- grpc_register_resolver_type("unix", grpc_unix_resolver_factory_create());
+ grpc_register_resolver_type(grpc_unix_resolver_factory_create());
#endif
grpc_register_tracer("channel", &grpc_trace_channel);
grpc_register_tracer("surface", &grpc_surface_trace);
diff --git a/src/core/surface/secure_channel_create.c b/src/core/surface/secure_channel_create.c
index 5b03ba95a7..35b60bdbef 100644
--- a/src/core/surface/secure_channel_create.c
+++ b/src/core/surface/secure_channel_create.c
@@ -38,6 +38,7 @@
#include <grpc/support/alloc.h>
+#include "src/core/census/grpc_filter.h"
#include "src/core/channel/channel_args.h"
#include "src/core/channel/client_channel.h"
#include "src/core/channel/compress_filter.h"
@@ -184,7 +185,8 @@ static const grpc_subchannel_factory_vtable subchannel_factory_vtable = {
- perform handshakes */
grpc_channel *grpc_secure_channel_create(grpc_credentials *creds,
const char *target,
- const grpc_channel_args *args) {
+ const grpc_channel_args *args,
+ void *reserved) {
grpc_channel *channel;
grpc_arg connector_arg;
grpc_channel_args *args_copy;
@@ -197,6 +199,7 @@ grpc_channel *grpc_secure_channel_create(grpc_credentials *creds,
const grpc_channel_filter *filters[MAX_FILTERS];
int n = 0;
+ GPR_ASSERT(reserved == NULL);
if (grpc_find_security_connector_in_args(args) != NULL) {
gpr_log(GPR_ERROR, "Cannot set security context in channel args.");
return grpc_lame_client_channel_create(
@@ -217,10 +220,9 @@ grpc_channel *grpc_secure_channel_create(grpc_credentials *creds,
args_copy = grpc_channel_args_copy_and_add(
new_args_from_connector != NULL ? new_args_from_connector : args,
&connector_arg, 1);
- /* TODO(census)
if (grpc_channel_args_is_census_enabled(args)) {
filters[n++] = &grpc_client_census_filter;
- } */
+ }
filters[n++] = &grpc_compress_filter;
filters[n++] = &grpc_client_channel_filter;
GPR_ASSERT(n <= MAX_FILTERS);
diff --git a/src/core/surface/server.c b/src/core/surface/server.c
index 1c402418e8..292bf6fab8 100644
--- a/src/core/surface/server.c
+++ b/src/core/surface/server.c
@@ -41,7 +41,7 @@
#include <grpc/support/string_util.h>
#include <grpc/support/useful.h>
-#include "src/core/channel/census_filter.h"
+#include "src/core/census/grpc_filter.h"
#include "src/core/channel/channel_args.h"
#include "src/core/channel/connected_channel.h"
#include "src/core/iomgr/iomgr.h"
@@ -821,10 +821,9 @@ grpc_server *grpc_server_create_from_filters(
server->channel_filters =
gpr_malloc(server->channel_filter_count * sizeof(grpc_channel_filter *));
server->channel_filters[0] = &server_surface_filter;
- /* TODO(census): restore this once we rework census filter
if (census_enabled) {
server->channel_filters[1] = &grpc_server_census_filter;
- } */
+ }
for (i = 0; i < filter_count; i++) {
server->channel_filters[i + 1 + census_enabled] = filters[i];
}
diff --git a/src/core/transport/chttp2/stream_encoder.c b/src/core/transport/chttp2/stream_encoder.c
index 0f04169741..1ea697f71e 100644
--- a/src/core/transport/chttp2/stream_encoder.c
+++ b/src/core/transport/chttp2/stream_encoder.c
@@ -66,6 +66,8 @@ typedef struct {
size_t header_idx;
/* was the last frame emitted a header? (if yes, we'll need a CONTINUATION */
gpr_uint8 last_was_header;
+ /* have we seen a regular (non-colon-prefixed) header yet? */
+ gpr_uint8 seen_regular_header;
/* output stream id */
gpr_uint32 stream_id;
gpr_slice_buffer *output;
@@ -361,6 +363,15 @@ static grpc_mdelem *hpack_enc(grpc_chttp2_hpack_compressor *c,
gpr_uint32 indices_key;
int should_add_elem;
+ GPR_ASSERT (GPR_SLICE_LENGTH(elem->key->slice) > 0);
+ if (GPR_SLICE_START_PTR(elem->key->slice)[0] != ':') { /* regular header */
+ st->seen_regular_header = 1;
+ } else if (st->seen_regular_header != 0) { /* reserved header */
+ gpr_log(GPR_ERROR,
+ "Reserved header (colon-prefixed) happening after regular ones.");
+ abort();
+ }
+
inc_filter(HASH_FRAGMENT_1(elem_hash), &c->filter_elems_sum, c->filter_elems);
/* is this elem currently in the decoders table? */
@@ -566,6 +577,7 @@ void grpc_chttp2_encode(grpc_stream_op *ops, size_t ops_count, int eof,
st.cur_frame_type = NONE;
st.last_was_header = 0;
+ st.seen_regular_header = 0;
st.stream_id = stream_id;
st.output = output;
diff --git a/src/core/transport/chttp2/stream_lists.c b/src/core/transport/chttp2/stream_lists.c
index 38c6052f9c..781db7b0d6 100644
--- a/src/core/transport/chttp2/stream_lists.c
+++ b/src/core/transport/chttp2/stream_lists.c
@@ -177,8 +177,10 @@ int grpc_chttp2_list_pop_writable_stream(
grpc_chttp2_stream *stream;
int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
GRPC_CHTTP2_LIST_WRITABLE);
- *stream_global = &stream->global;
- *stream_writing = &stream->writing;
+ if (r != 0) {
+ *stream_global = &stream->global;
+ *stream_writing = &stream->writing;
+ }
return r;
}
@@ -210,7 +212,9 @@ int grpc_chttp2_list_pop_writing_stream(
grpc_chttp2_stream *stream;
int r = stream_list_pop(TRANSPORT_FROM_WRITING(transport_writing), &stream,
GRPC_CHTTP2_LIST_WRITING);
- *stream_writing = &stream->writing;
+ if (r != 0) {
+ *stream_writing = &stream->writing;
+ }
return r;
}
@@ -230,8 +234,10 @@ int grpc_chttp2_list_pop_written_stream(
grpc_chttp2_stream *stream;
int r = stream_list_pop(TRANSPORT_FROM_WRITING(transport_writing), &stream,
GRPC_CHTTP2_LIST_WRITTEN);
- *stream_global = &stream->global;
- *stream_writing = &stream->writing;
+ if (r != 0) {
+ *stream_global = &stream->global;
+ *stream_writing = &stream->writing;
+ }
return r;
}
@@ -251,8 +257,10 @@ int grpc_chttp2_list_pop_parsing_seen_stream(
grpc_chttp2_stream *stream;
int r = stream_list_pop(TRANSPORT_FROM_PARSING(transport_parsing), &stream,
GRPC_CHTTP2_LIST_PARSING_SEEN);
- *stream_global = &stream->global;
- *stream_parsing = &stream->parsing;
+ if (r != 0) {
+ *stream_global = &stream->global;
+ *stream_parsing = &stream->parsing;
+ }
return r;
}
@@ -270,7 +278,9 @@ int grpc_chttp2_list_pop_waiting_for_concurrency(
grpc_chttp2_stream *stream;
int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
GRPC_CHTTP2_LIST_WAITING_FOR_CONCURRENCY);
- *stream_global = &stream->global;
+ if (r != 0) {
+ *stream_global = &stream->global;
+ }
return r;
}
@@ -288,7 +298,9 @@ int grpc_chttp2_list_pop_closed_waiting_for_parsing(
grpc_chttp2_stream *stream;
int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
GRPC_CHTTP2_LIST_CLOSED_WAITING_FOR_PARSING);
- *stream_global = &stream->global;
+ if (r != 0) {
+ *stream_global = &stream->global;
+ }
return r;
}
@@ -306,7 +318,9 @@ int grpc_chttp2_list_pop_cancelled_waiting_for_writing(
grpc_chttp2_stream *stream;
int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
GRPC_CHTTP2_LIST_CANCELLED_WAITING_FOR_WRITING);
- *stream_global = &stream->global;
+ if (r != 0) {
+ *stream_global = &stream->global;
+ }
return r;
}
@@ -326,8 +340,10 @@ int grpc_chttp2_list_pop_incoming_window_updated(
grpc_chttp2_stream *stream;
int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
GRPC_CHTTP2_LIST_INCOMING_WINDOW_UPDATED);
- *stream_global = &stream->global;
- *stream_parsing = &stream->parsing;
+ if (r != 0) {
+ *stream_global = &stream->global;
+ *stream_parsing = &stream->parsing;
+ }
return r;
}
@@ -353,7 +369,9 @@ int grpc_chttp2_list_pop_read_write_state_changed(
grpc_chttp2_stream *stream;
int r = stream_list_pop(TRANSPORT_FROM_GLOBAL(transport_global), &stream,
GRPC_CHTTP2_LIST_READ_WRITE_STATE_CHANGED);
- *stream_global = &stream->global;
+ if (r != 0) {
+ *stream_global = &stream->global;
+ }
return r;
}
diff --git a/src/core/transport/metadata.c b/src/core/transport/metadata.c
index f92e87e9dd..61638764a6 100644
--- a/src/core/transport/metadata.c
+++ b/src/core/transport/metadata.c
@@ -681,16 +681,34 @@ void grpc_mdctx_locked_mdelem_unref(grpc_mdctx *ctx,
void grpc_mdctx_unlock(grpc_mdctx *ctx) { unlock(ctx); }
-int grpc_mdstr_is_legal_header(grpc_mdstr *s) {
- /* TODO(ctiller): consider caching this, or computing it on construction */
+static int conforms_to(grpc_mdstr *s, const gpr_uint8 *legal_bits) {
const gpr_uint8 *p = GPR_SLICE_START_PTR(s->slice);
const gpr_uint8 *e = GPR_SLICE_END_PTR(s->slice);
for (; p != e; p++) {
- if (*p < 32 || *p > 126) return 0;
+ int idx = *p;
+ int byte = idx / 8;
+ int bit = idx % 8;
+ if ((legal_bits[byte] & (1 << bit)) == 0) return 0;
}
return 1;
}
+int grpc_mdstr_is_legal_header(grpc_mdstr *s) {
+ static const gpr_uint8 legal_header_bits[256 / 8] = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xff, 0x03, 0x00, 0x00, 0x00,
+ 0x80, 0xfe, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ return conforms_to(s, legal_header_bits);
+}
+
+int grpc_mdstr_is_legal_nonbin_header(grpc_mdstr *s) {
+ static const gpr_uint8 legal_header_bits[256 / 8] = {
+ 0x00, 0x00, 0x00, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ return conforms_to(s, legal_header_bits);
+}
+
int grpc_mdstr_is_bin_suffixed(grpc_mdstr *s) {
/* TODO(ctiller): consider caching this */
return grpc_is_binary_header((const char *)GPR_SLICE_START_PTR(s->slice),
diff --git a/src/core/transport/metadata.h b/src/core/transport/metadata.h
index a7af49ba55..eb17747be7 100644
--- a/src/core/transport/metadata.h
+++ b/src/core/transport/metadata.h
@@ -154,6 +154,7 @@ void grpc_mdelem_unref(grpc_mdelem *md);
const char *grpc_mdstr_as_c_string(grpc_mdstr *s);
int grpc_mdstr_is_legal_header(grpc_mdstr *s);
+int grpc_mdstr_is_legal_nonbin_header(grpc_mdstr *s);
int grpc_mdstr_is_bin_suffixed(grpc_mdstr *s);
/* Batch mode metadata functions.
diff --git a/src/cpp/client/channel.cc b/src/cpp/client/channel.cc
index 17f31c22cb..8bf2e4687e 100644
--- a/src/cpp/client/channel.cc
+++ b/src/cpp/client/channel.cc
@@ -31,29 +31,26 @@
*
*/
-#include "src/cpp/client/channel.h"
+#include <grpc++/channel.h>
#include <memory>
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include <grpc/support/slice.h>
-
-#include "src/core/profiling/timers.h"
-#include <grpc++/channel_arguments.h>
#include <grpc++/client_context.h>
#include <grpc++/completion_queue.h>
-#include <grpc++/config.h>
#include <grpc++/credentials.h>
#include <grpc++/impl/call.h>
#include <grpc++/impl/rpc_method.h>
-#include <grpc++/status.h>
-#include <grpc++/time.h>
+#include <grpc++/support/channel_arguments.h>
+#include <grpc++/support/config.h>
+#include <grpc++/support/status.h>
+#include <grpc++/support/time.h>
+#include "src/core/profiling/timers.h"
namespace grpc {
-Channel::Channel(grpc_channel* channel) : c_channel_(channel) {}
-
Channel::Channel(const grpc::string& host, grpc_channel* channel)
: host_(host), c_channel_(channel) {}
diff --git a/src/cpp/client/channel_arguments.cc b/src/cpp/client/channel_arguments.cc
index da6602e7af..50422d06c9 100644
--- a/src/cpp/client/channel_arguments.cc
+++ b/src/cpp/client/channel_arguments.cc
@@ -31,10 +31,9 @@
*
*/
-#include <grpc++/channel_arguments.h>
+#include <grpc++/support/channel_arguments.h>
#include <grpc/support/log.h>
-
#include "src/core/channel/channel_args.h"
namespace grpc {
diff --git a/src/cpp/client/client_context.cc b/src/cpp/client/client_context.cc
index b8caa1eae4..c4d7cf2e51 100644
--- a/src/cpp/client/client_context.cc
+++ b/src/cpp/client/client_context.cc
@@ -38,7 +38,7 @@
#include <grpc/support/string_util.h>
#include <grpc++/credentials.h>
#include <grpc++/server_context.h>
-#include <grpc++/time.h>
+#include <grpc++/support/time.h>
#include "src/core/channel/compress_filter.h"
#include "src/cpp/common/create_auth_context.h"
@@ -71,7 +71,7 @@ void ClientContext::AddMetadata(const grpc::string& meta_key,
}
void ClientContext::set_call(grpc_call* call,
- const std::shared_ptr<ChannelInterface>& channel) {
+ const std::shared_ptr<Channel>& channel) {
GPR_ASSERT(call_ == nullptr);
call_ = call;
channel_ = channel;
diff --git a/src/cpp/client/create_channel.cc b/src/cpp/client/create_channel.cc
index 5ae772f096..1dac960017 100644
--- a/src/cpp/client/create_channel.cc
+++ b/src/cpp/client/create_channel.cc
@@ -34,15 +34,21 @@
#include <memory>
#include <sstream>
-#include "src/cpp/client/channel.h"
-#include <grpc++/channel_interface.h>
-#include <grpc++/channel_arguments.h>
+#include <grpc++/channel.h>
#include <grpc++/create_channel.h>
+#include <grpc++/support/channel_arguments.h>
+
+#include "src/cpp/client/create_channel_internal.h"
namespace grpc {
class ChannelArguments;
-std::shared_ptr<ChannelInterface> CreateChannel(
+std::shared_ptr<Channel> CreateChannel(
+ const grpc::string& target, const std::shared_ptr<Credentials>& creds) {
+ return CreateCustomChannel(target, creds, ChannelArguments());
+}
+
+std::shared_ptr<Channel> CreateCustomChannel(
const grpc::string& target, const std::shared_ptr<Credentials>& creds,
const ChannelArguments& args) {
ChannelArguments cp_args = args;
@@ -50,10 +56,11 @@ std::shared_ptr<ChannelInterface> CreateChannel(
user_agent_prefix << "grpc-c++/" << grpc_version_string();
cp_args.SetString(GRPC_ARG_PRIMARY_USER_AGENT_STRING,
user_agent_prefix.str());
- return creds ? creds->CreateChannel(target, cp_args)
- : std::shared_ptr<ChannelInterface>(
- new Channel(grpc_lame_client_channel_create(
- NULL, GRPC_STATUS_INVALID_ARGUMENT,
- "Invalid credentials.")));
+ return creds
+ ? creds->CreateChannel(target, cp_args)
+ : CreateChannelInternal("", grpc_lame_client_channel_create(
+ NULL, GRPC_STATUS_INVALID_ARGUMENT,
+ "Invalid credentials."));
}
+
} // namespace grpc
diff --git a/src/cpp/client/create_channel_internal.cc b/src/cpp/client/create_channel_internal.cc
new file mode 100644
index 0000000000..9c5ab038cf
--- /dev/null
+++ b/src/cpp/client/create_channel_internal.cc
@@ -0,0 +1,46 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <memory>
+
+#include <grpc++/channel.h>
+
+struct grpc_channel;
+
+namespace grpc {
+
+std::shared_ptr<Channel> CreateChannelInternal(const grpc::string& host,
+ grpc_channel* c_channel) {
+ return std::shared_ptr<Channel>(new Channel(host, c_channel));
+}
+} // namespace grpc
diff --git a/include/grpc++/impl/internal_stub.h b/src/cpp/client/create_channel_internal.h
index 370a3b8ac5..4385ec701e 100644
--- a/include/grpc++/impl/internal_stub.h
+++ b/src/cpp/client/create_channel_internal.h
@@ -31,27 +31,21 @@
*
*/
-#ifndef GRPCXX_IMPL_INTERNAL_STUB_H
-#define GRPCXX_IMPL_INTERNAL_STUB_H
+#ifndef GRPC_INTERNAL_CPP_CLIENT_CREATE_CHANNEL_INTERNAL_H
+#define GRPC_INTERNAL_CPP_CLIENT_CREATE_CHANNEL_INTERNAL_H
#include <memory>
-#include <grpc++/channel_interface.h>
+#include <grpc++/support/config.h>
-namespace grpc {
-
-class InternalStub {
- public:
- InternalStub(const std::shared_ptr<ChannelInterface>& channel)
- : channel_(channel) {}
- virtual ~InternalStub() {}
+struct grpc_channel;
- ChannelInterface* channel() { return channel_.get(); }
+namespace grpc {
+class Channel;
- private:
- const std::shared_ptr<ChannelInterface> channel_;
-};
+std::shared_ptr<Channel> CreateChannelInternal(const grpc::string& host,
+ grpc_channel* c_channel);
} // namespace grpc
-#endif // GRPCXX_IMPL_INTERNAL_STUB_H
+#endif // GRPC_INTERNAL_CPP_CLIENT_CREATE_CHANNEL_INTERNAL_H
diff --git a/src/cpp/client/generic_stub.cc b/src/cpp/client/generic_stub.cc
index 0c90578ae5..7a2fdf941c 100644
--- a/src/cpp/client/generic_stub.cc
+++ b/src/cpp/client/generic_stub.cc
@@ -31,7 +31,7 @@
*
*/
-#include <grpc++/generic_stub.h>
+#include <grpc++/generic/generic_stub.h>
#include <grpc++/impl/rpc_method.h>
@@ -44,8 +44,7 @@ std::unique_ptr<GenericClientAsyncReaderWriter> GenericStub::Call(
return std::unique_ptr<GenericClientAsyncReaderWriter>(
new GenericClientAsyncReaderWriter(
channel_.get(), cq,
- RpcMethod(method.c_str(), RpcMethod::BIDI_STREAMING, nullptr),
- context, tag));
+ RpcMethod(method.c_str(), RpcMethod::BIDI_STREAMING), context, tag));
}
} // namespace grpc
diff --git a/src/cpp/client/insecure_credentials.cc b/src/cpp/client/insecure_credentials.cc
index 2f9357b568..4a4d2cb97d 100644
--- a/src/cpp/client/insecure_credentials.cc
+++ b/src/cpp/client/insecure_credentials.cc
@@ -31,25 +31,27 @@
*
*/
+#include <grpc++/credentials.h>
+
#include <grpc/grpc.h>
#include <grpc/support/log.h>
-
-#include <grpc++/channel_arguments.h>
-#include <grpc++/config.h>
-#include <grpc++/credentials.h>
-#include "src/cpp/client/channel.h"
+#include <grpc++/channel.h>
+#include <grpc++/support/channel_arguments.h>
+#include <grpc++/support/config.h>
+#include "src/cpp/client/create_channel_internal.h"
namespace grpc {
namespace {
class InsecureCredentialsImpl GRPC_FINAL : public Credentials {
public:
- std::shared_ptr<grpc::ChannelInterface> CreateChannel(
+ std::shared_ptr<grpc::Channel> CreateChannel(
const string& target, const grpc::ChannelArguments& args) GRPC_OVERRIDE {
grpc_channel_args channel_args;
args.SetChannelArgs(&channel_args);
- return std::shared_ptr<ChannelInterface>(new Channel(
- grpc_insecure_channel_create(target.c_str(), &channel_args, nullptr)));
+ return CreateChannelInternal(
+ "",
+ grpc_insecure_channel_create(target.c_str(), &channel_args, nullptr));
}
// InsecureCredentials should not be applied to a call.
diff --git a/src/cpp/client/secure_channel_arguments.cc b/src/cpp/client/secure_channel_arguments.cc
index d89df999ad..e17d3b58b0 100644
--- a/src/cpp/client/secure_channel_arguments.cc
+++ b/src/cpp/client/secure_channel_arguments.cc
@@ -31,9 +31,9 @@
*
*/
-#include <grpc++/channel_arguments.h>
-#include <grpc/grpc_security.h>
+#include <grpc++/support/channel_arguments.h>
+#include <grpc/grpc_security.h>
#include "src/core/channel/channel_args.h"
namespace grpc {
diff --git a/src/cpp/client/secure_credentials.cc b/src/cpp/client/secure_credentials.cc
index 6cd6b77fcf..e0642469b4 100644
--- a/src/cpp/client/secure_credentials.cc
+++ b/src/cpp/client/secure_credentials.cc
@@ -32,21 +32,22 @@
*/
#include <grpc/support/log.h>
-
-#include <grpc++/channel_arguments.h>
+#include <grpc++/channel.h>
#include <grpc++/impl/grpc_library.h>
-#include "src/cpp/client/channel.h"
+#include <grpc++/support/channel_arguments.h>
+#include "src/cpp/client/create_channel_internal.h"
#include "src/cpp/client/secure_credentials.h"
namespace grpc {
-std::shared_ptr<grpc::ChannelInterface> SecureCredentials::CreateChannel(
+std::shared_ptr<grpc::Channel> SecureCredentials::CreateChannel(
const string& target, const grpc::ChannelArguments& args) {
grpc_channel_args channel_args;
args.SetChannelArgs(&channel_args);
- return std::shared_ptr<ChannelInterface>(new Channel(
+ return CreateChannelInternal(
args.GetSslTargetNameOverride(),
- grpc_secure_channel_create(c_creds_, target.c_str(), &channel_args)));
+ grpc_secure_channel_create(c_creds_, target.c_str(), &channel_args,
+ nullptr));
}
bool SecureCredentials::ApplyToCall(grpc_call* call) {
@@ -75,14 +76,14 @@ std::shared_ptr<Credentials> SslCredentials(
grpc_credentials* c_creds = grpc_ssl_credentials_create(
options.pem_root_certs.empty() ? nullptr : options.pem_root_certs.c_str(),
- options.pem_private_key.empty() ? nullptr : &pem_key_cert_pair);
+ options.pem_private_key.empty() ? nullptr : &pem_key_cert_pair, nullptr);
return WrapCredentials(c_creds);
}
// Builds credentials for use when running in GCE
std::shared_ptr<Credentials> ComputeEngineCredentials() {
GrpcLibrary init; // To call grpc_init().
- return WrapCredentials(grpc_compute_engine_credentials_create());
+ return WrapCredentials(grpc_compute_engine_credentials_create(nullptr));
}
// Builds service account credentials.
@@ -99,7 +100,7 @@ std::shared_ptr<Credentials> ServiceAccountCredentials(
gpr_timespec lifetime =
gpr_time_from_seconds(token_lifetime_seconds, GPR_TIMESPAN);
return WrapCredentials(grpc_service_account_credentials_create(
- json_key.c_str(), scope.c_str(), lifetime));
+ json_key.c_str(), scope.c_str(), lifetime, nullptr));
}
// Builds JWT credentials.
@@ -114,15 +115,15 @@ std::shared_ptr<Credentials> ServiceAccountJWTAccessCredentials(
gpr_timespec lifetime =
gpr_time_from_seconds(token_lifetime_seconds, GPR_TIMESPAN);
return WrapCredentials(grpc_service_account_jwt_access_credentials_create(
- json_key.c_str(), lifetime));
+ json_key.c_str(), lifetime, nullptr));
}
// Builds refresh token credentials.
std::shared_ptr<Credentials> RefreshTokenCredentials(
const grpc::string& json_refresh_token) {
GrpcLibrary init; // To call grpc_init().
- return WrapCredentials(
- grpc_refresh_token_credentials_create(json_refresh_token.c_str()));
+ return WrapCredentials(grpc_refresh_token_credentials_create(
+ json_refresh_token.c_str(), nullptr));
}
// Builds access token credentials.
@@ -130,7 +131,7 @@ std::shared_ptr<Credentials> AccessTokenCredentials(
const grpc::string& access_token) {
GrpcLibrary init; // To call grpc_init().
return WrapCredentials(
- grpc_access_token_credentials_create(access_token.c_str()));
+ grpc_access_token_credentials_create(access_token.c_str(), nullptr));
}
// Builds IAM credentials.
@@ -139,7 +140,7 @@ std::shared_ptr<Credentials> IAMCredentials(
const grpc::string& authority_selector) {
GrpcLibrary init; // To call grpc_init().
return WrapCredentials(grpc_iam_credentials_create(
- authorization_token.c_str(), authority_selector.c_str()));
+ authorization_token.c_str(), authority_selector.c_str(), nullptr));
}
// Combines two credentials objects into a composite credentials.
@@ -154,7 +155,7 @@ std::shared_ptr<Credentials> CompositeCredentials(
SecureCredentials* s2 = creds2->AsSecureCredentials();
if (s1 && s2) {
return WrapCredentials(grpc_composite_credentials_create(
- s1->GetRawCreds(), s2->GetRawCreds()));
+ s1->GetRawCreds(), s2->GetRawCreds(), nullptr));
}
return nullptr;
}
diff --git a/src/cpp/client/secure_credentials.h b/src/cpp/client/secure_credentials.h
index c2b8d43a15..62d3185477 100644
--- a/src/cpp/client/secure_credentials.h
+++ b/src/cpp/client/secure_credentials.h
@@ -36,7 +36,7 @@
#include <grpc/grpc_security.h>
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
#include <grpc++/credentials.h>
namespace grpc {
@@ -48,7 +48,7 @@ class SecureCredentials GRPC_FINAL : public Credentials {
grpc_credentials* GetRawCreds() { return c_creds_; }
bool ApplyToCall(grpc_call* call) GRPC_OVERRIDE;
- std::shared_ptr<grpc::ChannelInterface> CreateChannel(
+ std::shared_ptr<grpc::Channel> CreateChannel(
const string& target, const grpc::ChannelArguments& args) GRPC_OVERRIDE;
SecureCredentials* AsSecureCredentials() GRPC_OVERRIDE { return this; }
diff --git a/src/cpp/common/auth_property_iterator.cc b/src/cpp/common/auth_property_iterator.cc
index d3bfd5cb6b..fa6da9d7a8 100644
--- a/src/cpp/common/auth_property_iterator.cc
+++ b/src/cpp/common/auth_property_iterator.cc
@@ -31,7 +31,7 @@
*
*/
-#include <grpc++/auth_context.h>
+#include <grpc++/support/auth_context.h>
#include <grpc/grpc_security.h>
@@ -77,9 +77,9 @@ bool AuthPropertyIterator::operator!=(const AuthPropertyIterator& rhs) const {
}
const AuthProperty AuthPropertyIterator::operator*() {
- return std::make_pair<grpc::string, grpc::string>(
- grpc::string(property_->name),
- grpc::string(property_->value, property_->value_length));
+ return std::pair<grpc::string_ref, grpc::string_ref>(
+ property_->name,
+ grpc::string_ref(property_->value, property_->value_length));
}
} // namespace grpc
diff --git a/src/cpp/common/call.cc b/src/cpp/common/call.cc
index 0a5c976e01..5b87c2a806 100644
--- a/src/cpp/common/call.cc
+++ b/src/cpp/common/call.cc
@@ -34,21 +34,21 @@
#include <grpc++/impl/call.h>
#include <grpc/support/alloc.h>
-#include <grpc++/byte_buffer.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
-#include <grpc++/channel_interface.h>
-
+#include <grpc++/support/byte_buffer.h>
#include "src/core/profiling/timers.h"
namespace grpc {
-void FillMetadataMap(grpc_metadata_array* arr,
- std::multimap<grpc::string, grpc::string>* metadata) {
+void FillMetadataMap(
+ grpc_metadata_array* arr,
+ std::multimap<grpc::string_ref, grpc::string_ref>* metadata) {
for (size_t i = 0; i < arr->count; i++) {
// TODO(yangg) handle duplicates?
- metadata->insert(std::pair<grpc::string, grpc::string>(
- arr->metadata[i].key,
- grpc::string(arr->metadata[i].value, arr->metadata[i].value_length)));
+ metadata->insert(std::pair<grpc::string_ref, grpc::string_ref>(
+ arr->metadata[i].key, grpc::string_ref(arr->metadata[i].value,
+ arr->metadata[i].value_length)));
}
grpc_metadata_array_destroy(arr);
grpc_metadata_array_init(arr);
diff --git a/src/cpp/common/completion_queue.cc b/src/cpp/common/completion_queue.cc
index fca33f8f54..a175beb452 100644
--- a/src/cpp/common/completion_queue.cc
+++ b/src/cpp/common/completion_queue.cc
@@ -36,7 +36,7 @@
#include <grpc/grpc.h>
#include <grpc/support/log.h>
-#include <grpc++/time.h>
+#include <grpc++/support/time.h>
namespace grpc {
diff --git a/src/cpp/common/create_auth_context.h b/src/cpp/common/create_auth_context.h
index 9082a90c6d..b4962bae4e 100644
--- a/src/cpp/common/create_auth_context.h
+++ b/src/cpp/common/create_auth_context.h
@@ -33,7 +33,7 @@
#include <memory>
#include <grpc/grpc.h>
-#include <grpc++/auth_context.h>
+#include <grpc++/support/auth_context.h>
namespace grpc {
diff --git a/src/cpp/common/insecure_create_auth_context.cc b/src/cpp/common/insecure_create_auth_context.cc
index 07fc0bd549..fe80c1a80c 100644
--- a/src/cpp/common/insecure_create_auth_context.cc
+++ b/src/cpp/common/insecure_create_auth_context.cc
@@ -33,7 +33,7 @@
#include <memory>
#include <grpc/grpc.h>
-#include <grpc++/auth_context.h>
+#include <grpc++/support/auth_context.h>
namespace grpc {
diff --git a/src/cpp/common/secure_auth_context.cc b/src/cpp/common/secure_auth_context.cc
index 87d7bab75c..b18a8537c9 100644
--- a/src/cpp/common/secure_auth_context.cc
+++ b/src/cpp/common/secure_auth_context.cc
@@ -41,15 +41,16 @@ SecureAuthContext::SecureAuthContext(grpc_auth_context* ctx) : ctx_(ctx) {}
SecureAuthContext::~SecureAuthContext() { grpc_auth_context_release(ctx_); }
-std::vector<grpc::string> SecureAuthContext::GetPeerIdentity() const {
+std::vector<grpc::string_ref> SecureAuthContext::GetPeerIdentity() const {
if (!ctx_) {
- return std::vector<grpc::string>();
+ return std::vector<grpc::string_ref>();
}
grpc_auth_property_iterator iter = grpc_auth_context_peer_identity(ctx_);
- std::vector<grpc::string> identity;
+ std::vector<grpc::string_ref> identity;
const grpc_auth_property* property = nullptr;
while ((property = grpc_auth_property_iterator_next(&iter))) {
- identity.push_back(grpc::string(property->value, property->value_length));
+ identity.push_back(
+ grpc::string_ref(property->value, property->value_length));
}
return identity;
}
@@ -62,17 +63,17 @@ grpc::string SecureAuthContext::GetPeerIdentityPropertyName() const {
return name == nullptr ? "" : name;
}
-std::vector<grpc::string> SecureAuthContext::FindPropertyValues(
+std::vector<grpc::string_ref> SecureAuthContext::FindPropertyValues(
const grpc::string& name) const {
if (!ctx_) {
- return std::vector<grpc::string>();
+ return std::vector<grpc::string_ref>();
}
grpc_auth_property_iterator iter =
grpc_auth_context_find_properties_by_name(ctx_, name.c_str());
const grpc_auth_property* property = nullptr;
- std::vector<grpc::string> values;
+ std::vector<grpc::string_ref> values;
while ((property = grpc_auth_property_iterator_next(&iter))) {
- values.push_back(grpc::string(property->value, property->value_length));
+ values.push_back(grpc::string_ref(property->value, property->value_length));
}
return values;
}
diff --git a/src/cpp/common/secure_auth_context.h b/src/cpp/common/secure_auth_context.h
index 264ed620a3..7f622b890b 100644
--- a/src/cpp/common/secure_auth_context.h
+++ b/src/cpp/common/secure_auth_context.h
@@ -34,7 +34,7 @@
#ifndef GRPC_INTERNAL_CPP_COMMON_SECURE_AUTH_CONTEXT_H
#define GRPC_INTERNAL_CPP_COMMON_SECURE_AUTH_CONTEXT_H
-#include <grpc++/auth_context.h>
+#include <grpc++/support/auth_context.h>
struct grpc_auth_context;
@@ -46,12 +46,12 @@ class SecureAuthContext GRPC_FINAL : public AuthContext {
~SecureAuthContext() GRPC_OVERRIDE;
- std::vector<grpc::string> GetPeerIdentity() const GRPC_OVERRIDE;
+ std::vector<grpc::string_ref> GetPeerIdentity() const GRPC_OVERRIDE;
grpc::string GetPeerIdentityPropertyName() const GRPC_OVERRIDE;
- std::vector<grpc::string> FindPropertyValues(const grpc::string& name) const
- GRPC_OVERRIDE;
+ std::vector<grpc::string_ref> FindPropertyValues(
+ const grpc::string& name) const GRPC_OVERRIDE;
AuthPropertyIterator begin() const GRPC_OVERRIDE;
diff --git a/src/cpp/common/secure_create_auth_context.cc b/src/cpp/common/secure_create_auth_context.cc
index d81f4bbc4a..f13d25a1dd 100644
--- a/src/cpp/common/secure_create_auth_context.cc
+++ b/src/cpp/common/secure_create_auth_context.cc
@@ -34,7 +34,7 @@
#include <grpc/grpc.h>
#include <grpc/grpc_security.h>
-#include <grpc++/auth_context.h>
+#include <grpc++/support/auth_context.h>
#include "src/cpp/common/secure_auth_context.h"
namespace grpc {
diff --git a/src/cpp/proto/proto_utils.cc b/src/cpp/proto/proto_utils.cc
index 05470ec627..be84c222a0 100644
--- a/src/cpp/proto/proto_utils.cc
+++ b/src/cpp/proto/proto_utils.cc
@@ -32,7 +32,6 @@
*/
#include <grpc++/impl/proto_utils.h>
-#include <grpc++/config.h>
#include <grpc/grpc.h>
#include <grpc/byte_buffer.h>
@@ -40,6 +39,7 @@
#include <grpc/support/slice.h>
#include <grpc/support/slice_buffer.h>
#include <grpc/support/port_platform.h>
+#include <grpc++/support/config.h>
const int kMaxBufferLength = 8192;
diff --git a/src/cpp/server/async_generic_service.cc b/src/cpp/server/async_generic_service.cc
index 2e99afcb5f..6b9ea532b6 100644
--- a/src/cpp/server/async_generic_service.cc
+++ b/src/cpp/server/async_generic_service.cc
@@ -31,7 +31,7 @@
*
*/
-#include <grpc++/async_generic_service.h>
+#include <grpc++/generic/async_generic_service.h>
#include <grpc++/server.h>
diff --git a/src/cpp/server/create_default_thread_pool.cc b/src/cpp/server/create_default_thread_pool.cc
index 9f59d254f1..f3b07ec8ce 100644
--- a/src/cpp/server/create_default_thread_pool.cc
+++ b/src/cpp/server/create_default_thread_pool.cc
@@ -32,7 +32,8 @@
*/
#include <grpc/support/cpu.h>
-#include <grpc++/dynamic_thread_pool.h>
+
+#include "src/cpp/server/dynamic_thread_pool.h"
#ifndef GRPC_CUSTOM_DEFAULT_THREAD_POOL
diff --git a/src/cpp/server/dynamic_thread_pool.cc b/src/cpp/server/dynamic_thread_pool.cc
index b475f43b1d..4b226c2992 100644
--- a/src/cpp/server/dynamic_thread_pool.cc
+++ b/src/cpp/server/dynamic_thread_pool.cc
@@ -33,7 +33,8 @@
#include <grpc++/impl/sync.h>
#include <grpc++/impl/thd.h>
-#include <grpc++/dynamic_thread_pool.h>
+
+#include "src/cpp/server/dynamic_thread_pool.h"
namespace grpc {
DynamicThreadPool::DynamicThread::DynamicThread(DynamicThreadPool* pool)
diff --git a/include/grpc++/dynamic_thread_pool.h b/src/cpp/server/dynamic_thread_pool.h
index a4d4885b51..5ba7533c05 100644
--- a/include/grpc++/dynamic_thread_pool.h
+++ b/src/cpp/server/dynamic_thread_pool.h
@@ -31,18 +31,18 @@
*
*/
-#ifndef GRPCXX_DYNAMIC_THREAD_POOL_H
-#define GRPCXX_DYNAMIC_THREAD_POOL_H
+#ifndef GRPC_INTERNAL_CPP_DYNAMIC_THREAD_POOL_H
+#define GRPC_INTERNAL_CPP_DYNAMIC_THREAD_POOL_H
-#include <grpc++/config.h>
+#include <list>
+#include <memory>
+#include <queue>
#include <grpc++/impl/sync.h>
#include <grpc++/impl/thd.h>
-#include <grpc++/thread_pool_interface.h>
+#include <grpc++/support/config.h>
-#include <list>
-#include <memory>
-#include <queue>
+#include "src/cpp/server/thread_pool_interface.h"
namespace grpc {
@@ -80,4 +80,4 @@ class DynamicThreadPool GRPC_FINAL : public ThreadPoolInterface {
} // namespace grpc
-#endif // GRPCXX_DYNAMIC_THREAD_POOL_H
+#endif // GRPC_INTERNAL_CPP_DYNAMIC_THREAD_POOL_H
diff --git a/src/cpp/server/fixed_size_thread_pool.cc b/src/cpp/server/fixed_size_thread_pool.cc
index bafbc5802a..2bdc44be2e 100644
--- a/src/cpp/server/fixed_size_thread_pool.cc
+++ b/src/cpp/server/fixed_size_thread_pool.cc
@@ -33,7 +33,7 @@
#include <grpc++/impl/sync.h>
#include <grpc++/impl/thd.h>
-#include <grpc++/fixed_size_thread_pool.h>
+#include "src/cpp/server/fixed_size_thread_pool.h"
namespace grpc {
diff --git a/include/grpc++/fixed_size_thread_pool.h b/src/cpp/server/fixed_size_thread_pool.h
index 307e166142..394ae5821e 100644
--- a/include/grpc++/fixed_size_thread_pool.h
+++ b/src/cpp/server/fixed_size_thread_pool.h
@@ -31,17 +31,17 @@
*
*/
-#ifndef GRPCXX_FIXED_SIZE_THREAD_POOL_H
-#define GRPCXX_FIXED_SIZE_THREAD_POOL_H
+#ifndef GRPC_INTERNAL_CPP_FIXED_SIZE_THREAD_POOL_H
+#define GRPC_INTERNAL_CPP_FIXED_SIZE_THREAD_POOL_H
-#include <grpc++/config.h>
+#include <queue>
+#include <vector>
#include <grpc++/impl/sync.h>
#include <grpc++/impl/thd.h>
-#include <grpc++/thread_pool_interface.h>
+#include <grpc++/support/config.h>
-#include <queue>
-#include <vector>
+#include "src/cpp/server/thread_pool_interface.h"
namespace grpc {
@@ -64,4 +64,4 @@ class FixedSizeThreadPool GRPC_FINAL : public ThreadPoolInterface {
} // namespace grpc
-#endif // GRPCXX_FIXED_SIZE_THREAD_POOL_H
+#endif // GRPC_INTERNAL_CPP_FIXED_SIZE_THREAD_POOL_H
diff --git a/src/cpp/server/secure_server_credentials.cc b/src/cpp/server/secure_server_credentials.cc
index f203cf7f49..5bce9ca8b2 100644
--- a/src/cpp/server/secure_server_credentials.cc
+++ b/src/cpp/server/secure_server_credentials.cc
@@ -52,7 +52,7 @@ std::shared_ptr<ServerCredentials> SslServerCredentials(
grpc_server_credentials* c_creds = grpc_ssl_server_credentials_create(
options.pem_root_certs.empty() ? nullptr : options.pem_root_certs.c_str(),
&pem_key_cert_pairs[0], pem_key_cert_pairs.size(),
- options.force_client_auth);
+ options.force_client_auth, nullptr);
return std::shared_ptr<ServerCredentials>(
new SecureServerCredentials(c_creds));
}
diff --git a/src/cpp/server/secure_server_credentials.h b/src/cpp/server/secure_server_credentials.h
index b9803f107e..d3d37b188d 100644
--- a/src/cpp/server/secure_server_credentials.h
+++ b/src/cpp/server/secure_server_credentials.h
@@ -34,10 +34,10 @@
#ifndef GRPC_INTERNAL_CPP_SERVER_SECURE_SERVER_CREDENTIALS_H
#define GRPC_INTERNAL_CPP_SERVER_SECURE_SERVER_CREDENTIALS_H
-#include <grpc/grpc_security.h>
-
#include <grpc++/server_credentials.h>
+#include <grpc/grpc_security.h>
+
namespace grpc {
class SecureServerCredentials GRPC_FINAL : public ServerCredentials {
diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc
index e039c07374..bb83c7d887 100644
--- a/src/cpp/server/server.cc
+++ b/src/cpp/server/server.cc
@@ -32,24 +32,71 @@
*/
#include <grpc++/server.h>
+
#include <utility>
#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc++/completion_queue.h>
-#include <grpc++/async_generic_service.h>
+#include <grpc++/generic/async_generic_service.h>
#include <grpc++/impl/rpc_service_method.h>
#include <grpc++/impl/service_type.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/thread_pool_interface.h>
-#include <grpc++/time.h>
+#include <grpc++/support/time.h>
#include "src/core/profiling/timers.h"
+#include "src/cpp/server/thread_pool_interface.h"
namespace grpc {
+class Server::UnimplementedAsyncRequestContext {
+ protected:
+ UnimplementedAsyncRequestContext() : generic_stream_(&server_context_) {}
+
+ GenericServerContext server_context_;
+ GenericServerAsyncReaderWriter generic_stream_;
+};
+
+class Server::UnimplementedAsyncRequest GRPC_FINAL
+ : public UnimplementedAsyncRequestContext,
+ public GenericAsyncRequest {
+ public:
+ UnimplementedAsyncRequest(Server* server, ServerCompletionQueue* cq)
+ : GenericAsyncRequest(server, &server_context_, &generic_stream_, cq, cq,
+ NULL, false),
+ server_(server),
+ cq_(cq) {}
+
+ bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE;
+
+ ServerContext* context() { return &server_context_; }
+ GenericServerAsyncReaderWriter* stream() { return &generic_stream_; }
+
+ private:
+ Server* const server_;
+ ServerCompletionQueue* const cq_;
+};
+
+typedef SneakyCallOpSet<CallOpSendInitialMetadata, CallOpServerSendStatus>
+ UnimplementedAsyncResponseOp;
+class Server::UnimplementedAsyncResponse GRPC_FINAL
+ : public UnimplementedAsyncResponseOp {
+ public:
+ UnimplementedAsyncResponse(UnimplementedAsyncRequest* request);
+ ~UnimplementedAsyncResponse() { delete request_; }
+
+ bool FinalizeResult(void** tag, bool* status) GRPC_OVERRIDE {
+ bool r = UnimplementedAsyncResponseOp::FinalizeResult(tag, status);
+ delete this;
+ return r;
+ }
+
+ private:
+ UnimplementedAsyncRequest* const request_;
+};
+
class Server::ShutdownRequest GRPC_FINAL : public CompletionQueueTag {
public:
bool FinalizeResult(void** tag, bool* status) {
@@ -297,18 +344,23 @@ int Server::AddListeningPort(const grpc::string& addr,
return creds->AddPortToServer(addr, server_);
}
-bool Server::Start() {
+bool Server::Start(ServerCompletionQueue** cqs, size_t num_cqs) {
GPR_ASSERT(!started_);
started_ = true;
grpc_server_start(server_);
if (!has_generic_service_) {
- unknown_method_.reset(new RpcServiceMethod(
- "unknown", RpcMethod::BIDI_STREAMING, new UnknownMethodHandler));
- // Use of emplace_back with just constructor arguments is not accepted here
- // by gcc-4.4 because it can't match the anonymous nullptr with a proper
- // constructor implicitly. Construct the object and use push_back.
- sync_methods_->push_back(SyncRequest(unknown_method_.get(), nullptr));
+ if (!sync_methods_->empty()) {
+ unknown_method_.reset(new RpcServiceMethod(
+ "unknown", RpcMethod::BIDI_STREAMING, new UnknownMethodHandler));
+ // Use of emplace_back with just constructor arguments is not accepted
+ // here by gcc-4.4 because it can't match the anonymous nullptr with a
+ // proper constructor implicitly. Construct the object and use push_back.
+ sync_methods_->push_back(SyncRequest(unknown_method_.get(), nullptr));
+ }
+ for (size_t i = 0; i < num_cqs; i++) {
+ new UnimplementedAsyncRequest(this, cqs[i]);
+ }
}
// Start processing rpcs.
if (!sync_methods_->empty()) {
@@ -370,12 +422,14 @@ void Server::PerformOpsOnCall(CallOpSetInterface* ops, Call* call) {
Server::BaseAsyncRequest::BaseAsyncRequest(
Server* server, ServerContext* context,
- ServerAsyncStreamingInterface* stream, CompletionQueue* call_cq, void* tag)
+ ServerAsyncStreamingInterface* stream, CompletionQueue* call_cq, void* tag,
+ bool delete_on_finalize)
: server_(server),
context_(context),
stream_(stream),
call_cq_(call_cq),
tag_(tag),
+ delete_on_finalize_(delete_on_finalize),
call_(nullptr) {
memset(&initial_metadata_array_, 0, sizeof(initial_metadata_array_));
}
@@ -385,11 +439,12 @@ Server::BaseAsyncRequest::~BaseAsyncRequest() {}
bool Server::BaseAsyncRequest::FinalizeResult(void** tag, bool* status) {
if (*status) {
for (size_t i = 0; i < initial_metadata_array_.count; i++) {
- context_->client_metadata_.insert(std::make_pair(
- grpc::string(initial_metadata_array_.metadata[i].key),
- grpc::string(initial_metadata_array_.metadata[i].value,
- initial_metadata_array_.metadata[i].value +
- initial_metadata_array_.metadata[i].value_length)));
+ context_->client_metadata_.insert(
+ std::pair<grpc::string_ref, grpc::string_ref>(
+ initial_metadata_array_.metadata[i].key,
+ grpc::string_ref(
+ initial_metadata_array_.metadata[i].value,
+ initial_metadata_array_.metadata[i].value_length)));
}
}
grpc_metadata_array_destroy(&initial_metadata_array_);
@@ -402,14 +457,16 @@ bool Server::BaseAsyncRequest::FinalizeResult(void** tag, bool* status) {
// just the pointers inside call are copied here
stream_->BindCall(&call);
*tag = tag_;
- delete this;
+ if (delete_on_finalize_) {
+ delete this;
+ }
return true;
}
Server::RegisteredAsyncRequest::RegisteredAsyncRequest(
Server* server, ServerContext* context,
ServerAsyncStreamingInterface* stream, CompletionQueue* call_cq, void* tag)
- : BaseAsyncRequest(server, context, stream, call_cq, tag) {}
+ : BaseAsyncRequest(server, context, stream, call_cq, tag, true) {}
void Server::RegisteredAsyncRequest::IssueRequest(
void* registered_method, grpc_byte_buffer** payload,
@@ -423,8 +480,9 @@ void Server::RegisteredAsyncRequest::IssueRequest(
Server::GenericAsyncRequest::GenericAsyncRequest(
Server* server, GenericServerContext* context,
ServerAsyncStreamingInterface* stream, CompletionQueue* call_cq,
- ServerCompletionQueue* notification_cq, void* tag)
- : BaseAsyncRequest(server, context, stream, call_cq, tag) {
+ ServerCompletionQueue* notification_cq, void* tag, bool delete_on_finalize)
+ : BaseAsyncRequest(server, context, stream, call_cq, tag,
+ delete_on_finalize) {
grpc_call_details_init(&call_details_);
GPR_ASSERT(notification_cq);
GPR_ASSERT(call_cq);
@@ -445,6 +503,25 @@ bool Server::GenericAsyncRequest::FinalizeResult(void** tag, bool* status) {
return BaseAsyncRequest::FinalizeResult(tag, status);
}
+bool Server::UnimplementedAsyncRequest::FinalizeResult(void** tag,
+ bool* status) {
+ if (GenericAsyncRequest::FinalizeResult(tag, status) && *status) {
+ new UnimplementedAsyncRequest(server_, cq_);
+ new UnimplementedAsyncResponse(this);
+ } else {
+ delete this;
+ }
+ return false;
+}
+
+Server::UnimplementedAsyncResponse::UnimplementedAsyncResponse(
+ UnimplementedAsyncRequest* request)
+ : request_(request) {
+ Status status(StatusCode::UNIMPLEMENTED, "");
+ UnknownMethodHandler::FillOps(request_->context(), this);
+ request_->stream()->call_.PerformOps(this);
+}
+
void Server::ScheduleCallback() {
{
grpc::unique_lock<grpc::mutex> lock(mu_);
diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc
index 0b11d86173..b739cbfe62 100644
--- a/src/cpp/server/server_builder.cc
+++ b/src/cpp/server/server_builder.cc
@@ -37,8 +37,8 @@
#include <grpc/support/log.h>
#include <grpc++/impl/service_type.h>
#include <grpc++/server.h>
-#include <grpc++/thread_pool_interface.h>
-#include <grpc++/fixed_size_thread_pool.h>
+#include "src/cpp/server/thread_pool_interface.h"
+#include "src/cpp/server/fixed_size_thread_pool.h"
namespace grpc {
@@ -89,10 +89,6 @@ void ServerBuilder::AddListeningPort(const grpc::string& addr,
ports_.push_back(port);
}
-void ServerBuilder::SetThreadPool(ThreadPoolInterface* thread_pool) {
- thread_pool_ = thread_pool;
-}
-
std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
bool thread_pool_owned = false;
if (!async_services_.empty() && !services_.empty()) {
@@ -103,12 +99,6 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
thread_pool_ = CreateDefaultThreadPool();
thread_pool_owned = true;
}
- // Async services only, create a thread pool to handle requests to unknown
- // services.
- if (!thread_pool_ && !generic_service_ && !async_services_.empty()) {
- thread_pool_ = new FixedSizeThreadPool(1);
- thread_pool_owned = true;
- }
std::unique_ptr<Server> server(
new Server(thread_pool_, thread_pool_owned, max_message_size_));
for (auto cq = cqs_.begin(); cq != cqs_.end(); ++cq) {
@@ -138,7 +128,7 @@ std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
*port->selected_port = r;
}
}
- if (!server->Start()) {
+ if (!server->Start(&cqs_[0], cqs_.size())) {
return nullptr;
}
return server;
diff --git a/src/cpp/server/server_context.cc b/src/cpp/server/server_context.cc
index 03461ddda5..8193e70660 100644
--- a/src/cpp/server/server_context.cc
+++ b/src/cpp/server/server_context.cc
@@ -38,7 +38,7 @@
#include <grpc/support/log.h>
#include <grpc++/impl/call.h>
#include <grpc++/impl/sync.h>
-#include <grpc++/time.h>
+#include <grpc++/support/time.h>
#include "src/core/channel/compress_filter.h"
#include "src/cpp/common/create_auth_context.h"
@@ -136,10 +136,9 @@ ServerContext::ServerContext(gpr_timespec deadline, grpc_metadata* metadata,
cq_(nullptr),
sent_initial_metadata_(false) {
for (size_t i = 0; i < metadata_count; i++) {
- client_metadata_.insert(std::make_pair(
- grpc::string(metadata[i].key),
- grpc::string(metadata[i].value,
- metadata[i].value + metadata[i].value_length)));
+ client_metadata_.insert(std::pair<grpc::string_ref, grpc::string_ref>(
+ metadata[i].key,
+ grpc::string_ref(metadata[i].value, metadata[i].value_length)));
}
}
diff --git a/include/grpc++/thread_pool_interface.h b/src/cpp/server/thread_pool_interface.h
index d080b31dcc..1ebe30fe2a 100644
--- a/include/grpc++/thread_pool_interface.h
+++ b/src/cpp/server/thread_pool_interface.h
@@ -31,8 +31,8 @@
*
*/
-#ifndef GRPCXX_THREAD_POOL_INTERFACE_H
-#define GRPCXX_THREAD_POOL_INTERFACE_H
+#ifndef GRPC_INTERNAL_CPP_THREAD_POOL_INTERFACE_H
+#define GRPC_INTERNAL_CPP_THREAD_POOL_INTERFACE_H
#include <functional>
@@ -51,4 +51,4 @@ ThreadPoolInterface* CreateDefaultThreadPool();
} // namespace grpc
-#endif // GRPCXX_THREAD_POOL_INTERFACE_H
+#endif // GRPC_INTERNAL_CPP_THREAD_POOL_INTERFACE_H
diff --git a/src/cpp/util/byte_buffer.cc b/src/cpp/util/byte_buffer.cc
index a66c92c3e1..e46e656beb 100644
--- a/src/cpp/util/byte_buffer.cc
+++ b/src/cpp/util/byte_buffer.cc
@@ -32,7 +32,7 @@
*/
#include <grpc/byte_buffer_reader.h>
-#include <grpc++/byte_buffer.h>
+#include <grpc++/support/byte_buffer.h>
namespace grpc {
diff --git a/src/cpp/util/slice.cc b/src/cpp/util/slice.cc
index 57370dabc6..7e88423b6c 100644
--- a/src/cpp/util/slice.cc
+++ b/src/cpp/util/slice.cc
@@ -31,7 +31,7 @@
*
*/
-#include <grpc++/slice.h>
+#include <grpc++/support/slice.h>
namespace grpc {
diff --git a/src/cpp/util/status.cc b/src/cpp/util/status.cc
index 5bb9eda3d9..ad9850cf07 100644
--- a/src/cpp/util/status.cc
+++ b/src/cpp/util/status.cc
@@ -31,7 +31,7 @@
*
*/
-#include <grpc++/status.h>
+#include <grpc++/support/status.h>
namespace grpc {
diff --git a/src/cpp/util/string_ref.cc b/src/cpp/util/string_ref.cc
new file mode 100644
index 0000000000..9adc092013
--- /dev/null
+++ b/src/cpp/util/string_ref.cc
@@ -0,0 +1,115 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc++/support/string_ref.h>
+
+#include <string.h>
+
+#include <algorithm>
+
+namespace grpc {
+
+const size_t string_ref::npos;
+
+string_ref& string_ref::operator=(const string_ref& rhs) {
+ data_ = rhs.data_;
+ length_ = rhs.length_;
+ return *this;
+}
+
+string_ref::string_ref(const char* s) : data_(s), length_(strlen(s)) {}
+
+string_ref string_ref::substr(size_t pos, size_t n) const {
+ if (pos > length_) pos = length_;
+ if (n > (length_ - pos)) n = length_ - pos;
+ return string_ref(data_ + pos, n);
+}
+
+int string_ref::compare(string_ref x) const {
+ size_t min_size = length_ < x.length_ ? length_ : x.length_;
+ int r = memcmp(data_, x.data_, min_size);
+ if (r < 0) return -1;
+ if (r > 0) return 1;
+ if (length_ < x.length_) return -1;
+ if (length_ > x.length_) return 1;
+ return 0;
+}
+
+bool string_ref::starts_with(string_ref x) const {
+ return length_ >= x.length_ && (memcmp(data_, x.data_, x.length_) == 0);
+}
+
+bool string_ref::ends_with(string_ref x) const {
+ return length_ >= x.length_ &&
+ (memcmp(data_ + (length_ - x.length_), x.data_, x.length_) == 0);
+}
+
+size_t string_ref::find(string_ref s) const {
+ auto it = std::search(cbegin(), cend(), s.cbegin(), s.cend());
+ return it == cend() ? npos : std::distance(cbegin(), it);
+}
+
+size_t string_ref::find(char c) const {
+ auto it = std::find(cbegin(), cend(), c);
+ return it == cend() ? npos : std::distance(cbegin(), it);
+}
+
+bool operator==(string_ref x, string_ref y) {
+ return x.compare(y) == 0;
+}
+
+bool operator!=(string_ref x, string_ref y) {
+ return x.compare(y) != 0;
+}
+
+bool operator<(string_ref x, string_ref y) {
+ return x.compare(y) < 0;
+}
+
+bool operator<=(string_ref x, string_ref y) {
+ return x.compare(y) <= 0;
+}
+
+bool operator>(string_ref x, string_ref y) {
+ return x.compare(y) > 0;
+}
+
+bool operator>=(string_ref x, string_ref y) {
+ return x.compare(y) >= 0;
+}
+
+std::ostream& operator<<(std::ostream& out, const string_ref& string) {
+ return out << grpc::string(string.begin(), string.end());
+}
+
+} // namespace grpc
diff --git a/src/cpp/util/time.cc b/src/cpp/util/time.cc
index 799c597e0b..b3401eb26b 100644
--- a/src/cpp/util/time.cc
+++ b/src/cpp/util/time.cc
@@ -31,12 +31,12 @@
*
*/
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
#ifndef GRPC_CXX0X_NO_CHRONO
#include <grpc/support/time.h>
-#include <grpc++/time.h>
+#include <grpc++/support/time.h>
using std::chrono::duration_cast;
using std::chrono::nanoseconds;
diff --git a/src/csharp/.gitignore b/src/csharp/.gitignore
index ae48956567..deac55029e 100644
--- a/src/csharp/.gitignore
+++ b/src/csharp/.gitignore
@@ -4,5 +4,9 @@ StyleCop.Cache
test-results
packages
Grpc.v12.suo
+Grpc.sdf
+
TestResult.xml
+/TestResults
+.vs/
*.nupkg
diff --git a/src/csharp/Grpc.Auth/AuthInterceptors.cs b/src/csharp/Grpc.Auth/AuthInterceptors.cs
index 61338f7f0e..c8ab4d9af6 100644
--- a/src/csharp/Grpc.Auth/AuthInterceptors.cs
+++ b/src/csharp/Grpc.Auth/AuthInterceptors.cs
@@ -41,7 +41,8 @@ using Grpc.Core.Utils;
namespace Grpc.Auth
{
/// <summary>
- /// Factory methods to create authorization interceptors.
+ /// Factory methods to create authorization interceptors. Interceptors created can be registered with gRPC client classes (autogenerated client stubs that
+ /// inherit from <see cref="Grpc.Core.ClientBase"/>).
/// </summary>
public static class AuthInterceptors
{
@@ -52,6 +53,8 @@ namespace Grpc.Auth
/// Creates interceptor that will obtain access token from any credential type that implements
/// <c>ITokenAccess</c>. (e.g. <c>GoogleCredential</c>).
/// </summary>
+ /// <param name="credential">The credential to use to obtain access tokens.</param>
+ /// <returns>The header interceptor.</returns>
public static HeaderInterceptor FromCredential(ITokenAccess credential)
{
return new HeaderInterceptor((method, authUri, metadata) =>
@@ -67,6 +70,7 @@ namespace Grpc.Auth
/// Creates OAuth2 interceptor that will use given access token as authorization.
/// </summary>
/// <param name="accessToken">OAuth2 access token.</param>
+ /// <returns>The header interceptor.</returns>
public static HeaderInterceptor FromAccessToken(string accessToken)
{
Preconditions.CheckNotNull(accessToken);
diff --git a/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj b/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj
index ad4e94a695..f730936062 100644
--- a/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj
+++ b/src/csharp/Grpc.Core.Tests/Grpc.Core.Tests.csproj
@@ -64,7 +64,9 @@
<Link>Version.cs</Link>
</Compile>
<Compile Include="ClientBaseTest.cs" />
+ <Compile Include="MarshallingErrorsTest.cs" />
<Compile Include="ShutdownTest.cs" />
+ <Compile Include="Internal\AsyncCallTest.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ClientServerTest.cs" />
<Compile Include="ServerTest.cs" />
diff --git a/src/csharp/Grpc.Core.Tests/GrpcEnvironmentTest.cs b/src/csharp/Grpc.Core.Tests/GrpcEnvironmentTest.cs
index 4fdfab5a99..78295cf6d4 100644
--- a/src/csharp/Grpc.Core.Tests/GrpcEnvironmentTest.cs
+++ b/src/csharp/Grpc.Core.Tests/GrpcEnvironmentTest.cs
@@ -53,7 +53,7 @@ namespace Grpc.Core.Tests
{
var env1 = GrpcEnvironment.AddRef();
var env2 = GrpcEnvironment.AddRef();
- Assert.IsTrue(object.ReferenceEquals(env1, env2));
+ Assert.AreSame(env1, env2);
GrpcEnvironment.Release();
GrpcEnvironment.Release();
}
@@ -61,18 +61,21 @@ namespace Grpc.Core.Tests
[Test]
public void InitializeAfterShutdown()
{
+ Assert.AreEqual(0, GrpcEnvironment.GetRefCount());
+
var env1 = GrpcEnvironment.AddRef();
GrpcEnvironment.Release();
var env2 = GrpcEnvironment.AddRef();
GrpcEnvironment.Release();
- Assert.IsFalse(object.ReferenceEquals(env1, env2));
+ Assert.AreNotSame(env1, env2);
}
[Test]
public void ReleaseWithoutAddRef()
{
+ Assert.AreEqual(0, GrpcEnvironment.GetRefCount());
Assert.Throws(typeof(InvalidOperationException), () => GrpcEnvironment.Release());
}
diff --git a/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs b/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs
new file mode 100644
index 0000000000..685c5f7d6c
--- /dev/null
+++ b/src/csharp/Grpc.Core.Tests/Internal/AsyncCallTest.cs
@@ -0,0 +1,222 @@
+#region Copyright notice and license
+
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Runtime.InteropServices;
+using System.Threading.Tasks;
+
+using Grpc.Core.Internal;
+using NUnit.Framework;
+
+namespace Grpc.Core.Internal.Tests
+{
+ public class AsyncCallTest
+ {
+ Channel channel;
+ FakeNativeCall fakeCall;
+ AsyncCall<string, string> asyncCall;
+
+ [SetUp]
+ public void Init()
+ {
+ channel = new Channel("localhost", Credentials.Insecure);
+
+ fakeCall = new FakeNativeCall();
+
+ var callDetails = new CallInvocationDetails<string, string>(channel, "someMethod", null, Marshallers.StringMarshaller, Marshallers.StringMarshaller, new CallOptions());
+ asyncCall = new AsyncCall<string, string>(callDetails, fakeCall);
+ }
+
+ [TearDown]
+ public void Cleanup()
+ {
+ channel.ShutdownAsync().Wait();
+ }
+
+ [Test]
+ public void AsyncUnary_CompletionSuccess()
+ {
+ var resultTask = asyncCall.UnaryCallAsync("abc");
+ fakeCall.UnaryResponseClientHandler(true, new ClientSideStatus(Status.DefaultSuccess, new Metadata()), new byte[] { 1, 2, 3 }, new Metadata());
+ Assert.IsTrue(resultTask.IsCompleted);
+ Assert.IsTrue(fakeCall.IsDisposed);
+ Assert.AreEqual(Status.DefaultSuccess, asyncCall.GetStatus());
+ }
+
+ [Test]
+ public void AsyncUnary_CompletionFailure()
+ {
+ var resultTask = asyncCall.UnaryCallAsync("abc");
+ fakeCall.UnaryResponseClientHandler(false, new ClientSideStatus(new Status(StatusCode.Internal, ""), null), new byte[] { 1, 2, 3 }, new Metadata());
+
+ Assert.IsTrue(resultTask.IsCompleted);
+ Assert.IsTrue(fakeCall.IsDisposed);
+
+ Assert.AreEqual(StatusCode.Internal, asyncCall.GetStatus().StatusCode);
+ Assert.IsNull(asyncCall.GetTrailers());
+ var ex = Assert.Throws<RpcException>(() => resultTask.GetAwaiter().GetResult());
+ Assert.AreEqual(StatusCode.Internal, ex.Status.StatusCode);
+ }
+
+ internal class FakeNativeCall : INativeCall
+ {
+ public UnaryResponseClientHandler UnaryResponseClientHandler
+ {
+ get;
+ set;
+ }
+
+ public ReceivedStatusOnClientHandler ReceivedStatusOnClientHandler
+ {
+ get;
+ set;
+ }
+
+ public ReceivedMessageHandler ReceivedMessageHandler
+ {
+ get;
+ set;
+ }
+
+ public ReceivedResponseHeadersHandler ReceivedResponseHeadersHandler
+ {
+ get;
+ set;
+ }
+
+ public SendCompletionHandler SendCompletionHandler
+ {
+ get;
+ set;
+ }
+
+ public ReceivedCloseOnServerHandler ReceivedCloseOnServerHandler
+ {
+ get;
+ set;
+ }
+
+ public bool IsCancelled
+ {
+ get;
+ set;
+ }
+
+ public bool IsDisposed
+ {
+ get;
+ set;
+ }
+
+ public void Cancel()
+ {
+ IsCancelled = true;
+ }
+
+ public void CancelWithStatus(Status status)
+ {
+ IsCancelled = true;
+ }
+
+ public string GetPeer()
+ {
+ return "PEER";
+ }
+
+ public void StartUnary(UnaryResponseClientHandler callback, byte[] payload, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags)
+ {
+ UnaryResponseClientHandler = callback;
+ }
+
+ public void StartUnary(BatchContextSafeHandle ctx, byte[] payload, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void StartClientStreaming(UnaryResponseClientHandler callback, MetadataArraySafeHandle metadataArray)
+ {
+ UnaryResponseClientHandler = callback;
+ }
+
+ public void StartServerStreaming(ReceivedStatusOnClientHandler callback, byte[] payload, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags)
+ {
+ ReceivedStatusOnClientHandler = callback;
+ }
+
+ public void StartDuplexStreaming(ReceivedStatusOnClientHandler callback, MetadataArraySafeHandle metadataArray)
+ {
+ ReceivedStatusOnClientHandler = callback;
+ }
+
+ public void StartReceiveMessage(ReceivedMessageHandler callback)
+ {
+ ReceivedMessageHandler = callback;
+ }
+
+ public void StartReceiveInitialMetadata(ReceivedResponseHeadersHandler callback)
+ {
+ ReceivedResponseHeadersHandler = callback;
+ }
+
+ public void StartSendInitialMetadata(SendCompletionHandler callback, MetadataArraySafeHandle metadataArray)
+ {
+ SendCompletionHandler = callback;
+ }
+
+ public void StartSendMessage(SendCompletionHandler callback, byte[] payload, WriteFlags writeFlags, bool sendEmptyInitialMetadata)
+ {
+ SendCompletionHandler = callback;
+ }
+
+ public void StartSendCloseFromClient(SendCompletionHandler callback)
+ {
+ SendCompletionHandler = callback;
+ }
+
+ public void StartSendStatusFromServer(SendCompletionHandler callback, Status status, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata)
+ {
+ SendCompletionHandler = callback;
+ }
+
+ public void StartServerSide(ReceivedCloseOnServerHandler callback)
+ {
+ ReceivedCloseOnServerHandler = callback;
+ }
+
+ public void Dispose()
+ {
+ IsDisposed = true;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/csharp/Grpc.Core.Tests/MarshallingErrorsTest.cs b/src/csharp/Grpc.Core.Tests/MarshallingErrorsTest.cs
new file mode 100644
index 0000000000..83707e0c6d
--- /dev/null
+++ b/src/csharp/Grpc.Core.Tests/MarshallingErrorsTest.cs
@@ -0,0 +1,176 @@
+#region Copyright notice and license
+
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+using Grpc.Core;
+using Grpc.Core.Internal;
+using Grpc.Core.Utils;
+using NUnit.Framework;
+
+namespace Grpc.Core.Tests
+{
+ public class MarshallingErrorsTest
+ {
+ const string Host = "127.0.0.1";
+
+ MockServiceHelper helper;
+ Server server;
+ Channel channel;
+
+ [SetUp]
+ public void Init()
+ {
+ var marshaller = new Marshaller<string>(
+ (str) =>
+ {
+ if (str == "UNSERIALIZABLE_VALUE")
+ {
+ // Google.Protobuf throws exception inherited from IOException
+ throw new IOException("Error serializing the message.");
+ }
+ return System.Text.Encoding.UTF8.GetBytes(str);
+ },
+ (payload) =>
+ {
+ var s = System.Text.Encoding.UTF8.GetString(payload);
+ if (s == "UNPARSEABLE_VALUE")
+ {
+ // Google.Protobuf throws exception inherited from IOException
+ throw new IOException("Error parsing the message.");
+ }
+ return s;
+ });
+ helper = new MockServiceHelper(Host, marshaller);
+ server = helper.GetServer();
+ server.Start();
+ channel = helper.GetChannel();
+ }
+
+ [TearDown]
+ public void Cleanup()
+ {
+ channel.ShutdownAsync().Wait();
+ server.ShutdownAsync().Wait();
+ }
+
+ [Test]
+ public void ResponseParsingError_UnaryResponse()
+ {
+ helper.UnaryHandler = new UnaryServerMethod<string, string>((request, context) =>
+ {
+ return Task.FromResult("UNPARSEABLE_VALUE");
+ });
+
+ var ex = Assert.Throws<RpcException>(() => Calls.BlockingUnaryCall(helper.CreateUnaryCall(), "REQUEST"));
+ Assert.AreEqual(StatusCode.Internal, ex.Status.StatusCode);
+ }
+
+ [Test]
+ public void ResponseParsingError_StreamingResponse()
+ {
+ helper.ServerStreamingHandler = new ServerStreamingServerMethod<string, string>(async (request, responseStream, context) =>
+ {
+ await responseStream.WriteAsync("UNPARSEABLE_VALUE");
+ await Task.Delay(10000);
+ });
+
+ var call = Calls.AsyncServerStreamingCall(helper.CreateServerStreamingCall(), "REQUEST");
+ var ex = Assert.Throws<RpcException>(async () => await call.ResponseStream.MoveNext());
+ Assert.AreEqual(StatusCode.Internal, ex.Status.StatusCode);
+ }
+
+ [Test]
+ public void RequestParsingError_UnaryRequest()
+ {
+ helper.UnaryHandler = new UnaryServerMethod<string, string>((request, context) =>
+ {
+ return Task.FromResult("RESPONSE");
+ });
+
+ var ex = Assert.Throws<RpcException>(() => Calls.BlockingUnaryCall(helper.CreateUnaryCall(), "UNPARSEABLE_VALUE"));
+ // Spec doesn't define the behavior. With the current implementation server handler throws exception which results in StatusCode.Unknown.
+ Assert.AreEqual(StatusCode.Unknown, ex.Status.StatusCode);
+ }
+
+ [Test]
+ public async Task RequestParsingError_StreamingRequest()
+ {
+ helper.ClientStreamingHandler = new ClientStreamingServerMethod<string, string>(async (requestStream, context) =>
+ {
+ Assert.Throws<IOException>(async () => await requestStream.MoveNext());
+ return "RESPONSE";
+ });
+
+ var call = Calls.AsyncClientStreamingCall(helper.CreateClientStreamingCall());
+ await call.RequestStream.WriteAsync("UNPARSEABLE_VALUE");
+
+ Assert.AreEqual("RESPONSE", await call);
+ }
+
+ [Test]
+ public void RequestSerializationError_BlockingUnary()
+ {
+ Assert.Throws<IOException>(() => Calls.BlockingUnaryCall(helper.CreateUnaryCall(), "UNSERIALIZABLE_VALUE"));
+ }
+
+ [Test]
+ public void RequestSerializationError_AsyncUnary()
+ {
+ Assert.Throws<IOException>(async () => await Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "UNSERIALIZABLE_VALUE"));
+ }
+
+ [Test]
+ public async Task RequestSerializationError_ClientStreaming()
+ {
+ helper.ClientStreamingHandler = new ClientStreamingServerMethod<string, string>(async (requestStream, context) =>
+ {
+ CollectionAssert.AreEqual(new [] {"A", "B"}, await requestStream.ToListAsync());
+ return "RESPONSE";
+ });
+ var call = Calls.AsyncClientStreamingCall(helper.CreateClientStreamingCall());
+ await call.RequestStream.WriteAsync("A");
+ Assert.Throws<IOException>(async () => await call.RequestStream.WriteAsync("UNSERIALIZABLE_VALUE"));
+ await call.RequestStream.WriteAsync("B");
+ await call.RequestStream.CompleteAsync();
+
+ Assert.AreEqual("RESPONSE", await call);
+ }
+ }
+}
diff --git a/src/csharp/Grpc.Core.Tests/MetadataTest.cs b/src/csharp/Grpc.Core.Tests/MetadataTest.cs
index c00f945d6a..ddeb7d0926 100644
--- a/src/csharp/Grpc.Core.Tests/MetadataTest.cs
+++ b/src/csharp/Grpc.Core.Tests/MetadataTest.cs
@@ -75,6 +75,17 @@ namespace Grpc.Core.Tests
}
[Test]
+ public void AsciiEntry_KeyValidity()
+ {
+ new Metadata.Entry("ABC", "XYZ");
+ new Metadata.Entry("0123456789abc", "XYZ");
+ new Metadata.Entry("-abc", "XYZ");
+ new Metadata.Entry("a_bc_", "XYZ");
+ Assert.Throws(typeof(ArgumentException), () => new Metadata.Entry("abc[", "xyz"));
+ Assert.Throws(typeof(ArgumentException), () => new Metadata.Entry("abc/", "xyz"));
+ }
+
+ [Test]
public void Entry_ConstructionPreconditions()
{
Assert.Throws(typeof(ArgumentNullException), () => new Metadata.Entry(null, "xyz"));
diff --git a/src/csharp/Grpc.Core.Tests/MockServiceHelper.cs b/src/csharp/Grpc.Core.Tests/MockServiceHelper.cs
index bb69648d8b..765732c768 100644
--- a/src/csharp/Grpc.Core.Tests/MockServiceHelper.cs
+++ b/src/csharp/Grpc.Core.Tests/MockServiceHelper.cs
@@ -50,37 +50,14 @@ namespace Grpc.Core.Tests
{
public const string ServiceName = "tests.Test";
- public static readonly Method<string, string> UnaryMethod = new Method<string, string>(
- MethodType.Unary,
- ServiceName,
- "Unary",
- Marshallers.StringMarshaller,
- Marshallers.StringMarshaller);
-
- public static readonly Method<string, string> ClientStreamingMethod = new Method<string, string>(
- MethodType.ClientStreaming,
- ServiceName,
- "ClientStreaming",
- Marshallers.StringMarshaller,
- Marshallers.StringMarshaller);
-
- public static readonly Method<string, string> ServerStreamingMethod = new Method<string, string>(
- MethodType.ServerStreaming,
- ServiceName,
- "ServerStreaming",
- Marshallers.StringMarshaller,
- Marshallers.StringMarshaller);
-
- public static readonly Method<string, string> DuplexStreamingMethod = new Method<string, string>(
- MethodType.DuplexStreaming,
- ServiceName,
- "DuplexStreaming",
- Marshallers.StringMarshaller,
- Marshallers.StringMarshaller);
-
readonly string host;
readonly ServerServiceDefinition serviceDefinition;
+ readonly Method<string, string> unaryMethod;
+ readonly Method<string, string> clientStreamingMethod;
+ readonly Method<string, string> serverStreamingMethod;
+ readonly Method<string, string> duplexStreamingMethod;
+
UnaryServerMethod<string, string> unaryHandler;
ClientStreamingServerMethod<string, string> clientStreamingHandler;
ServerStreamingServerMethod<string, string> serverStreamingHandler;
@@ -89,15 +66,44 @@ namespace Grpc.Core.Tests
Server server;
Channel channel;
- public MockServiceHelper(string host = null)
+ public MockServiceHelper(string host = null, Marshaller<string> marshaller = null)
{
this.host = host ?? "localhost";
+ marshaller = marshaller ?? Marshallers.StringMarshaller;
+
+ unaryMethod = new Method<string, string>(
+ MethodType.Unary,
+ ServiceName,
+ "Unary",
+ marshaller,
+ marshaller);
+
+ clientStreamingMethod = new Method<string, string>(
+ MethodType.ClientStreaming,
+ ServiceName,
+ "ClientStreaming",
+ marshaller,
+ marshaller);
+
+ serverStreamingMethod = new Method<string, string>(
+ MethodType.ServerStreaming,
+ ServiceName,
+ "ServerStreaming",
+ marshaller,
+ marshaller);
+
+ duplexStreamingMethod = new Method<string, string>(
+ MethodType.DuplexStreaming,
+ ServiceName,
+ "DuplexStreaming",
+ marshaller,
+ marshaller);
serviceDefinition = ServerServiceDefinition.CreateBuilder(ServiceName)
- .AddMethod(UnaryMethod, (request, context) => unaryHandler(request, context))
- .AddMethod(ClientStreamingMethod, (requestStream, context) => clientStreamingHandler(requestStream, context))
- .AddMethod(ServerStreamingMethod, (request, responseStream, context) => serverStreamingHandler(request, responseStream, context))
- .AddMethod(DuplexStreamingMethod, (requestStream, responseStream, context) => duplexStreamingHandler(requestStream, responseStream, context))
+ .AddMethod(unaryMethod, (request, context) => unaryHandler(request, context))
+ .AddMethod(clientStreamingMethod, (requestStream, context) => clientStreamingHandler(requestStream, context))
+ .AddMethod(serverStreamingMethod, (request, responseStream, context) => serverStreamingHandler(request, responseStream, context))
+ .AddMethod(duplexStreamingMethod, (requestStream, responseStream, context) => duplexStreamingHandler(requestStream, responseStream, context))
.Build();
var defaultStatus = new Status(StatusCode.Unknown, "Default mock implementation. Please provide your own.");
@@ -155,22 +161,22 @@ namespace Grpc.Core.Tests
public CallInvocationDetails<string, string> CreateUnaryCall(CallOptions options = default(CallOptions))
{
- return new CallInvocationDetails<string, string>(channel, UnaryMethod, options);
+ return new CallInvocationDetails<string, string>(channel, unaryMethod, options);
}
public CallInvocationDetails<string, string> CreateClientStreamingCall(CallOptions options = default(CallOptions))
{
- return new CallInvocationDetails<string, string>(channel, ClientStreamingMethod, options);
+ return new CallInvocationDetails<string, string>(channel, clientStreamingMethod, options);
}
public CallInvocationDetails<string, string> CreateServerStreamingCall(CallOptions options = default(CallOptions))
{
- return new CallInvocationDetails<string, string>(channel, ServerStreamingMethod, options);
+ return new CallInvocationDetails<string, string>(channel, serverStreamingMethod, options);
}
public CallInvocationDetails<string, string> CreateDuplexStreamingCall(CallOptions options = default(CallOptions))
{
- return new CallInvocationDetails<string, string>(channel, DuplexStreamingMethod, options);
+ return new CallInvocationDetails<string, string>(channel, duplexStreamingMethod, options);
}
public string Host
diff --git a/src/csharp/Grpc.Core.Tests/ResponseHeadersTest.cs b/src/csharp/Grpc.Core.Tests/ResponseHeadersTest.cs
index 706006702e..a1648f3671 100644
--- a/src/csharp/Grpc.Core.Tests/ResponseHeadersTest.cs
+++ b/src/csharp/Grpc.Core.Tests/ResponseHeadersTest.cs
@@ -32,13 +32,16 @@
#endregion
using System;
+using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+
using Grpc.Core;
using Grpc.Core.Internal;
using Grpc.Core.Utils;
+
using NUnit.Framework;
namespace Grpc.Core.Tests
@@ -74,6 +77,80 @@ namespace Grpc.Core.Tests
}
[Test]
+ public async Task ResponseHeadersAsync_UnaryCall()
+ {
+ helper.UnaryHandler = new UnaryServerMethod<string, string>(async (request, context) =>
+ {
+ await context.WriteResponseHeadersAsync(headers);
+ return "PASS";
+ });
+
+ var call = Calls.AsyncUnaryCall(helper.CreateUnaryCall(), "");
+ var responseHeaders = await call.ResponseHeadersAsync;
+
+ Assert.AreEqual(headers.Count, responseHeaders.Count);
+ Assert.AreEqual("ascii-header", responseHeaders[0].Key);
+ Assert.AreEqual("abcdefg", responseHeaders[0].Value);
+
+ Assert.AreEqual("PASS", await call.ResponseAsync);
+ }
+
+ [Test]
+ public async Task ResponseHeadersAsync_ClientStreamingCall()
+ {
+ helper.ClientStreamingHandler = new ClientStreamingServerMethod<string, string>(async (requestStream, context) =>
+ {
+ await context.WriteResponseHeadersAsync(headers);
+ return "PASS";
+ });
+
+ var call = Calls.AsyncClientStreamingCall(helper.CreateClientStreamingCall());
+ await call.RequestStream.CompleteAsync();
+ var responseHeaders = await call.ResponseHeadersAsync;
+
+ Assert.AreEqual("ascii-header", responseHeaders[0].Key);
+ Assert.AreEqual("PASS", await call.ResponseAsync);
+ }
+
+ [Test]
+ public async Task ResponseHeadersAsync_ServerStreamingCall()
+ {
+ helper.ServerStreamingHandler = new ServerStreamingServerMethod<string, string>(async (request, responseStream, context) =>
+ {
+ await context.WriteResponseHeadersAsync(headers);
+ await responseStream.WriteAsync("PASS");
+ });
+
+ var call = Calls.AsyncServerStreamingCall(helper.CreateServerStreamingCall(), "");
+ var responseHeaders = await call.ResponseHeadersAsync;
+
+ Assert.AreEqual("ascii-header", responseHeaders[0].Key);
+ CollectionAssert.AreEqual(new[] { "PASS" }, await call.ResponseStream.ToListAsync());
+ }
+
+ [Test]
+ public async Task ResponseHeadersAsync_DuplexStreamingCall()
+ {
+ helper.DuplexStreamingHandler = new DuplexStreamingServerMethod<string, string>(async (requestStream, responseStream, context) =>
+ {
+ await context.WriteResponseHeadersAsync(headers);
+ while (await requestStream.MoveNext())
+ {
+ await responseStream.WriteAsync(requestStream.Current);
+ }
+ });
+
+ var call = Calls.AsyncDuplexStreamingCall(helper.CreateDuplexStreamingCall());
+ var responseHeaders = await call.ResponseHeadersAsync;
+
+ var messages = new[] { "PASS" };
+ await call.RequestStream.WriteAllAsync(messages);
+
+ Assert.AreEqual("ascii-header", responseHeaders[0].Key);
+ CollectionAssert.AreEqual(messages, await call.ResponseStream.ToListAsync());
+ }
+
+ [Test]
public void WriteResponseHeaders_NullNotAllowed()
{
helper.UnaryHandler = new UnaryServerMethod<string, string>(async (request, context) =>
diff --git a/src/csharp/Grpc.Core/AsyncClientStreamingCall.cs b/src/csharp/Grpc.Core/AsyncClientStreamingCall.cs
index fb9b562c77..5646fed3d9 100644
--- a/src/csharp/Grpc.Core/AsyncClientStreamingCall.cs
+++ b/src/csharp/Grpc.Core/AsyncClientStreamingCall.cs
@@ -40,18 +40,22 @@ namespace Grpc.Core
/// <summary>
/// Return type for client streaming calls.
/// </summary>
+ /// <typeparam name="TRequest">Request message type for this call.</typeparam>
+ /// <typeparam name="TResponse">Response message type for this call.</typeparam>
public sealed class AsyncClientStreamingCall<TRequest, TResponse> : IDisposable
{
readonly IClientStreamWriter<TRequest> requestStream;
readonly Task<TResponse> responseAsync;
+ readonly Task<Metadata> responseHeadersAsync;
readonly Func<Status> getStatusFunc;
readonly Func<Metadata> getTrailersFunc;
readonly Action disposeAction;
- public AsyncClientStreamingCall(IClientStreamWriter<TRequest> requestStream, Task<TResponse> responseAsync, Func<Status> getStatusFunc, Func<Metadata> getTrailersFunc, Action disposeAction)
+ internal AsyncClientStreamingCall(IClientStreamWriter<TRequest> requestStream, Task<TResponse> responseAsync, Task<Metadata> responseHeadersAsync, Func<Status> getStatusFunc, Func<Metadata> getTrailersFunc, Action disposeAction)
{
this.requestStream = requestStream;
this.responseAsync = responseAsync;
+ this.responseHeadersAsync = responseHeadersAsync;
this.getStatusFunc = getStatusFunc;
this.getTrailersFunc = getTrailersFunc;
this.disposeAction = disposeAction;
@@ -69,6 +73,17 @@ namespace Grpc.Core
}
/// <summary>
+ /// Asynchronous access to response headers.
+ /// </summary>
+ public Task<Metadata> ResponseHeadersAsync
+ {
+ get
+ {
+ return this.responseHeadersAsync;
+ }
+ }
+
+ /// <summary>
/// Async stream to send streaming requests.
/// </summary>
public IClientStreamWriter<TRequest> RequestStream
diff --git a/src/csharp/Grpc.Core/AsyncDuplexStreamingCall.cs b/src/csharp/Grpc.Core/AsyncDuplexStreamingCall.cs
index 183c84216a..e75108c7e5 100644
--- a/src/csharp/Grpc.Core/AsyncDuplexStreamingCall.cs
+++ b/src/csharp/Grpc.Core/AsyncDuplexStreamingCall.cs
@@ -32,24 +32,29 @@
#endregion
using System;
+using System.Threading.Tasks;
namespace Grpc.Core
{
/// <summary>
/// Return type for bidirectional streaming calls.
/// </summary>
+ /// <typeparam name="TRequest">Request message type for this call.</typeparam>
+ /// <typeparam name="TResponse">Response message type for this call.</typeparam>
public sealed class AsyncDuplexStreamingCall<TRequest, TResponse> : IDisposable
{
readonly IClientStreamWriter<TRequest> requestStream;
readonly IAsyncStreamReader<TResponse> responseStream;
+ readonly Task<Metadata> responseHeadersAsync;
readonly Func<Status> getStatusFunc;
readonly Func<Metadata> getTrailersFunc;
readonly Action disposeAction;
- public AsyncDuplexStreamingCall(IClientStreamWriter<TRequest> requestStream, IAsyncStreamReader<TResponse> responseStream, Func<Status> getStatusFunc, Func<Metadata> getTrailersFunc, Action disposeAction)
+ internal AsyncDuplexStreamingCall(IClientStreamWriter<TRequest> requestStream, IAsyncStreamReader<TResponse> responseStream, Task<Metadata> responseHeadersAsync, Func<Status> getStatusFunc, Func<Metadata> getTrailersFunc, Action disposeAction)
{
this.requestStream = requestStream;
this.responseStream = responseStream;
+ this.responseHeadersAsync = responseHeadersAsync;
this.getStatusFunc = getStatusFunc;
this.getTrailersFunc = getTrailersFunc;
this.disposeAction = disposeAction;
@@ -78,6 +83,17 @@ namespace Grpc.Core
}
/// <summary>
+ /// Asynchronous access to response headers.
+ /// </summary>
+ public Task<Metadata> ResponseHeadersAsync
+ {
+ get
+ {
+ return this.responseHeadersAsync;
+ }
+ }
+
+ /// <summary>
/// Gets the call status if the call has already finished.
/// Throws InvalidOperationException otherwise.
/// </summary>
diff --git a/src/csharp/Grpc.Core/AsyncServerStreamingCall.cs b/src/csharp/Grpc.Core/AsyncServerStreamingCall.cs
index ab2049f269..f953091984 100644
--- a/src/csharp/Grpc.Core/AsyncServerStreamingCall.cs
+++ b/src/csharp/Grpc.Core/AsyncServerStreamingCall.cs
@@ -32,22 +32,26 @@
#endregion
using System;
+using System.Threading.Tasks;
namespace Grpc.Core
{
/// <summary>
/// Return type for server streaming calls.
/// </summary>
+ /// <typeparam name="TResponse">Response message type for this call.</typeparam>
public sealed class AsyncServerStreamingCall<TResponse> : IDisposable
{
readonly IAsyncStreamReader<TResponse> responseStream;
+ readonly Task<Metadata> responseHeadersAsync;
readonly Func<Status> getStatusFunc;
readonly Func<Metadata> getTrailersFunc;
readonly Action disposeAction;
- public AsyncServerStreamingCall(IAsyncStreamReader<TResponse> responseStream, Func<Status> getStatusFunc, Func<Metadata> getTrailersFunc, Action disposeAction)
+ internal AsyncServerStreamingCall(IAsyncStreamReader<TResponse> responseStream, Task<Metadata> responseHeadersAsync, Func<Status> getStatusFunc, Func<Metadata> getTrailersFunc, Action disposeAction)
{
this.responseStream = responseStream;
+ this.responseHeadersAsync = responseHeadersAsync;
this.getStatusFunc = getStatusFunc;
this.getTrailersFunc = getTrailersFunc;
this.disposeAction = disposeAction;
@@ -65,6 +69,17 @@ namespace Grpc.Core
}
/// <summary>
+ /// Asynchronous access to response headers.
+ /// </summary>
+ public Task<Metadata> ResponseHeadersAsync
+ {
+ get
+ {
+ return this.responseHeadersAsync;
+ }
+ }
+
+ /// <summary>
/// Gets the call status if the call has already finished.
/// Throws InvalidOperationException otherwise.
/// </summary>
diff --git a/src/csharp/Grpc.Core/AsyncUnaryCall.cs b/src/csharp/Grpc.Core/AsyncUnaryCall.cs
index 224e343916..97df8f5e91 100644
--- a/src/csharp/Grpc.Core/AsyncUnaryCall.cs
+++ b/src/csharp/Grpc.Core/AsyncUnaryCall.cs
@@ -40,16 +40,19 @@ namespace Grpc.Core
/// <summary>
/// Return type for single request - single response call.
/// </summary>
+ /// <typeparam name="TResponse">Response message type for this call.</typeparam>
public sealed class AsyncUnaryCall<TResponse> : IDisposable
{
readonly Task<TResponse> responseAsync;
+ readonly Task<Metadata> responseHeadersAsync;
readonly Func<Status> getStatusFunc;
readonly Func<Metadata> getTrailersFunc;
readonly Action disposeAction;
- public AsyncUnaryCall(Task<TResponse> responseAsync, Func<Status> getStatusFunc, Func<Metadata> getTrailersFunc, Action disposeAction)
+ internal AsyncUnaryCall(Task<TResponse> responseAsync, Task<Metadata> responseHeadersAsync, Func<Status> getStatusFunc, Func<Metadata> getTrailersFunc, Action disposeAction)
{
this.responseAsync = responseAsync;
+ this.responseHeadersAsync = responseHeadersAsync;
this.getStatusFunc = getStatusFunc;
this.getTrailersFunc = getTrailersFunc;
this.disposeAction = disposeAction;
@@ -67,6 +70,17 @@ namespace Grpc.Core
}
/// <summary>
+ /// Asynchronous access to response headers.
+ /// </summary>
+ public Task<Metadata> ResponseHeadersAsync
+ {
+ get
+ {
+ return this.responseHeadersAsync;
+ }
+ }
+
+ /// <summary>
/// Allows awaiting this object directly.
/// </summary>
public TaskAwaiter<TResponse> GetAwaiter()
diff --git a/src/csharp/Grpc.Core/CallInvocationDetails.cs b/src/csharp/Grpc.Core/CallInvocationDetails.cs
index 6565073fc5..8228b8f317 100644
--- a/src/csharp/Grpc.Core/CallInvocationDetails.cs
+++ b/src/csharp/Grpc.Core/CallInvocationDetails.cs
@@ -40,6 +40,8 @@ namespace Grpc.Core
/// <summary>
/// Details about a client-side call to be invoked.
/// </summary>
+ /// <typeparam name="TRequest">Request message type for the call.</typeparam>
+ /// <typeparam name="TResponse">Response message type for the call.</typeparam>
public struct CallInvocationDetails<TRequest, TResponse>
{
readonly Channel channel;
@@ -50,7 +52,7 @@ namespace Grpc.Core
CallOptions options;
/// <summary>
- /// Initializes a new instance of the <see cref="Grpc.Core.CallInvocationDetails`2"/> struct.
+ /// Initializes a new instance of the <see cref="Grpc.Core.CallInvocationDetails{TRequest,TResponse}"/> struct.
/// </summary>
/// <param name="channel">Channel to use for this call.</param>
/// <param name="method">Method to call.</param>
@@ -61,7 +63,7 @@ namespace Grpc.Core
}
/// <summary>
- /// Initializes a new instance of the <see cref="Grpc.Core.CallInvocationDetails`2"/> struct.
+ /// Initializes a new instance of the <see cref="Grpc.Core.CallInvocationDetails{TRequest,TResponse}"/> struct.
/// </summary>
/// <param name="channel">Channel to use for this call.</param>
/// <param name="method">Method to call.</param>
@@ -73,7 +75,7 @@ namespace Grpc.Core
}
/// <summary>
- /// Initializes a new instance of the <see cref="Grpc.Core.CallInvocationDetails`2"/> struct.
+ /// Initializes a new instance of the <see cref="Grpc.Core.CallInvocationDetails{TRequest,TResponse}"/> struct.
/// </summary>
/// <param name="channel">Channel to use for this call.</param>
/// <param name="method">Qualified method name.</param>
@@ -158,7 +160,7 @@ namespace Grpc.Core
}
/// <summary>
- /// Returns new instance of <see cref="CallInvocationDetails"/> with
+ /// Returns new instance of <see cref="CallInvocationDetails{TRequest, TResponse}"/> with
/// <c>Options</c> set to the value provided. Values of all other fields are preserved.
/// </summary>
public CallInvocationDetails<TRequest, TResponse> WithOptions(CallOptions options)
diff --git a/src/csharp/Grpc.Core/CallOptions.cs b/src/csharp/Grpc.Core/CallOptions.cs
index 3dfe80b48c..c3bc9c3156 100644
--- a/src/csharp/Grpc.Core/CallOptions.cs
+++ b/src/csharp/Grpc.Core/CallOptions.cs
@@ -118,6 +118,7 @@ namespace Grpc.Core
/// Returns new instance of <see cref="CallOptions"/> with
/// <c>Headers</c> set to the value provided. Values of all other fields are preserved.
/// </summary>
+ /// <param name="headers">The headers.</param>
public CallOptions WithHeaders(Metadata headers)
{
var newOptions = this;
@@ -129,6 +130,7 @@ namespace Grpc.Core
/// Returns new instance of <see cref="CallOptions"/> with
/// <c>Deadline</c> set to the value provided. Values of all other fields are preserved.
/// </summary>
+ /// <param name="deadline">The deadline.</param>
public CallOptions WithDeadline(DateTime deadline)
{
var newOptions = this;
@@ -140,6 +142,7 @@ namespace Grpc.Core
/// Returns new instance of <see cref="CallOptions"/> with
/// <c>CancellationToken</c> set to the value provided. Values of all other fields are preserved.
/// </summary>
+ /// <param name="cancellationToken">The cancellation token.</param>
public CallOptions WithCancellationToken(CancellationToken cancellationToken)
{
var newOptions = this;
diff --git a/src/csharp/Grpc.Core/Calls.cs b/src/csharp/Grpc.Core/Calls.cs
index 7067456638..94b3c2fe65 100644
--- a/src/csharp/Grpc.Core/Calls.cs
+++ b/src/csharp/Grpc.Core/Calls.cs
@@ -74,7 +74,7 @@ namespace Grpc.Core
{
var asyncCall = new AsyncCall<TRequest, TResponse>(call);
var asyncResult = asyncCall.UnaryCallAsync(req);
- return new AsyncUnaryCall<TResponse>(asyncResult, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel);
+ return new AsyncUnaryCall<TResponse>(asyncResult, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel);
}
/// <summary>
@@ -93,13 +93,14 @@ namespace Grpc.Core
var asyncCall = new AsyncCall<TRequest, TResponse>(call);
asyncCall.StartServerStreamingCall(req);
var responseStream = new ClientResponseStream<TRequest, TResponse>(asyncCall);
- return new AsyncServerStreamingCall<TResponse>(responseStream, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel);
+ return new AsyncServerStreamingCall<TResponse>(responseStream, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel);
}
/// <summary>
/// Invokes a client streaming call asynchronously.
/// In client streaming scenario, client sends a stream of requests and server responds with a single response.
/// </summary>
+ /// <param name="call">The call defintion.</param>
/// <returns>An awaitable call object providing access to the response.</returns>
/// <typeparam name="TRequest">Type of request messages.</typeparam>
/// <typeparam name="TResponse">The of response message.</typeparam>
@@ -110,7 +111,7 @@ namespace Grpc.Core
var asyncCall = new AsyncCall<TRequest, TResponse>(call);
var resultTask = asyncCall.ClientStreamingCallAsync();
var requestStream = new ClientRequestStream<TRequest, TResponse>(asyncCall);
- return new AsyncClientStreamingCall<TRequest, TResponse>(requestStream, resultTask, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel);
+ return new AsyncClientStreamingCall<TRequest, TResponse>(requestStream, resultTask, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel);
}
/// <summary>
@@ -130,7 +131,7 @@ namespace Grpc.Core
asyncCall.StartDuplexStreamingCall();
var requestStream = new ClientRequestStream<TRequest, TResponse>(asyncCall);
var responseStream = new ClientResponseStream<TRequest, TResponse>(asyncCall);
- return new AsyncDuplexStreamingCall<TRequest, TResponse>(requestStream, responseStream, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel);
+ return new AsyncDuplexStreamingCall<TRequest, TResponse>(requestStream, responseStream, asyncCall.ResponseHeadersAsync, asyncCall.GetStatus, asyncCall.GetTrailers, asyncCall.Cancel);
}
}
}
diff --git a/src/csharp/Grpc.Core/Channel.cs b/src/csharp/Grpc.Core/Channel.cs
index 2f8519dfa3..f1942727cd 100644
--- a/src/csharp/Grpc.Core/Channel.cs
+++ b/src/csharp/Grpc.Core/Channel.cs
@@ -43,7 +43,9 @@ using Grpc.Core.Utils;
namespace Grpc.Core
{
/// <summary>
- /// gRPC Channel
+ /// Represents a gRPC channel. Channels are an abstraction of long-lived connections to remote servers.
+ /// 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.
/// </summary>
public class Channel
{
@@ -58,7 +60,6 @@ namespace Grpc.Core
readonly List<ChannelOption> options;
bool shutdownRequested;
- bool disposed;
/// <summary>
/// Creates a channel that connects to a specific host.
@@ -162,6 +163,7 @@ namespace Grpc.Core
/// There is no need to call this explicitly unless your use case requires that.
/// Starting an RPC on a new channel will request connection implicitly.
/// </summary>
+ /// <param name="deadline">The deadline. <c>null</c> indicates no deadline.</param>
public async Task ConnectAsync(DateTime? deadline = null)
{
var currentState = handle.CheckConnectivityState(true);
diff --git a/src/csharp/Grpc.Core/ChannelOptions.cs b/src/csharp/Grpc.Core/ChannelOptions.cs
index ad54b46ad5..f5ef63af54 100644
--- a/src/csharp/Grpc.Core/ChannelOptions.cs
+++ b/src/csharp/Grpc.Core/ChannelOptions.cs
@@ -44,9 +44,19 @@ namespace Grpc.Core
/// </summary>
public sealed class ChannelOption
{
+ /// <summary>
+ /// Type of <c>ChannelOption</c>.
+ /// </summary>
public enum OptionType
{
+ /// <summary>
+ /// Channel option with integer value.
+ /// </summary>
Integer,
+
+ /// <summary>
+ /// Channel option with string value.
+ /// </summary>
String
}
@@ -79,6 +89,9 @@ namespace Grpc.Core
this.intValue = intValue;
}
+ /// <summary>
+ /// Gets the type of the <c>ChannelOption</c>.
+ /// </summary>
public OptionType Type
{
get
@@ -87,6 +100,9 @@ namespace Grpc.Core
}
}
+ /// <summary>
+ /// Gets the name of the <c>ChannelOption</c>.
+ /// </summary>
public string Name
{
get
@@ -95,6 +111,9 @@ namespace Grpc.Core
}
}
+ /// <summary>
+ /// Gets the integer value the <c>ChannelOption</c>.
+ /// </summary>
public int IntValue
{
get
@@ -104,6 +123,9 @@ namespace Grpc.Core
}
}
+ /// <summary>
+ /// Gets the string value the <c>ChannelOption</c>.
+ /// </summary>
public string StringValue
{
get
@@ -140,7 +162,7 @@ namespace Grpc.Core
/// <summary>Primary user agent: goes at the start of the user-agent metadata</summary>
public const string PrimaryUserAgentString = "grpc.primary_user_agent";
- /// <summary> Secondary user agent: goes at the end of the user-agent metadata</summary>
+ /// <summary>Secondary user agent: goes at the end of the user-agent metadata</summary>
public const string SecondaryUserAgentString = "grpc.secondary_user_agent";
/// <summary>
diff --git a/src/csharp/Grpc.Core/ClientBase.cs b/src/csharp/Grpc.Core/ClientBase.cs
index 903449439b..f4533e735c 100644
--- a/src/csharp/Grpc.Core/ClientBase.cs
+++ b/src/csharp/Grpc.Core/ClientBase.cs
@@ -53,6 +53,10 @@ namespace Grpc.Core
readonly Channel channel;
readonly string authUriBase;
+ /// <summary>
+ /// Initializes a new instance of <c>ClientBase</c> class.
+ /// </summary>
+ /// <param name="channel">The channel to use for remote call invocation.</param>
public ClientBase(Channel channel)
{
this.channel = channel;
@@ -95,6 +99,11 @@ namespace Grpc.Core
/// <summary>
/// Creates a new call to given method.
/// </summary>
+ /// <param name="method">The method to invoke.</param>
+ /// <param name="options">The call options.</param>
+ /// <typeparam name="TRequest">Request message type.</typeparam>
+ /// <typeparam name="TResponse">Response message type.</typeparam>
+ /// <returns>The call invocation details.</returns>
protected CallInvocationDetails<TRequest, TResponse> CreateCall<TRequest, TResponse>(Method<TRequest, TResponse> method, CallOptions options)
where TRequest : class
where TResponse : class
diff --git a/src/csharp/Grpc.Core/ContextPropagationToken.cs b/src/csharp/Grpc.Core/ContextPropagationToken.cs
index a5bf1b5a70..1d899b97fd 100644
--- a/src/csharp/Grpc.Core/ContextPropagationToken.cs
+++ b/src/csharp/Grpc.Core/ContextPropagationToken.cs
@@ -44,8 +44,8 @@ namespace Grpc.Core
/// In situations when a backend is making calls to another backend,
/// it makes sense to propagate properties like deadline and cancellation
/// token of the server call to the child call.
- /// C core provides some other contexts (like tracing context) that
- /// are not accessible to C# layer, but this token still allows propagating them.
+ /// The gRPC native layer provides some other contexts (like tracing context) that
+ /// are not accessible to explicitly C# layer, but this token still allows propagating them.
/// </summary>
public class ContextPropagationToken
{
@@ -143,13 +143,13 @@ namespace Grpc.Core
this.propagateCancellation = propagateCancellation;
}
- /// <value><c>true</c> if parent call's deadline should be propagated to the child call.</value>
+ /// <summary><c>true</c> if parent call's deadline should be propagated to the child call.</summary>
public bool IsPropagateDeadline
{
get { return this.propagateDeadline; }
}
- /// <value><c>true</c> if parent call's cancellation token should be propagated to the child call.</value>
+ /// <summary><c>true</c> if parent call's cancellation token should be propagated to the child call.</summary>
public bool IsPropagateCancellation
{
get { return this.propagateCancellation; }
diff --git a/src/csharp/Grpc.Core/Grpc.Core.csproj b/src/csharp/Grpc.Core/Grpc.Core.csproj
index 055aff1444..ad2af17bc7 100644
--- a/src/csharp/Grpc.Core/Grpc.Core.csproj
+++ b/src/csharp/Grpc.Core/Grpc.Core.csproj
@@ -49,6 +49,7 @@
<Compile Include="AsyncDuplexStreamingCall.cs" />
<Compile Include="AsyncServerStreamingCall.cs" />
<Compile Include="IClientStreamWriter.cs" />
+ <Compile Include="Internal\INativeCall.cs" />
<Compile Include="IServerStreamWriter.cs" />
<Compile Include="IAsyncStreamWriter.cs" />
<Compile Include="IAsyncStreamReader.cs" />
diff --git a/src/csharp/Grpc.Core/GrpcEnvironment.cs b/src/csharp/Grpc.Core/GrpcEnvironment.cs
index 0a44eead74..e7c04185c2 100644
--- a/src/csharp/Grpc.Core/GrpcEnvironment.cs
+++ b/src/csharp/Grpc.Core/GrpcEnvironment.cs
@@ -102,6 +102,14 @@ namespace Grpc.Core
}
}
+ internal static int GetRefCount()
+ {
+ lock (staticLock)
+ {
+ return refCount;
+ }
+ }
+
/// <summary>
/// Gets application-wide logger used by gRPC.
/// </summary>
@@ -177,7 +185,6 @@ namespace Grpc.Core
return Marshal.PtrToStringAnsi(ptr);
}
-
internal static void GrpcNativeInit()
{
grpcsharp_init();
diff --git a/src/csharp/Grpc.Core/IAsyncStreamReader.cs b/src/csharp/Grpc.Core/IAsyncStreamReader.cs
index c0a0674e50..49e1ea7832 100644
--- a/src/csharp/Grpc.Core/IAsyncStreamReader.cs
+++ b/src/csharp/Grpc.Core/IAsyncStreamReader.cs
@@ -42,7 +42,7 @@ namespace Grpc.Core
/// <summary>
/// A stream of messages to be read.
/// </summary>
- /// <typeparam name="T"></typeparam>
+ /// <typeparam name="T">The message type.</typeparam>
public interface IAsyncStreamReader<T> : IAsyncEnumerator<T>
{
// TODO(jtattermusch): consider just using IAsyncEnumerator instead of this interface.
diff --git a/src/csharp/Grpc.Core/IAsyncStreamWriter.cs b/src/csharp/Grpc.Core/IAsyncStreamWriter.cs
index 4e2acb9c71..9c0d2d312e 100644
--- a/src/csharp/Grpc.Core/IAsyncStreamWriter.cs
+++ b/src/csharp/Grpc.Core/IAsyncStreamWriter.cs
@@ -42,7 +42,7 @@ namespace Grpc.Core
/// <summary>
/// A writable stream of messages.
/// </summary>
- /// <typeparam name="T"></typeparam>
+ /// <typeparam name="T">The message type.</typeparam>
public interface IAsyncStreamWriter<T>
{
/// <summary>
@@ -56,7 +56,7 @@ namespace Grpc.Core
/// If null, default options will be used.
/// Once set, this property maintains its value across subsequent
/// writes.
- /// <value>The write options.</value>
+ /// </summary>
WriteOptions WriteOptions { get; set; }
}
}
diff --git a/src/csharp/Grpc.Core/IClientStreamWriter.cs b/src/csharp/Grpc.Core/IClientStreamWriter.cs
index a3028bc374..3fd0774db5 100644
--- a/src/csharp/Grpc.Core/IClientStreamWriter.cs
+++ b/src/csharp/Grpc.Core/IClientStreamWriter.cs
@@ -42,7 +42,7 @@ namespace Grpc.Core
/// <summary>
/// Client-side writable stream of messages with Close capability.
/// </summary>
- /// <typeparam name="T"></typeparam>
+ /// <typeparam name="T">The message type.</typeparam>
public interface IClientStreamWriter<T> : IAsyncStreamWriter<T>
{
/// <summary>
diff --git a/src/csharp/Grpc.Core/Internal/AsyncCall.cs b/src/csharp/Grpc.Core/Internal/AsyncCall.cs
index bb9ba5b8dd..e3b00781c6 100644
--- a/src/csharp/Grpc.Core/Internal/AsyncCall.cs
+++ b/src/csharp/Grpc.Core/Internal/AsyncCall.cs
@@ -51,22 +51,35 @@ namespace Grpc.Core.Internal
static readonly ILogger Logger = GrpcEnvironment.Logger.ForType<AsyncCall<TRequest, TResponse>>();
readonly CallInvocationDetails<TRequest, TResponse> details;
+ readonly INativeCall injectedNativeCall; // for testing
// Completion of a pending unary response if not null.
TaskCompletionSource<TResponse> unaryResponseTcs;
+ // Indicates that steaming call has finished.
+ TaskCompletionSource<object> streamingCallFinishedTcs = new TaskCompletionSource<object>();
+
+ // Response headers set here once received.
+ TaskCompletionSource<Metadata> responseHeadersTcs = new TaskCompletionSource<Metadata>();
+
// Set after status is received. Used for both unary and streaming response calls.
ClientSideStatus? finishedStatus;
- bool readObserverCompleted; // True if readObserver has already been completed.
-
public AsyncCall(CallInvocationDetails<TRequest, TResponse> callDetails)
- : base(callDetails.RequestMarshaller.Serializer, callDetails.ResponseMarshaller.Deserializer)
+ : base(callDetails.RequestMarshaller.Serializer, callDetails.ResponseMarshaller.Deserializer, callDetails.Channel.Environment)
{
this.details = callDetails.WithOptions(callDetails.Options.Normalize());
this.initialMetadataSent = true; // we always send metadata at the very beginning of the call.
}
+ /// <summary>
+ /// This constructor should only be used for testing.
+ /// </summary>
+ public AsyncCall(CallInvocationDetails<TRequest, TResponse> callDetails, INativeCall injectedNativeCall) : this(callDetails)
+ {
+ this.injectedNativeCall = injectedNativeCall;
+ }
+
// TODO: this method is not Async, so it shouldn't be in AsyncCall class, but
// it is reusing fair amount of code in this class, so we are leaving it here.
/// <summary>
@@ -100,7 +113,7 @@ namespace Grpc.Core.Internal
bool success = (ev.success != 0);
try
{
- HandleUnaryResponse(success, ctx);
+ HandleUnaryResponse(success, ctx.GetReceivedStatusOnClient(), ctx.GetReceivedMessage(), ctx.GetReceivedInitialMetadata());
}
catch (Exception e)
{
@@ -125,7 +138,7 @@ namespace Grpc.Core.Internal
Preconditions.CheckState(!started);
started = true;
- Initialize(details.Channel.Environment.CompletionQueue);
+ Initialize(environment.CompletionQueue);
halfcloseRequested = true;
readingDone = true;
@@ -152,7 +165,7 @@ namespace Grpc.Core.Internal
Preconditions.CheckState(!started);
started = true;
- Initialize(details.Channel.Environment.CompletionQueue);
+ Initialize(environment.CompletionQueue);
readingDone = true;
@@ -176,10 +189,9 @@ namespace Grpc.Core.Internal
Preconditions.CheckState(!started);
started = true;
- Initialize(details.Channel.Environment.CompletionQueue);
+ Initialize(environment.CompletionQueue);
halfcloseRequested = true;
- halfclosed = true; // halfclose not confirmed yet, but it will be once finishedHandler is called.
byte[] payload = UnsafeSerialize(msg);
@@ -187,6 +199,7 @@ namespace Grpc.Core.Internal
{
call.StartServerStreaming(HandleFinished, payload, metadataArray, GetWriteFlagsForCall());
}
+ call.StartReceiveInitialMetadata(HandleReceivedResponseHeaders);
}
}
@@ -201,12 +214,13 @@ namespace Grpc.Core.Internal
Preconditions.CheckState(!started);
started = true;
- Initialize(details.Channel.Environment.CompletionQueue);
+ Initialize(environment.CompletionQueue);
using (var metadataArray = MetadataArraySafeHandle.Create(details.Options.Headers))
{
call.StartDuplexStreaming(HandleFinished, metadataArray);
}
+ call.StartReceiveInitialMetadata(HandleReceivedResponseHeaders);
}
}
@@ -248,6 +262,28 @@ namespace Grpc.Core.Internal
}
/// <summary>
+ /// Get the task that completes once if streaming call finishes with ok status and throws RpcException with given status otherwise.
+ /// </summary>
+ public Task StreamingCallFinishedTask
+ {
+ get
+ {
+ return streamingCallFinishedTcs.Task;
+ }
+ }
+
+ /// <summary>
+ /// Get the task that completes once response headers are received.
+ /// </summary>
+ public Task<Metadata> ResponseHeadersAsync
+ {
+ get
+ {
+ return responseHeadersTcs.Task;
+ }
+ }
+
+ /// <summary>
/// Gets the resulting status if the call has already finished.
/// Throws InvalidOperationException otherwise.
/// </summary>
@@ -281,53 +317,36 @@ namespace Grpc.Core.Internal
}
}
- /// <summary>
- /// On client-side, we only fire readCompletionDelegate once all messages have been read
- /// and status has been received.
- /// </summary>
- protected override void ProcessLastRead(AsyncCompletionDelegate<TResponse> completionDelegate)
+ protected override void OnAfterReleaseResources()
{
- if (completionDelegate != null && readingDone && finishedStatus.HasValue)
- {
- bool shouldComplete;
- lock (myLock)
- {
- shouldComplete = !readObserverCompleted;
- readObserverCompleted = true;
- }
-
- if (shouldComplete)
- {
- var status = finishedStatus.Value.Status;
- if (status.StatusCode != StatusCode.OK)
- {
- FireCompletion(completionDelegate, default(TResponse), new RpcException(status));
- }
- else
- {
- FireCompletion(completionDelegate, default(TResponse), null);
- }
- }
- }
+ details.Channel.RemoveCallReference(this);
}
- protected override void OnAfterReleaseResources()
+ protected override bool IsClient
{
- details.Channel.RemoveCallReference(this);
+ get { return true; }
}
private void Initialize(CompletionQueueSafeHandle cq)
{
+ var call = CreateNativeCall(cq);
+ details.Channel.AddCallReference(this);
+ InitializeInternal(call);
+ RegisterCancellationCallback();
+ }
+
+ private INativeCall CreateNativeCall(CompletionQueueSafeHandle cq)
+ {
+ if (injectedNativeCall != null)
+ {
+ return injectedNativeCall; // allows injecting a mock INativeCall in tests.
+ }
+
var parentCall = details.Options.PropagationToken != null ? details.Options.PropagationToken.ParentCall : CallSafeHandle.NullInstance;
- var call = details.Channel.Handle.CreateCall(details.Channel.Environment.CompletionRegistry,
+ return details.Channel.Handle.CreateCall(environment.CompletionRegistry,
parentCall, ContextPropagationToken.DefaultMask, cq,
details.Method, details.Host, Timespec.FromDateTime(details.Options.Deadline.Value));
-
- details.Channel.AddCallReference(this);
-
- InitializeInternal(call);
- RegisterCancellationCallback();
}
// Make sure that once cancellationToken for this call is cancelled, Cancel() will be called.
@@ -350,62 +369,69 @@ namespace Grpc.Core.Internal
}
/// <summary>
+ /// Handles receive status completion for calls with streaming response.
+ /// </summary>
+ private void HandleReceivedResponseHeaders(bool success, Metadata responseHeaders)
+ {
+ responseHeadersTcs.SetResult(responseHeaders);
+ }
+
+ /// <summary>
/// Handler for unary response completion.
/// </summary>
- private void HandleUnaryResponse(bool success, BatchContextSafeHandle ctx)
+ private void HandleUnaryResponse(bool success, ClientSideStatus receivedStatus, byte[] receivedMessage, Metadata responseHeaders)
{
- var fullStatus = ctx.GetReceivedStatusOnClient();
+ TResponse msg = default(TResponse);
+ var deserializeException = success ? TryDeserialize(receivedMessage, out msg) : null;
lock (myLock)
{
finished = true;
- finishedStatus = fullStatus;
- halfclosed = true;
+ if (deserializeException != null && receivedStatus.Status.StatusCode == StatusCode.OK)
+ {
+ receivedStatus = new ClientSideStatus(DeserializeResponseFailureStatus, receivedStatus.Trailers);
+ }
+ finishedStatus = receivedStatus;
ReleaseResourcesIfPossible();
}
- if (!success)
- {
- unaryResponseTcs.SetException(new RpcException(new Status(StatusCode.Internal, "Internal error occured.")));
- return;
- }
+ responseHeadersTcs.SetResult(responseHeaders);
- var status = fullStatus.Status;
+ var status = receivedStatus.Status;
- if (status.StatusCode != StatusCode.OK)
+ if (!success || status.StatusCode != StatusCode.OK)
{
unaryResponseTcs.SetException(new RpcException(status));
return;
}
- // TODO: handle deserialization error
- TResponse msg;
- TryDeserialize(ctx.GetReceivedMessage(), out msg);
-
unaryResponseTcs.SetResult(msg);
}
/// <summary>
/// Handles receive status completion for calls with streaming response.
/// </summary>
- private void HandleFinished(bool success, BatchContextSafeHandle ctx)
+ private void HandleFinished(bool success, ClientSideStatus receivedStatus)
{
- var fullStatus = ctx.GetReceivedStatusOnClient();
-
- AsyncCompletionDelegate<TResponse> origReadCompletionDelegate = null;
lock (myLock)
{
finished = true;
- finishedStatus = fullStatus;
-
- origReadCompletionDelegate = readCompletionDelegate;
+ finishedStatus = receivedStatus;
ReleaseResourcesIfPossible();
}
- ProcessLastRead(origReadCompletionDelegate);
+ var status = receivedStatus.Status;
+
+ if (!success || status.StatusCode != StatusCode.OK)
+ {
+ streamingCallFinishedTcs.SetException(new RpcException(status));
+ return;
+ }
+
+ streamingCallFinishedTcs.SetResult(null);
}
}
} \ No newline at end of file
diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
index 1808294f43..3e2c57c9b5 100644
--- a/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
+++ b/src/csharp/Grpc.Core/Internal/AsyncCallBase.cs
@@ -33,10 +33,12 @@
using System;
using System.Diagnostics;
+using System.IO;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
+
using Grpc.Core.Internal;
using Grpc.Core.Logging;
using Grpc.Core.Utils;
@@ -50,34 +52,35 @@ namespace Grpc.Core.Internal
internal abstract class AsyncCallBase<TWrite, TRead>
{
static readonly ILogger Logger = GrpcEnvironment.Logger.ForType<AsyncCallBase<TWrite, TRead>>();
+ protected static readonly Status DeserializeResponseFailureStatus = new Status(StatusCode.Internal, "Failed to deserialize response message.");
readonly Func<TWrite, byte[]> serializer;
readonly Func<byte[], TRead> deserializer;
+ protected readonly GrpcEnvironment environment;
protected readonly object myLock = new object();
- protected CallSafeHandle call;
+ protected INativeCall call;
protected bool disposed;
protected bool started;
- protected bool errorOccured;
protected bool cancelRequested;
protected AsyncCompletionDelegate<object> sendCompletionDelegate; // Completion of a pending send or sendclose if not null.
protected AsyncCompletionDelegate<TRead> readCompletionDelegate; // Completion of a pending send or sendclose if not null.
- protected bool readingDone;
- protected bool halfcloseRequested;
- protected bool halfclosed;
+ protected bool readingDone; // True if last read (i.e. read with null payload) was already received.
+ protected bool halfcloseRequested; // True if send close have been initiated.
protected bool finished; // True if close has been received from the peer.
protected bool initialMetadataSent;
- protected long streamingWritesCounter;
+ protected long streamingWritesCounter; // Number of streaming send operations started so far.
- public AsyncCallBase(Func<TWrite, byte[]> serializer, Func<byte[], TRead> deserializer)
+ public AsyncCallBase(Func<TWrite, byte[]> serializer, Func<byte[], TRead> deserializer, GrpcEnvironment environment)
{
this.serializer = Preconditions.CheckNotNull(serializer);
this.deserializer = Preconditions.CheckNotNull(deserializer);
+ this.environment = Preconditions.CheckNotNull(environment);
}
/// <summary>
@@ -100,11 +103,10 @@ namespace Grpc.Core.Internal
/// <summary>
/// Requests cancelling the call with given status.
/// </summary>
- public void CancelWithStatus(Status status)
+ protected void CancelWithStatus(Status status)
{
lock (myLock)
{
- Preconditions.CheckState(started);
cancelRequested = true;
if (!disposed)
@@ -114,7 +116,7 @@ namespace Grpc.Core.Internal
}
}
- protected void InitializeInternal(CallSafeHandle call)
+ protected void InitializeInternal(INativeCall call)
{
lock (myLock)
{
@@ -159,16 +161,6 @@ namespace Grpc.Core.Internal
}
}
- // TODO(jtattermusch): find more fitting name for this method.
- /// <summary>
- /// Default behavior just completes the read observer, but more sofisticated behavior might be required
- /// by subclasses.
- /// </summary>
- protected virtual void ProcessLastRead(AsyncCompletionDelegate<TRead> completionDelegate)
- {
- FireCompletion(completionDelegate, default(TRead), null);
- }
-
/// <summary>
/// If there are no more pending actions and no new actions can be started, releases
/// the underlying native resources.
@@ -177,7 +169,7 @@ namespace Grpc.Core.Internal
{
if (!disposed && call != null)
{
- bool noMoreSendCompletions = halfclosed || (cancelRequested && sendCompletionDelegate == null);
+ bool noMoreSendCompletions = sendCompletionDelegate == null && (halfcloseRequested || cancelRequested || finished);
if (noMoreSendCompletions && readingDone && finished)
{
ReleaseResources();
@@ -187,6 +179,11 @@ namespace Grpc.Core.Internal
return false;
}
+ protected abstract bool IsClient
+ {
+ get;
+ }
+
private void ReleaseResources()
{
if (call != null)
@@ -204,11 +201,11 @@ namespace Grpc.Core.Internal
protected void CheckSendingAllowed()
{
Preconditions.CheckState(started);
- Preconditions.CheckState(!errorOccured);
CheckNotCancelled();
Preconditions.CheckState(!disposed);
Preconditions.CheckState(!halfcloseRequested, "Already halfclosed.");
+ Preconditions.CheckState(!finished, "Already finished.");
Preconditions.CheckState(sendCompletionDelegate == null, "Only one write can be pending at a time");
}
@@ -216,7 +213,6 @@ namespace Grpc.Core.Internal
{
Preconditions.CheckState(started);
Preconditions.CheckState(!disposed);
- Preconditions.CheckState(!errorOccured);
Preconditions.CheckState(!readingDone, "Stream has already been closed.");
Preconditions.CheckState(readCompletionDelegate == null, "Only one read can be pending at a time");
@@ -235,33 +231,31 @@ namespace Grpc.Core.Internal
return serializer(msg);
}
- protected bool TrySerialize(TWrite msg, out byte[] payload)
+ protected Exception TrySerialize(TWrite msg, out byte[] payload)
{
try
{
payload = serializer(msg);
- return true;
+ return null;
}
catch (Exception e)
{
- Logger.Error(e, "Exception occured while trying to serialize message");
payload = null;
- return false;
+ return e;
}
}
- protected bool TryDeserialize(byte[] payload, out TRead msg)
+ protected Exception TryDeserialize(byte[] payload, out TRead msg)
{
try
{
msg = deserializer(payload);
- return true;
+ return null;
}
catch (Exception e)
{
- Logger.Error(e, "Exception occured while trying to deserialize message.");
msg = default(TRead);
- return false;
+ return e;
}
}
@@ -280,7 +274,7 @@ namespace Grpc.Core.Internal
/// <summary>
/// Handles send completion.
/// </summary>
- protected void HandleSendFinished(bool success, BatchContextSafeHandle ctx)
+ protected void HandleSendFinished(bool success)
{
AsyncCompletionDelegate<object> origCompletionDelegate = null;
lock (myLock)
@@ -304,12 +298,11 @@ namespace Grpc.Core.Internal
/// <summary>
/// Handles halfclose completion.
/// </summary>
- protected void HandleHalfclosed(bool success, BatchContextSafeHandle ctx)
+ protected void HandleHalfclosed(bool success)
{
AsyncCompletionDelegate<object> origCompletionDelegate = null;
lock (myLock)
{
- halfclosed = true;
origCompletionDelegate = sendCompletionDelegate;
sendCompletionDelegate = null;
@@ -329,43 +322,40 @@ namespace Grpc.Core.Internal
/// <summary>
/// Handles streaming read completion.
/// </summary>
- protected void HandleReadFinished(bool success, BatchContextSafeHandle ctx)
+ protected void HandleReadFinished(bool success, byte[] receivedMessage)
{
- var payload = ctx.GetReceivedMessage();
+ TRead msg = default(TRead);
+ var deserializeException = (success && receivedMessage != null) ? TryDeserialize(receivedMessage, out msg) : null;
AsyncCompletionDelegate<TRead> origCompletionDelegate = null;
lock (myLock)
{
origCompletionDelegate = readCompletionDelegate;
- if (payload != null)
+ readCompletionDelegate = null;
+
+ if (receivedMessage == null)
{
- readCompletionDelegate = null;
+ // This was the last read.
+ readingDone = true;
}
- else
+
+ if (deserializeException != null && IsClient)
{
- // This was the last read. Keeping the readCompletionDelegate
- // to be either fired by this handler or by client-side finished
- // handler.
readingDone = true;
+ CancelWithStatus(DeserializeResponseFailureStatus);
}
ReleaseResourcesIfPossible();
}
- // TODO: handle the case when error occured...
+ // TODO: handle the case when success==false
- if (payload != null)
- {
- // TODO: handle deserialization error
- TRead msg;
- TryDeserialize(payload, out msg);
-
- FireCompletion(origCompletionDelegate, msg, null);
- }
- else
+ if (deserializeException != null && !IsClient)
{
- ProcessLastRead(origCompletionDelegate);
+ FireCompletion(origCompletionDelegate, default(TRead), new IOException("Failed to deserialize request message.", deserializeException));
+ return;
}
+ FireCompletion(origCompletionDelegate, msg, null);
}
}
} \ No newline at end of file
diff --git a/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs b/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs
index 6278c0191e..46ca459349 100644
--- a/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs
+++ b/src/csharp/Grpc.Core/Internal/AsyncCallServer.cs
@@ -49,12 +49,10 @@ namespace Grpc.Core.Internal
{
readonly TaskCompletionSource<object> finishedServersideTcs = new TaskCompletionSource<object>();
readonly CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
- readonly GrpcEnvironment environment;
readonly Server server;
- public AsyncCallServer(Func<TResponse, byte[]> serializer, Func<byte[], TRequest> deserializer, GrpcEnvironment environment, Server server) : base(serializer, deserializer)
+ public AsyncCallServer(Func<TResponse, byte[]> serializer, Func<byte[], TRequest> deserializer, GrpcEnvironment environment, Server server) : base(serializer, deserializer, environment)
{
- this.environment = Preconditions.CheckNotNull(environment);
this.server = Preconditions.CheckNotNull(server);
}
@@ -171,6 +169,11 @@ namespace Grpc.Core.Internal
}
}
+ protected override bool IsClient
+ {
+ get { return false; }
+ }
+
protected override void CheckReadingAllowed()
{
base.CheckReadingAllowed();
@@ -185,10 +188,8 @@ namespace Grpc.Core.Internal
/// <summary>
/// Handles the server side close completion.
/// </summary>
- private void HandleFinishedServerside(bool success, BatchContextSafeHandle ctx)
+ private void HandleFinishedServerside(bool success, bool cancelled)
{
- bool cancelled = ctx.GetReceivedCloseOnServerCancelled();
-
lock (myLock)
{
finished = true;
diff --git a/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs b/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs
index 3cb01e29bd..c3611a7761 100644
--- a/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/CallSafeHandle.cs
@@ -38,9 +38,9 @@ using Grpc.Core.Utils;
namespace Grpc.Core.Internal
{
/// <summary>
- /// grpc_call from <grpc/grpc.h>
+ /// grpc_call from <c>grpc/grpc.h</c>
/// </summary>
- internal class CallSafeHandle : SafeHandleZeroIsInvalid
+ internal class CallSafeHandle : SafeHandleZeroIsInvalid, INativeCall
{
public static readonly CallSafeHandle NullInstance = new CallSafeHandle();
@@ -87,6 +87,10 @@ namespace Grpc.Core.Internal
BatchContextSafeHandle ctx);
[DllImport("grpc_csharp_ext.dll")]
+ static extern GRPCCallError grpcsharp_call_recv_initial_metadata(CallSafeHandle call,
+ BatchContextSafeHandle ctx);
+
+ [DllImport("grpc_csharp_ext.dll")]
static extern GRPCCallError grpcsharp_call_start_serverside(CallSafeHandle call,
BatchContextSafeHandle ctx);
@@ -109,10 +113,10 @@ namespace Grpc.Core.Internal
this.completionRegistry = completionRegistry;
}
- public void StartUnary(BatchCompletionDelegate callback, byte[] payload, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags)
+ public void StartUnary(UnaryResponseClientHandler callback, byte[] payload, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags)
{
var ctx = BatchContextSafeHandle.Create();
- completionRegistry.RegisterBatchCompletion(ctx, callback);
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success, context.GetReceivedStatusOnClient(), context.GetReceivedMessage(), context.GetReceivedInitialMetadata()));
grpcsharp_call_start_unary(this, ctx, payload, new UIntPtr((ulong)payload.Length), metadataArray, writeFlags)
.CheckOk();
}
@@ -123,66 +127,73 @@ namespace Grpc.Core.Internal
.CheckOk();
}
- public void StartClientStreaming(BatchCompletionDelegate callback, MetadataArraySafeHandle metadataArray)
+ public void StartClientStreaming(UnaryResponseClientHandler callback, MetadataArraySafeHandle metadataArray)
{
var ctx = BatchContextSafeHandle.Create();
- completionRegistry.RegisterBatchCompletion(ctx, callback);
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success, context.GetReceivedStatusOnClient(), context.GetReceivedMessage(), context.GetReceivedInitialMetadata()));
grpcsharp_call_start_client_streaming(this, ctx, metadataArray).CheckOk();
}
- public void StartServerStreaming(BatchCompletionDelegate callback, byte[] payload, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags)
+ public void StartServerStreaming(ReceivedStatusOnClientHandler callback, byte[] payload, MetadataArraySafeHandle metadataArray, WriteFlags writeFlags)
{
var ctx = BatchContextSafeHandle.Create();
- completionRegistry.RegisterBatchCompletion(ctx, callback);
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success, context.GetReceivedStatusOnClient()));
grpcsharp_call_start_server_streaming(this, ctx, payload, new UIntPtr((ulong)payload.Length), metadataArray, writeFlags).CheckOk();
}
- public void StartDuplexStreaming(BatchCompletionDelegate callback, MetadataArraySafeHandle metadataArray)
+ public void StartDuplexStreaming(ReceivedStatusOnClientHandler callback, MetadataArraySafeHandle metadataArray)
{
var ctx = BatchContextSafeHandle.Create();
- completionRegistry.RegisterBatchCompletion(ctx, callback);
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success, context.GetReceivedStatusOnClient()));
grpcsharp_call_start_duplex_streaming(this, ctx, metadataArray).CheckOk();
}
- public void StartSendMessage(BatchCompletionDelegate callback, byte[] payload, WriteFlags writeFlags, bool sendEmptyInitialMetadata)
+ public void StartSendMessage(SendCompletionHandler callback, byte[] payload, WriteFlags writeFlags, bool sendEmptyInitialMetadata)
{
var ctx = BatchContextSafeHandle.Create();
- completionRegistry.RegisterBatchCompletion(ctx, callback);
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success));
grpcsharp_call_send_message(this, ctx, payload, new UIntPtr((ulong)payload.Length), writeFlags, sendEmptyInitialMetadata).CheckOk();
}
- public void StartSendCloseFromClient(BatchCompletionDelegate callback)
+ public void StartSendCloseFromClient(SendCompletionHandler callback)
{
var ctx = BatchContextSafeHandle.Create();
- completionRegistry.RegisterBatchCompletion(ctx, callback);
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success));
grpcsharp_call_send_close_from_client(this, ctx).CheckOk();
}
- public void StartSendStatusFromServer(BatchCompletionDelegate callback, Status status, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata)
+ public void StartSendStatusFromServer(SendCompletionHandler callback, Status status, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata)
{
var ctx = BatchContextSafeHandle.Create();
- completionRegistry.RegisterBatchCompletion(ctx, callback);
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success));
grpcsharp_call_send_status_from_server(this, ctx, status.StatusCode, status.Detail, metadataArray, sendEmptyInitialMetadata).CheckOk();
}
- public void StartReceiveMessage(BatchCompletionDelegate callback)
+ public void StartReceiveMessage(ReceivedMessageHandler callback)
{
var ctx = BatchContextSafeHandle.Create();
- completionRegistry.RegisterBatchCompletion(ctx, callback);
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success, context.GetReceivedMessage()));
grpcsharp_call_recv_message(this, ctx).CheckOk();
}
- public void StartServerSide(BatchCompletionDelegate callback)
+ public void StartReceiveInitialMetadata(ReceivedResponseHeadersHandler callback)
+ {
+ var ctx = BatchContextSafeHandle.Create();
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success, context.GetReceivedInitialMetadata()));
+ grpcsharp_call_recv_initial_metadata(this, ctx).CheckOk();
+ }
+
+ public void StartServerSide(ReceivedCloseOnServerHandler callback)
{
var ctx = BatchContextSafeHandle.Create();
- completionRegistry.RegisterBatchCompletion(ctx, callback);
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success, context.GetReceivedCloseOnServerCancelled()));
grpcsharp_call_start_serverside(this, ctx).CheckOk();
}
- public void StartSendInitialMetadata(BatchCompletionDelegate callback, MetadataArraySafeHandle metadataArray)
+ public void StartSendInitialMetadata(SendCompletionHandler callback, MetadataArraySafeHandle metadataArray)
{
var ctx = BatchContextSafeHandle.Create();
- completionRegistry.RegisterBatchCompletion(ctx, callback);
+ completionRegistry.RegisterBatchCompletion(ctx, (success, context) => callback(success));
grpcsharp_call_send_initial_metadata(this, ctx, metadataArray).CheckOk();
}
diff --git a/src/csharp/Grpc.Core/Internal/ChannelArgsSafeHandle.cs b/src/csharp/Grpc.Core/Internal/ChannelArgsSafeHandle.cs
index c12aec5a3a..ea5b52374e 100644
--- a/src/csharp/Grpc.Core/Internal/ChannelArgsSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/ChannelArgsSafeHandle.cs
@@ -35,7 +35,7 @@ using System.Threading.Tasks;
namespace Grpc.Core.Internal
{
/// <summary>
- /// grpc_channel_args from <grpc/grpc.h>
+ /// grpc_channel_args from <c>grpc/grpc.h</c>
/// </summary>
internal class ChannelArgsSafeHandle : SafeHandleZeroIsInvalid
{
diff --git a/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs b/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs
index 8cef566c14..7a1c6e3dac 100644
--- a/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/ChannelSafeHandle.cs
@@ -36,7 +36,7 @@ using System.Threading.Tasks;
namespace Grpc.Core.Internal
{
/// <summary>
- /// grpc_channel from <grpc/grpc.h>
+ /// grpc_channel from <c>grpc/grpc.h</c>
/// </summary>
internal class ChannelSafeHandle : SafeHandleZeroIsInvalid
{
diff --git a/src/csharp/Grpc.Core/Internal/ClientResponseStream.cs b/src/csharp/Grpc.Core/Internal/ClientResponseStream.cs
index 6c44521038..b4a7335c7c 100644
--- a/src/csharp/Grpc.Core/Internal/ClientResponseStream.cs
+++ b/src/csharp/Grpc.Core/Internal/ClientResponseStream.cs
@@ -72,7 +72,13 @@ namespace Grpc.Core.Internal
call.StartReadMessage(taskSource.CompletionDelegate);
var result = await taskSource.Task;
this.current = result;
- return result != null;
+
+ if (result == null)
+ {
+ await call.StreamingCallFinishedTask;
+ return false;
+ }
+ return true;
}
public void Dispose()
diff --git a/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs b/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs
index f64f3d4175..f7a3471bb4 100644
--- a/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/CompletionQueueSafeHandle.cs
@@ -35,7 +35,7 @@ using System.Threading.Tasks;
namespace Grpc.Core.Internal
{
/// <summary>
- /// grpc_completion_queue from <grpc/grpc.h>
+ /// grpc_completion_queue from <c>grpc/grpc.h</c>
/// </summary>
internal class CompletionQueueSafeHandle : SafeHandleZeroIsInvalid
{
diff --git a/src/csharp/Grpc.Core/Internal/CredentialsSafeHandle.cs b/src/csharp/Grpc.Core/Internal/CredentialsSafeHandle.cs
index 8b4fa85e5d..feed335362 100644
--- a/src/csharp/Grpc.Core/Internal/CredentialsSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/CredentialsSafeHandle.cs
@@ -36,7 +36,7 @@ using System.Threading.Tasks;
namespace Grpc.Core.Internal
{
/// <summary>
- /// grpc_credentials from <grpc/grpc_security.h>
+ /// grpc_credentials from <c>grpc/grpc_security.h</c>
/// </summary>
internal class CredentialsSafeHandle : SafeHandleZeroIsInvalid
{
diff --git a/src/csharp/Grpc.Core/Internal/INativeCall.cs b/src/csharp/Grpc.Core/Internal/INativeCall.cs
new file mode 100644
index 0000000000..cbef599139
--- /dev/null
+++ b/src/csharp/Grpc.Core/Internal/INativeCall.cs
@@ -0,0 +1,85 @@
+#region Copyright notice and license
+// Copyright 2015, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#endregion
+
+using System;
+
+namespace Grpc.Core.Internal
+{
+ internal delegate void UnaryResponseClientHandler(bool success, ClientSideStatus receivedStatus, byte[] receivedMessage, Metadata responseHeaders);
+
+ // Received status for streaming response calls.
+ internal delegate void ReceivedStatusOnClientHandler(bool success, ClientSideStatus receivedStatus);
+
+ internal delegate void ReceivedMessageHandler(bool success, byte[] receivedMessage);
+
+ internal delegate void ReceivedResponseHeadersHandler(bool success, Metadata responseHeaders);
+
+ internal delegate void SendCompletionHandler(bool success);
+
+ internal delegate void ReceivedCloseOnServerHandler(bool success, bool cancelled);
+
+ /// <summary>
+ /// Abstraction of a native call object.
+ /// </summary>
+ internal interface INativeCall : IDisposable
+ {
+ void Cancel();
+
+ void CancelWithStatus(Grpc.Core.Status status);
+
+ string GetPeer();
+
+ void StartUnary(UnaryResponseClientHandler callback, byte[] payload, MetadataArraySafeHandle metadataArray, Grpc.Core.WriteFlags writeFlags);
+
+ void StartUnary(BatchContextSafeHandle ctx, byte[] payload, MetadataArraySafeHandle metadataArray, Grpc.Core.WriteFlags writeFlags);
+
+ void StartClientStreaming(UnaryResponseClientHandler callback, MetadataArraySafeHandle metadataArray);
+
+ void StartServerStreaming(ReceivedStatusOnClientHandler callback, byte[] payload, MetadataArraySafeHandle metadataArray, Grpc.Core.WriteFlags writeFlags);
+
+ void StartDuplexStreaming(ReceivedStatusOnClientHandler callback, MetadataArraySafeHandle metadataArray);
+
+ void StartReceiveMessage(ReceivedMessageHandler callback);
+
+ void StartReceiveInitialMetadata(ReceivedResponseHeadersHandler callback);
+
+ void StartSendInitialMetadata(SendCompletionHandler callback, MetadataArraySafeHandle metadataArray);
+
+ void StartSendMessage(SendCompletionHandler callback, byte[] payload, Grpc.Core.WriteFlags writeFlags, bool sendEmptyInitialMetadata);
+
+ void StartSendCloseFromClient(SendCompletionHandler callback);
+
+ void StartSendStatusFromServer(SendCompletionHandler callback, Grpc.Core.Status status, MetadataArraySafeHandle metadataArray, bool sendEmptyInitialMetadata);
+
+ void StartServerSide(ReceivedCloseOnServerHandler callback);
+ }
+}
diff --git a/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs b/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs
index 83994f6762..31b834c979 100644
--- a/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/MetadataArraySafeHandle.cs
@@ -35,7 +35,7 @@ using System.Threading.Tasks;
namespace Grpc.Core.Internal
{
/// <summary>
- /// grpc_metadata_array from <grpc/grpc.h>
+ /// grpc_metadata_array from <c>grpc/grpc.h</c>
/// </summary>
internal class MetadataArraySafeHandle : SafeHandleZeroIsInvalid
{
diff --git a/src/csharp/Grpc.Core/Internal/ServerCredentialsSafeHandle.cs b/src/csharp/Grpc.Core/Internal/ServerCredentialsSafeHandle.cs
index 37a4f5256b..51e352a18b 100644
--- a/src/csharp/Grpc.Core/Internal/ServerCredentialsSafeHandle.cs
+++ b/src/csharp/Grpc.Core/Internal/ServerCredentialsSafeHandle.cs
@@ -37,7 +37,7 @@ using Grpc.Core.Utils;
namespace Grpc.Core.Internal
{
/// <summary>
- /// grpc_server_credentials from <grpc/grpc_security.h>
+ /// grpc_server_credentials from <c>grpc/grpc_security.h</c>
/// </summary>
internal class ServerCredentialsSafeHandle : SafeHandleZeroIsInvalid
{
diff --git a/src/csharp/Grpc.Core/Marshaller.cs b/src/csharp/Grpc.Core/Marshaller.cs
index f38cb0863f..3493d2d38f 100644
--- a/src/csharp/Grpc.Core/Marshaller.cs
+++ b/src/csharp/Grpc.Core/Marshaller.cs
@@ -39,7 +39,7 @@ namespace Grpc.Core
/// <summary>
/// Encapsulates the logic for serializing and deserializing messages.
/// </summary>
- public struct Marshaller<T>
+ public class Marshaller<T>
{
readonly Func<T, byte[]> serializer;
readonly Func<byte[], T> deserializer;
diff --git a/src/csharp/Grpc.Core/Metadata.cs b/src/csharp/Grpc.Core/Metadata.cs
index a589b50caa..21bdf4f114 100644
--- a/src/csharp/Grpc.Core/Metadata.cs
+++ b/src/csharp/Grpc.Core/Metadata.cs
@@ -33,15 +33,23 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
+using System.Globalization;
using System.Runtime.InteropServices;
using System.Text;
+using System.Text.RegularExpressions;
using Grpc.Core.Utils;
namespace Grpc.Core
{
/// <summary>
- /// Provides access to read and write metadata values to be exchanged during a call.
+ /// A collection of metadata entries that can be exchanged during a call.
+ /// gRPC supports these types of metadata:
+ /// <list type="bullet">
+ /// <item><term>Request headers</term><description>are sent by the client at the beginning of a remote call before any request messages are sent.</description></item>
+ /// <item><term>Response headers</term><description>are sent by the server at the beginning of a remote call handler before any response messages are sent.</description></item>
+ /// <item><term>Response trailers</term><description>are sent by the server at the end of a remote call along with resulting call status.</description></item>
+ /// </list>
/// </summary>
public sealed class Metadata : IList<Metadata.Entry>
{
@@ -58,21 +66,19 @@ namespace Grpc.Core
readonly List<Entry> entries;
bool readOnly;
+ /// <summary>
+ /// Initializes a new instance of <c>Metadata</c>.
+ /// </summary>
public Metadata()
{
this.entries = new List<Entry>();
}
- public Metadata(ICollection<Entry> entries)
- {
- this.entries = new List<Entry>(entries);
- }
-
/// <summary>
/// Makes this object read-only.
/// </summary>
/// <returns>this object</returns>
- public Metadata Freeze()
+ internal Metadata Freeze()
{
this.readOnly = true;
return this;
@@ -184,6 +190,7 @@ namespace Grpc.Core
public struct Entry
{
private static readonly Encoding Encoding = Encoding.ASCII;
+ private static readonly Regex ValidKeyRegex = new Regex("^[a-z0-9_-]+$");
readonly string key;
readonly string value;
@@ -197,7 +204,7 @@ namespace Grpc.Core
}
/// <summary>
- /// Initializes a new instance of the <see cref="Grpc.Core.Metadata+Entry"/> struct with a binary value.
+ /// Initializes a new instance of the <see cref="Grpc.Core.Metadata.Entry"/> struct with a binary value.
/// </summary>
/// <param name="key">Metadata key, needs to have suffix indicating a binary valued metadata entry.</param>
/// <param name="valueBytes">Value bytes.</param>
@@ -213,7 +220,7 @@ namespace Grpc.Core
}
/// <summary>
- /// Initializes a new instance of the <see cref="Grpc.Core.Metadata+Entry"/> struct holding an ASCII value.
+ /// Initializes a new instance of the <see cref="Grpc.Core.Metadata.Entry"/> struct holding an ASCII value.
/// </summary>
/// <param name="key">Metadata key, must not use suffix indicating a binary valued metadata entry.</param>
/// <param name="value">Value string. Only ASCII characters are allowed.</param>
@@ -280,7 +287,7 @@ namespace Grpc.Core
}
/// <summary>
- /// Returns a <see cref="System.String"/> that represents the current <see cref="Grpc.Core.Metadata+Entry"/>.
+ /// Returns a <see cref="System.String"/> that represents the current <see cref="Grpc.Core.Metadata.Entry"/>.
/// </summary>
public override string ToString()
{
@@ -316,7 +323,10 @@ namespace Grpc.Core
private static string NormalizeKey(string key)
{
- return Preconditions.CheckNotNull(key, "key").ToLower();
+ var normalized = Preconditions.CheckNotNull(key, "key").ToLower(CultureInfo.InvariantCulture);
+ Preconditions.CheckArgument(ValidKeyRegex.IsMatch(normalized),
+ "Metadata entry key not valid. Keys can only contain lowercase alphanumeric characters, underscores and hyphens.");
+ return normalized;
}
}
}
diff --git a/src/csharp/Grpc.Core/Method.cs b/src/csharp/Grpc.Core/Method.cs
index 4c53285893..99162a7d5d 100644
--- a/src/csharp/Grpc.Core/Method.cs
+++ b/src/csharp/Grpc.Core/Method.cs
@@ -84,6 +84,8 @@ namespace Grpc.Core
/// <summary>
/// A description of a remote method.
/// </summary>
+ /// <typeparam name="TRequest">Request message type for this method.</typeparam>
+ /// <typeparam name="TResponse">Response message type for this method.</typeparam>
public class Method<TRequest, TResponse> : IMethod
{
readonly MethodType type;
diff --git a/src/csharp/Grpc.Core/Server.cs b/src/csharp/Grpc.Core/Server.cs
index 28f1686e20..7c94d21561 100644
--- a/src/csharp/Grpc.Core/Server.cs
+++ b/src/csharp/Grpc.Core/Server.cs
@@ -44,7 +44,7 @@ using Grpc.Core.Utils;
namespace Grpc.Core
{
/// <summary>
- /// A gRPC server.
+ /// gRPC server. A single server can server arbitrary number of services and can listen on more than one ports.
/// </summary>
public class Server
{
@@ -324,6 +324,9 @@ namespace Grpc.Core
server.AddServiceDefinitionInternal(serviceDefinition);
}
+ /// <summary>
+ /// Gets enumerator for this collection.
+ /// </summary>
public IEnumerator<ServerServiceDefinition> GetEnumerator()
{
return server.serviceDefinitionsList.GetEnumerator();
@@ -369,6 +372,9 @@ namespace Grpc.Core
return Add(new ServerPort(host, port, credentials));
}
+ /// <summary>
+ /// Gets enumerator for this collection.
+ /// </summary>
public IEnumerator<ServerPort> GetEnumerator()
{
return server.serverPortList.GetEnumerator();
diff --git a/src/csharp/Grpc.Core/ServerCallContext.cs b/src/csharp/Grpc.Core/ServerCallContext.cs
index 75d81c64f3..09a6b882a6 100644
--- a/src/csharp/Grpc.Core/ServerCallContext.cs
+++ b/src/csharp/Grpc.Core/ServerCallContext.cs
@@ -72,6 +72,13 @@ namespace Grpc.Core
this.writeOptionsHolder = writeOptionsHolder;
}
+ /// <summary>
+ /// Asynchronously sends response headers for the current call to the client. This method may only be invoked once for each call and needs to be invoked
+ /// before any response messages are written. Writing the first response message implicitly sends empty response headers if <c>WriteResponseHeadersAsync</c> haven't
+ /// been called yet.
+ /// </summary>
+ /// <param name="responseHeaders">The response headers to send.</param>
+ /// <returns>The task that finished once response headers have been written.</returns>
public Task WriteResponseHeadersAsync(Metadata responseHeaders)
{
return writeHeadersFunc(responseHeaders);
@@ -186,6 +193,9 @@ namespace Grpc.Core
/// </summary>
public interface IHasWriteOptions
{
+ /// <summary>
+ /// Gets or sets the write options.
+ /// </summary>
WriteOptions WriteOptions { get; set; }
}
}
diff --git a/src/csharp/Grpc.Core/ServerMethods.cs b/src/csharp/Grpc.Core/ServerMethods.cs
index 1f119a80ff..728f77cde5 100644
--- a/src/csharp/Grpc.Core/ServerMethods.cs
+++ b/src/csharp/Grpc.Core/ServerMethods.cs
@@ -38,6 +38,8 @@ namespace Grpc.Core
/// <summary>
/// Server-side handler for unary call.
/// </summary>
+ /// <typeparam name="TRequest">Request message type for this method.</typeparam>
+ /// <typeparam name="TResponse">Response message type for this method.</typeparam>
public delegate Task<TResponse> UnaryServerMethod<TRequest, TResponse>(TRequest request, ServerCallContext context)
where TRequest : class
where TResponse : class;
@@ -45,6 +47,8 @@ namespace Grpc.Core
/// <summary>
/// Server-side handler for client streaming call.
/// </summary>
+ /// <typeparam name="TRequest">Request message type for this method.</typeparam>
+ /// <typeparam name="TResponse">Response message type for this method.</typeparam>
public delegate Task<TResponse> ClientStreamingServerMethod<TRequest, TResponse>(IAsyncStreamReader<TRequest> requestStream, ServerCallContext context)
where TRequest : class
where TResponse : class;
@@ -52,6 +56,8 @@ namespace Grpc.Core
/// <summary>
/// Server-side handler for server streaming call.
/// </summary>
+ /// <typeparam name="TRequest">Request message type for this method.</typeparam>
+ /// <typeparam name="TResponse">Response message type for this method.</typeparam>
public delegate Task ServerStreamingServerMethod<TRequest, TResponse>(TRequest request, IServerStreamWriter<TResponse> responseStream, ServerCallContext context)
where TRequest : class
where TResponse : class;
@@ -59,6 +65,8 @@ namespace Grpc.Core
/// <summary>
/// Server-side handler for bidi streaming call.
/// </summary>
+ /// <typeparam name="TRequest">Request message type for this method.</typeparam>
+ /// <typeparam name="TResponse">Response message type for this method.</typeparam>
public delegate Task DuplexStreamingServerMethod<TRequest, TResponse>(IAsyncStreamReader<TRequest> requestStream, IServerStreamWriter<TResponse> responseStream, ServerCallContext context)
where TRequest : class
where TResponse : class;
diff --git a/src/csharp/Grpc.Core/ServerServiceDefinition.cs b/src/csharp/Grpc.Core/ServerServiceDefinition.cs
index 94b0a320c3..deb1431ca3 100644
--- a/src/csharp/Grpc.Core/ServerServiceDefinition.cs
+++ b/src/csharp/Grpc.Core/ServerServiceDefinition.cs
@@ -40,6 +40,8 @@ namespace Grpc.Core
{
/// <summary>
/// Mapping of method names to server call handlers.
+ /// Normally, the <c>ServerServiceDefinition</c> objects will be created by the <c>BindService</c> factory method
+ /// that is part of the autogenerated code for a protocol buffers service definition.
/// </summary>
public class ServerServiceDefinition
{
@@ -58,21 +60,41 @@ namespace Grpc.Core
}
}
+ /// <summary>
+ /// Creates a new builder object for <c>ServerServiceDefinition</c>.
+ /// </summary>
+ /// <param name="serviceName">The service name.</param>
+ /// <returns>The builder object.</returns>
public static Builder CreateBuilder(string serviceName)
{
return new Builder(serviceName);
}
+ /// <summary>
+ /// Builder class for <see cref="ServerServiceDefinition"/>.
+ /// </summary>
public class Builder
{
readonly string serviceName;
readonly Dictionary<string, IServerCallHandler> callHandlers = new Dictionary<string, IServerCallHandler>();
+ /// <summary>
+ /// Creates a new instance of builder.
+ /// </summary>
+ /// <param name="serviceName">The service name.</param>
public Builder(string serviceName)
{
this.serviceName = serviceName;
}
+ /// <summary>
+ /// Adds a definitions for a single request - single response method.
+ /// </summary>
+ /// <typeparam name="TRequest">The request message class.</typeparam>
+ /// <typeparam name="TResponse">The response message class.</typeparam>
+ /// <param name="method">The method.</param>
+ /// <param name="handler">The method handler.</param>
+ /// <returns>This builder instance.</returns>
public Builder AddMethod<TRequest, TResponse>(
Method<TRequest, TResponse> method,
UnaryServerMethod<TRequest, TResponse> handler)
@@ -83,6 +105,14 @@ namespace Grpc.Core
return this;
}
+ /// <summary>
+ /// Adds a definitions for a client streaming method.
+ /// </summary>
+ /// <typeparam name="TRequest">The request message class.</typeparam>
+ /// <typeparam name="TResponse">The response message class.</typeparam>
+ /// <param name="method">The method.</param>
+ /// <param name="handler">The method handler.</param>
+ /// <returns>This builder instance.</returns>
public Builder AddMethod<TRequest, TResponse>(
Method<TRequest, TResponse> method,
ClientStreamingServerMethod<TRequest, TResponse> handler)
@@ -93,6 +123,14 @@ namespace Grpc.Core
return this;
}
+ /// <summary>
+ /// Adds a definitions for a server streaming method.
+ /// </summary>
+ /// <typeparam name="TRequest">The request message class.</typeparam>
+ /// <typeparam name="TResponse">The response message class.</typeparam>
+ /// <param name="method">The method.</param>
+ /// <param name="handler">The method handler.</param>
+ /// <returns>This builder instance.</returns>
public Builder AddMethod<TRequest, TResponse>(
Method<TRequest, TResponse> method,
ServerStreamingServerMethod<TRequest, TResponse> handler)
@@ -103,6 +141,14 @@ namespace Grpc.Core
return this;
}
+ /// <summary>
+ /// Adds a definitions for a bidirectional streaming method.
+ /// </summary>
+ /// <typeparam name="TRequest">The request message class.</typeparam>
+ /// <typeparam name="TResponse">The response message class.</typeparam>
+ /// <param name="method">The method.</param>
+ /// <param name="handler">The method handler.</param>
+ /// <returns>This builder instance.</returns>
public Builder AddMethod<TRequest, TResponse>(
Method<TRequest, TResponse> method,
DuplexStreamingServerMethod<TRequest, TResponse> handler)
@@ -113,6 +159,10 @@ namespace Grpc.Core
return this;
}
+ /// <summary>
+ /// Creates an immutable <c>ServerServiceDefinition</c> from this builder.
+ /// </summary>
+ /// <returns>The <c>ServerServiceDefinition</c> object.</returns>
public ServerServiceDefinition Build()
{
return new ServerServiceDefinition(callHandlers);
diff --git a/src/csharp/Grpc.Core/Utils/Preconditions.cs b/src/csharp/Grpc.Core/Utils/Preconditions.cs
index 374262f87a..a8ab603391 100644
--- a/src/csharp/Grpc.Core/Utils/Preconditions.cs
+++ b/src/csharp/Grpc.Core/Utils/Preconditions.cs
@@ -43,6 +43,7 @@ namespace Grpc.Core.Utils
/// <summary>
/// Throws <see cref="ArgumentException"/> if condition is false.
/// </summary>
+ /// <param name="condition">The condition.</param>
public static void CheckArgument(bool condition)
{
if (!condition)
@@ -54,6 +55,8 @@ namespace Grpc.Core.Utils
/// <summary>
/// Throws <see cref="ArgumentException"/> with given message if condition is false.
/// </summary>
+ /// <param name="condition">The condition.</param>
+ /// <param name="errorMessage">The error message.</param>
public static void CheckArgument(bool condition, string errorMessage)
{
if (!condition)
@@ -65,6 +68,7 @@ namespace Grpc.Core.Utils
/// <summary>
/// Throws <see cref="ArgumentNullException"/> if reference is null.
/// </summary>
+ /// <param name="reference">The reference.</param>
public static T CheckNotNull<T>(T reference)
{
if (reference == null)
@@ -77,6 +81,8 @@ namespace Grpc.Core.Utils
/// <summary>
/// Throws <see cref="ArgumentNullException"/> if reference is null.
/// </summary>
+ /// <param name="reference">The reference.</param>
+ /// <param name="paramName">The parameter name.</param>
public static T CheckNotNull<T>(T reference, string paramName)
{
if (reference == null)
@@ -89,6 +95,7 @@ namespace Grpc.Core.Utils
/// <summary>
/// Throws <see cref="InvalidOperationException"/> if condition is false.
/// </summary>
+ /// <param name="condition">The condition.</param>
public static void CheckState(bool condition)
{
if (!condition)
@@ -100,6 +107,8 @@ namespace Grpc.Core.Utils
/// <summary>
/// Throws <see cref="InvalidOperationException"/> with given message if condition is false.
/// </summary>
+ /// <param name="condition">The condition.</param>
+ /// <param name="errorMessage">The error message.</param>
public static void CheckState(bool condition, string errorMessage)
{
if (!condition)
diff --git a/src/csharp/Grpc.Core/VersionInfo.cs b/src/csharp/Grpc.Core/VersionInfo.cs
index b6dbd3b49c..eda821bc31 100644
--- a/src/csharp/Grpc.Core/VersionInfo.cs
+++ b/src/csharp/Grpc.Core/VersionInfo.cs
@@ -39,8 +39,8 @@ namespace Grpc.Core
public static class VersionInfo
{
/// <summary>
- /// Current version of gRPC
+ /// Current version of gRPC C#
/// </summary>
- public const string CurrentVersion = "0.6.1";
+ public const string CurrentVersion = "0.7.0";
}
}
diff --git a/src/csharp/Grpc.Core/WriteOptions.cs b/src/csharp/Grpc.Core/WriteOptions.cs
index 7ef3189d76..7523ada84a 100644
--- a/src/csharp/Grpc.Core/WriteOptions.cs
+++ b/src/csharp/Grpc.Core/WriteOptions.cs
@@ -66,11 +66,18 @@ namespace Grpc.Core
private WriteFlags flags;
+ /// <summary>
+ /// Initializes a new instance of <c>WriteOptions</c> class.
+ /// </summary>
+ /// <param name="flags">The write flags.</param>
public WriteOptions(WriteFlags flags = default(WriteFlags))
{
this.flags = flags;
}
+ /// <summary>
+ /// Gets the write flags.
+ /// </summary>
public WriteFlags Flags
{
get
diff --git a/src/csharp/Grpc.Examples.MathClient/MathClient.cs b/src/csharp/Grpc.Examples.MathClient/MathClient.cs
index abd95cb905..01e4a80bab 100644
--- a/src/csharp/Grpc.Examples.MathClient/MathClient.cs
+++ b/src/csharp/Grpc.Examples.MathClient/MathClient.cs
@@ -33,7 +33,7 @@ using System.Runtime.InteropServices;
using System.Threading;
using Grpc.Core;
-namespace math
+namespace Math
{
class MathClient
{
diff --git a/src/csharp/Grpc.Examples.MathServer/MathServer.cs b/src/csharp/Grpc.Examples.MathServer/MathServer.cs
index 26bef646ec..6e974a0871 100644
--- a/src/csharp/Grpc.Examples.MathServer/MathServer.cs
+++ b/src/csharp/Grpc.Examples.MathServer/MathServer.cs
@@ -34,7 +34,7 @@ using System.Runtime.InteropServices;
using System.Threading;
using Grpc.Core;
-namespace math
+namespace Math
{
class MainClass
{
diff --git a/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj b/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj
index 9a8f780b24..c4c1ee6d00 100644
--- a/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj
+++ b/src/csharp/Grpc.Examples.Tests/Grpc.Examples.Tests.csproj
@@ -37,13 +37,14 @@
<AssemblyOriginatorKeyFile>C:\keys\Grpc.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
+ <Reference Include="Google.Protobuf, Version=3.0.0.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Google.Protobuf.3.0.0-alpha4\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath>
+ </Reference>
<Reference Include="nunit.framework">
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="System" />
- <Reference Include="Google.ProtocolBuffers">
- <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.521\lib\net40\Google.ProtocolBuffers.dll</HintPath>
- </Reference>
<Reference Include="System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Ix-Async.1.2.3\lib\net45\System.Interactive.Async.dll</HintPath>
diff --git a/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs b/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs
index 36c1c947bd..e2975b5da9 100644
--- a/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs
+++ b/src/csharp/Grpc.Examples.Tests/MathClientServerTests.cs
@@ -40,7 +40,7 @@ using Grpc.Core;
using Grpc.Core.Utils;
using NUnit.Framework;
-namespace math.Tests
+namespace Math.Tests
{
/// <summary>
/// Math client talks to local math server.
@@ -75,7 +75,7 @@ namespace math.Tests
[Test]
public void Div1()
{
- DivReply response = client.Div(new DivArgs.Builder { Dividend = 10, Divisor = 3 }.Build());
+ DivReply response = client.Div(new DivArgs { Dividend = 10, Divisor = 3 });
Assert.AreEqual(3, response.Quotient);
Assert.AreEqual(1, response.Remainder);
}
@@ -83,7 +83,7 @@ namespace math.Tests
[Test]
public void Div2()
{
- DivReply response = client.Div(new DivArgs.Builder { Dividend = 0, Divisor = 1 }.Build());
+ DivReply response = client.Div(new DivArgs { Dividend = 0, Divisor = 1 });
Assert.AreEqual(0, response.Quotient);
Assert.AreEqual(0, response.Remainder);
}
@@ -91,14 +91,14 @@ namespace math.Tests
[Test]
public void DivByZero()
{
- var ex = Assert.Throws<RpcException>(() => client.Div(new DivArgs.Builder { Dividend = 0, Divisor = 0 }.Build()));
+ var ex = Assert.Throws<RpcException>(() => client.Div(new DivArgs { Dividend = 0, Divisor = 0 }));
Assert.AreEqual(StatusCode.Unknown, ex.Status.StatusCode);
}
[Test]
public async Task DivAsync()
{
- DivReply response = await client.DivAsync(new DivArgs.Builder { Dividend = 10, Divisor = 3 }.Build());
+ DivReply response = await client.DivAsync(new DivArgs { Dividend = 10, Divisor = 3 });
Assert.AreEqual(3, response.Quotient);
Assert.AreEqual(1, response.Remainder);
}
@@ -106,7 +106,7 @@ namespace math.Tests
[Test]
public async Task Fib()
{
- using (var call = client.Fib(new FibArgs.Builder { Limit = 6 }.Build()))
+ using (var call = client.Fib(new FibArgs { Limit = 6 }))
{
var responses = await call.ResponseStream.ToListAsync();
CollectionAssert.AreEqual(new List<long> { 1, 1, 2, 3, 5, 8 },
@@ -119,8 +119,7 @@ namespace math.Tests
{
var cts = new CancellationTokenSource();
- using (var call = client.Fib(new FibArgs.Builder { Limit = 0 }.Build(),
- cancellationToken: cts.Token))
+ using (var call = client.Fib(new FibArgs { Limit = 0 }, cancellationToken: cts.Token))
{
List<long> responses = new List<long>();
@@ -147,7 +146,7 @@ namespace math.Tests
[Test]
public async Task FibWithDeadline()
{
- using (var call = client.Fib(new FibArgs.Builder { Limit = 0 }.Build(),
+ using (var call = client.Fib(new FibArgs { Limit = 0 },
deadline: DateTime.UtcNow.AddMilliseconds(500)))
{
var ex = Assert.Throws<RpcException>(async () => await call.ResponseStream.ToListAsync());
@@ -163,8 +162,7 @@ namespace math.Tests
{
using (var call = client.Sum())
{
- var numbers = new List<long> { 10, 20, 30 }.ConvertAll(
- n => Num.CreateBuilder().SetNum_(n).Build());
+ var numbers = new List<long> { 10, 20, 30 }.ConvertAll(n => new Num { Num_ = n });
await call.RequestStream.WriteAllAsync(numbers);
var result = await call.ResponseAsync;
@@ -177,9 +175,9 @@ namespace math.Tests
{
var divArgsList = new List<DivArgs>
{
- new DivArgs.Builder { Dividend = 10, Divisor = 3 }.Build(),
- new DivArgs.Builder { Dividend = 100, Divisor = 21 }.Build(),
- new DivArgs.Builder { Dividend = 7, Divisor = 2 }.Build()
+ new DivArgs { Dividend = 10, Divisor = 3 },
+ new DivArgs { Dividend = 100, Divisor = 21 },
+ new DivArgs { Dividend = 7, Divisor = 2 }
};
using (var call = client.DivMany())
diff --git a/src/csharp/Grpc.Examples.Tests/packages.config b/src/csharp/Grpc.Examples.Tests/packages.config
index cc6e9af40f..7266fa1763 100644
--- a/src/csharp/Grpc.Examples.Tests/packages.config
+++ b/src/csharp/Grpc.Examples.Tests/packages.config
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Google.ProtocolBuffers" version="2.4.1.521" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.0.0-alpha4" targetFramework="net45" />
<package id="Ix-Async" version="1.2.3" targetFramework="net45" />
<package id="NUnit" version="2.6.4" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.Examples/Grpc.Examples.csproj b/src/csharp/Grpc.Examples/Grpc.Examples.csproj
index c1aa40500e..55462e02fd 100644
--- a/src/csharp/Grpc.Examples/Grpc.Examples.csproj
+++ b/src/csharp/Grpc.Examples/Grpc.Examples.csproj
@@ -37,11 +37,12 @@
<AssemblyOriginatorKeyFile>C:\keys\Grpc.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
+ <Reference Include="Google.Protobuf, Version=3.0.0.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Google.Protobuf.3.0.0-alpha4\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath>
+ </Reference>
<Reference Include="System" />
<Reference Include="System.Data.Linq" />
- <Reference Include="Google.ProtocolBuffers">
- <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.521\lib\net40\Google.ProtocolBuffers.dll</HintPath>
- </Reference>
<Reference Include="System.Interactive.Async">
<HintPath>..\packages\Ix-Async.1.2.3\lib\net45\System.Interactive.Async.dll</HintPath>
</Reference>
diff --git a/src/csharp/Grpc.Examples/Math.cs b/src/csharp/Grpc.Examples/Math.cs
index 75b1e9dbc2..d0e1ee8aae 100644
--- a/src/csharp/Grpc.Examples/Math.cs
+++ b/src/csharp/Grpc.Examples/Math.cs
@@ -1,80 +1,46 @@
-// Generated by ProtoGen, Version=2.4.1.521, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48. DO NOT EDIT!
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: math.proto
#pragma warning disable 1591, 0612, 3021
#region Designer generated code
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
-namespace math {
+namespace Math {
namespace Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public static partial class Math {
- #region Extension registration
- public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
- }
- #endregion
- #region Static variables
- internal static pbd::MessageDescriptor internal__static_math_DivArgs__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::math.DivArgs, global::math.DivArgs.Builder> internal__static_math_DivArgs__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_math_DivReply__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::math.DivReply, global::math.DivReply.Builder> internal__static_math_DivReply__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_math_FibArgs__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::math.FibArgs, global::math.FibArgs.Builder> internal__static_math_FibArgs__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_math_Num__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::math.Num, global::math.Num.Builder> internal__static_math_Num__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_math_FibReply__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::math.FibReply, global::math.FibReply.Builder> internal__static_math_FibReply__FieldAccessorTable;
- #endregion
#region Descriptor
- public static pbd::FileDescriptor Descriptor {
+ public static pbr::FileDescriptor Descriptor {
get { return descriptor; }
}
- private static pbd::FileDescriptor descriptor;
+ private static pbr::FileDescriptor descriptor;
static Math() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "CgptYXRoLnByb3RvEgRtYXRoIiwKB0RpdkFyZ3MSEAoIZGl2aWRlbmQYASAB",
- "KAMSDwoHZGl2aXNvchgCIAEoAyIvCghEaXZSZXBseRIQCghxdW90aWVudBgB",
- "IAEoAxIRCglyZW1haW5kZXIYAiABKAMiGAoHRmliQXJncxINCgVsaW1pdBgB",
- "IAEoAyISCgNOdW0SCwoDbnVtGAEgASgDIhkKCEZpYlJlcGx5Eg0KBWNvdW50",
- "GAEgASgDMqQBCgRNYXRoEiYKA0RpdhINLm1hdGguRGl2QXJncxoOLm1hdGgu",
- "RGl2UmVwbHkiABIuCgdEaXZNYW55Eg0ubWF0aC5EaXZBcmdzGg4ubWF0aC5E",
- "aXZSZXBseSIAKAEwARIjCgNGaWISDS5tYXRoLkZpYkFyZ3MaCS5tYXRoLk51",
- "bSIAMAESHwoDU3VtEgkubWF0aC5OdW0aCS5tYXRoLk51bSIAKAE="));
- pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
- descriptor = root;
- internal__static_math_DivArgs__Descriptor = Descriptor.MessageTypes[0];
- internal__static_math_DivArgs__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::math.DivArgs, global::math.DivArgs.Builder>(internal__static_math_DivArgs__Descriptor,
- new string[] { "Dividend", "Divisor", });
- internal__static_math_DivReply__Descriptor = Descriptor.MessageTypes[1];
- internal__static_math_DivReply__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::math.DivReply, global::math.DivReply.Builder>(internal__static_math_DivReply__Descriptor,
- new string[] { "Quotient", "Remainder", });
- internal__static_math_FibArgs__Descriptor = Descriptor.MessageTypes[2];
- internal__static_math_FibArgs__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::math.FibArgs, global::math.FibArgs.Builder>(internal__static_math_FibArgs__Descriptor,
- new string[] { "Limit", });
- internal__static_math_Num__Descriptor = Descriptor.MessageTypes[3];
- internal__static_math_Num__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::math.Num, global::math.Num.Builder>(internal__static_math_Num__Descriptor,
- new string[] { "Num_", });
- internal__static_math_FibReply__Descriptor = Descriptor.MessageTypes[4];
- internal__static_math_FibReply__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::math.FibReply, global::math.FibReply.Builder>(internal__static_math_FibReply__Descriptor,
- new string[] { "Count", });
- pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
- RegisterAllExtensions(registry);
- return registry;
- };
- pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
- new pbd::FileDescriptor[] {
- }, assigner);
+ "CgptYXRoLnByb3RvEgRtYXRoIiwKB0RpdkFyZ3MSEAoIZGl2aWRlbmQYASAB",
+ "KAMSDwoHZGl2aXNvchgCIAEoAyIvCghEaXZSZXBseRIQCghxdW90aWVudBgB",
+ "IAEoAxIRCglyZW1haW5kZXIYAiABKAMiGAoHRmliQXJncxINCgVsaW1pdBgB",
+ "IAEoAyISCgNOdW0SCwoDbnVtGAEgASgDIhkKCEZpYlJlcGx5Eg0KBWNvdW50",
+ "GAEgASgDMqQBCgRNYXRoEiYKA0RpdhINLm1hdGguRGl2QXJncxoOLm1hdGgu",
+ "RGl2UmVwbHkiABIuCgdEaXZNYW55Eg0ubWF0aC5EaXZBcmdzGg4ubWF0aC5E",
+ "aXZSZXBseSIAKAEwARIjCgNGaWISDS5tYXRoLkZpYkFyZ3MaCS5tYXRoLk51",
+ "bSIAMAESHwoDU3VtEgkubWF0aC5OdW0aCS5tYXRoLk51bSIAKAFiBnByb3Rv",
+ "Mw=="));
+ descriptor = pbr::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] {
+ new pbr::GeneratedCodeInfo(typeof(global::Math.DivArgs), new[]{ "Dividend", "Divisor" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Math.DivReply), new[]{ "Quotient", "Remainder" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Math.FibArgs), new[]{ "Limit" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Math.Num), new[]{ "Num_" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Math.FibReply), new[]{ "Count" }, null, null, null)
+ }));
}
#endregion
@@ -82,1448 +48,567 @@ namespace math {
}
#region Messages
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class DivArgs : pb::GeneratedMessage<DivArgs, DivArgs.Builder> {
- private DivArgs() { }
- private static readonly DivArgs defaultInstance = new DivArgs().MakeReadOnly();
- private static readonly string[] _divArgsFieldNames = new string[] { "dividend", "divisor" };
- private static readonly uint[] _divArgsFieldTags = new uint[] { 8, 16 };
- public static DivArgs DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class DivArgs : pb::IMessage<DivArgs> {
+ private static readonly pb::MessageParser<DivArgs> _parser = new pb::MessageParser<DivArgs>(() => new DivArgs());
+ public static pb::MessageParser<DivArgs> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Math.Proto.Math.Descriptor.MessageTypes[0]; }
}
- public override DivArgs DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override DivArgs ThisMessage {
- get { return this; }
+ public DivArgs() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::math.Proto.Math.internal__static_math_DivArgs__Descriptor; }
+ partial void OnConstruction();
+
+ public DivArgs(DivArgs other) : this() {
+ dividend_ = other.dividend_;
+ divisor_ = other.divisor_;
}
- protected override pb::FieldAccess.FieldAccessorTable<DivArgs, DivArgs.Builder> InternalFieldAccessors {
- get { return global::math.Proto.Math.internal__static_math_DivArgs__FieldAccessorTable; }
+ public DivArgs Clone() {
+ return new DivArgs(this);
}
public const int DividendFieldNumber = 1;
- private bool hasDividend;
private long dividend_;
- public bool HasDividend {
- get { return hasDividend; }
- }
public long Dividend {
get { return dividend_; }
+ set {
+ dividend_ = value;
+ }
}
public const int DivisorFieldNumber = 2;
- private bool hasDivisor;
private long divisor_;
- public bool HasDivisor {
- get { return hasDivisor; }
- }
public long Divisor {
get { return divisor_; }
+ set {
+ divisor_ = value;
+ }
}
- public override bool IsInitialized {
- get {
- return true;
- }
+ public override bool Equals(object other) {
+ return Equals(other as DivArgs);
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _divArgsFieldNames;
- if (hasDividend) {
- output.WriteInt64(1, field_names[0], Dividend);
+ public bool Equals(DivArgs other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
}
- if (hasDivisor) {
- output.WriteInt64(2, field_names[1], Divisor);
+ if (ReferenceEquals(other, this)) {
+ return true;
}
- UnknownFields.WriteTo(output);
+ if (Dividend != other.Dividend) return false;
+ if (Divisor != other.Divisor) return false;
+ return true;
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasDividend) {
- size += pb::CodedOutputStream.ComputeInt64Size(1, Dividend);
- }
- if (hasDivisor) {
- size += pb::CodedOutputStream.ComputeInt64Size(2, Divisor);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
- }
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Dividend != 0L) hash ^= Dividend.GetHashCode();
+ if (Divisor != 0L) hash ^= Divisor.GetHashCode();
+ return hash;
}
- public static DivArgs ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static DivArgs ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static DivArgs ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static DivArgs ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static DivArgs ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static DivArgs ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- public static DivArgs ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static DivArgs ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static DivArgs ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static DivArgs ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private DivArgs MakeReadOnly() {
- return this;
- }
-
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(DivArgs prototype) {
- return new Builder(prototype);
- }
-
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<DivArgs, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(DivArgs cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private DivArgs result;
-
- private DivArgs PrepareBuilder() {
- if (resultIsReadOnly) {
- DivArgs original = result;
- result = new DivArgs();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
- public override bool IsInitialized {
- get { return result.IsInitialized; }
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Dividend != 0L) {
+ output.WriteRawTag(8);
+ output.WriteInt64(Dividend);
}
-
- protected override DivArgs MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
- }
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::math.DivArgs.Descriptor; }
+ if (Divisor != 0L) {
+ output.WriteRawTag(16);
+ output.WriteInt64(Divisor);
}
+ }
- public override DivArgs DefaultInstanceForType {
- get { return global::math.DivArgs.DefaultInstance; }
+ public int CalculateSize() {
+ int size = 0;
+ if (Dividend != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(Dividend);
}
-
- public override DivArgs BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ if (Divisor != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(Divisor);
}
+ return size;
+ }
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is DivArgs) {
- return MergeFrom((DivArgs) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ public void MergeFrom(DivArgs other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(DivArgs other) {
- if (other == global::math.DivArgs.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasDividend) {
- Dividend = other.Dividend;
- }
- if (other.HasDivisor) {
- Divisor = other.Divisor;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
+ if (other.Dividend != 0L) {
+ Dividend = other.Dividend;
}
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ if (other.Divisor != 0L) {
+ Divisor = other.Divisor;
}
+ }
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_divArgsFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _divArgsFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ Dividend = input.ReadInt64();
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- result.hasDividend = input.ReadInt64(ref result.dividend_);
- break;
- }
- case 16: {
- result.hasDivisor = input.ReadInt64(ref result.divisor_);
- break;
- }
+ case 16: {
+ Divisor = input.ReadInt64();
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasDividend {
- get { return result.hasDividend; }
- }
- public long Dividend {
- get { return result.Dividend; }
- set { SetDividend(value); }
}
- public Builder SetDividend(long value) {
- PrepareBuilder();
- result.hasDividend = true;
- result.dividend_ = value;
- return this;
- }
- public Builder ClearDividend() {
- PrepareBuilder();
- result.hasDividend = false;
- result.dividend_ = 0L;
- return this;
- }
-
- public bool HasDivisor {
- get { return result.hasDivisor; }
- }
- public long Divisor {
- get { return result.Divisor; }
- set { SetDivisor(value); }
- }
- public Builder SetDivisor(long value) {
- PrepareBuilder();
- result.hasDivisor = true;
- result.divisor_ = value;
- return this;
- }
- public Builder ClearDivisor() {
- PrepareBuilder();
- result.hasDivisor = false;
- result.divisor_ = 0L;
- return this;
- }
- }
- static DivArgs() {
- object.ReferenceEquals(global::math.Proto.Math.Descriptor, null);
}
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class DivReply : pb::GeneratedMessage<DivReply, DivReply.Builder> {
- private DivReply() { }
- private static readonly DivReply defaultInstance = new DivReply().MakeReadOnly();
- private static readonly string[] _divReplyFieldNames = new string[] { "quotient", "remainder" };
- private static readonly uint[] _divReplyFieldTags = new uint[] { 8, 16 };
- public static DivReply DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class DivReply : pb::IMessage<DivReply> {
+ private static readonly pb::MessageParser<DivReply> _parser = new pb::MessageParser<DivReply>(() => new DivReply());
+ public static pb::MessageParser<DivReply> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Math.Proto.Math.Descriptor.MessageTypes[1]; }
}
- public override DivReply DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override DivReply ThisMessage {
- get { return this; }
+ public DivReply() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::math.Proto.Math.internal__static_math_DivReply__Descriptor; }
+ partial void OnConstruction();
+
+ public DivReply(DivReply other) : this() {
+ quotient_ = other.quotient_;
+ remainder_ = other.remainder_;
}
- protected override pb::FieldAccess.FieldAccessorTable<DivReply, DivReply.Builder> InternalFieldAccessors {
- get { return global::math.Proto.Math.internal__static_math_DivReply__FieldAccessorTable; }
+ public DivReply Clone() {
+ return new DivReply(this);
}
public const int QuotientFieldNumber = 1;
- private bool hasQuotient;
private long quotient_;
- public bool HasQuotient {
- get { return hasQuotient; }
- }
public long Quotient {
get { return quotient_; }
+ set {
+ quotient_ = value;
+ }
}
public const int RemainderFieldNumber = 2;
- private bool hasRemainder;
private long remainder_;
- public bool HasRemainder {
- get { return hasRemainder; }
- }
public long Remainder {
get { return remainder_; }
- }
-
- public override bool IsInitialized {
- get {
- return true;
+ set {
+ remainder_ = value;
}
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _divReplyFieldNames;
- if (hasQuotient) {
- output.WriteInt64(1, field_names[0], Quotient);
- }
- if (hasRemainder) {
- output.WriteInt64(2, field_names[1], Remainder);
- }
- UnknownFields.WriteTo(output);
+ public override bool Equals(object other) {
+ return Equals(other as DivReply);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasQuotient) {
- size += pb::CodedOutputStream.ComputeInt64Size(1, Quotient);
- }
- if (hasRemainder) {
- size += pb::CodedOutputStream.ComputeInt64Size(2, Remainder);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(DivReply other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
}
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Quotient != other.Quotient) return false;
+ if (Remainder != other.Remainder) return false;
+ return true;
}
- public static DivReply ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static DivReply ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static DivReply ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static DivReply ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static DivReply ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static DivReply ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static DivReply ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static DivReply ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static DivReply ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static DivReply ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private DivReply MakeReadOnly() {
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Quotient != 0L) hash ^= Quotient.GetHashCode();
+ if (Remainder != 0L) hash ^= Remainder.GetHashCode();
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(DivReply prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<DivReply, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(DivReply cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private DivReply result;
-
- private DivReply PrepareBuilder() {
- if (resultIsReadOnly) {
- DivReply original = result;
- result = new DivReply();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override DivReply MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Quotient != 0L) {
+ output.WriteRawTag(8);
+ output.WriteInt64(Quotient);
}
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::math.DivReply.Descriptor; }
+ if (Remainder != 0L) {
+ output.WriteRawTag(16);
+ output.WriteInt64(Remainder);
}
+ }
- public override DivReply DefaultInstanceForType {
- get { return global::math.DivReply.DefaultInstance; }
+ public int CalculateSize() {
+ int size = 0;
+ if (Quotient != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(Quotient);
}
-
- public override DivReply BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ if (Remainder != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(Remainder);
}
+ return size;
+ }
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is DivReply) {
- return MergeFrom((DivReply) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ public void MergeFrom(DivReply other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(DivReply other) {
- if (other == global::math.DivReply.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasQuotient) {
- Quotient = other.Quotient;
- }
- if (other.HasRemainder) {
- Remainder = other.Remainder;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
+ if (other.Quotient != 0L) {
+ Quotient = other.Quotient;
}
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ if (other.Remainder != 0L) {
+ Remainder = other.Remainder;
}
+ }
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_divReplyFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _divReplyFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ Quotient = input.ReadInt64();
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- result.hasQuotient = input.ReadInt64(ref result.quotient_);
- break;
- }
- case 16: {
- result.hasRemainder = input.ReadInt64(ref result.remainder_);
- break;
- }
+ case 16: {
+ Remainder = input.ReadInt64();
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasQuotient {
- get { return result.hasQuotient; }
- }
- public long Quotient {
- get { return result.Quotient; }
- set { SetQuotient(value); }
- }
- public Builder SetQuotient(long value) {
- PrepareBuilder();
- result.hasQuotient = true;
- result.quotient_ = value;
- return this;
- }
- public Builder ClearQuotient() {
- PrepareBuilder();
- result.hasQuotient = false;
- result.quotient_ = 0L;
- return this;
- }
-
- public bool HasRemainder {
- get { return result.hasRemainder; }
- }
- public long Remainder {
- get { return result.Remainder; }
- set { SetRemainder(value); }
- }
- public Builder SetRemainder(long value) {
- PrepareBuilder();
- result.hasRemainder = true;
- result.remainder_ = value;
- return this;
}
- public Builder ClearRemainder() {
- PrepareBuilder();
- result.hasRemainder = false;
- result.remainder_ = 0L;
- return this;
- }
- }
- static DivReply() {
- object.ReferenceEquals(global::math.Proto.Math.Descriptor, null);
}
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class FibArgs : pb::GeneratedMessage<FibArgs, FibArgs.Builder> {
- private FibArgs() { }
- private static readonly FibArgs defaultInstance = new FibArgs().MakeReadOnly();
- private static readonly string[] _fibArgsFieldNames = new string[] { "limit" };
- private static readonly uint[] _fibArgsFieldTags = new uint[] { 8 };
- public static FibArgs DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class FibArgs : pb::IMessage<FibArgs> {
+ private static readonly pb::MessageParser<FibArgs> _parser = new pb::MessageParser<FibArgs>(() => new FibArgs());
+ public static pb::MessageParser<FibArgs> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Math.Proto.Math.Descriptor.MessageTypes[2]; }
}
- public override FibArgs DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override FibArgs ThisMessage {
- get { return this; }
+ public FibArgs() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::math.Proto.Math.internal__static_math_FibArgs__Descriptor; }
+ partial void OnConstruction();
+
+ public FibArgs(FibArgs other) : this() {
+ limit_ = other.limit_;
}
- protected override pb::FieldAccess.FieldAccessorTable<FibArgs, FibArgs.Builder> InternalFieldAccessors {
- get { return global::math.Proto.Math.internal__static_math_FibArgs__FieldAccessorTable; }
+ public FibArgs Clone() {
+ return new FibArgs(this);
}
public const int LimitFieldNumber = 1;
- private bool hasLimit;
private long limit_;
- public bool HasLimit {
- get { return hasLimit; }
- }
public long Limit {
get { return limit_; }
- }
-
- public override bool IsInitialized {
- get {
- return true;
+ set {
+ limit_ = value;
}
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _fibArgsFieldNames;
- if (hasLimit) {
- output.WriteInt64(1, field_names[0], Limit);
- }
- UnknownFields.WriteTo(output);
+ public override bool Equals(object other) {
+ return Equals(other as FibArgs);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasLimit) {
- size += pb::CodedOutputStream.ComputeInt64Size(1, Limit);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(FibArgs other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
}
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Limit != other.Limit) return false;
+ return true;
}
- public static FibArgs ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static FibArgs ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static FibArgs ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static FibArgs ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static FibArgs ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static FibArgs ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static FibArgs ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static FibArgs ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static FibArgs ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static FibArgs ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private FibArgs MakeReadOnly() {
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Limit != 0L) hash ^= Limit.GetHashCode();
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(FibArgs prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<FibArgs, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(FibArgs cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private FibArgs result;
-
- private FibArgs PrepareBuilder() {
- if (resultIsReadOnly) {
- FibArgs original = result;
- result = new FibArgs();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override FibArgs MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
- }
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::math.FibArgs.Descriptor; }
- }
-
- public override FibArgs DefaultInstanceForType {
- get { return global::math.FibArgs.DefaultInstance; }
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Limit != 0L) {
+ output.WriteRawTag(8);
+ output.WriteInt64(Limit);
}
+ }
- public override FibArgs BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
- }
-
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is FibArgs) {
- return MergeFrom((FibArgs) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ public int CalculateSize() {
+ int size = 0;
+ if (Limit != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(Limit);
}
+ return size;
+ }
- public override Builder MergeFrom(FibArgs other) {
- if (other == global::math.FibArgs.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasLimit) {
- Limit = other.Limit;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
+ public void MergeFrom(FibArgs other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ if (other.Limit != 0L) {
+ Limit = other.Limit;
}
+ }
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_fibArgsFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _fibArgsFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ Limit = input.ReadInt64();
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- result.hasLimit = input.ReadInt64(ref result.limit_);
- break;
- }
- }
- }
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
}
- return this;
- }
-
-
- public bool HasLimit {
- get { return result.hasLimit; }
- }
- public long Limit {
- get { return result.Limit; }
- set { SetLimit(value); }
- }
- public Builder SetLimit(long value) {
- PrepareBuilder();
- result.hasLimit = true;
- result.limit_ = value;
- return this;
}
- public Builder ClearLimit() {
- PrepareBuilder();
- result.hasLimit = false;
- result.limit_ = 0L;
- return this;
- }
- }
- static FibArgs() {
- object.ReferenceEquals(global::math.Proto.Math.Descriptor, null);
}
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Num : pb::GeneratedMessage<Num, Num.Builder> {
- private Num() { }
- private static readonly Num defaultInstance = new Num().MakeReadOnly();
- private static readonly string[] _numFieldNames = new string[] { "num" };
- private static readonly uint[] _numFieldTags = new uint[] { 8 };
- public static Num DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class Num : pb::IMessage<Num> {
+ private static readonly pb::MessageParser<Num> _parser = new pb::MessageParser<Num>(() => new Num());
+ public static pb::MessageParser<Num> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Math.Proto.Math.Descriptor.MessageTypes[3]; }
}
- public override Num DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override Num ThisMessage {
- get { return this; }
+ public Num() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::math.Proto.Math.internal__static_math_Num__Descriptor; }
+ partial void OnConstruction();
+
+ public Num(Num other) : this() {
+ num_ = other.num_;
}
- protected override pb::FieldAccess.FieldAccessorTable<Num, Num.Builder> InternalFieldAccessors {
- get { return global::math.Proto.Math.internal__static_math_Num__FieldAccessorTable; }
+ public Num Clone() {
+ return new Num(this);
}
public const int Num_FieldNumber = 1;
- private bool hasNum_;
private long num_;
- public bool HasNum_ {
- get { return hasNum_; }
- }
public long Num_ {
get { return num_; }
- }
-
- public override bool IsInitialized {
- get {
- return true;
+ set {
+ num_ = value;
}
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _numFieldNames;
- if (hasNum_) {
- output.WriteInt64(1, field_names[0], Num_);
- }
- UnknownFields.WriteTo(output);
+ public override bool Equals(object other) {
+ return Equals(other as Num);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasNum_) {
- size += pb::CodedOutputStream.ComputeInt64Size(1, Num_);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(Num other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
}
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Num_ != other.Num_) return false;
+ return true;
}
- public static Num ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static Num ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static Num ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static Num ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static Num ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static Num ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static Num ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static Num ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static Num ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static Num ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private Num MakeReadOnly() {
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Num_ != 0L) hash ^= Num_.GetHashCode();
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(Num prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<Num, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(Num cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private Num result;
-
- private Num PrepareBuilder() {
- if (resultIsReadOnly) {
- Num original = result;
- result = new Num();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override Num MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
- }
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::math.Num.Descriptor; }
- }
-
- public override Num DefaultInstanceForType {
- get { return global::math.Num.DefaultInstance; }
- }
-
- public override Num BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Num_ != 0L) {
+ output.WriteRawTag(8);
+ output.WriteInt64(Num_);
}
+ }
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is Num) {
- return MergeFrom((Num) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ public int CalculateSize() {
+ int size = 0;
+ if (Num_ != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(Num_);
}
+ return size;
+ }
- public override Builder MergeFrom(Num other) {
- if (other == global::math.Num.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasNum_) {
- Num_ = other.Num_;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
+ public void MergeFrom(Num other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ if (other.Num_ != 0L) {
+ Num_ = other.Num_;
}
+ }
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_numFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _numFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
- }
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- result.hasNum_ = input.ReadInt64(ref result.num_);
- break;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ Num_ = input.ReadInt64();
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasNum_ {
- get { return result.hasNum_; }
- }
- public long Num_ {
- get { return result.Num_; }
- set { SetNum_(value); }
- }
- public Builder SetNum_(long value) {
- PrepareBuilder();
- result.hasNum_ = true;
- result.num_ = value;
- return this;
- }
- public Builder ClearNum_() {
- PrepareBuilder();
- result.hasNum_ = false;
- result.num_ = 0L;
- return this;
}
}
- static Num() {
- object.ReferenceEquals(global::math.Proto.Math.Descriptor, null);
- }
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class FibReply : pb::GeneratedMessage<FibReply, FibReply.Builder> {
- private FibReply() { }
- private static readonly FibReply defaultInstance = new FibReply().MakeReadOnly();
- private static readonly string[] _fibReplyFieldNames = new string[] { "count" };
- private static readonly uint[] _fibReplyFieldTags = new uint[] { 8 };
- public static FibReply DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class FibReply : pb::IMessage<FibReply> {
+ private static readonly pb::MessageParser<FibReply> _parser = new pb::MessageParser<FibReply>(() => new FibReply());
+ public static pb::MessageParser<FibReply> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Math.Proto.Math.Descriptor.MessageTypes[4]; }
}
- public override FibReply DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override FibReply ThisMessage {
- get { return this; }
+ public FibReply() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::math.Proto.Math.internal__static_math_FibReply__Descriptor; }
+ partial void OnConstruction();
+
+ public FibReply(FibReply other) : this() {
+ count_ = other.count_;
}
- protected override pb::FieldAccess.FieldAccessorTable<FibReply, FibReply.Builder> InternalFieldAccessors {
- get { return global::math.Proto.Math.internal__static_math_FibReply__FieldAccessorTable; }
+ public FibReply Clone() {
+ return new FibReply(this);
}
public const int CountFieldNumber = 1;
- private bool hasCount;
private long count_;
- public bool HasCount {
- get { return hasCount; }
- }
public long Count {
get { return count_; }
- }
-
- public override bool IsInitialized {
- get {
- return true;
+ set {
+ count_ = value;
}
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _fibReplyFieldNames;
- if (hasCount) {
- output.WriteInt64(1, field_names[0], Count);
- }
- UnknownFields.WriteTo(output);
+ public override bool Equals(object other) {
+ return Equals(other as FibReply);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasCount) {
- size += pb::CodedOutputStream.ComputeInt64Size(1, Count);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(FibReply other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
}
+ if (Count != other.Count) return false;
+ return true;
}
- public static FibReply ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static FibReply ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static FibReply ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static FibReply ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static FibReply ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static FibReply ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static FibReply ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static FibReply ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static FibReply ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static FibReply ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private FibReply MakeReadOnly() {
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Count != 0L) hash ^= Count.GetHashCode();
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(FibReply prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<FibReply, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(FibReply cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private FibReply result;
-
- private FibReply PrepareBuilder() {
- if (resultIsReadOnly) {
- FibReply original = result;
- result = new FibReply();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override FibReply MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
- }
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::math.FibReply.Descriptor; }
- }
-
- public override FibReply DefaultInstanceForType {
- get { return global::math.FibReply.DefaultInstance; }
- }
-
- public override FibReply BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Count != 0L) {
+ output.WriteRawTag(8);
+ output.WriteInt64(Count);
}
+ }
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is FibReply) {
- return MergeFrom((FibReply) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ public int CalculateSize() {
+ int size = 0;
+ if (Count != 0L) {
+ size += 1 + pb::CodedOutputStream.ComputeInt64Size(Count);
}
+ return size;
+ }
- public override Builder MergeFrom(FibReply other) {
- if (other == global::math.FibReply.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasCount) {
- Count = other.Count;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
+ public void MergeFrom(FibReply other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ if (other.Count != 0L) {
+ Count = other.Count;
}
+ }
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_fibReplyFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _fibReplyFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
- }
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- result.hasCount = input.ReadInt64(ref result.count_);
- break;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ Count = input.ReadInt64();
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
}
-
-
- public bool HasCount {
- get { return result.hasCount; }
- }
- public long Count {
- get { return result.Count; }
- set { SetCount(value); }
- }
- public Builder SetCount(long value) {
- PrepareBuilder();
- result.hasCount = true;
- result.count_ = value;
- return this;
- }
- public Builder ClearCount() {
- PrepareBuilder();
- result.hasCount = false;
- result.count_ = 0L;
- return this;
- }
- }
- static FibReply() {
- object.ReferenceEquals(global::math.Proto.Math.Descriptor, null);
}
- }
- #endregion
+ }
- #region Services
- /*
- * Service generation is now disabled by default, use the following option to enable:
- * option (google.protobuf.csharp_file_options).service_generator_type = GENERIC;
- */
#endregion
}
diff --git a/src/csharp/Grpc.Examples/MathExamples.cs b/src/csharp/Grpc.Examples/MathExamples.cs
index dc1bf43995..8009ccbbfa 100644
--- a/src/csharp/Grpc.Examples/MathExamples.cs
+++ b/src/csharp/Grpc.Examples/MathExamples.cs
@@ -34,25 +34,25 @@ using System.Collections.Generic;
using System.Threading.Tasks;
using Grpc.Core.Utils;
-namespace math
+namespace Math
{
public static class MathExamples
{
public static void DivExample(Math.IMathClient client)
{
- DivReply result = client.Div(new DivArgs.Builder { Dividend = 10, Divisor = 3 }.Build());
+ DivReply result = client.Div(new DivArgs { Dividend = 10, Divisor = 3 });
Console.WriteLine("Div Result: " + result);
}
public static async Task DivAsyncExample(Math.IMathClient client)
{
- DivReply result = await client.DivAsync(new DivArgs.Builder { Dividend = 4, Divisor = 5 }.Build());
+ DivReply result = await client.DivAsync(new DivArgs { Dividend = 4, Divisor = 5 });
Console.WriteLine("DivAsync Result: " + result);
}
public static async Task FibExample(Math.IMathClient client)
{
- using (var call = client.Fib(new FibArgs.Builder { Limit = 5 }.Build()))
+ using (var call = client.Fib(new FibArgs { Limit = 5 }))
{
List<Num> result = await call.ResponseStream.ToListAsync();
Console.WriteLine("Fib Result: " + string.Join("|", result));
@@ -63,9 +63,9 @@ namespace math
{
var numbers = new List<Num>
{
- new Num.Builder { Num_ = 1 }.Build(),
- new Num.Builder { Num_ = 2 }.Build(),
- new Num.Builder { Num_ = 3 }.Build()
+ new Num { Num_ = 1 },
+ new Num { Num_ = 2 },
+ new Num { Num_ = 3 }
};
using (var call = client.Sum())
@@ -79,9 +79,9 @@ namespace math
{
var divArgsList = new List<DivArgs>
{
- new DivArgs.Builder { Dividend = 10, Divisor = 3 }.Build(),
- new DivArgs.Builder { Dividend = 100, Divisor = 21 }.Build(),
- new DivArgs.Builder { Dividend = 7, Divisor = 2 }.Build()
+ new DivArgs { Dividend = 10, Divisor = 3 },
+ new DivArgs { Dividend = 100, Divisor = 21 },
+ new DivArgs { Dividend = 7, Divisor = 2 }
};
using (var call = client.DivMany())
{
@@ -94,9 +94,9 @@ namespace math
{
var numbers = new List<Num>
{
- new Num.Builder { Num_ = 1 }.Build(),
- new Num.Builder { Num_ = 2 }.Build(),
- new Num.Builder { Num_ = 3 }.Build()
+ new Num { Num_ = 1 },
+ new Num { Num_ = 2 },
+ new Num { Num_ = 3 }
};
Num sum;
@@ -106,7 +106,7 @@ namespace math
sum = await sumCall.ResponseAsync;
}
- DivReply result = await client.DivAsync(new DivArgs.Builder { Dividend = sum.Num_, Divisor = numbers.Count }.Build());
+ DivReply result = await client.DivAsync(new DivArgs { Dividend = sum.Num_, Divisor = numbers.Count });
Console.WriteLine("Avg Result: " + result);
}
}
diff --git a/src/csharp/Grpc.Examples/MathGrpc.cs b/src/csharp/Grpc.Examples/MathGrpc.cs
index 4941ff35f7..175d110f76 100644
--- a/src/csharp/Grpc.Examples/MathGrpc.cs
+++ b/src/csharp/Grpc.Examples/MathGrpc.cs
@@ -7,66 +7,72 @@ using System.Threading;
using System.Threading.Tasks;
using Grpc.Core;
-namespace math {
+namespace Math {
public static class Math
{
static readonly string __ServiceName = "math.Math";
- static readonly Marshaller<global::math.DivArgs> __Marshaller_DivArgs = Marshallers.Create((arg) => arg.ToByteArray(), global::math.DivArgs.ParseFrom);
- static readonly Marshaller<global::math.DivReply> __Marshaller_DivReply = Marshallers.Create((arg) => arg.ToByteArray(), global::math.DivReply.ParseFrom);
- static readonly Marshaller<global::math.FibArgs> __Marshaller_FibArgs = Marshallers.Create((arg) => arg.ToByteArray(), global::math.FibArgs.ParseFrom);
- static readonly Marshaller<global::math.Num> __Marshaller_Num = Marshallers.Create((arg) => arg.ToByteArray(), global::math.Num.ParseFrom);
+ static readonly Marshaller<global::Math.DivArgs> __Marshaller_DivArgs = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Math.DivArgs.Parser.ParseFrom);
+ static readonly Marshaller<global::Math.DivReply> __Marshaller_DivReply = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Math.DivReply.Parser.ParseFrom);
+ static readonly Marshaller<global::Math.FibArgs> __Marshaller_FibArgs = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Math.FibArgs.Parser.ParseFrom);
+ static readonly Marshaller<global::Math.Num> __Marshaller_Num = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Math.Num.Parser.ParseFrom);
- static readonly Method<global::math.DivArgs, global::math.DivReply> __Method_Div = new Method<global::math.DivArgs, global::math.DivReply>(
+ static readonly Method<global::Math.DivArgs, global::Math.DivReply> __Method_Div = new Method<global::Math.DivArgs, global::Math.DivReply>(
MethodType.Unary,
__ServiceName,
"Div",
__Marshaller_DivArgs,
__Marshaller_DivReply);
- static readonly Method<global::math.DivArgs, global::math.DivReply> __Method_DivMany = new Method<global::math.DivArgs, global::math.DivReply>(
+ static readonly Method<global::Math.DivArgs, global::Math.DivReply> __Method_DivMany = new Method<global::Math.DivArgs, global::Math.DivReply>(
MethodType.DuplexStreaming,
__ServiceName,
"DivMany",
__Marshaller_DivArgs,
__Marshaller_DivReply);
- static readonly Method<global::math.FibArgs, global::math.Num> __Method_Fib = new Method<global::math.FibArgs, global::math.Num>(
+ static readonly Method<global::Math.FibArgs, global::Math.Num> __Method_Fib = new Method<global::Math.FibArgs, global::Math.Num>(
MethodType.ServerStreaming,
__ServiceName,
"Fib",
__Marshaller_FibArgs,
__Marshaller_Num);
- static readonly Method<global::math.Num, global::math.Num> __Method_Sum = new Method<global::math.Num, global::math.Num>(
+ static readonly Method<global::Math.Num, global::Math.Num> __Method_Sum = new Method<global::Math.Num, global::Math.Num>(
MethodType.ClientStreaming,
__ServiceName,
"Sum",
__Marshaller_Num,
__Marshaller_Num);
+ // service descriptor
+ public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
+ {
+ get { return global::Math.Proto.Math.Descriptor.Services[0]; }
+ }
+
// client interface
public interface IMathClient
{
- global::math.DivReply Div(global::math.DivArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- global::math.DivReply Div(global::math.DivArgs request, CallOptions options);
- AsyncUnaryCall<global::math.DivReply> DivAsync(global::math.DivArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- AsyncUnaryCall<global::math.DivReply> DivAsync(global::math.DivArgs request, CallOptions options);
- AsyncDuplexStreamingCall<global::math.DivArgs, global::math.DivReply> DivMany(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- AsyncDuplexStreamingCall<global::math.DivArgs, global::math.DivReply> DivMany(CallOptions options);
- AsyncServerStreamingCall<global::math.Num> Fib(global::math.FibArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- AsyncServerStreamingCall<global::math.Num> Fib(global::math.FibArgs request, CallOptions options);
- AsyncClientStreamingCall<global::math.Num, global::math.Num> Sum(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- AsyncClientStreamingCall<global::math.Num, global::math.Num> Sum(CallOptions options);
+ global::Math.DivReply Div(global::Math.DivArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ global::Math.DivReply Div(global::Math.DivArgs request, CallOptions options);
+ AsyncUnaryCall<global::Math.DivReply> DivAsync(global::Math.DivArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ AsyncUnaryCall<global::Math.DivReply> DivAsync(global::Math.DivArgs request, CallOptions options);
+ AsyncDuplexStreamingCall<global::Math.DivArgs, global::Math.DivReply> DivMany(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ AsyncDuplexStreamingCall<global::Math.DivArgs, global::Math.DivReply> DivMany(CallOptions options);
+ AsyncServerStreamingCall<global::Math.Num> Fib(global::Math.FibArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ AsyncServerStreamingCall<global::Math.Num> Fib(global::Math.FibArgs request, CallOptions options);
+ AsyncClientStreamingCall<global::Math.Num, global::Math.Num> Sum(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ AsyncClientStreamingCall<global::Math.Num, global::Math.Num> Sum(CallOptions options);
}
// server-side interface
public interface IMath
{
- Task<global::math.DivReply> Div(global::math.DivArgs request, ServerCallContext context);
- Task DivMany(IAsyncStreamReader<global::math.DivArgs> requestStream, IServerStreamWriter<global::math.DivReply> responseStream, ServerCallContext context);
- Task Fib(global::math.FibArgs request, IServerStreamWriter<global::math.Num> responseStream, ServerCallContext context);
- Task<global::math.Num> Sum(IAsyncStreamReader<global::math.Num> requestStream, ServerCallContext context);
+ Task<global::Math.DivReply> Div(global::Math.DivArgs request, ServerCallContext context);
+ Task DivMany(IAsyncStreamReader<global::Math.DivArgs> requestStream, IServerStreamWriter<global::Math.DivReply> responseStream, ServerCallContext context);
+ Task Fib(global::Math.FibArgs request, IServerStreamWriter<global::Math.Num> responseStream, ServerCallContext context);
+ Task<global::Math.Num> Sum(IAsyncStreamReader<global::Math.Num> requestStream, ServerCallContext context);
}
// client stub
@@ -75,52 +81,52 @@ namespace math {
public MathClient(Channel channel) : base(channel)
{
}
- public global::math.DivReply Div(global::math.DivArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public global::Math.DivReply Div(global::Math.DivArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_Div, new CallOptions(headers, deadline, cancellationToken));
return Calls.BlockingUnaryCall(call, request);
}
- public global::math.DivReply Div(global::math.DivArgs request, CallOptions options)
+ public global::Math.DivReply Div(global::Math.DivArgs request, CallOptions options)
{
var call = CreateCall(__Method_Div, options);
return Calls.BlockingUnaryCall(call, request);
}
- public AsyncUnaryCall<global::math.DivReply> DivAsync(global::math.DivArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public AsyncUnaryCall<global::Math.DivReply> DivAsync(global::Math.DivArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_Div, new CallOptions(headers, deadline, cancellationToken));
return Calls.AsyncUnaryCall(call, request);
}
- public AsyncUnaryCall<global::math.DivReply> DivAsync(global::math.DivArgs request, CallOptions options)
+ public AsyncUnaryCall<global::Math.DivReply> DivAsync(global::Math.DivArgs request, CallOptions options)
{
var call = CreateCall(__Method_Div, options);
return Calls.AsyncUnaryCall(call, request);
}
- public AsyncDuplexStreamingCall<global::math.DivArgs, global::math.DivReply> DivMany(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public AsyncDuplexStreamingCall<global::Math.DivArgs, global::Math.DivReply> DivMany(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_DivMany, new CallOptions(headers, deadline, cancellationToken));
return Calls.AsyncDuplexStreamingCall(call);
}
- public AsyncDuplexStreamingCall<global::math.DivArgs, global::math.DivReply> DivMany(CallOptions options)
+ public AsyncDuplexStreamingCall<global::Math.DivArgs, global::Math.DivReply> DivMany(CallOptions options)
{
var call = CreateCall(__Method_DivMany, options);
return Calls.AsyncDuplexStreamingCall(call);
}
- public AsyncServerStreamingCall<global::math.Num> Fib(global::math.FibArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public AsyncServerStreamingCall<global::Math.Num> Fib(global::Math.FibArgs request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_Fib, new CallOptions(headers, deadline, cancellationToken));
return Calls.AsyncServerStreamingCall(call, request);
}
- public AsyncServerStreamingCall<global::math.Num> Fib(global::math.FibArgs request, CallOptions options)
+ public AsyncServerStreamingCall<global::Math.Num> Fib(global::Math.FibArgs request, CallOptions options)
{
var call = CreateCall(__Method_Fib, options);
return Calls.AsyncServerStreamingCall(call, request);
}
- public AsyncClientStreamingCall<global::math.Num, global::math.Num> Sum(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public AsyncClientStreamingCall<global::Math.Num, global::Math.Num> Sum(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_Sum, new CallOptions(headers, deadline, cancellationToken));
return Calls.AsyncClientStreamingCall(call);
}
- public AsyncClientStreamingCall<global::math.Num, global::math.Num> Sum(CallOptions options)
+ public AsyncClientStreamingCall<global::Math.Num, global::Math.Num> Sum(CallOptions options)
{
var call = CreateCall(__Method_Sum, options);
return Calls.AsyncClientStreamingCall(call);
diff --git a/src/csharp/Grpc.Examples/MathServiceImpl.cs b/src/csharp/Grpc.Examples/MathServiceImpl.cs
index 7b2684615c..71dc655e46 100644
--- a/src/csharp/Grpc.Examples/MathServiceImpl.cs
+++ b/src/csharp/Grpc.Examples/MathServiceImpl.cs
@@ -38,7 +38,7 @@ using System.Threading.Tasks;
using Grpc.Core;
using Grpc.Core.Utils;
-namespace math
+namespace Math
{
/// <summary>
/// Implementation of MathService server
@@ -79,7 +79,7 @@ namespace math
{
sum += num.Num_;
});
- return Num.CreateBuilder().SetNum_(sum).Build();
+ return new Num { Num_ = sum };
}
public async Task DivMany(IAsyncStreamReader<DivArgs> requestStream, IServerStreamWriter<DivReply> responseStream, ServerCallContext context)
@@ -91,13 +91,13 @@ namespace math
{
long quotient = args.Dividend / args.Divisor;
long remainder = args.Dividend % args.Divisor;
- return new DivReply.Builder { Quotient = quotient, Remainder = remainder }.Build();
+ return new DivReply { Quotient = quotient, Remainder = remainder };
}
static IEnumerable<Num> FibInternal(long n)
{
long a = 1;
- yield return new Num.Builder { Num_ = a }.Build();
+ yield return new Num { Num_ = a };
long b = 1;
for (long i = 0; i < n - 1; i++)
@@ -105,7 +105,7 @@ namespace math
long temp = a;
a = b;
b = temp + b;
- yield return new Num.Builder { Num_ = a }.Build();
+ yield return new Num { Num_ = a };
}
}
}
diff --git a/src/csharp/Grpc.Examples/packages.config b/src/csharp/Grpc.Examples/packages.config
index 4c8d60fa62..adf8da2363 100644
--- a/src/csharp/Grpc.Examples/packages.config
+++ b/src/csharp/Grpc.Examples/packages.config
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Google.ProtocolBuffers" version="2.4.1.521" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.0.0-alpha4" targetFramework="net45" />
<package id="Ix-Async" version="1.2.3" targetFramework="net45" />
<package id="NUnit" version="2.6.4" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.Examples/proto/math.proto b/src/csharp/Grpc.Examples/proto/math.proto
index 5485d580c3..311e148c02 100644
--- a/src/csharp/Grpc.Examples/proto/math.proto
+++ b/src/csharp/Grpc.Examples/proto/math.proto
@@ -28,30 +28,30 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-syntax = "proto2";
+syntax = "proto3";
package math;
message DivArgs {
- optional int64 dividend = 1;
- optional int64 divisor = 2;
+ int64 dividend = 1;
+ int64 divisor = 2;
}
message DivReply {
- optional int64 quotient = 1;
- optional int64 remainder = 2;
+ int64 quotient = 1;
+ int64 remainder = 2;
}
message FibArgs {
- optional int64 limit = 1;
+ int64 limit = 1;
}
message Num {
- optional int64 num = 1;
+ int64 num = 1;
}
message FibReply {
- optional int64 count = 1;
+ int64 count = 1;
}
service Math {
diff --git a/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj b/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
index c922ddfb9e..396dc43a02 100644
--- a/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
+++ b/src/csharp/Grpc.HealthCheck.Tests/Grpc.HealthCheck.Tests.csproj
@@ -37,11 +37,9 @@
<AssemblyOriginatorKeyFile>C:\keys\Grpc.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
- <Reference Include="Google.ProtocolBuffers">
- <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.dll</HintPath>
- </Reference>
- <Reference Include="Google.ProtocolBuffers.Serialization">
- <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.Serialization.dll</HintPath>
+ <Reference Include="Google.Protobuf, Version=3.0.0.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Google.Protobuf.3.0.0-alpha4\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath>
</Reference>
<Reference Include="nunit.framework">
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
diff --git a/src/csharp/Grpc.HealthCheck.Tests/HealthClientServerTest.cs b/src/csharp/Grpc.HealthCheck.Tests/HealthClientServerTest.cs
index 80c35fb197..6c3a53bec0 100644
--- a/src/csharp/Grpc.HealthCheck.Tests/HealthClientServerTest.cs
+++ b/src/csharp/Grpc.HealthCheck.Tests/HealthClientServerTest.cs
@@ -81,14 +81,14 @@ namespace Grpc.HealthCheck.Tests
{
serviceImpl.SetStatus("", "", HealthCheckResponse.Types.ServingStatus.SERVING);
- var response = client.Check(HealthCheckRequest.CreateBuilder().SetHost("").SetService("").Build());
+ var response = client.Check(new HealthCheckRequest { Host = "", Service = "" });
Assert.AreEqual(HealthCheckResponse.Types.ServingStatus.SERVING, response.Status);
}
[Test]
public void ServiceDoesntExist()
{
- Assert.Throws(Is.TypeOf(typeof(RpcException)).And.Property("Status").Property("StatusCode").EqualTo(StatusCode.NotFound), () => client.Check(HealthCheckRequest.CreateBuilder().SetHost("").SetService("nonexistent.service").Build()));
+ Assert.Throws(Is.TypeOf(typeof(RpcException)).And.Property("Status").Property("StatusCode").EqualTo(StatusCode.NotFound), () => client.Check(new HealthCheckRequest { Host = "", Service = "nonexistent.service" }));
}
// TODO(jtattermusch): add test with timeout once timeouts are supported
diff --git a/src/csharp/Grpc.HealthCheck.Tests/HealthServiceImplTest.cs b/src/csharp/Grpc.HealthCheck.Tests/HealthServiceImplTest.cs
index c4caa3b57a..2097c0dc8c 100644
--- a/src/csharp/Grpc.HealthCheck.Tests/HealthServiceImplTest.cs
+++ b/src/csharp/Grpc.HealthCheck.Tests/HealthServiceImplTest.cs
@@ -101,7 +101,7 @@ namespace Grpc.HealthCheck.Tests
private static HealthCheckResponse.Types.ServingStatus GetStatusHelper(HealthServiceImpl impl, string host, string service)
{
- return impl.Check(HealthCheckRequest.CreateBuilder().SetHost(host).SetService(service).Build(), null).Result.Status;
+ return impl.Check(new HealthCheckRequest { Host = host, Service = service }, null).Result.Status;
}
}
}
diff --git a/src/csharp/Grpc.HealthCheck.Tests/packages.config b/src/csharp/Grpc.HealthCheck.Tests/packages.config
index 050c4eaed6..40ffb85203 100644
--- a/src/csharp/Grpc.HealthCheck.Tests/packages.config
+++ b/src/csharp/Grpc.HealthCheck.Tests/packages.config
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Google.ProtocolBuffers" version="2.4.1.555" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.0.0-alpha4" targetFramework="net45" />
<package id="NUnit" version="2.6.4" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj b/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj
index 0b7a7b91c6..8fce5d39aa 100644
--- a/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj
+++ b/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.csproj
@@ -38,11 +38,9 @@
<AssemblyOriginatorKeyFile>C:\keys\Grpc.snk</AssemblyOriginatorKeyFile>
</PropertyGroup>
<ItemGroup>
- <Reference Include="Google.ProtocolBuffers">
- <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.dll</HintPath>
- </Reference>
- <Reference Include="Google.ProtocolBuffers.Serialization">
- <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.555\lib\net40\Google.ProtocolBuffers.Serialization.dll</HintPath>
+ <Reference Include="Google.Protobuf, Version=3.0.0.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Google.Protobuf.3.0.0-alpha4\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
diff --git a/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.nuspec b/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.nuspec
index acdfba42c8..66386288df 100644
--- a/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.nuspec
+++ b/src/csharp/Grpc.HealthCheck/Grpc.HealthCheck.nuspec
@@ -14,7 +14,7 @@
<copyright>Copyright 2015, Google Inc.</copyright>
<tags>gRPC health check</tags>
<dependencies>
- <dependency id="Google.ProtocolBuffers" version="2.4.1.555" />
+ <dependency id="Google.Protobuf" version="$ProtobufVersion$" />
<dependency id="Grpc.Core" version="$version$" />
<dependency id="Ix-Async" version="1.2.3" />
</dependencies>
diff --git a/src/csharp/Grpc.HealthCheck/Health.cs b/src/csharp/Grpc.HealthCheck/Health.cs
index 361382d4bd..570e274544 100644
--- a/src/csharp/Grpc.HealthCheck/Health.cs
+++ b/src/csharp/Grpc.HealthCheck/Health.cs
@@ -3,9 +3,9 @@
#pragma warning disable 1591, 0612, 3021
#region Designer generated code
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Grpc.Health.V1Alpha {
@@ -14,21 +14,11 @@ namespace Grpc.Health.V1Alpha {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public static partial class Health {
- #region Extension registration
- public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
- }
- #endregion
- #region Static variables
- internal static pbd::MessageDescriptor internal__static_grpc_health_v1alpha_HealthCheckRequest__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::Grpc.Health.V1Alpha.HealthCheckRequest, global::Grpc.Health.V1Alpha.HealthCheckRequest.Builder> internal__static_grpc_health_v1alpha_HealthCheckRequest__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_grpc_health_v1alpha_HealthCheckResponse__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::Grpc.Health.V1Alpha.HealthCheckResponse, global::Grpc.Health.V1Alpha.HealthCheckResponse.Builder> internal__static_grpc_health_v1alpha_HealthCheckResponse__FieldAccessorTable;
- #endregion
#region Descriptor
- public static pbd::FileDescriptor Descriptor {
+ public static pbr::FileDescriptor Descriptor {
get { return descriptor; }
}
- private static pbd::FileDescriptor descriptor;
+ private static pbr::FileDescriptor descriptor;
static Health() {
byte[] descriptorData = global::System.Convert.FromBase64String(
@@ -41,24 +31,13 @@ namespace Grpc.Health.V1Alpha {
"EAESDwoLTk9UX1NFUlZJTkcQAjJkCgZIZWFsdGgSWgoFQ2hlY2sSJy5ncnBj",
"LmhlYWx0aC52MWFscGhhLkhlYWx0aENoZWNrUmVxdWVzdBooLmdycGMuaGVh",
"bHRoLnYxYWxwaGEuSGVhbHRoQ2hlY2tSZXNwb25zZUIWqgITR3JwYy5IZWFs",
- "dGguVjFBbHBoYQ=="));
- pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
- descriptor = root;
- internal__static_grpc_health_v1alpha_HealthCheckRequest__Descriptor = Descriptor.MessageTypes[0];
- internal__static_grpc_health_v1alpha_HealthCheckRequest__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::Grpc.Health.V1Alpha.HealthCheckRequest, global::Grpc.Health.V1Alpha.HealthCheckRequest.Builder>(internal__static_grpc_health_v1alpha_HealthCheckRequest__Descriptor,
- new string[] { "Host", "Service", });
- internal__static_grpc_health_v1alpha_HealthCheckResponse__Descriptor = Descriptor.MessageTypes[1];
- internal__static_grpc_health_v1alpha_HealthCheckResponse__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::Grpc.Health.V1Alpha.HealthCheckResponse, global::Grpc.Health.V1Alpha.HealthCheckResponse.Builder>(internal__static_grpc_health_v1alpha_HealthCheckResponse__Descriptor,
- new string[] { "Status", });
- pb::ExtensionRegistry registry = pb::ExtensionRegistry.CreateInstance();
- RegisterAllExtensions(registry);
- return registry;
- };
- pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
- new pbd::FileDescriptor[] {
- }, assigner);
+ "dGguVjFBbHBoYWIGcHJvdG8z"));
+ descriptor = pbr::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] {
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Health.V1Alpha.HealthCheckRequest), new[]{ "Host", "Service" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Health.V1Alpha.HealthCheckResponse), new[]{ "Status" }, null, new[]{ typeof(global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus) }, null)
+ }));
}
#endregion
@@ -66,618 +45,245 @@ namespace Grpc.Health.V1Alpha {
}
#region Messages
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class HealthCheckRequest : pb::GeneratedMessage<HealthCheckRequest, HealthCheckRequest.Builder> {
- private HealthCheckRequest() { }
- private static readonly HealthCheckRequest defaultInstance = new HealthCheckRequest().MakeReadOnly();
- private static readonly string[] _healthCheckRequestFieldNames = new string[] { "host", "service" };
- private static readonly uint[] _healthCheckRequestFieldTags = new uint[] { 10, 18 };
- public static HealthCheckRequest DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class HealthCheckRequest : pb::IMessage<HealthCheckRequest> {
+ private static readonly pb::MessageParser<HealthCheckRequest> _parser = new pb::MessageParser<HealthCheckRequest>(() => new HealthCheckRequest());
+ public static pb::MessageParser<HealthCheckRequest> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Health.V1Alpha.Proto.Health.Descriptor.MessageTypes[0]; }
}
- public override HealthCheckRequest DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override HealthCheckRequest ThisMessage {
- get { return this; }
+ public HealthCheckRequest() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::Grpc.Health.V1Alpha.Proto.Health.internal__static_grpc_health_v1alpha_HealthCheckRequest__Descriptor; }
+ partial void OnConstruction();
+
+ public HealthCheckRequest(HealthCheckRequest other) : this() {
+ host_ = other.host_;
+ service_ = other.service_;
}
- protected override pb::FieldAccess.FieldAccessorTable<HealthCheckRequest, HealthCheckRequest.Builder> InternalFieldAccessors {
- get { return global::Grpc.Health.V1Alpha.Proto.Health.internal__static_grpc_health_v1alpha_HealthCheckRequest__FieldAccessorTable; }
+ public HealthCheckRequest Clone() {
+ return new HealthCheckRequest(this);
}
public const int HostFieldNumber = 1;
- private bool hasHost;
private string host_ = "";
- public bool HasHost {
- get { return hasHost; }
- }
public string Host {
get { return host_; }
+ set {
+ host_ = pb::Preconditions.CheckNotNull(value, "value");
+ }
}
public const int ServiceFieldNumber = 2;
- private bool hasService;
private string service_ = "";
- public bool HasService {
- get { return hasService; }
- }
public string Service {
get { return service_; }
- }
-
- public override bool IsInitialized {
- get {
- return true;
- }
- }
-
- public override void WriteTo(pb::ICodedOutputStream output) {
- CalcSerializedSize();
- string[] field_names = _healthCheckRequestFieldNames;
- if (hasHost) {
- output.WriteString(1, field_names[0], Host);
- }
- if (hasService) {
- output.WriteString(2, field_names[1], Service);
+ set {
+ service_ = pb::Preconditions.CheckNotNull(value, "value");
}
- UnknownFields.WriteTo(output);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
- return CalcSerializedSize();
- }
+ public override bool Equals(object other) {
+ return Equals(other as HealthCheckRequest);
}
- private int CalcSerializedSize() {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasHost) {
- size += pb::CodedOutputStream.ComputeStringSize(1, Host);
+ public bool Equals(HealthCheckRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
}
- if (hasService) {
- size += pb::CodedOutputStream.ComputeStringSize(2, Service);
+ if (ReferenceEquals(other, this)) {
+ return true;
}
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
- }
- public static HealthCheckRequest ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static HealthCheckRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static HealthCheckRequest ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static HealthCheckRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static HealthCheckRequest ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static HealthCheckRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static HealthCheckRequest ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static HealthCheckRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static HealthCheckRequest ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static HealthCheckRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private HealthCheckRequest MakeReadOnly() {
- return this;
+ if (Host != other.Host) return false;
+ if (Service != other.Service) return false;
+ return true;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(HealthCheckRequest prototype) {
- return new Builder(prototype);
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Host.Length != 0) hash ^= Host.GetHashCode();
+ if (Service.Length != 0) hash ^= Service.GetHashCode();
+ return hash;
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<HealthCheckRequest, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(HealthCheckRequest cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private HealthCheckRequest result;
-
- private HealthCheckRequest PrepareBuilder() {
- if (resultIsReadOnly) {
- HealthCheckRequest original = result;
- result = new HealthCheckRequest();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override HealthCheckRequest MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
+ }
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Host.Length != 0) {
+ output.WriteRawTag(10);
+ output.WriteString(Host);
}
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::Grpc.Health.V1Alpha.HealthCheckRequest.Descriptor; }
+ if (Service.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(Service);
}
+ }
- public override HealthCheckRequest DefaultInstanceForType {
- get { return global::Grpc.Health.V1Alpha.HealthCheckRequest.DefaultInstance; }
+ public int CalculateSize() {
+ int size = 0;
+ if (Host.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Host);
}
-
- public override HealthCheckRequest BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ if (Service.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Service);
}
+ return size;
+ }
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is HealthCheckRequest) {
- return MergeFrom((HealthCheckRequest) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ public void MergeFrom(HealthCheckRequest other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(HealthCheckRequest other) {
- if (other == global::Grpc.Health.V1Alpha.HealthCheckRequest.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasHost) {
- Host = other.Host;
- }
- if (other.HasService) {
- Service = other.Service;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
+ if (other.Host.Length != 0) {
+ Host = other.Host;
}
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ if (other.Service.Length != 0) {
+ Service = other.Service;
}
+ }
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_healthCheckRequestFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _healthCheckRequestFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 10: {
+ Host = input.ReadString();
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 10: {
- result.hasHost = input.ReadString(ref result.host_);
- break;
- }
- case 18: {
- result.hasService = input.ReadString(ref result.service_);
- break;
- }
+ case 18: {
+ Service = input.ReadString();
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasHost {
- get { return result.hasHost; }
- }
- public string Host {
- get { return result.Host; }
- set { SetHost(value); }
- }
- public Builder SetHost(string value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.hasHost = true;
- result.host_ = value;
- return this;
- }
- public Builder ClearHost() {
- PrepareBuilder();
- result.hasHost = false;
- result.host_ = "";
- return this;
- }
-
- public bool HasService {
- get { return result.hasService; }
- }
- public string Service {
- get { return result.Service; }
- set { SetService(value); }
}
- public Builder SetService(string value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.hasService = true;
- result.service_ = value;
- return this;
- }
- public Builder ClearService() {
- PrepareBuilder();
- result.hasService = false;
- result.service_ = "";
- return this;
- }
- }
- static HealthCheckRequest() {
- object.ReferenceEquals(global::Grpc.Health.V1Alpha.Proto.Health.Descriptor, null);
}
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class HealthCheckResponse : pb::GeneratedMessage<HealthCheckResponse, HealthCheckResponse.Builder> {
- private HealthCheckResponse() { }
- private static readonly HealthCheckResponse defaultInstance = new HealthCheckResponse().MakeReadOnly();
- private static readonly string[] _healthCheckResponseFieldNames = new string[] { "status" };
- private static readonly uint[] _healthCheckResponseFieldTags = new uint[] { 8 };
- public static HealthCheckResponse DefaultInstance {
- get { return defaultInstance; }
- }
+ public sealed partial class HealthCheckResponse : pb::IMessage<HealthCheckResponse> {
+ private static readonly pb::MessageParser<HealthCheckResponse> _parser = new pb::MessageParser<HealthCheckResponse>(() => new HealthCheckResponse());
+ public static pb::MessageParser<HealthCheckResponse> Parser { get { return _parser; } }
- public override HealthCheckResponse DefaultInstanceForType {
- get { return DefaultInstance; }
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Health.V1Alpha.Proto.Health.Descriptor.MessageTypes[1]; }
}
- protected override HealthCheckResponse ThisMessage {
- get { return this; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::Grpc.Health.V1Alpha.Proto.Health.internal__static_grpc_health_v1alpha_HealthCheckResponse__Descriptor; }
+ public HealthCheckResponse() {
+ OnConstruction();
}
- protected override pb::FieldAccess.FieldAccessorTable<HealthCheckResponse, HealthCheckResponse.Builder> InternalFieldAccessors {
- get { return global::Grpc.Health.V1Alpha.Proto.Health.internal__static_grpc_health_v1alpha_HealthCheckResponse__FieldAccessorTable; }
- }
+ partial void OnConstruction();
- #region Nested types
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public static partial class Types {
- public enum ServingStatus {
- UNKNOWN = 0,
- SERVING = 1,
- NOT_SERVING = 2,
- }
+ public HealthCheckResponse(HealthCheckResponse other) : this() {
+ status_ = other.status_;
+ }
+ public HealthCheckResponse Clone() {
+ return new HealthCheckResponse(this);
}
- #endregion
public const int StatusFieldNumber = 1;
- private bool hasStatus;
private global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus status_ = global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus.UNKNOWN;
- public bool HasStatus {
- get { return hasStatus; }
- }
public global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus Status {
get { return status_; }
- }
-
- public override bool IsInitialized {
- get {
- return true;
+ set {
+ status_ = value;
}
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- CalcSerializedSize();
- string[] field_names = _healthCheckResponseFieldNames;
- if (hasStatus) {
- output.WriteEnum(1, field_names[0], (int) Status, Status);
- }
- UnknownFields.WriteTo(output);
+ public override bool Equals(object other) {
+ return Equals(other as HealthCheckResponse);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
- return CalcSerializedSize();
+ public bool Equals(HealthCheckResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
}
- }
-
- private int CalcSerializedSize() {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasStatus) {
- size += pb::CodedOutputStream.ComputeEnumSize(1, (int) Status);
+ if (ReferenceEquals(other, this)) {
+ return true;
}
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
- }
- public static HealthCheckResponse ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static HealthCheckResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static HealthCheckResponse ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static HealthCheckResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static HealthCheckResponse ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static HealthCheckResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static HealthCheckResponse ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static HealthCheckResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static HealthCheckResponse ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static HealthCheckResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private HealthCheckResponse MakeReadOnly() {
- return this;
+ if (Status != other.Status) return false;
+ return true;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(HealthCheckResponse prototype) {
- return new Builder(prototype);
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Status != global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus.UNKNOWN) hash ^= Status.GetHashCode();
+ return hash;
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<HealthCheckResponse, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(HealthCheckResponse cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private HealthCheckResponse result;
-
- private HealthCheckResponse PrepareBuilder() {
- if (resultIsReadOnly) {
- HealthCheckResponse original = result;
- result = new HealthCheckResponse();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override HealthCheckResponse MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
- }
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::Grpc.Health.V1Alpha.HealthCheckResponse.Descriptor; }
- }
-
- public override HealthCheckResponse DefaultInstanceForType {
- get { return global::Grpc.Health.V1Alpha.HealthCheckResponse.DefaultInstance; }
- }
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
+ }
- public override HealthCheckResponse BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Status != global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus.UNKNOWN) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) Status);
}
+ }
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is HealthCheckResponse) {
- return MergeFrom((HealthCheckResponse) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ public int CalculateSize() {
+ int size = 0;
+ if (Status != global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus.UNKNOWN) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Status);
}
+ return size;
+ }
- public override Builder MergeFrom(HealthCheckResponse other) {
- if (other == global::Grpc.Health.V1Alpha.HealthCheckResponse.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasStatus) {
- Status = other.Status;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
+ public void MergeFrom(HealthCheckResponse other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ if (other.Status != global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus.UNKNOWN) {
+ Status = other.Status;
}
+ }
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_healthCheckResponseFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _healthCheckResponseFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ status_ = (global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus) input.ReadEnum();
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- object unknown;
- if(input.ReadEnum(ref result.status_, out unknown)) {
- result.hasStatus = true;
- } else if(unknown is int) {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- unknownFields.MergeVarintField(1, (ulong)(int)unknown);
- }
- break;
- }
- }
- }
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
}
- return this;
}
+ }
-
- public bool HasStatus {
- get { return result.hasStatus; }
- }
- public global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus Status {
- get { return result.Status; }
- set { SetStatus(value); }
- }
- public Builder SetStatus(global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus value) {
- PrepareBuilder();
- result.hasStatus = true;
- result.status_ = value;
- return this;
- }
- public Builder ClearStatus() {
- PrepareBuilder();
- result.hasStatus = false;
- result.status_ = global::Grpc.Health.V1Alpha.HealthCheckResponse.Types.ServingStatus.UNKNOWN;
- return this;
+ #region Nested types
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public static partial class Types {
+ public enum ServingStatus {
+ UNKNOWN = 0,
+ SERVING = 1,
+ NOT_SERVING = 2,
}
+
}
- static HealthCheckResponse() {
- object.ReferenceEquals(global::Grpc.Health.V1Alpha.Proto.Health.Descriptor, null);
- }
+ #endregion
+
}
#endregion
diff --git a/src/csharp/Grpc.HealthCheck/HealthGrpc.cs b/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
index 0dabc91f7c..da721ce5f6 100644
--- a/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
+++ b/src/csharp/Grpc.HealthCheck/HealthGrpc.cs
@@ -12,8 +12,8 @@ namespace Grpc.Health.V1Alpha {
{
static readonly string __ServiceName = "grpc.health.v1alpha.Health";
- static readonly Marshaller<global::Grpc.Health.V1Alpha.HealthCheckRequest> __Marshaller_HealthCheckRequest = Marshallers.Create((arg) => arg.ToByteArray(), global::Grpc.Health.V1Alpha.HealthCheckRequest.ParseFrom);
- static readonly Marshaller<global::Grpc.Health.V1Alpha.HealthCheckResponse> __Marshaller_HealthCheckResponse = Marshallers.Create((arg) => arg.ToByteArray(), global::Grpc.Health.V1Alpha.HealthCheckResponse.ParseFrom);
+ static readonly Marshaller<global::Grpc.Health.V1Alpha.HealthCheckRequest> __Marshaller_HealthCheckRequest = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Health.V1Alpha.HealthCheckRequest.Parser.ParseFrom);
+ static readonly Marshaller<global::Grpc.Health.V1Alpha.HealthCheckResponse> __Marshaller_HealthCheckResponse = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Health.V1Alpha.HealthCheckResponse.Parser.ParseFrom);
static readonly Method<global::Grpc.Health.V1Alpha.HealthCheckRequest, global::Grpc.Health.V1Alpha.HealthCheckResponse> __Method_Check = new Method<global::Grpc.Health.V1Alpha.HealthCheckRequest, global::Grpc.Health.V1Alpha.HealthCheckResponse>(
MethodType.Unary,
@@ -22,6 +22,12 @@ namespace Grpc.Health.V1Alpha {
__Marshaller_HealthCheckRequest,
__Marshaller_HealthCheckResponse);
+ // service descriptor
+ public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
+ {
+ get { return global::Grpc.Health.V1Alpha.Proto.Health.Descriptor.Services[0]; }
+ }
+
// client interface
public interface IHealthClient
{
diff --git a/src/csharp/Grpc.HealthCheck/HealthServiceImpl.cs b/src/csharp/Grpc.HealthCheck/HealthServiceImpl.cs
index 3c3b9c35f1..26c6445c35 100644
--- a/src/csharp/Grpc.HealthCheck/HealthServiceImpl.cs
+++ b/src/csharp/Grpc.HealthCheck/HealthServiceImpl.cs
@@ -95,12 +95,18 @@ namespace Grpc.HealthCheck
}
}
+ /// <summary>
+ /// Performs a health status check.
+ /// </summary>
+ /// <param name="request">The check request.</param>
+ /// <param name="context">The call context.</param>
+ /// <returns>The asynchronous response.</returns>
public Task<HealthCheckResponse> Check(HealthCheckRequest request, ServerCallContext context)
{
lock (myLock)
{
- var host = request.HasHost ? request.Host : "";
- var service = request.HasService ? request.Service : "";
+ var host = request.Host;
+ var service = request.Service;
HealthCheckResponse.Types.ServingStatus status;
if (!statusMap.TryGetValue(CreateKey(host, service), out status))
@@ -108,7 +114,7 @@ namespace Grpc.HealthCheck
// TODO(jtattermusch): returning specific status from server handler is not supported yet.
throw new RpcException(new Status(StatusCode.NotFound, ""));
}
- return Task.FromResult(HealthCheckResponse.CreateBuilder().SetStatus(status).Build());
+ return Task.FromResult(new HealthCheckResponse { Status = status });
}
}
diff --git a/src/csharp/Grpc.HealthCheck/packages.config b/src/csharp/Grpc.HealthCheck/packages.config
index 094a30981e..cafff6123a 100644
--- a/src/csharp/Grpc.HealthCheck/packages.config
+++ b/src/csharp/Grpc.HealthCheck/packages.config
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
- <package id="Google.ProtocolBuffers" version="2.4.1.555" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.0.0-alpha4" targetFramework="net45" />
<package id="Ix-Async" version="1.2.3" targetFramework="net45" />
</packages> \ No newline at end of file
diff --git a/src/csharp/Grpc.HealthCheck/proto/health.proto b/src/csharp/Grpc.HealthCheck/proto/health.proto
index 08df7e104e..01aa3fcf57 100644
--- a/src/csharp/Grpc.HealthCheck/proto/health.proto
+++ b/src/csharp/Grpc.HealthCheck/proto/health.proto
@@ -28,14 +28,14 @@
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// TODO(jtattermusch): switch to proto3 once C# supports that.
-syntax = "proto2";
+syntax = "proto3";
package grpc.health.v1alpha;
option csharp_namespace = "Grpc.Health.V1Alpha";
message HealthCheckRequest {
- optional string host = 1;
- optional string service = 2;
+ string host = 1;
+ string service = 2;
}
message HealthCheckResponse {
@@ -44,7 +44,7 @@ message HealthCheckResponse {
SERVING = 1;
NOT_SERVING = 2;
}
- optional ServingStatus status = 1;
+ ServingStatus status = 1;
}
service Health {
diff --git a/src/csharp/Grpc.IntegrationTesting/Empty.cs b/src/csharp/Grpc.IntegrationTesting/Empty.cs
index 7169ee2a4a..28c28c9afd 100644
--- a/src/csharp/Grpc.IntegrationTesting/Empty.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Empty.cs
@@ -1,47 +1,34 @@
-// Generated by ProtoGen, Version=2.4.1.521, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48. DO NOT EDIT!
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: empty.proto
#pragma warning disable 1591, 0612, 3021
#region Designer generated code
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
-namespace grpc.testing {
+namespace Grpc.Testing {
namespace Proto {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public static partial class Empty {
- #region Extension registration
- public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
- }
- #endregion
- #region Static variables
- internal static pbd::MessageDescriptor internal__static_grpc_testing_Empty__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::grpc.testing.Empty, global::grpc.testing.Empty.Builder> internal__static_grpc_testing_Empty__FieldAccessorTable;
- #endregion
#region Descriptor
- public static pbd::FileDescriptor Descriptor {
+ public static pbr::FileDescriptor Descriptor {
get { return descriptor; }
}
- private static pbd::FileDescriptor descriptor;
+ private static pbr::FileDescriptor descriptor;
static Empty() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "CgtlbXB0eS5wcm90bxIMZ3JwYy50ZXN0aW5nIgcKBUVtcHR5"));
- pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
- descriptor = root;
- internal__static_grpc_testing_Empty__Descriptor = Descriptor.MessageTypes[0];
- internal__static_grpc_testing_Empty__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::grpc.testing.Empty, global::grpc.testing.Empty.Builder>(internal__static_grpc_testing_Empty__Descriptor,
- new string[] { });
- return null;
- };
- pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
- new pbd::FileDescriptor[] {
- }, assigner);
+ "CgtlbXB0eS5wcm90bxIMZ3JwYy50ZXN0aW5nIgcKBUVtcHR5YgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedCodeInfo(null, new pbr::GeneratedCodeInfo[] {
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.Empty), null, null, null, null)
+ }));
}
#endregion
@@ -49,230 +36,79 @@ namespace grpc.testing {
}
#region Messages
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Empty : pb::GeneratedMessage<Empty, Empty.Builder> {
- private Empty() { }
- private static readonly Empty defaultInstance = new Empty().MakeReadOnly();
- private static readonly string[] _emptyFieldNames = new string[] { };
- private static readonly uint[] _emptyFieldTags = new uint[] { };
- public static Empty DefaultInstance {
- get { return defaultInstance; }
- }
+ public sealed partial class Empty : pb::IMessage<Empty> {
+ private static readonly pb::MessageParser<Empty> _parser = new pb::MessageParser<Empty>(() => new Empty());
+ public static pb::MessageParser<Empty> Parser { get { return _parser; } }
- public override Empty DefaultInstanceForType {
- get { return DefaultInstance; }
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.Proto.Empty.Descriptor.MessageTypes[0]; }
}
- protected override Empty ThisMessage {
- get { return this; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::grpc.testing.Proto.Empty.internal__static_grpc_testing_Empty__Descriptor; }
+ public Empty() {
+ OnConstruction();
}
- protected override pb::FieldAccess.FieldAccessorTable<Empty, Empty.Builder> InternalFieldAccessors {
- get { return global::grpc.testing.Proto.Empty.internal__static_grpc_testing_Empty__FieldAccessorTable; }
- }
+ partial void OnConstruction();
- public override bool IsInitialized {
- get {
- return true;
- }
+ public Empty(Empty other) : this() {
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _emptyFieldNames;
- UnknownFields.WriteTo(output);
+ public Empty Clone() {
+ return new Empty(this);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
+ public override bool Equals(object other) {
+ return Equals(other as Empty);
+ }
- size = 0;
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(Empty other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
}
+ return true;
}
- public static Empty ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static Empty ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static Empty ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static Empty ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static Empty ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static Empty ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static Empty ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static Empty ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static Empty ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static Empty ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private Empty MakeReadOnly() {
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(Empty prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<Empty, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(Empty cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private Empty result;
-
- private Empty PrepareBuilder() {
- if (resultIsReadOnly) {
- Empty original = result;
- result = new Empty();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override Empty MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
- }
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::grpc.testing.Empty.Descriptor; }
- }
-
- public override Empty DefaultInstanceForType {
- get { return global::grpc.testing.Empty.DefaultInstance; }
- }
-
- public override Empty BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
- }
-
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is Empty) {
- return MergeFrom((Empty) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
- }
+ public void WriteTo(pb::CodedOutputStream output) {
+ }
- public override Builder MergeFrom(Empty other) {
- if (other == global::grpc.testing.Empty.DefaultInstance) return this;
- PrepareBuilder();
- this.MergeUnknownFields(other.UnknownFields);
- return this;
- }
+ public int CalculateSize() {
+ int size = 0;
+ return size;
+ }
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
+ public void MergeFrom(Empty other) {
+ if (other == null) {
+ return;
}
+ }
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_emptyFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _emptyFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
- }
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- }
- }
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
}
- return this;
}
-
- }
- static Empty() {
- object.ReferenceEquals(global::grpc.testing.Proto.Empty.Descriptor, null);
}
+
}
#endregion
diff --git a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
index 2020a76d39..a5945be922 100644
--- a/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
+++ b/src/csharp/Grpc.IntegrationTesting/Grpc.IntegrationTesting.csproj
@@ -54,6 +54,10 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Google.Apis.Core.1.9.3\lib\portable-net40+sl50+win+wpa81+wp80\Google.Apis.Core.dll</HintPath>
</Reference>
+ <Reference Include="Google.Protobuf, Version=3.0.0.0, Culture=neutral, PublicKeyToken=a7d26565bac4d604, processorArchitecture=MSIL">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\packages\Google.Protobuf.3.0.0-alpha4\lib\portable-net45+netcore45+wpa81+wp8\Google.Protobuf.dll</HintPath>
+ </Reference>
<Reference Include="Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll</HintPath>
@@ -74,22 +78,11 @@
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="System" />
- <Reference Include="Google.ProtocolBuffers">
- <HintPath>..\packages\Google.ProtocolBuffers.2.4.1.521\lib\net40\Google.ProtocolBuffers.dll</HintPath>
- </Reference>
<Reference Include="System.Interactive.Async">
<HintPath>..\packages\Ix-Async.1.2.3\lib\net45\System.Interactive.Async.dll</HintPath>
</Reference>
<Reference Include="System.Net" />
<Reference Include="System.Net.Http" />
- <Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
- </Reference>
- <Reference Include="System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Primitives.dll</HintPath>
- </Reference>
<Reference Include="System.Net.Http.WebRequest" />
</ItemGroup>
<ItemGroup>
@@ -106,6 +99,7 @@
<Compile Include="TestCredentials.cs" />
<Compile Include="TestGrpc.cs" />
<Compile Include="SslCredentialsTest.cs" />
+ <Compile Include="Test.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
index 24c22273fb..8343e54122 100644
--- a/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
+++ b/src/csharp/Grpc.IntegrationTesting/InteropClient.cs
@@ -38,13 +38,11 @@ using System.Threading;
using System.Threading.Tasks;
using Google.Apis.Auth.OAuth2;
-using Google.ProtocolBuffers;
-
-using grpc.testing;
+using Google.Protobuf;
using Grpc.Auth;
using Grpc.Core;
using Grpc.Core.Utils;
-
+using Grpc.Testing;
using NUnit.Framework;
namespace Grpc.IntegrationTesting
@@ -183,7 +181,7 @@ namespace Grpc.IntegrationTesting
public static void RunEmptyUnary(TestService.ITestServiceClient client)
{
Console.WriteLine("running empty_unary");
- var response = client.EmptyCall(Empty.DefaultInstance);
+ var response = client.EmptyCall(new Empty());
Assert.IsNotNull(response);
Console.WriteLine("Passed!");
}
@@ -191,11 +189,12 @@ namespace Grpc.IntegrationTesting
public static void RunLargeUnary(TestService.ITestServiceClient client)
{
Console.WriteLine("running large_unary");
- var request = SimpleRequest.CreateBuilder()
- .SetResponseType(PayloadType.COMPRESSABLE)
- .SetResponseSize(314159)
- .SetPayload(CreateZerosPayload(271828))
- .Build();
+ var request = new SimpleRequest
+ {
+ ResponseType = PayloadType.COMPRESSABLE,
+ ResponseSize = 314159,
+ Payload = CreateZerosPayload(271828)
+ };
var response = client.UnaryCall(request);
@@ -208,7 +207,7 @@ namespace Grpc.IntegrationTesting
{
Console.WriteLine("running client_streaming");
- var bodySizes = new List<int> { 27182, 8, 1828, 45904 }.ConvertAll((size) => StreamingInputCallRequest.CreateBuilder().SetPayload(CreateZerosPayload(size)).Build());
+ var bodySizes = new List<int> { 27182, 8, 1828, 45904 }.ConvertAll((size) => new StreamingInputCallRequest { Payload = CreateZerosPayload(size) });
using (var call = client.StreamingInputCall())
{
@@ -226,11 +225,11 @@ namespace Grpc.IntegrationTesting
var bodySizes = new List<int> { 31415, 9, 2653, 58979 };
- var request = StreamingOutputCallRequest.CreateBuilder()
- .SetResponseType(PayloadType.COMPRESSABLE)
- .AddRangeResponseParameters(bodySizes.ConvertAll(
- (size) => ResponseParameters.CreateBuilder().SetSize(size).Build()))
- .Build();
+ var request = new StreamingOutputCallRequest
+ {
+ ResponseType = PayloadType.COMPRESSABLE,
+ ResponseParameters = { bodySizes.ConvertAll((size) => new ResponseParameters { Size = size }) }
+ };
using (var call = client.StreamingOutputCall(request))
{
@@ -250,37 +249,45 @@ namespace Grpc.IntegrationTesting
using (var call = client.FullDuplexCall())
{
- await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
- .SetResponseType(PayloadType.COMPRESSABLE)
- .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(31415))
- .SetPayload(CreateZerosPayload(27182)).Build());
+ await call.RequestStream.WriteAsync(new StreamingOutputCallRequest
+ {
+ ResponseType = PayloadType.COMPRESSABLE,
+ ResponseParameters = { new ResponseParameters { Size = 31415 } },
+ Payload = CreateZerosPayload(27182)
+ });
Assert.IsTrue(await call.ResponseStream.MoveNext());
Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
Assert.AreEqual(31415, call.ResponseStream.Current.Payload.Body.Length);
- await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
- .SetResponseType(PayloadType.COMPRESSABLE)
- .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(9))
- .SetPayload(CreateZerosPayload(8)).Build());
+ await call.RequestStream.WriteAsync(new StreamingOutputCallRequest
+ {
+ ResponseType = PayloadType.COMPRESSABLE,
+ ResponseParameters = { new ResponseParameters { Size = 9 } },
+ Payload = CreateZerosPayload(8)
+ });
Assert.IsTrue(await call.ResponseStream.MoveNext());
Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
Assert.AreEqual(9, call.ResponseStream.Current.Payload.Body.Length);
- await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
- .SetResponseType(PayloadType.COMPRESSABLE)
- .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(2653))
- .SetPayload(CreateZerosPayload(1828)).Build());
+ await call.RequestStream.WriteAsync(new StreamingOutputCallRequest
+ {
+ ResponseType = PayloadType.COMPRESSABLE,
+ ResponseParameters = { new ResponseParameters { Size = 2653 } },
+ Payload = CreateZerosPayload(1828)
+ });
Assert.IsTrue(await call.ResponseStream.MoveNext());
Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
Assert.AreEqual(2653, call.ResponseStream.Current.Payload.Body.Length);
- await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
- .SetResponseType(PayloadType.COMPRESSABLE)
- .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(58979))
- .SetPayload(CreateZerosPayload(45904)).Build());
+ await call.RequestStream.WriteAsync(new StreamingOutputCallRequest
+ {
+ ResponseType = PayloadType.COMPRESSABLE,
+ ResponseParameters = { new ResponseParameters { Size = 58979 } },
+ Payload = CreateZerosPayload(45904)
+ });
Assert.IsTrue(await call.ResponseStream.MoveNext());
Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
@@ -313,13 +320,14 @@ namespace Grpc.IntegrationTesting
credential = credential.CreateScoped(new[] { AuthScope });
client.HeaderInterceptor = AuthInterceptors.FromCredential(credential);
- var request = SimpleRequest.CreateBuilder()
- .SetResponseType(PayloadType.COMPRESSABLE)
- .SetResponseSize(314159)
- .SetPayload(CreateZerosPayload(271828))
- .SetFillUsername(true)
- .SetFillOauthScope(true)
- .Build();
+ var request = new SimpleRequest
+ {
+ ResponseType = PayloadType.COMPRESSABLE,
+ ResponseSize = 314159,
+ Payload = CreateZerosPayload(271828),
+ FillUsername = true,
+ FillOauthScope = true
+ };
var response = client.UnaryCall(request);
@@ -337,13 +345,14 @@ namespace Grpc.IntegrationTesting
Assert.IsFalse(credential.IsCreateScopedRequired);
client.HeaderInterceptor = AuthInterceptors.FromCredential(credential);
- var request = SimpleRequest.CreateBuilder()
- .SetResponseType(PayloadType.COMPRESSABLE)
- .SetResponseSize(314159)
- .SetPayload(CreateZerosPayload(271828))
- .SetFillUsername(true)
- .SetFillOauthScope(true)
- .Build();
+ var request = new SimpleRequest
+ {
+ ResponseType = PayloadType.COMPRESSABLE,
+ ResponseSize = 314159,
+ Payload = CreateZerosPayload(271828),
+ FillUsername = true,
+ FillOauthScope = true
+ };
var response = client.UnaryCall(request);
@@ -362,13 +371,14 @@ namespace Grpc.IntegrationTesting
Assert.IsTrue(credential.IsCreateScopedRequired);
client.HeaderInterceptor = AuthInterceptors.FromCredential(credential);
- var request = SimpleRequest.CreateBuilder()
- .SetResponseType(PayloadType.COMPRESSABLE)
- .SetResponseSize(314159)
- .SetPayload(CreateZerosPayload(271828))
- .SetFillUsername(true)
- .SetFillOauthScope(true)
- .Build();
+ var request = new SimpleRequest
+ {
+ ResponseType = PayloadType.COMPRESSABLE,
+ ResponseSize = 314159,
+ Payload = CreateZerosPayload(271828),
+ FillUsername = true,
+ FillOauthScope = true
+ };
var response = client.UnaryCall(request);
@@ -386,10 +396,11 @@ namespace Grpc.IntegrationTesting
client.HeaderInterceptor = AuthInterceptors.FromAccessToken(oauth2Token);
- var request = SimpleRequest.CreateBuilder()
- .SetFillUsername(true)
- .SetFillOauthScope(true)
- .Build();
+ var request = new SimpleRequest
+ {
+ FillUsername = true,
+ FillOauthScope = true
+ };
var response = client.UnaryCall(request);
@@ -406,10 +417,11 @@ namespace Grpc.IntegrationTesting
string oauth2Token = await credential.GetAccessTokenForRequestAsync();
var headerInterceptor = AuthInterceptors.FromAccessToken(oauth2Token);
- var request = SimpleRequest.CreateBuilder()
- .SetFillUsername(true)
- .SetFillOauthScope(true)
- .Build();
+ var request = new SimpleRequest
+ {
+ FillUsername = true,
+ FillOauthScope = true
+ };
var headers = new Metadata();
headerInterceptor(null, "", headers);
@@ -444,10 +456,12 @@ namespace Grpc.IntegrationTesting
var cts = new CancellationTokenSource();
using (var call = client.FullDuplexCall(cancellationToken: cts.Token))
{
- await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
- .SetResponseType(PayloadType.COMPRESSABLE)
- .AddResponseParameters(ResponseParameters.CreateBuilder().SetSize(31415))
- .SetPayload(CreateZerosPayload(27182)).Build());
+ await call.RequestStream.WriteAsync(new StreamingOutputCallRequest
+ {
+ ResponseType = PayloadType.COMPRESSABLE,
+ ResponseParameters = { new ResponseParameters { Size = 31415 } },
+ Payload = CreateZerosPayload(27182)
+ });
Assert.IsTrue(await call.ResponseStream.MoveNext());
Assert.AreEqual(PayloadType.COMPRESSABLE, call.ResponseStream.Current.Payload.Type);
@@ -470,8 +484,7 @@ namespace Grpc.IntegrationTesting
{
try
{
- await call.RequestStream.WriteAsync(StreamingOutputCallRequest.CreateBuilder()
- .SetPayload(CreateZerosPayload(27182)).Build());
+ await call.RequestStream.WriteAsync(new StreamingOutputCallRequest { Payload = CreateZerosPayload(27182) });
}
catch (InvalidOperationException)
{
@@ -488,12 +501,12 @@ namespace Grpc.IntegrationTesting
public static void RunBenchmarkEmptyUnary(TestService.ITestServiceClient client)
{
BenchmarkUtil.RunBenchmark(10000, 10000,
- () => { client.EmptyCall(Empty.DefaultInstance); });
+ () => { client.EmptyCall(new Empty()); });
}
private static Payload CreateZerosPayload(int size)
{
- return Payload.CreateBuilder().SetBody(ByteString.CopyFrom(new byte[size])).Build();
+ return new Payload { Body = ByteString.CopyFrom(new byte[size]) };
}
private static ClientOptions ParseArguments(string[] args)
diff --git a/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs b/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs
index f3158aeb45..7bc17a207f 100644
--- a/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs
+++ b/src/csharp/Grpc.IntegrationTesting/InteropClientServerTest.cs
@@ -36,9 +36,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using grpc.testing;
using Grpc.Core;
using Grpc.Core.Utils;
+using Grpc.Testing;
using NUnit.Framework;
namespace Grpc.IntegrationTesting
diff --git a/src/csharp/Grpc.IntegrationTesting/InteropServer.cs b/src/csharp/Grpc.IntegrationTesting/InteropServer.cs
index 0cc8b2cde1..718278f30a 100644
--- a/src/csharp/Grpc.IntegrationTesting/InteropServer.cs
+++ b/src/csharp/Grpc.IntegrationTesting/InteropServer.cs
@@ -37,10 +37,9 @@ using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
-using Google.ProtocolBuffers;
-using grpc.testing;
using Grpc.Core;
using Grpc.Core.Utils;
+using Grpc.Testing;
using NUnit.Framework;
namespace Grpc.IntegrationTesting
diff --git a/src/csharp/Grpc.IntegrationTesting/Messages.cs b/src/csharp/Grpc.IntegrationTesting/Messages.cs
index 386f377f08..a3cbb7d76e 100644
--- a/src/csharp/Grpc.IntegrationTesting/Messages.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Messages.cs
@@ -1,106 +1,58 @@
-// Generated by ProtoGen, Version=2.4.1.521, Culture=neutral, PublicKeyToken=17b3b1f090c3ea48. DO NOT EDIT!
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: messages.proto
#pragma warning disable 1591, 0612, 3021
#region Designer generated code
-using pb = global::Google.ProtocolBuffers;
-using pbc = global::Google.ProtocolBuffers.Collections;
-using pbd = global::Google.ProtocolBuffers.Descriptors;
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
-namespace grpc.testing {
+namespace Grpc.Testing {
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public static partial class Messages {
- #region Extension registration
- public static void RegisterAllExtensions(pb::ExtensionRegistry registry) {
- }
- #endregion
- #region Static variables
- internal static pbd::MessageDescriptor internal__static_grpc_testing_Payload__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::grpc.testing.Payload, global::grpc.testing.Payload.Builder> internal__static_grpc_testing_Payload__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_grpc_testing_SimpleRequest__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::grpc.testing.SimpleRequest, global::grpc.testing.SimpleRequest.Builder> internal__static_grpc_testing_SimpleRequest__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_grpc_testing_SimpleResponse__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::grpc.testing.SimpleResponse, global::grpc.testing.SimpleResponse.Builder> internal__static_grpc_testing_SimpleResponse__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_grpc_testing_StreamingInputCallRequest__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::grpc.testing.StreamingInputCallRequest, global::grpc.testing.StreamingInputCallRequest.Builder> internal__static_grpc_testing_StreamingInputCallRequest__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_grpc_testing_StreamingInputCallResponse__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::grpc.testing.StreamingInputCallResponse, global::grpc.testing.StreamingInputCallResponse.Builder> internal__static_grpc_testing_StreamingInputCallResponse__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_grpc_testing_ResponseParameters__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::grpc.testing.ResponseParameters, global::grpc.testing.ResponseParameters.Builder> internal__static_grpc_testing_ResponseParameters__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_grpc_testing_StreamingOutputCallRequest__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallRequest.Builder> internal__static_grpc_testing_StreamingOutputCallRequest__FieldAccessorTable;
- internal static pbd::MessageDescriptor internal__static_grpc_testing_StreamingOutputCallResponse__Descriptor;
- internal static pb::FieldAccess.FieldAccessorTable<global::grpc.testing.StreamingOutputCallResponse, global::grpc.testing.StreamingOutputCallResponse.Builder> internal__static_grpc_testing_StreamingOutputCallResponse__FieldAccessorTable;
- #endregion
#region Descriptor
- public static pbd::FileDescriptor Descriptor {
+ public static pbr::FileDescriptor Descriptor {
get { return descriptor; }
}
- private static pbd::FileDescriptor descriptor;
+ private static pbr::FileDescriptor descriptor;
static Messages() {
byte[] descriptorData = global::System.Convert.FromBase64String(
string.Concat(
- "Cg5tZXNzYWdlcy5wcm90bxIMZ3JwYy50ZXN0aW5nIkAKB1BheWxvYWQSJwoE",
- "dHlwZRgBIAEoDjIZLmdycGMudGVzdGluZy5QYXlsb2FkVHlwZRIMCgRib2R5",
- "GAIgASgMIrEBCg1TaW1wbGVSZXF1ZXN0EjAKDXJlc3BvbnNlX3R5cGUYASAB",
- "KA4yGS5ncnBjLnRlc3RpbmcuUGF5bG9hZFR5cGUSFQoNcmVzcG9uc2Vfc2l6",
- "ZRgCIAEoBRImCgdwYXlsb2FkGAMgASgLMhUuZ3JwYy50ZXN0aW5nLlBheWxv",
- "YWQSFQoNZmlsbF91c2VybmFtZRgEIAEoCBIYChBmaWxsX29hdXRoX3Njb3Bl",
- "GAUgASgIIl8KDlNpbXBsZVJlc3BvbnNlEiYKB3BheWxvYWQYASABKAsyFS5n",
- "cnBjLnRlc3RpbmcuUGF5bG9hZBIQCgh1c2VybmFtZRgCIAEoCRITCgtvYXV0",
- "aF9zY29wZRgDIAEoCSJDChlTdHJlYW1pbmdJbnB1dENhbGxSZXF1ZXN0EiYK",
- "B3BheWxvYWQYASABKAsyFS5ncnBjLnRlc3RpbmcuUGF5bG9hZCI9ChpTdHJl",
- "YW1pbmdJbnB1dENhbGxSZXNwb25zZRIfChdhZ2dyZWdhdGVkX3BheWxvYWRf",
- "c2l6ZRgBIAEoBSI3ChJSZXNwb25zZVBhcmFtZXRlcnMSDAoEc2l6ZRgBIAEo",
- "BRITCgtpbnRlcnZhbF91cxgCIAEoBSK1AQoaU3RyZWFtaW5nT3V0cHV0Q2Fs",
- "bFJlcXVlc3QSMAoNcmVzcG9uc2VfdHlwZRgBIAEoDjIZLmdycGMudGVzdGlu",
- "Zy5QYXlsb2FkVHlwZRI9ChNyZXNwb25zZV9wYXJhbWV0ZXJzGAIgAygLMiAu",
- "Z3JwYy50ZXN0aW5nLlJlc3BvbnNlUGFyYW1ldGVycxImCgdwYXlsb2FkGAMg",
- "ASgLMhUuZ3JwYy50ZXN0aW5nLlBheWxvYWQiRQobU3RyZWFtaW5nT3V0cHV0",
- "Q2FsbFJlc3BvbnNlEiYKB3BheWxvYWQYASABKAsyFS5ncnBjLnRlc3Rpbmcu",
- "UGF5bG9hZCo/CgtQYXlsb2FkVHlwZRIQCgxDT01QUkVTU0FCTEUQABISCg5V",
- "TkNPTVBSRVNTQUJMRRABEgoKBlJBTkRPTRAC"));
- pbd::FileDescriptor.InternalDescriptorAssigner assigner = delegate(pbd::FileDescriptor root) {
- descriptor = root;
- internal__static_grpc_testing_Payload__Descriptor = Descriptor.MessageTypes[0];
- internal__static_grpc_testing_Payload__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::grpc.testing.Payload, global::grpc.testing.Payload.Builder>(internal__static_grpc_testing_Payload__Descriptor,
- new string[] { "Type", "Body", });
- internal__static_grpc_testing_SimpleRequest__Descriptor = Descriptor.MessageTypes[1];
- internal__static_grpc_testing_SimpleRequest__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::grpc.testing.SimpleRequest, global::grpc.testing.SimpleRequest.Builder>(internal__static_grpc_testing_SimpleRequest__Descriptor,
- new string[] { "ResponseType", "ResponseSize", "Payload", "FillUsername", "FillOauthScope", });
- internal__static_grpc_testing_SimpleResponse__Descriptor = Descriptor.MessageTypes[2];
- internal__static_grpc_testing_SimpleResponse__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::grpc.testing.SimpleResponse, global::grpc.testing.SimpleResponse.Builder>(internal__static_grpc_testing_SimpleResponse__Descriptor,
- new string[] { "Payload", "Username", "OauthScope", });
- internal__static_grpc_testing_StreamingInputCallRequest__Descriptor = Descriptor.MessageTypes[3];
- internal__static_grpc_testing_StreamingInputCallRequest__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::grpc.testing.StreamingInputCallRequest, global::grpc.testing.StreamingInputCallRequest.Builder>(internal__static_grpc_testing_StreamingInputCallRequest__Descriptor,
- new string[] { "Payload", });
- internal__static_grpc_testing_StreamingInputCallResponse__Descriptor = Descriptor.MessageTypes[4];
- internal__static_grpc_testing_StreamingInputCallResponse__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::grpc.testing.StreamingInputCallResponse, global::grpc.testing.StreamingInputCallResponse.Builder>(internal__static_grpc_testing_StreamingInputCallResponse__Descriptor,
- new string[] { "AggregatedPayloadSize", });
- internal__static_grpc_testing_ResponseParameters__Descriptor = Descriptor.MessageTypes[5];
- internal__static_grpc_testing_ResponseParameters__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::grpc.testing.ResponseParameters, global::grpc.testing.ResponseParameters.Builder>(internal__static_grpc_testing_ResponseParameters__Descriptor,
- new string[] { "Size", "IntervalUs", });
- internal__static_grpc_testing_StreamingOutputCallRequest__Descriptor = Descriptor.MessageTypes[6];
- internal__static_grpc_testing_StreamingOutputCallRequest__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallRequest.Builder>(internal__static_grpc_testing_StreamingOutputCallRequest__Descriptor,
- new string[] { "ResponseType", "ResponseParameters", "Payload", });
- internal__static_grpc_testing_StreamingOutputCallResponse__Descriptor = Descriptor.MessageTypes[7];
- internal__static_grpc_testing_StreamingOutputCallResponse__FieldAccessorTable =
- new pb::FieldAccess.FieldAccessorTable<global::grpc.testing.StreamingOutputCallResponse, global::grpc.testing.StreamingOutputCallResponse.Builder>(internal__static_grpc_testing_StreamingOutputCallResponse__Descriptor,
- new string[] { "Payload", });
- return null;
- };
- pbd::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
- new pbd::FileDescriptor[] {
- }, assigner);
+ "Cg5tZXNzYWdlcy5wcm90bxIMZ3JwYy50ZXN0aW5nIkAKB1BheWxvYWQSJwoE",
+ "dHlwZRgBIAEoDjIZLmdycGMudGVzdGluZy5QYXlsb2FkVHlwZRIMCgRib2R5",
+ "GAIgASgMIrEBCg1TaW1wbGVSZXF1ZXN0EjAKDXJlc3BvbnNlX3R5cGUYASAB",
+ "KA4yGS5ncnBjLnRlc3RpbmcuUGF5bG9hZFR5cGUSFQoNcmVzcG9uc2Vfc2l6",
+ "ZRgCIAEoBRImCgdwYXlsb2FkGAMgASgLMhUuZ3JwYy50ZXN0aW5nLlBheWxv",
+ "YWQSFQoNZmlsbF91c2VybmFtZRgEIAEoCBIYChBmaWxsX29hdXRoX3Njb3Bl",
+ "GAUgASgIIl8KDlNpbXBsZVJlc3BvbnNlEiYKB3BheWxvYWQYASABKAsyFS5n",
+ "cnBjLnRlc3RpbmcuUGF5bG9hZBIQCgh1c2VybmFtZRgCIAEoCRITCgtvYXV0",
+ "aF9zY29wZRgDIAEoCSJDChlTdHJlYW1pbmdJbnB1dENhbGxSZXF1ZXN0EiYK",
+ "B3BheWxvYWQYASABKAsyFS5ncnBjLnRlc3RpbmcuUGF5bG9hZCI9ChpTdHJl",
+ "YW1pbmdJbnB1dENhbGxSZXNwb25zZRIfChdhZ2dyZWdhdGVkX3BheWxvYWRf",
+ "c2l6ZRgBIAEoBSI3ChJSZXNwb25zZVBhcmFtZXRlcnMSDAoEc2l6ZRgBIAEo",
+ "BRITCgtpbnRlcnZhbF91cxgCIAEoBSK1AQoaU3RyZWFtaW5nT3V0cHV0Q2Fs",
+ "bFJlcXVlc3QSMAoNcmVzcG9uc2VfdHlwZRgBIAEoDjIZLmdycGMudGVzdGlu",
+ "Zy5QYXlsb2FkVHlwZRI9ChNyZXNwb25zZV9wYXJhbWV0ZXJzGAIgAygLMiAu",
+ "Z3JwYy50ZXN0aW5nLlJlc3BvbnNlUGFyYW1ldGVycxImCgdwYXlsb2FkGAMg",
+ "ASgLMhUuZ3JwYy50ZXN0aW5nLlBheWxvYWQiRQobU3RyZWFtaW5nT3V0cHV0",
+ "Q2FsbFJlc3BvbnNlEiYKB3BheWxvYWQYASABKAsyFS5ncnBjLnRlc3Rpbmcu",
+ "UGF5bG9hZCo/CgtQYXlsb2FkVHlwZRIQCgxDT01QUkVTU0FCTEUQABISCg5V",
+ "TkNPTVBSRVNTQUJMRRABEgoKBlJBTkRPTRACYgZwcm90bzM="));
+ descriptor = pbr::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+ new pbr::FileDescriptor[] { },
+ new pbr::GeneratedCodeInfo(new[] {typeof(global::Grpc.Testing.PayloadType), }, new pbr::GeneratedCodeInfo[] {
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.Payload), new[]{ "Type", "Body" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.SimpleRequest), new[]{ "ResponseType", "ResponseSize", "Payload", "FillUsername", "FillOauthScope" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.SimpleResponse), new[]{ "Payload", "Username", "OauthScope" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.StreamingInputCallRequest), new[]{ "Payload" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.StreamingInputCallResponse), new[]{ "AggregatedPayloadSize" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.ResponseParameters), new[]{ "Size", "IntervalUs" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.StreamingOutputCallRequest), new[]{ "ResponseType", "ResponseParameters", "Payload" }, null, null, null),
+ new pbr::GeneratedCodeInfo(typeof(global::Grpc.Testing.StreamingOutputCallResponse), new[]{ "Payload" }, null, null, null)
+ }));
}
#endregion
@@ -116,2772 +68,1101 @@ namespace grpc.testing {
#region Messages
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Payload : pb::GeneratedMessage<Payload, Payload.Builder> {
- private Payload() { }
- private static readonly Payload defaultInstance = new Payload().MakeReadOnly();
- private static readonly string[] _payloadFieldNames = new string[] { "body", "type" };
- private static readonly uint[] _payloadFieldTags = new uint[] { 18, 8 };
- public static Payload DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class Payload : pb::IMessage<Payload> {
+ private static readonly pb::MessageParser<Payload> _parser = new pb::MessageParser<Payload>(() => new Payload());
+ public static pb::MessageParser<Payload> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.Messages.Descriptor.MessageTypes[0]; }
}
- public override Payload DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override Payload ThisMessage {
- get { return this; }
+ public Payload() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_Payload__Descriptor; }
+ partial void OnConstruction();
+
+ public Payload(Payload other) : this() {
+ type_ = other.type_;
+ body_ = other.body_;
}
- protected override pb::FieldAccess.FieldAccessorTable<Payload, Payload.Builder> InternalFieldAccessors {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_Payload__FieldAccessorTable; }
+ public Payload Clone() {
+ return new Payload(this);
}
public const int TypeFieldNumber = 1;
- private bool hasType;
- private global::grpc.testing.PayloadType type_ = global::grpc.testing.PayloadType.COMPRESSABLE;
- public bool HasType {
- get { return hasType; }
- }
- public global::grpc.testing.PayloadType Type {
+ private global::Grpc.Testing.PayloadType type_ = global::Grpc.Testing.PayloadType.COMPRESSABLE;
+ public global::Grpc.Testing.PayloadType Type {
get { return type_; }
+ set {
+ type_ = value;
+ }
}
public const int BodyFieldNumber = 2;
- private bool hasBody;
private pb::ByteString body_ = pb::ByteString.Empty;
- public bool HasBody {
- get { return hasBody; }
- }
public pb::ByteString Body {
get { return body_; }
- }
-
- public override bool IsInitialized {
- get {
- return true;
+ set {
+ body_ = pb::Preconditions.CheckNotNull(value, "value");
}
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _payloadFieldNames;
- if (hasType) {
- output.WriteEnum(1, field_names[1], (int) Type, Type);
- }
- if (hasBody) {
- output.WriteBytes(2, field_names[0], Body);
- }
- UnknownFields.WriteTo(output);
+ public override bool Equals(object other) {
+ return Equals(other as Payload);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasType) {
- size += pb::CodedOutputStream.ComputeEnumSize(1, (int) Type);
- }
- if (hasBody) {
- size += pb::CodedOutputStream.ComputeBytesSize(2, Body);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(Payload other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
}
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Type != other.Type) return false;
+ if (Body != other.Body) return false;
+ return true;
}
- public static Payload ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static Payload ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static Payload ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static Payload ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static Payload ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static Payload ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static Payload ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static Payload ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static Payload ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static Payload ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private Payload MakeReadOnly() {
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Type != global::Grpc.Testing.PayloadType.COMPRESSABLE) hash ^= Type.GetHashCode();
+ if (Body.Length != 0) hash ^= Body.GetHashCode();
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(Payload prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<Payload, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(Payload cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private Payload result;
-
- private Payload PrepareBuilder() {
- if (resultIsReadOnly) {
- Payload original = result;
- result = new Payload();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Type != global::Grpc.Testing.PayloadType.COMPRESSABLE) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) Type);
}
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override Payload MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
+ if (Body.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteBytes(Body);
}
+ }
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
+ public int CalculateSize() {
+ int size = 0;
+ if (Type != global::Grpc.Testing.PayloadType.COMPRESSABLE) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Type);
}
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::grpc.testing.Payload.Descriptor; }
+ if (Body.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeBytesSize(Body);
}
+ return size;
+ }
- public override Payload DefaultInstanceForType {
- get { return global::grpc.testing.Payload.DefaultInstance; }
+ public void MergeFrom(Payload other) {
+ if (other == null) {
+ return;
}
-
- public override Payload BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ if (other.Type != global::Grpc.Testing.PayloadType.COMPRESSABLE) {
+ Type = other.Type;
}
-
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is Payload) {
- return MergeFrom((Payload) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ if (other.Body.Length != 0) {
+ Body = other.Body;
}
+ }
- public override Builder MergeFrom(Payload other) {
- if (other == global::grpc.testing.Payload.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasType) {
- Type = other.Type;
- }
- if (other.HasBody) {
- Body = other.Body;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_payloadFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _payloadFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ type_ = (global::Grpc.Testing.PayloadType) input.ReadEnum();
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- object unknown;
- if(input.ReadEnum(ref result.type_, out unknown)) {
- result.hasType = true;
- } else if(unknown is int) {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- unknownFields.MergeVarintField(1, (ulong)(int)unknown);
- }
- break;
- }
- case 18: {
- result.hasBody = input.ReadBytes(ref result.body_);
- break;
- }
+ case 18: {
+ Body = input.ReadBytes();
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasType {
- get { return result.hasType; }
- }
- public global::grpc.testing.PayloadType Type {
- get { return result.Type; }
- set { SetType(value); }
- }
- public Builder SetType(global::grpc.testing.PayloadType value) {
- PrepareBuilder();
- result.hasType = true;
- result.type_ = value;
- return this;
- }
- public Builder ClearType() {
- PrepareBuilder();
- result.hasType = false;
- result.type_ = global::grpc.testing.PayloadType.COMPRESSABLE;
- return this;
- }
-
- public bool HasBody {
- get { return result.hasBody; }
- }
- public pb::ByteString Body {
- get { return result.Body; }
- set { SetBody(value); }
}
- public Builder SetBody(pb::ByteString value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.hasBody = true;
- result.body_ = value;
- return this;
- }
- public Builder ClearBody() {
- PrepareBuilder();
- result.hasBody = false;
- result.body_ = pb::ByteString.Empty;
- return this;
- }
- }
- static Payload() {
- object.ReferenceEquals(global::grpc.testing.Messages.Descriptor, null);
}
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class SimpleRequest : pb::GeneratedMessage<SimpleRequest, SimpleRequest.Builder> {
- private SimpleRequest() { }
- private static readonly SimpleRequest defaultInstance = new SimpleRequest().MakeReadOnly();
- private static readonly string[] _simpleRequestFieldNames = new string[] { "fill_oauth_scope", "fill_username", "payload", "response_size", "response_type" };
- private static readonly uint[] _simpleRequestFieldTags = new uint[] { 40, 32, 26, 16, 8 };
- public static SimpleRequest DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class SimpleRequest : pb::IMessage<SimpleRequest> {
+ private static readonly pb::MessageParser<SimpleRequest> _parser = new pb::MessageParser<SimpleRequest>(() => new SimpleRequest());
+ public static pb::MessageParser<SimpleRequest> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.Messages.Descriptor.MessageTypes[1]; }
}
- public override SimpleRequest DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override SimpleRequest ThisMessage {
- get { return this; }
+ public SimpleRequest() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_SimpleRequest__Descriptor; }
+ partial void OnConstruction();
+
+ public SimpleRequest(SimpleRequest other) : this() {
+ responseType_ = other.responseType_;
+ responseSize_ = other.responseSize_;
+ Payload = other.payload_ != null ? other.Payload.Clone() : null;
+ fillUsername_ = other.fillUsername_;
+ fillOauthScope_ = other.fillOauthScope_;
}
- protected override pb::FieldAccess.FieldAccessorTable<SimpleRequest, SimpleRequest.Builder> InternalFieldAccessors {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_SimpleRequest__FieldAccessorTable; }
+ public SimpleRequest Clone() {
+ return new SimpleRequest(this);
}
public const int ResponseTypeFieldNumber = 1;
- private bool hasResponseType;
- private global::grpc.testing.PayloadType responseType_ = global::grpc.testing.PayloadType.COMPRESSABLE;
- public bool HasResponseType {
- get { return hasResponseType; }
- }
- public global::grpc.testing.PayloadType ResponseType {
+ private global::Grpc.Testing.PayloadType responseType_ = global::Grpc.Testing.PayloadType.COMPRESSABLE;
+ public global::Grpc.Testing.PayloadType ResponseType {
get { return responseType_; }
+ set {
+ responseType_ = value;
+ }
}
public const int ResponseSizeFieldNumber = 2;
- private bool hasResponseSize;
private int responseSize_;
- public bool HasResponseSize {
- get { return hasResponseSize; }
- }
public int ResponseSize {
get { return responseSize_; }
+ set {
+ responseSize_ = value;
+ }
}
public const int PayloadFieldNumber = 3;
- private bool hasPayload;
- private global::grpc.testing.Payload payload_;
- public bool HasPayload {
- get { return hasPayload; }
- }
- public global::grpc.testing.Payload Payload {
- get { return payload_ ?? global::grpc.testing.Payload.DefaultInstance; }
+ private global::Grpc.Testing.Payload payload_;
+ public global::Grpc.Testing.Payload Payload {
+ get { return payload_; }
+ set {
+ payload_ = value;
+ }
}
public const int FillUsernameFieldNumber = 4;
- private bool hasFillUsername;
private bool fillUsername_;
- public bool HasFillUsername {
- get { return hasFillUsername; }
- }
public bool FillUsername {
get { return fillUsername_; }
+ set {
+ fillUsername_ = value;
+ }
}
public const int FillOauthScopeFieldNumber = 5;
- private bool hasFillOauthScope;
private bool fillOauthScope_;
- public bool HasFillOauthScope {
- get { return hasFillOauthScope; }
- }
public bool FillOauthScope {
get { return fillOauthScope_; }
+ set {
+ fillOauthScope_ = value;
+ }
}
- public override bool IsInitialized {
- get {
- return true;
- }
+ public override bool Equals(object other) {
+ return Equals(other as SimpleRequest);
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _simpleRequestFieldNames;
- if (hasResponseType) {
- output.WriteEnum(1, field_names[4], (int) ResponseType, ResponseType);
- }
- if (hasResponseSize) {
- output.WriteInt32(2, field_names[3], ResponseSize);
- }
- if (hasPayload) {
- output.WriteMessage(3, field_names[2], Payload);
- }
- if (hasFillUsername) {
- output.WriteBool(4, field_names[1], FillUsername);
+ public bool Equals(SimpleRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
}
- if (hasFillOauthScope) {
- output.WriteBool(5, field_names[0], FillOauthScope);
+ if (ReferenceEquals(other, this)) {
+ return true;
}
- UnknownFields.WriteTo(output);
+ if (ResponseType != other.ResponseType) return false;
+ if (ResponseSize != other.ResponseSize) return false;
+ if (!object.Equals(Payload, other.Payload)) return false;
+ if (FillUsername != other.FillUsername) return false;
+ if (FillOauthScope != other.FillOauthScope) return false;
+ return true;
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasResponseType) {
- size += pb::CodedOutputStream.ComputeEnumSize(1, (int) ResponseType);
- }
- if (hasResponseSize) {
- size += pb::CodedOutputStream.ComputeInt32Size(2, ResponseSize);
- }
- if (hasPayload) {
- size += pb::CodedOutputStream.ComputeMessageSize(3, Payload);
- }
- if (hasFillUsername) {
- size += pb::CodedOutputStream.ComputeBoolSize(4, FillUsername);
- }
- if (hasFillOauthScope) {
- size += pb::CodedOutputStream.ComputeBoolSize(5, FillOauthScope);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
- }
+ public override int GetHashCode() {
+ int hash = 1;
+ if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) hash ^= ResponseType.GetHashCode();
+ if (ResponseSize != 0) hash ^= ResponseSize.GetHashCode();
+ if (payload_ != null) hash ^= Payload.GetHashCode();
+ if (FillUsername != false) hash ^= FillUsername.GetHashCode();
+ if (FillOauthScope != false) hash ^= FillOauthScope.GetHashCode();
+ return hash;
}
- public static SimpleRequest ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static SimpleRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static SimpleRequest ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static SimpleRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static SimpleRequest ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static SimpleRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static SimpleRequest ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static SimpleRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static SimpleRequest ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static SimpleRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private SimpleRequest MakeReadOnly() {
- return this;
- }
-
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(SimpleRequest prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<SimpleRequest, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) ResponseType);
}
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
+ if (ResponseSize != 0) {
+ output.WriteRawTag(16);
+ output.WriteInt32(ResponseSize);
}
- internal Builder(SimpleRequest cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
+ if (payload_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(Payload);
}
-
- private bool resultIsReadOnly;
- private SimpleRequest result;
-
- private SimpleRequest PrepareBuilder() {
- if (resultIsReadOnly) {
- SimpleRequest original = result;
- result = new SimpleRequest();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
+ if (FillUsername != false) {
+ output.WriteRawTag(32);
+ output.WriteBool(FillUsername);
}
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
+ if (FillOauthScope != false) {
+ output.WriteRawTag(40);
+ output.WriteBool(FillOauthScope);
}
+ }
- protected override SimpleRequest MessageBeingBuilt {
- get { return PrepareBuilder(); }
+ public int CalculateSize() {
+ int size = 0;
+ if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ResponseType);
}
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
+ if (ResponseSize != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(ResponseSize);
}
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
+ if (payload_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Payload);
}
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::grpc.testing.SimpleRequest.Descriptor; }
+ if (FillUsername != false) {
+ size += 1 + 1;
}
-
- public override SimpleRequest DefaultInstanceForType {
- get { return global::grpc.testing.SimpleRequest.DefaultInstance; }
+ if (FillOauthScope != false) {
+ size += 1 + 1;
}
+ return size;
+ }
- public override SimpleRequest BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ public void MergeFrom(SimpleRequest other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is SimpleRequest) {
- return MergeFrom((SimpleRequest) other);
- } else {
- base.MergeFrom(other);
- return this;
+ if (other.ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) {
+ ResponseType = other.ResponseType;
+ }
+ if (other.ResponseSize != 0) {
+ ResponseSize = other.ResponseSize;
+ }
+ if (other.payload_ != null) {
+ if (payload_ == null) {
+ payload_ = new global::Grpc.Testing.Payload();
}
+ Payload.MergeFrom(other.Payload);
+ }
+ if (other.FillUsername != false) {
+ FillUsername = other.FillUsername;
}
+ if (other.FillOauthScope != false) {
+ FillOauthScope = other.FillOauthScope;
+ }
+ }
- public override Builder MergeFrom(SimpleRequest other) {
- if (other == global::grpc.testing.SimpleRequest.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasResponseType) {
- ResponseType = other.ResponseType;
- }
- if (other.HasResponseSize) {
- ResponseSize = other.ResponseSize;
- }
- if (other.HasPayload) {
- MergePayload(other.Payload);
- }
- if (other.HasFillUsername) {
- FillUsername = other.FillUsername;
- }
- if (other.HasFillOauthScope) {
- FillOauthScope = other.FillOauthScope;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_simpleRequestFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _simpleRequestFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ responseType_ = (global::Grpc.Testing.PayloadType) input.ReadEnum();
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- object unknown;
- if(input.ReadEnum(ref result.responseType_, out unknown)) {
- result.hasResponseType = true;
- } else if(unknown is int) {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- unknownFields.MergeVarintField(1, (ulong)(int)unknown);
- }
- break;
- }
- case 16: {
- result.hasResponseSize = input.ReadInt32(ref result.responseSize_);
- break;
- }
- case 26: {
- global::grpc.testing.Payload.Builder subBuilder = global::grpc.testing.Payload.CreateBuilder();
- if (result.hasPayload) {
- subBuilder.MergeFrom(Payload);
- }
- input.ReadMessage(subBuilder, extensionRegistry);
- Payload = subBuilder.BuildPartial();
- break;
- }
- case 32: {
- result.hasFillUsername = input.ReadBool(ref result.fillUsername_);
- break;
- }
- case 40: {
- result.hasFillOauthScope = input.ReadBool(ref result.fillOauthScope_);
- break;
+ case 16: {
+ ResponseSize = input.ReadInt32();
+ break;
+ }
+ case 26: {
+ if (payload_ == null) {
+ payload_ = new global::Grpc.Testing.Payload();
}
+ input.ReadMessage(payload_);
+ break;
+ }
+ case 32: {
+ FillUsername = input.ReadBool();
+ break;
+ }
+ case 40: {
+ FillOauthScope = input.ReadBool();
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasResponseType {
- get { return result.hasResponseType; }
- }
- public global::grpc.testing.PayloadType ResponseType {
- get { return result.ResponseType; }
- set { SetResponseType(value); }
- }
- public Builder SetResponseType(global::grpc.testing.PayloadType value) {
- PrepareBuilder();
- result.hasResponseType = true;
- result.responseType_ = value;
- return this;
- }
- public Builder ClearResponseType() {
- PrepareBuilder();
- result.hasResponseType = false;
- result.responseType_ = global::grpc.testing.PayloadType.COMPRESSABLE;
- return this;
- }
-
- public bool HasResponseSize {
- get { return result.hasResponseSize; }
- }
- public int ResponseSize {
- get { return result.ResponseSize; }
- set { SetResponseSize(value); }
- }
- public Builder SetResponseSize(int value) {
- PrepareBuilder();
- result.hasResponseSize = true;
- result.responseSize_ = value;
- return this;
- }
- public Builder ClearResponseSize() {
- PrepareBuilder();
- result.hasResponseSize = false;
- result.responseSize_ = 0;
- return this;
- }
-
- public bool HasPayload {
- get { return result.hasPayload; }
- }
- public global::grpc.testing.Payload Payload {
- get { return result.Payload; }
- set { SetPayload(value); }
- }
- public Builder SetPayload(global::grpc.testing.Payload value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.hasPayload = true;
- result.payload_ = value;
- return this;
- }
- public Builder SetPayload(global::grpc.testing.Payload.Builder builderForValue) {
- pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
- PrepareBuilder();
- result.hasPayload = true;
- result.payload_ = builderForValue.Build();
- return this;
- }
- public Builder MergePayload(global::grpc.testing.Payload value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- if (result.hasPayload &&
- result.payload_ != global::grpc.testing.Payload.DefaultInstance) {
- result.payload_ = global::grpc.testing.Payload.CreateBuilder(result.payload_).MergeFrom(value).BuildPartial();
- } else {
- result.payload_ = value;
- }
- result.hasPayload = true;
- return this;
- }
- public Builder ClearPayload() {
- PrepareBuilder();
- result.hasPayload = false;
- result.payload_ = null;
- return this;
- }
-
- public bool HasFillUsername {
- get { return result.hasFillUsername; }
- }
- public bool FillUsername {
- get { return result.FillUsername; }
- set { SetFillUsername(value); }
- }
- public Builder SetFillUsername(bool value) {
- PrepareBuilder();
- result.hasFillUsername = true;
- result.fillUsername_ = value;
- return this;
- }
- public Builder ClearFillUsername() {
- PrepareBuilder();
- result.hasFillUsername = false;
- result.fillUsername_ = false;
- return this;
- }
-
- public bool HasFillOauthScope {
- get { return result.hasFillOauthScope; }
- }
- public bool FillOauthScope {
- get { return result.FillOauthScope; }
- set { SetFillOauthScope(value); }
- }
- public Builder SetFillOauthScope(bool value) {
- PrepareBuilder();
- result.hasFillOauthScope = true;
- result.fillOauthScope_ = value;
- return this;
- }
- public Builder ClearFillOauthScope() {
- PrepareBuilder();
- result.hasFillOauthScope = false;
- result.fillOauthScope_ = false;
- return this;
}
}
- static SimpleRequest() {
- object.ReferenceEquals(global::grpc.testing.Messages.Descriptor, null);
- }
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class SimpleResponse : pb::GeneratedMessage<SimpleResponse, SimpleResponse.Builder> {
- private SimpleResponse() { }
- private static readonly SimpleResponse defaultInstance = new SimpleResponse().MakeReadOnly();
- private static readonly string[] _simpleResponseFieldNames = new string[] { "oauth_scope", "payload", "username" };
- private static readonly uint[] _simpleResponseFieldTags = new uint[] { 26, 10, 18 };
- public static SimpleResponse DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class SimpleResponse : pb::IMessage<SimpleResponse> {
+ private static readonly pb::MessageParser<SimpleResponse> _parser = new pb::MessageParser<SimpleResponse>(() => new SimpleResponse());
+ public static pb::MessageParser<SimpleResponse> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.Messages.Descriptor.MessageTypes[2]; }
}
- public override SimpleResponse DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override SimpleResponse ThisMessage {
- get { return this; }
+ public SimpleResponse() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_SimpleResponse__Descriptor; }
+ partial void OnConstruction();
+
+ public SimpleResponse(SimpleResponse other) : this() {
+ Payload = other.payload_ != null ? other.Payload.Clone() : null;
+ username_ = other.username_;
+ oauthScope_ = other.oauthScope_;
}
- protected override pb::FieldAccess.FieldAccessorTable<SimpleResponse, SimpleResponse.Builder> InternalFieldAccessors {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_SimpleResponse__FieldAccessorTable; }
+ public SimpleResponse Clone() {
+ return new SimpleResponse(this);
}
public const int PayloadFieldNumber = 1;
- private bool hasPayload;
- private global::grpc.testing.Payload payload_;
- public bool HasPayload {
- get { return hasPayload; }
- }
- public global::grpc.testing.Payload Payload {
- get { return payload_ ?? global::grpc.testing.Payload.DefaultInstance; }
+ private global::Grpc.Testing.Payload payload_;
+ public global::Grpc.Testing.Payload Payload {
+ get { return payload_; }
+ set {
+ payload_ = value;
+ }
}
public const int UsernameFieldNumber = 2;
- private bool hasUsername;
private string username_ = "";
- public bool HasUsername {
- get { return hasUsername; }
- }
public string Username {
get { return username_; }
+ set {
+ username_ = pb::Preconditions.CheckNotNull(value, "value");
+ }
}
public const int OauthScopeFieldNumber = 3;
- private bool hasOauthScope;
private string oauthScope_ = "";
- public bool HasOauthScope {
- get { return hasOauthScope; }
- }
public string OauthScope {
get { return oauthScope_; }
- }
-
- public override bool IsInitialized {
- get {
- return true;
+ set {
+ oauthScope_ = pb::Preconditions.CheckNotNull(value, "value");
}
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _simpleResponseFieldNames;
- if (hasPayload) {
- output.WriteMessage(1, field_names[1], Payload);
- }
- if (hasUsername) {
- output.WriteString(2, field_names[2], Username);
- }
- if (hasOauthScope) {
- output.WriteString(3, field_names[0], OauthScope);
- }
- UnknownFields.WriteTo(output);
+ public override bool Equals(object other) {
+ return Equals(other as SimpleResponse);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasPayload) {
- size += pb::CodedOutputStream.ComputeMessageSize(1, Payload);
- }
- if (hasUsername) {
- size += pb::CodedOutputStream.ComputeStringSize(2, Username);
- }
- if (hasOauthScope) {
- size += pb::CodedOutputStream.ComputeStringSize(3, OauthScope);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(SimpleResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
}
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (!object.Equals(Payload, other.Payload)) return false;
+ if (Username != other.Username) return false;
+ if (OauthScope != other.OauthScope) return false;
+ return true;
}
- public static SimpleResponse ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static SimpleResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static SimpleResponse ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static SimpleResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static SimpleResponse ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static SimpleResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static SimpleResponse ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static SimpleResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static SimpleResponse ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static SimpleResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private SimpleResponse MakeReadOnly() {
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ if (payload_ != null) hash ^= Payload.GetHashCode();
+ if (Username.Length != 0) hash ^= Username.GetHashCode();
+ if (OauthScope.Length != 0) hash ^= OauthScope.GetHashCode();
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(SimpleResponse prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<SimpleResponse, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (payload_ != null) {
+ output.WriteRawTag(10);
+ output.WriteMessage(Payload);
}
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
+ if (Username.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(Username);
}
- internal Builder(SimpleResponse cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
+ if (OauthScope.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(OauthScope);
}
+ }
- private bool resultIsReadOnly;
- private SimpleResponse result;
-
- private SimpleResponse PrepareBuilder() {
- if (resultIsReadOnly) {
- SimpleResponse original = result;
- result = new SimpleResponse();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
+ public int CalculateSize() {
+ int size = 0;
+ if (payload_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Payload);
}
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
+ if (Username.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Username);
}
-
- protected override SimpleResponse MessageBeingBuilt {
- get { return PrepareBuilder(); }
+ if (OauthScope.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(OauthScope);
}
+ return size;
+ }
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
+ public void MergeFrom(SimpleResponse other) {
+ if (other == null) {
+ return;
}
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
+ if (other.payload_ != null) {
+ if (payload_ == null) {
+ payload_ = new global::Grpc.Testing.Payload();
}
+ Payload.MergeFrom(other.Payload);
}
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::grpc.testing.SimpleResponse.Descriptor; }
- }
-
- public override SimpleResponse DefaultInstanceForType {
- get { return global::grpc.testing.SimpleResponse.DefaultInstance; }
+ if (other.Username.Length != 0) {
+ Username = other.Username;
}
-
- public override SimpleResponse BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
- }
-
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is SimpleResponse) {
- return MergeFrom((SimpleResponse) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ if (other.OauthScope.Length != 0) {
+ OauthScope = other.OauthScope;
}
+ }
- public override Builder MergeFrom(SimpleResponse other) {
- if (other == global::grpc.testing.SimpleResponse.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasPayload) {
- MergePayload(other.Payload);
- }
- if (other.HasUsername) {
- Username = other.Username;
- }
- if (other.HasOauthScope) {
- OauthScope = other.OauthScope;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_simpleResponseFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _simpleResponseFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 10: {
+ if (payload_ == null) {
+ payload_ = new global::Grpc.Testing.Payload();
}
+ input.ReadMessage(payload_);
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 10: {
- global::grpc.testing.Payload.Builder subBuilder = global::grpc.testing.Payload.CreateBuilder();
- if (result.hasPayload) {
- subBuilder.MergeFrom(Payload);
- }
- input.ReadMessage(subBuilder, extensionRegistry);
- Payload = subBuilder.BuildPartial();
- break;
- }
- case 18: {
- result.hasUsername = input.ReadString(ref result.username_);
- break;
- }
- case 26: {
- result.hasOauthScope = input.ReadString(ref result.oauthScope_);
- break;
- }
+ case 18: {
+ Username = input.ReadString();
+ break;
+ }
+ case 26: {
+ OauthScope = input.ReadString();
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasPayload {
- get { return result.hasPayload; }
- }
- public global::grpc.testing.Payload Payload {
- get { return result.Payload; }
- set { SetPayload(value); }
- }
- public Builder SetPayload(global::grpc.testing.Payload value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.hasPayload = true;
- result.payload_ = value;
- return this;
- }
- public Builder SetPayload(global::grpc.testing.Payload.Builder builderForValue) {
- pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
- PrepareBuilder();
- result.hasPayload = true;
- result.payload_ = builderForValue.Build();
- return this;
- }
- public Builder MergePayload(global::grpc.testing.Payload value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- if (result.hasPayload &&
- result.payload_ != global::grpc.testing.Payload.DefaultInstance) {
- result.payload_ = global::grpc.testing.Payload.CreateBuilder(result.payload_).MergeFrom(value).BuildPartial();
- } else {
- result.payload_ = value;
- }
- result.hasPayload = true;
- return this;
- }
- public Builder ClearPayload() {
- PrepareBuilder();
- result.hasPayload = false;
- result.payload_ = null;
- return this;
- }
-
- public bool HasUsername {
- get { return result.hasUsername; }
- }
- public string Username {
- get { return result.Username; }
- set { SetUsername(value); }
- }
- public Builder SetUsername(string value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.hasUsername = true;
- result.username_ = value;
- return this;
- }
- public Builder ClearUsername() {
- PrepareBuilder();
- result.hasUsername = false;
- result.username_ = "";
- return this;
- }
-
- public bool HasOauthScope {
- get { return result.hasOauthScope; }
- }
- public string OauthScope {
- get { return result.OauthScope; }
- set { SetOauthScope(value); }
- }
- public Builder SetOauthScope(string value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.hasOauthScope = true;
- result.oauthScope_ = value;
- return this;
- }
- public Builder ClearOauthScope() {
- PrepareBuilder();
- result.hasOauthScope = false;
- result.oauthScope_ = "";
- return this;
}
}
- static SimpleResponse() {
- object.ReferenceEquals(global::grpc.testing.Messages.Descriptor, null);
- }
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class StreamingInputCallRequest : pb::GeneratedMessage<StreamingInputCallRequest, StreamingInputCallRequest.Builder> {
- private StreamingInputCallRequest() { }
- private static readonly StreamingInputCallRequest defaultInstance = new StreamingInputCallRequest().MakeReadOnly();
- private static readonly string[] _streamingInputCallRequestFieldNames = new string[] { "payload" };
- private static readonly uint[] _streamingInputCallRequestFieldTags = new uint[] { 10 };
- public static StreamingInputCallRequest DefaultInstance {
- get { return defaultInstance; }
- }
+ public sealed partial class StreamingInputCallRequest : pb::IMessage<StreamingInputCallRequest> {
+ private static readonly pb::MessageParser<StreamingInputCallRequest> _parser = new pb::MessageParser<StreamingInputCallRequest>(() => new StreamingInputCallRequest());
+ public static pb::MessageParser<StreamingInputCallRequest> Parser { get { return _parser; } }
- public override StreamingInputCallRequest DefaultInstanceForType {
- get { return DefaultInstance; }
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.Messages.Descriptor.MessageTypes[3]; }
}
- protected override StreamingInputCallRequest ThisMessage {
- get { return this; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_StreamingInputCallRequest__Descriptor; }
+ public StreamingInputCallRequest() {
+ OnConstruction();
}
- protected override pb::FieldAccess.FieldAccessorTable<StreamingInputCallRequest, StreamingInputCallRequest.Builder> InternalFieldAccessors {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_StreamingInputCallRequest__FieldAccessorTable; }
- }
+ partial void OnConstruction();
- public const int PayloadFieldNumber = 1;
- private bool hasPayload;
- private global::grpc.testing.Payload payload_;
- public bool HasPayload {
- get { return hasPayload; }
- }
- public global::grpc.testing.Payload Payload {
- get { return payload_ ?? global::grpc.testing.Payload.DefaultInstance; }
+ public StreamingInputCallRequest(StreamingInputCallRequest other) : this() {
+ Payload = other.payload_ != null ? other.Payload.Clone() : null;
}
- public override bool IsInitialized {
- get {
- return true;
- }
+ public StreamingInputCallRequest Clone() {
+ return new StreamingInputCallRequest(this);
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _streamingInputCallRequestFieldNames;
- if (hasPayload) {
- output.WriteMessage(1, field_names[0], Payload);
+ public const int PayloadFieldNumber = 1;
+ private global::Grpc.Testing.Payload payload_;
+ public global::Grpc.Testing.Payload Payload {
+ get { return payload_; }
+ set {
+ payload_ = value;
}
- UnknownFields.WriteTo(output);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
+ public override bool Equals(object other) {
+ return Equals(other as StreamingInputCallRequest);
+ }
- size = 0;
- if (hasPayload) {
- size += pb::CodedOutputStream.ComputeMessageSize(1, Payload);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(StreamingInputCallRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
}
+ if (!object.Equals(Payload, other.Payload)) return false;
+ return true;
}
- public static StreamingInputCallRequest ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static StreamingInputCallRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static StreamingInputCallRequest ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static StreamingInputCallRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static StreamingInputCallRequest ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static StreamingInputCallRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static StreamingInputCallRequest ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static StreamingInputCallRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static StreamingInputCallRequest ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static StreamingInputCallRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private StreamingInputCallRequest MakeReadOnly() {
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ if (payload_ != null) hash ^= Payload.GetHashCode();
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(StreamingInputCallRequest prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<StreamingInputCallRequest, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(StreamingInputCallRequest cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private StreamingInputCallRequest result;
-
- private StreamingInputCallRequest PrepareBuilder() {
- if (resultIsReadOnly) {
- StreamingInputCallRequest original = result;
- result = new StreamingInputCallRequest();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override StreamingInputCallRequest MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
- }
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::grpc.testing.StreamingInputCallRequest.Descriptor; }
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (payload_ != null) {
+ output.WriteRawTag(10);
+ output.WriteMessage(Payload);
}
+ }
- public override StreamingInputCallRequest DefaultInstanceForType {
- get { return global::grpc.testing.StreamingInputCallRequest.DefaultInstance; }
+ public int CalculateSize() {
+ int size = 0;
+ if (payload_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Payload);
}
+ return size;
+ }
- public override StreamingInputCallRequest BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ public void MergeFrom(StreamingInputCallRequest other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is StreamingInputCallRequest) {
- return MergeFrom((StreamingInputCallRequest) other);
- } else {
- base.MergeFrom(other);
- return this;
+ if (other.payload_ != null) {
+ if (payload_ == null) {
+ payload_ = new global::Grpc.Testing.Payload();
}
+ Payload.MergeFrom(other.Payload);
}
+ }
- public override Builder MergeFrom(StreamingInputCallRequest other) {
- if (other == global::grpc.testing.StreamingInputCallRequest.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasPayload) {
- MergePayload(other.Payload);
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_streamingInputCallRequestFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _streamingInputCallRequestFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 10: {
+ if (payload_ == null) {
+ payload_ = new global::Grpc.Testing.Payload();
}
+ input.ReadMessage(payload_);
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 10: {
- global::grpc.testing.Payload.Builder subBuilder = global::grpc.testing.Payload.CreateBuilder();
- if (result.hasPayload) {
- subBuilder.MergeFrom(Payload);
- }
- input.ReadMessage(subBuilder, extensionRegistry);
- Payload = subBuilder.BuildPartial();
- break;
- }
- }
- }
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasPayload {
- get { return result.hasPayload; }
- }
- public global::grpc.testing.Payload Payload {
- get { return result.Payload; }
- set { SetPayload(value); }
- }
- public Builder SetPayload(global::grpc.testing.Payload value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.hasPayload = true;
- result.payload_ = value;
- return this;
- }
- public Builder SetPayload(global::grpc.testing.Payload.Builder builderForValue) {
- pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
- PrepareBuilder();
- result.hasPayload = true;
- result.payload_ = builderForValue.Build();
- return this;
- }
- public Builder MergePayload(global::grpc.testing.Payload value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- if (result.hasPayload &&
- result.payload_ != global::grpc.testing.Payload.DefaultInstance) {
- result.payload_ = global::grpc.testing.Payload.CreateBuilder(result.payload_).MergeFrom(value).BuildPartial();
- } else {
- result.payload_ = value;
}
- result.hasPayload = true;
- return this;
}
- public Builder ClearPayload() {
- PrepareBuilder();
- result.hasPayload = false;
- result.payload_ = null;
- return this;
- }
- }
- static StreamingInputCallRequest() {
- object.ReferenceEquals(global::grpc.testing.Messages.Descriptor, null);
}
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class StreamingInputCallResponse : pb::GeneratedMessage<StreamingInputCallResponse, StreamingInputCallResponse.Builder> {
- private StreamingInputCallResponse() { }
- private static readonly StreamingInputCallResponse defaultInstance = new StreamingInputCallResponse().MakeReadOnly();
- private static readonly string[] _streamingInputCallResponseFieldNames = new string[] { "aggregated_payload_size" };
- private static readonly uint[] _streamingInputCallResponseFieldTags = new uint[] { 8 };
- public static StreamingInputCallResponse DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class StreamingInputCallResponse : pb::IMessage<StreamingInputCallResponse> {
+ private static readonly pb::MessageParser<StreamingInputCallResponse> _parser = new pb::MessageParser<StreamingInputCallResponse>(() => new StreamingInputCallResponse());
+ public static pb::MessageParser<StreamingInputCallResponse> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.Messages.Descriptor.MessageTypes[4]; }
}
- public override StreamingInputCallResponse DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override StreamingInputCallResponse ThisMessage {
- get { return this; }
+ public StreamingInputCallResponse() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_StreamingInputCallResponse__Descriptor; }
+ partial void OnConstruction();
+
+ public StreamingInputCallResponse(StreamingInputCallResponse other) : this() {
+ aggregatedPayloadSize_ = other.aggregatedPayloadSize_;
}
- protected override pb::FieldAccess.FieldAccessorTable<StreamingInputCallResponse, StreamingInputCallResponse.Builder> InternalFieldAccessors {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_StreamingInputCallResponse__FieldAccessorTable; }
+ public StreamingInputCallResponse Clone() {
+ return new StreamingInputCallResponse(this);
}
public const int AggregatedPayloadSizeFieldNumber = 1;
- private bool hasAggregatedPayloadSize;
private int aggregatedPayloadSize_;
- public bool HasAggregatedPayloadSize {
- get { return hasAggregatedPayloadSize; }
- }
public int AggregatedPayloadSize {
get { return aggregatedPayloadSize_; }
- }
-
- public override bool IsInitialized {
- get {
- return true;
+ set {
+ aggregatedPayloadSize_ = value;
}
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _streamingInputCallResponseFieldNames;
- if (hasAggregatedPayloadSize) {
- output.WriteInt32(1, field_names[0], AggregatedPayloadSize);
- }
- UnknownFields.WriteTo(output);
+ public override bool Equals(object other) {
+ return Equals(other as StreamingInputCallResponse);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasAggregatedPayloadSize) {
- size += pb::CodedOutputStream.ComputeInt32Size(1, AggregatedPayloadSize);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(StreamingInputCallResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
}
+ if (AggregatedPayloadSize != other.AggregatedPayloadSize) return false;
+ return true;
}
- public static StreamingInputCallResponse ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static StreamingInputCallResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static StreamingInputCallResponse ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static StreamingInputCallResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static StreamingInputCallResponse ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static StreamingInputCallResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static StreamingInputCallResponse ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static StreamingInputCallResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static StreamingInputCallResponse ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static StreamingInputCallResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private StreamingInputCallResponse MakeReadOnly() {
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ if (AggregatedPayloadSize != 0) hash ^= AggregatedPayloadSize.GetHashCode();
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(StreamingInputCallResponse prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<StreamingInputCallResponse, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(StreamingInputCallResponse cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private StreamingInputCallResponse result;
-
- private StreamingInputCallResponse PrepareBuilder() {
- if (resultIsReadOnly) {
- StreamingInputCallResponse original = result;
- result = new StreamingInputCallResponse();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override StreamingInputCallResponse MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
- }
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::grpc.testing.StreamingInputCallResponse.Descriptor; }
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (AggregatedPayloadSize != 0) {
+ output.WriteRawTag(8);
+ output.WriteInt32(AggregatedPayloadSize);
}
+ }
- public override StreamingInputCallResponse DefaultInstanceForType {
- get { return global::grpc.testing.StreamingInputCallResponse.DefaultInstance; }
+ public int CalculateSize() {
+ int size = 0;
+ if (AggregatedPayloadSize != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(AggregatedPayloadSize);
}
+ return size;
+ }
- public override StreamingInputCallResponse BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ public void MergeFrom(StreamingInputCallResponse other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is StreamingInputCallResponse) {
- return MergeFrom((StreamingInputCallResponse) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ if (other.AggregatedPayloadSize != 0) {
+ AggregatedPayloadSize = other.AggregatedPayloadSize;
}
+ }
- public override Builder MergeFrom(StreamingInputCallResponse other) {
- if (other == global::grpc.testing.StreamingInputCallResponse.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasAggregatedPayloadSize) {
- AggregatedPayloadSize = other.AggregatedPayloadSize;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_streamingInputCallResponseFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _streamingInputCallResponseFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
- }
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- result.hasAggregatedPayloadSize = input.ReadInt32(ref result.aggregatedPayloadSize_);
- break;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ AggregatedPayloadSize = input.ReadInt32();
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasAggregatedPayloadSize {
- get { return result.hasAggregatedPayloadSize; }
- }
- public int AggregatedPayloadSize {
- get { return result.AggregatedPayloadSize; }
- set { SetAggregatedPayloadSize(value); }
- }
- public Builder SetAggregatedPayloadSize(int value) {
- PrepareBuilder();
- result.hasAggregatedPayloadSize = true;
- result.aggregatedPayloadSize_ = value;
- return this;
}
- public Builder ClearAggregatedPayloadSize() {
- PrepareBuilder();
- result.hasAggregatedPayloadSize = false;
- result.aggregatedPayloadSize_ = 0;
- return this;
- }
- }
- static StreamingInputCallResponse() {
- object.ReferenceEquals(global::grpc.testing.Messages.Descriptor, null);
}
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class ResponseParameters : pb::GeneratedMessage<ResponseParameters, ResponseParameters.Builder> {
- private ResponseParameters() { }
- private static readonly ResponseParameters defaultInstance = new ResponseParameters().MakeReadOnly();
- private static readonly string[] _responseParametersFieldNames = new string[] { "interval_us", "size" };
- private static readonly uint[] _responseParametersFieldTags = new uint[] { 16, 8 };
- public static ResponseParameters DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class ResponseParameters : pb::IMessage<ResponseParameters> {
+ private static readonly pb::MessageParser<ResponseParameters> _parser = new pb::MessageParser<ResponseParameters>(() => new ResponseParameters());
+ public static pb::MessageParser<ResponseParameters> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.Messages.Descriptor.MessageTypes[5]; }
}
- public override ResponseParameters DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override ResponseParameters ThisMessage {
- get { return this; }
+ public ResponseParameters() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_ResponseParameters__Descriptor; }
+ partial void OnConstruction();
+
+ public ResponseParameters(ResponseParameters other) : this() {
+ size_ = other.size_;
+ intervalUs_ = other.intervalUs_;
}
- protected override pb::FieldAccess.FieldAccessorTable<ResponseParameters, ResponseParameters.Builder> InternalFieldAccessors {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_ResponseParameters__FieldAccessorTable; }
+ public ResponseParameters Clone() {
+ return new ResponseParameters(this);
}
public const int SizeFieldNumber = 1;
- private bool hasSize;
private int size_;
- public bool HasSize {
- get { return hasSize; }
- }
public int Size {
get { return size_; }
+ set {
+ size_ = value;
+ }
}
public const int IntervalUsFieldNumber = 2;
- private bool hasIntervalUs;
private int intervalUs_;
- public bool HasIntervalUs {
- get { return hasIntervalUs; }
- }
public int IntervalUs {
get { return intervalUs_; }
+ set {
+ intervalUs_ = value;
+ }
}
- public override bool IsInitialized {
- get {
- return true;
- }
+ public override bool Equals(object other) {
+ return Equals(other as ResponseParameters);
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _responseParametersFieldNames;
- if (hasSize) {
- output.WriteInt32(1, field_names[1], Size);
+ public bool Equals(ResponseParameters other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
}
- if (hasIntervalUs) {
- output.WriteInt32(2, field_names[0], IntervalUs);
+ if (ReferenceEquals(other, this)) {
+ return true;
}
- UnknownFields.WriteTo(output);
+ if (Size != other.Size) return false;
+ if (IntervalUs != other.IntervalUs) return false;
+ return true;
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasSize) {
- size += pb::CodedOutputStream.ComputeInt32Size(1, Size);
- }
- if (hasIntervalUs) {
- size += pb::CodedOutputStream.ComputeInt32Size(2, IntervalUs);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
- }
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Size != 0) hash ^= Size.GetHashCode();
+ if (IntervalUs != 0) hash ^= IntervalUs.GetHashCode();
+ return hash;
}
- public static ResponseParameters ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static ResponseParameters ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static ResponseParameters ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static ResponseParameters ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static ResponseParameters ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static ResponseParameters ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static ResponseParameters ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static ResponseParameters ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static ResponseParameters ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- public static ResponseParameters ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private ResponseParameters MakeReadOnly() {
- return this;
- }
-
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(ResponseParameters prototype) {
- return new Builder(prototype);
- }
-
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<ResponseParameters, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(ResponseParameters cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
- private bool resultIsReadOnly;
- private ResponseParameters result;
-
- private ResponseParameters PrepareBuilder() {
- if (resultIsReadOnly) {
- ResponseParameters original = result;
- result = new ResponseParameters();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (Size != 0) {
+ output.WriteRawTag(8);
+ output.WriteInt32(Size);
}
-
- protected override ResponseParameters MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
+ if (IntervalUs != 0) {
+ output.WriteRawTag(16);
+ output.WriteInt32(IntervalUs);
}
+ }
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
+ public int CalculateSize() {
+ int size = 0;
+ if (Size != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(Size);
}
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::grpc.testing.ResponseParameters.Descriptor; }
+ if (IntervalUs != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeInt32Size(IntervalUs);
}
+ return size;
+ }
- public override ResponseParameters DefaultInstanceForType {
- get { return global::grpc.testing.ResponseParameters.DefaultInstance; }
+ public void MergeFrom(ResponseParameters other) {
+ if (other == null) {
+ return;
}
-
- public override ResponseParameters BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ if (other.Size != 0) {
+ Size = other.Size;
}
-
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is ResponseParameters) {
- return MergeFrom((ResponseParameters) other);
- } else {
- base.MergeFrom(other);
- return this;
- }
+ if (other.IntervalUs != 0) {
+ IntervalUs = other.IntervalUs;
}
+ }
- public override Builder MergeFrom(ResponseParameters other) {
- if (other == global::grpc.testing.ResponseParameters.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasSize) {
- Size = other.Size;
- }
- if (other.HasIntervalUs) {
- IntervalUs = other.IntervalUs;
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_responseParametersFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _responseParametersFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ Size = input.ReadInt32();
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- result.hasSize = input.ReadInt32(ref result.size_);
- break;
- }
- case 16: {
- result.hasIntervalUs = input.ReadInt32(ref result.intervalUs_);
- break;
- }
+ case 16: {
+ IntervalUs = input.ReadInt32();
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasSize {
- get { return result.hasSize; }
- }
- public int Size {
- get { return result.Size; }
- set { SetSize(value); }
- }
- public Builder SetSize(int value) {
- PrepareBuilder();
- result.hasSize = true;
- result.size_ = value;
- return this;
- }
- public Builder ClearSize() {
- PrepareBuilder();
- result.hasSize = false;
- result.size_ = 0;
- return this;
- }
-
- public bool HasIntervalUs {
- get { return result.hasIntervalUs; }
}
- public int IntervalUs {
- get { return result.IntervalUs; }
- set { SetIntervalUs(value); }
- }
- public Builder SetIntervalUs(int value) {
- PrepareBuilder();
- result.hasIntervalUs = true;
- result.intervalUs_ = value;
- return this;
- }
- public Builder ClearIntervalUs() {
- PrepareBuilder();
- result.hasIntervalUs = false;
- result.intervalUs_ = 0;
- return this;
- }
- }
- static ResponseParameters() {
- object.ReferenceEquals(global::grpc.testing.Messages.Descriptor, null);
}
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class StreamingOutputCallRequest : pb::GeneratedMessage<StreamingOutputCallRequest, StreamingOutputCallRequest.Builder> {
- private StreamingOutputCallRequest() { }
- private static readonly StreamingOutputCallRequest defaultInstance = new StreamingOutputCallRequest().MakeReadOnly();
- private static readonly string[] _streamingOutputCallRequestFieldNames = new string[] { "payload", "response_parameters", "response_type" };
- private static readonly uint[] _streamingOutputCallRequestFieldTags = new uint[] { 26, 18, 8 };
- public static StreamingOutputCallRequest DefaultInstance {
- get { return defaultInstance; }
+ public sealed partial class StreamingOutputCallRequest : pb::IMessage<StreamingOutputCallRequest> {
+ private static readonly pb::MessageParser<StreamingOutputCallRequest> _parser = new pb::MessageParser<StreamingOutputCallRequest>(() => new StreamingOutputCallRequest());
+ public static pb::MessageParser<StreamingOutputCallRequest> Parser { get { return _parser; } }
+
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.Messages.Descriptor.MessageTypes[6]; }
}
- public override StreamingOutputCallRequest DefaultInstanceForType {
- get { return DefaultInstance; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- protected override StreamingOutputCallRequest ThisMessage {
- get { return this; }
+ public StreamingOutputCallRequest() {
+ OnConstruction();
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_StreamingOutputCallRequest__Descriptor; }
+ partial void OnConstruction();
+
+ public StreamingOutputCallRequest(StreamingOutputCallRequest other) : this() {
+ responseType_ = other.responseType_;
+ responseParameters_ = other.responseParameters_.Clone();
+ Payload = other.payload_ != null ? other.Payload.Clone() : null;
}
- protected override pb::FieldAccess.FieldAccessorTable<StreamingOutputCallRequest, StreamingOutputCallRequest.Builder> InternalFieldAccessors {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_StreamingOutputCallRequest__FieldAccessorTable; }
+ public StreamingOutputCallRequest Clone() {
+ return new StreamingOutputCallRequest(this);
}
public const int ResponseTypeFieldNumber = 1;
- private bool hasResponseType;
- private global::grpc.testing.PayloadType responseType_ = global::grpc.testing.PayloadType.COMPRESSABLE;
- public bool HasResponseType {
- get { return hasResponseType; }
- }
- public global::grpc.testing.PayloadType ResponseType {
+ private global::Grpc.Testing.PayloadType responseType_ = global::Grpc.Testing.PayloadType.COMPRESSABLE;
+ public global::Grpc.Testing.PayloadType ResponseType {
get { return responseType_; }
+ set {
+ responseType_ = value;
+ }
}
public const int ResponseParametersFieldNumber = 2;
- private pbc::PopsicleList<global::grpc.testing.ResponseParameters> responseParameters_ = new pbc::PopsicleList<global::grpc.testing.ResponseParameters>();
- public scg::IList<global::grpc.testing.ResponseParameters> ResponseParametersList {
+ private static readonly pb::FieldCodec<global::Grpc.Testing.ResponseParameters> _repeated_responseParameters_codec
+ = pb::FieldCodec.ForMessage(18, global::Grpc.Testing.ResponseParameters.Parser);
+ private readonly pbc::RepeatedField<global::Grpc.Testing.ResponseParameters> responseParameters_ = new pbc::RepeatedField<global::Grpc.Testing.ResponseParameters>();
+ public pbc::RepeatedField<global::Grpc.Testing.ResponseParameters> ResponseParameters {
get { return responseParameters_; }
}
- public int ResponseParametersCount {
- get { return responseParameters_.Count; }
- }
- public global::grpc.testing.ResponseParameters GetResponseParameters(int index) {
- return responseParameters_[index];
- }
public const int PayloadFieldNumber = 3;
- private bool hasPayload;
- private global::grpc.testing.Payload payload_;
- public bool HasPayload {
- get { return hasPayload; }
- }
- public global::grpc.testing.Payload Payload {
- get { return payload_ ?? global::grpc.testing.Payload.DefaultInstance; }
- }
-
- public override bool IsInitialized {
- get {
- return true;
+ private global::Grpc.Testing.Payload payload_;
+ public global::Grpc.Testing.Payload Payload {
+ get { return payload_; }
+ set {
+ payload_ = value;
}
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _streamingOutputCallRequestFieldNames;
- if (hasResponseType) {
- output.WriteEnum(1, field_names[2], (int) ResponseType, ResponseType);
- }
- if (responseParameters_.Count > 0) {
- output.WriteMessageArray(2, field_names[1], responseParameters_);
- }
- if (hasPayload) {
- output.WriteMessage(3, field_names[0], Payload);
- }
- UnknownFields.WriteTo(output);
+ public override bool Equals(object other) {
+ return Equals(other as StreamingOutputCallRequest);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
-
- size = 0;
- if (hasResponseType) {
- size += pb::CodedOutputStream.ComputeEnumSize(1, (int) ResponseType);
- }
- foreach (global::grpc.testing.ResponseParameters element in ResponseParametersList) {
- size += pb::CodedOutputStream.ComputeMessageSize(2, element);
- }
- if (hasPayload) {
- size += pb::CodedOutputStream.ComputeMessageSize(3, Payload);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(StreamingOutputCallRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
}
+ if (ResponseType != other.ResponseType) return false;
+ if(!responseParameters_.Equals(other.responseParameters_)) return false;
+ if (!object.Equals(Payload, other.Payload)) return false;
+ return true;
}
- public static StreamingOutputCallRequest ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static StreamingOutputCallRequest ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static StreamingOutputCallRequest ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static StreamingOutputCallRequest ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static StreamingOutputCallRequest ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static StreamingOutputCallRequest ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static StreamingOutputCallRequest ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static StreamingOutputCallRequest ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static StreamingOutputCallRequest ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static StreamingOutputCallRequest ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private StreamingOutputCallRequest MakeReadOnly() {
- responseParameters_.MakeReadOnly();
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) hash ^= ResponseType.GetHashCode();
+ hash ^= responseParameters_.GetHashCode();
+ if (payload_ != null) hash ^= Payload.GetHashCode();
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(StreamingOutputCallRequest prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<StreamingOutputCallRequest, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(StreamingOutputCallRequest cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private StreamingOutputCallRequest result;
-
- private StreamingOutputCallRequest PrepareBuilder() {
- if (resultIsReadOnly) {
- StreamingOutputCallRequest original = result;
- result = new StreamingOutputCallRequest();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) ResponseType);
}
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override StreamingOutputCallRequest MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
+ responseParameters_.WriteTo(output, _repeated_responseParameters_codec);
+ if (payload_ != null) {
+ output.WriteRawTag(26);
+ output.WriteMessage(Payload);
}
+ }
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
+ public int CalculateSize() {
+ int size = 0;
+ if (ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) ResponseType);
}
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::grpc.testing.StreamingOutputCallRequest.Descriptor; }
+ size += responseParameters_.CalculateSize(_repeated_responseParameters_codec);
+ if (payload_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Payload);
}
+ return size;
+ }
- public override StreamingOutputCallRequest DefaultInstanceForType {
- get { return global::grpc.testing.StreamingOutputCallRequest.DefaultInstance; }
+ public void MergeFrom(StreamingOutputCallRequest other) {
+ if (other == null) {
+ return;
}
-
- public override StreamingOutputCallRequest BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ if (other.ResponseType != global::Grpc.Testing.PayloadType.COMPRESSABLE) {
+ ResponseType = other.ResponseType;
}
-
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is StreamingOutputCallRequest) {
- return MergeFrom((StreamingOutputCallRequest) other);
- } else {
- base.MergeFrom(other);
- return this;
+ responseParameters_.Add(other.responseParameters_);
+ if (other.payload_ != null) {
+ if (payload_ == null) {
+ payload_ = new global::Grpc.Testing.Payload();
}
+ Payload.MergeFrom(other.Payload);
}
+ }
- public override Builder MergeFrom(StreamingOutputCallRequest other) {
- if (other == global::grpc.testing.StreamingOutputCallRequest.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasResponseType) {
- ResponseType = other.ResponseType;
- }
- if (other.responseParameters_.Count != 0) {
- result.responseParameters_.Add(other.responseParameters_);
- }
- if (other.HasPayload) {
- MergePayload(other.Payload);
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_streamingOutputCallRequestFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _streamingOutputCallRequestFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 8: {
+ responseType_ = (global::Grpc.Testing.PayloadType) input.ReadEnum();
+ break;
}
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 8: {
- object unknown;
- if(input.ReadEnum(ref result.responseType_, out unknown)) {
- result.hasResponseType = true;
- } else if(unknown is int) {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- unknownFields.MergeVarintField(1, (ulong)(int)unknown);
- }
- break;
- }
- case 18: {
- input.ReadMessageArray(tag, field_name, result.responseParameters_, global::grpc.testing.ResponseParameters.DefaultInstance, extensionRegistry);
- break;
- }
- case 26: {
- global::grpc.testing.Payload.Builder subBuilder = global::grpc.testing.Payload.CreateBuilder();
- if (result.hasPayload) {
- subBuilder.MergeFrom(Payload);
- }
- input.ReadMessage(subBuilder, extensionRegistry);
- Payload = subBuilder.BuildPartial();
- break;
+ case 18: {
+ responseParameters_.AddEntriesFrom(input, _repeated_responseParameters_codec);
+ break;
+ }
+ case 26: {
+ if (payload_ == null) {
+ payload_ = new global::Grpc.Testing.Payload();
}
+ input.ReadMessage(payload_);
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasResponseType {
- get { return result.hasResponseType; }
- }
- public global::grpc.testing.PayloadType ResponseType {
- get { return result.ResponseType; }
- set { SetResponseType(value); }
- }
- public Builder SetResponseType(global::grpc.testing.PayloadType value) {
- PrepareBuilder();
- result.hasResponseType = true;
- result.responseType_ = value;
- return this;
- }
- public Builder ClearResponseType() {
- PrepareBuilder();
- result.hasResponseType = false;
- result.responseType_ = global::grpc.testing.PayloadType.COMPRESSABLE;
- return this;
- }
-
- public pbc::IPopsicleList<global::grpc.testing.ResponseParameters> ResponseParametersList {
- get { return PrepareBuilder().responseParameters_; }
- }
- public int ResponseParametersCount {
- get { return result.ResponseParametersCount; }
- }
- public global::grpc.testing.ResponseParameters GetResponseParameters(int index) {
- return result.GetResponseParameters(index);
- }
- public Builder SetResponseParameters(int index, global::grpc.testing.ResponseParameters value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.responseParameters_[index] = value;
- return this;
- }
- public Builder SetResponseParameters(int index, global::grpc.testing.ResponseParameters.Builder builderForValue) {
- pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
- PrepareBuilder();
- result.responseParameters_[index] = builderForValue.Build();
- return this;
- }
- public Builder AddResponseParameters(global::grpc.testing.ResponseParameters value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.responseParameters_.Add(value);
- return this;
- }
- public Builder AddResponseParameters(global::grpc.testing.ResponseParameters.Builder builderForValue) {
- pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
- PrepareBuilder();
- result.responseParameters_.Add(builderForValue.Build());
- return this;
- }
- public Builder AddRangeResponseParameters(scg::IEnumerable<global::grpc.testing.ResponseParameters> values) {
- PrepareBuilder();
- result.responseParameters_.Add(values);
- return this;
- }
- public Builder ClearResponseParameters() {
- PrepareBuilder();
- result.responseParameters_.Clear();
- return this;
- }
-
- public bool HasPayload {
- get { return result.hasPayload; }
- }
- public global::grpc.testing.Payload Payload {
- get { return result.Payload; }
- set { SetPayload(value); }
- }
- public Builder SetPayload(global::grpc.testing.Payload value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.hasPayload = true;
- result.payload_ = value;
- return this;
- }
- public Builder SetPayload(global::grpc.testing.Payload.Builder builderForValue) {
- pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
- PrepareBuilder();
- result.hasPayload = true;
- result.payload_ = builderForValue.Build();
- return this;
- }
- public Builder MergePayload(global::grpc.testing.Payload value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- if (result.hasPayload &&
- result.payload_ != global::grpc.testing.Payload.DefaultInstance) {
- result.payload_ = global::grpc.testing.Payload.CreateBuilder(result.payload_).MergeFrom(value).BuildPartial();
- } else {
- result.payload_ = value;
- }
- result.hasPayload = true;
- return this;
- }
- public Builder ClearPayload() {
- PrepareBuilder();
- result.hasPayload = false;
- result.payload_ = null;
- return this;
}
}
- static StreamingOutputCallRequest() {
- object.ReferenceEquals(global::grpc.testing.Messages.Descriptor, null);
- }
+
}
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class StreamingOutputCallResponse : pb::GeneratedMessage<StreamingOutputCallResponse, StreamingOutputCallResponse.Builder> {
- private StreamingOutputCallResponse() { }
- private static readonly StreamingOutputCallResponse defaultInstance = new StreamingOutputCallResponse().MakeReadOnly();
- private static readonly string[] _streamingOutputCallResponseFieldNames = new string[] { "payload" };
- private static readonly uint[] _streamingOutputCallResponseFieldTags = new uint[] { 10 };
- public static StreamingOutputCallResponse DefaultInstance {
- get { return defaultInstance; }
- }
+ public sealed partial class StreamingOutputCallResponse : pb::IMessage<StreamingOutputCallResponse> {
+ private static readonly pb::MessageParser<StreamingOutputCallResponse> _parser = new pb::MessageParser<StreamingOutputCallResponse>(() => new StreamingOutputCallResponse());
+ public static pb::MessageParser<StreamingOutputCallResponse> Parser { get { return _parser; } }
- public override StreamingOutputCallResponse DefaultInstanceForType {
- get { return DefaultInstance; }
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.Messages.Descriptor.MessageTypes[7]; }
}
- protected override StreamingOutputCallResponse ThisMessage {
- get { return this; }
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
}
- public static pbd::MessageDescriptor Descriptor {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_StreamingOutputCallResponse__Descriptor; }
+ public StreamingOutputCallResponse() {
+ OnConstruction();
}
- protected override pb::FieldAccess.FieldAccessorTable<StreamingOutputCallResponse, StreamingOutputCallResponse.Builder> InternalFieldAccessors {
- get { return global::grpc.testing.Messages.internal__static_grpc_testing_StreamingOutputCallResponse__FieldAccessorTable; }
- }
+ partial void OnConstruction();
- public const int PayloadFieldNumber = 1;
- private bool hasPayload;
- private global::grpc.testing.Payload payload_;
- public bool HasPayload {
- get { return hasPayload; }
- }
- public global::grpc.testing.Payload Payload {
- get { return payload_ ?? global::grpc.testing.Payload.DefaultInstance; }
+ public StreamingOutputCallResponse(StreamingOutputCallResponse other) : this() {
+ Payload = other.payload_ != null ? other.Payload.Clone() : null;
}
- public override bool IsInitialized {
- get {
- return true;
- }
+ public StreamingOutputCallResponse Clone() {
+ return new StreamingOutputCallResponse(this);
}
- public override void WriteTo(pb::ICodedOutputStream output) {
- int size = SerializedSize;
- string[] field_names = _streamingOutputCallResponseFieldNames;
- if (hasPayload) {
- output.WriteMessage(1, field_names[0], Payload);
+ public const int PayloadFieldNumber = 1;
+ private global::Grpc.Testing.Payload payload_;
+ public global::Grpc.Testing.Payload Payload {
+ get { return payload_; }
+ set {
+ payload_ = value;
}
- UnknownFields.WriteTo(output);
}
- private int memoizedSerializedSize = -1;
- public override int SerializedSize {
- get {
- int size = memoizedSerializedSize;
- if (size != -1) return size;
+ public override bool Equals(object other) {
+ return Equals(other as StreamingOutputCallResponse);
+ }
- size = 0;
- if (hasPayload) {
- size += pb::CodedOutputStream.ComputeMessageSize(1, Payload);
- }
- size += UnknownFields.SerializedSize;
- memoizedSerializedSize = size;
- return size;
+ public bool Equals(StreamingOutputCallResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
}
+ if (!object.Equals(Payload, other.Payload)) return false;
+ return true;
}
- public static StreamingOutputCallResponse ParseFrom(pb::ByteString data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static StreamingOutputCallResponse ParseFrom(pb::ByteString data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static StreamingOutputCallResponse ParseFrom(byte[] data) {
- return ((Builder) CreateBuilder().MergeFrom(data)).BuildParsed();
- }
- public static StreamingOutputCallResponse ParseFrom(byte[] data, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(data, extensionRegistry)).BuildParsed();
- }
- public static StreamingOutputCallResponse ParseFrom(global::System.IO.Stream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static StreamingOutputCallResponse ParseFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- public static StreamingOutputCallResponse ParseDelimitedFrom(global::System.IO.Stream input) {
- return CreateBuilder().MergeDelimitedFrom(input).BuildParsed();
- }
- public static StreamingOutputCallResponse ParseDelimitedFrom(global::System.IO.Stream input, pb::ExtensionRegistry extensionRegistry) {
- return CreateBuilder().MergeDelimitedFrom(input, extensionRegistry).BuildParsed();
- }
- public static StreamingOutputCallResponse ParseFrom(pb::ICodedInputStream input) {
- return ((Builder) CreateBuilder().MergeFrom(input)).BuildParsed();
- }
- public static StreamingOutputCallResponse ParseFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- return ((Builder) CreateBuilder().MergeFrom(input, extensionRegistry)).BuildParsed();
- }
- private StreamingOutputCallResponse MakeReadOnly() {
- return this;
+ public override int GetHashCode() {
+ int hash = 1;
+ if (payload_ != null) hash ^= Payload.GetHashCode();
+ return hash;
}
- public static Builder CreateBuilder() { return new Builder(); }
- public override Builder ToBuilder() { return CreateBuilder(this); }
- public override Builder CreateBuilderForType() { return new Builder(); }
- public static Builder CreateBuilder(StreamingOutputCallResponse prototype) {
- return new Builder(prototype);
+ public override string ToString() {
+ return pb::JsonFormatter.Default.Format(this);
}
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- public sealed partial class Builder : pb::GeneratedBuilder<StreamingOutputCallResponse, Builder> {
- protected override Builder ThisBuilder {
- get { return this; }
- }
- public Builder() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- }
- internal Builder(StreamingOutputCallResponse cloneFrom) {
- result = cloneFrom;
- resultIsReadOnly = true;
- }
-
- private bool resultIsReadOnly;
- private StreamingOutputCallResponse result;
-
- private StreamingOutputCallResponse PrepareBuilder() {
- if (resultIsReadOnly) {
- StreamingOutputCallResponse original = result;
- result = new StreamingOutputCallResponse();
- resultIsReadOnly = false;
- MergeFrom(original);
- }
- return result;
- }
-
- public override bool IsInitialized {
- get { return result.IsInitialized; }
- }
-
- protected override StreamingOutputCallResponse MessageBeingBuilt {
- get { return PrepareBuilder(); }
- }
-
- public override Builder Clear() {
- result = DefaultInstance;
- resultIsReadOnly = true;
- return this;
- }
-
- public override Builder Clone() {
- if (resultIsReadOnly) {
- return new Builder(result);
- } else {
- return new Builder().MergeFrom(result);
- }
- }
-
- public override pbd::MessageDescriptor DescriptorForType {
- get { return global::grpc.testing.StreamingOutputCallResponse.Descriptor; }
+ public void WriteTo(pb::CodedOutputStream output) {
+ if (payload_ != null) {
+ output.WriteRawTag(10);
+ output.WriteMessage(Payload);
}
+ }
- public override StreamingOutputCallResponse DefaultInstanceForType {
- get { return global::grpc.testing.StreamingOutputCallResponse.DefaultInstance; }
+ public int CalculateSize() {
+ int size = 0;
+ if (payload_ != null) {
+ size += 1 + pb::CodedOutputStream.ComputeMessageSize(Payload);
}
+ return size;
+ }
- public override StreamingOutputCallResponse BuildPartial() {
- if (resultIsReadOnly) {
- return result;
- }
- resultIsReadOnly = true;
- return result.MakeReadOnly();
+ public void MergeFrom(StreamingOutputCallResponse other) {
+ if (other == null) {
+ return;
}
-
- public override Builder MergeFrom(pb::IMessage other) {
- if (other is StreamingOutputCallResponse) {
- return MergeFrom((StreamingOutputCallResponse) other);
- } else {
- base.MergeFrom(other);
- return this;
+ if (other.payload_ != null) {
+ if (payload_ == null) {
+ payload_ = new global::Grpc.Testing.Payload();
}
+ Payload.MergeFrom(other.Payload);
}
+ }
- public override Builder MergeFrom(StreamingOutputCallResponse other) {
- if (other == global::grpc.testing.StreamingOutputCallResponse.DefaultInstance) return this;
- PrepareBuilder();
- if (other.HasPayload) {
- MergePayload(other.Payload);
- }
- this.MergeUnknownFields(other.UnknownFields);
- return this;
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input) {
- return MergeFrom(input, pb::ExtensionRegistry.Empty);
- }
-
- public override Builder MergeFrom(pb::ICodedInputStream input, pb::ExtensionRegistry extensionRegistry) {
- PrepareBuilder();
- pb::UnknownFieldSet.Builder unknownFields = null;
- uint tag;
- string field_name;
- while (input.ReadTag(out tag, out field_name)) {
- if(tag == 0 && field_name != null) {
- int field_ordinal = global::System.Array.BinarySearch(_streamingOutputCallResponseFieldNames, field_name, global::System.StringComparer.Ordinal);
- if(field_ordinal >= 0)
- tag = _streamingOutputCallResponseFieldTags[field_ordinal];
- else {
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- continue;
- }
- }
- switch (tag) {
- case 0: {
- throw pb::InvalidProtocolBufferException.InvalidTag();
- }
- default: {
- if (pb::WireFormat.IsEndGroupTag(tag)) {
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
- if (unknownFields == null) {
- unknownFields = pb::UnknownFieldSet.CreateBuilder(this.UnknownFields);
- }
- ParseUnknownField(input, unknownFields, extensionRegistry, tag, field_name);
- break;
- }
- case 10: {
- global::grpc.testing.Payload.Builder subBuilder = global::grpc.testing.Payload.CreateBuilder();
- if (result.hasPayload) {
- subBuilder.MergeFrom(Payload);
- }
- input.ReadMessage(subBuilder, extensionRegistry);
- Payload = subBuilder.BuildPartial();
- break;
+ public void MergeFrom(pb::CodedInputStream input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ input.SkipLastField();
+ break;
+ case 10: {
+ if (payload_ == null) {
+ payload_ = new global::Grpc.Testing.Payload();
}
+ input.ReadMessage(payload_);
+ break;
}
}
-
- if (unknownFields != null) {
- this.UnknownFields = unknownFields.Build();
- }
- return this;
- }
-
-
- public bool HasPayload {
- get { return result.hasPayload; }
- }
- public global::grpc.testing.Payload Payload {
- get { return result.Payload; }
- set { SetPayload(value); }
- }
- public Builder SetPayload(global::grpc.testing.Payload value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- result.hasPayload = true;
- result.payload_ = value;
- return this;
- }
- public Builder SetPayload(global::grpc.testing.Payload.Builder builderForValue) {
- pb::ThrowHelper.ThrowIfNull(builderForValue, "builderForValue");
- PrepareBuilder();
- result.hasPayload = true;
- result.payload_ = builderForValue.Build();
- return this;
- }
- public Builder MergePayload(global::grpc.testing.Payload value) {
- pb::ThrowHelper.ThrowIfNull(value, "value");
- PrepareBuilder();
- if (result.hasPayload &&
- result.payload_ != global::grpc.testing.Payload.DefaultInstance) {
- result.payload_ = global::grpc.testing.Payload.CreateBuilder(result.payload_).MergeFrom(value).BuildPartial();
- } else {
- result.payload_ = value;
- }
- result.hasPayload = true;
- return this;
- }
- public Builder ClearPayload() {
- PrepareBuilder();
- result.hasPayload = false;
- result.payload_ = null;
- return this;
}
}
- static StreamingOutputCallResponse() {
- object.ReferenceEquals(global::grpc.testing.Messages.Descriptor, null);
- }
+
}
#endregion
diff --git a/src/csharp/Grpc.IntegrationTesting/SslCredentialsTest.cs b/src/csharp/Grpc.IntegrationTesting/SslCredentialsTest.cs
index 842795374f..37b2518c21 100644
--- a/src/csharp/Grpc.IntegrationTesting/SslCredentialsTest.cs
+++ b/src/csharp/Grpc.IntegrationTesting/SslCredentialsTest.cs
@@ -37,9 +37,9 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using grpc.testing;
using Grpc.Core;
using Grpc.Core.Utils;
+using Grpc.Testing;
using NUnit.Framework;
namespace Grpc.IntegrationTesting
@@ -92,7 +92,7 @@ namespace Grpc.IntegrationTesting
[Test]
public void AuthenticatedClientAndServer()
{
- var response = client.UnaryCall(SimpleRequest.CreateBuilder().SetResponseSize(10).Build());
+ var response = client.UnaryCall(new SimpleRequest { ResponseSize = 10 });
Assert.AreEqual(10, response.Payload.Body.Length);
}
}
diff --git a/src/csharp/Grpc.IntegrationTesting/Test.cs b/src/csharp/Grpc.IntegrationTesting/Test.cs
new file mode 100644
index 0000000000..466ec57d3d
--- /dev/null
+++ b/src/csharp/Grpc.IntegrationTesting/Test.cs
@@ -0,0 +1,48 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: test.proto
+#pragma warning disable 1591, 0612, 3021
+#region Designer generated code
+
+using pb = global::Google.Protobuf;
+using pbc = global::Google.Protobuf.Collections;
+using pbr = global::Google.Protobuf.Reflection;
+using scg = global::System.Collections.Generic;
+namespace Grpc.Testing {
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ public static partial class Test {
+
+ #region Descriptor
+ public static pbr::FileDescriptor Descriptor {
+ get { return descriptor; }
+ }
+ private static pbr::FileDescriptor descriptor;
+
+ static Test() {
+ byte[] descriptorData = global::System.Convert.FromBase64String(
+ string.Concat(
+ "Cgp0ZXN0LnByb3RvEgxncnBjLnRlc3RpbmcaC2VtcHR5LnByb3RvGg5tZXNz",
+ "YWdlcy5wcm90bzK7BAoLVGVzdFNlcnZpY2USNQoJRW1wdHlDYWxsEhMuZ3Jw",
+ "Yy50ZXN0aW5nLkVtcHR5GhMuZ3JwYy50ZXN0aW5nLkVtcHR5EkYKCVVuYXJ5",
+ "Q2FsbBIbLmdycGMudGVzdGluZy5TaW1wbGVSZXF1ZXN0GhwuZ3JwYy50ZXN0",
+ "aW5nLlNpbXBsZVJlc3BvbnNlEmwKE1N0cmVhbWluZ091dHB1dENhbGwSKC5n",
+ "cnBjLnRlc3RpbmcuU3RyZWFtaW5nT3V0cHV0Q2FsbFJlcXVlc3QaKS5ncnBj",
+ "LnRlc3RpbmcuU3RyZWFtaW5nT3V0cHV0Q2FsbFJlc3BvbnNlMAESaQoSU3Ry",
+ "ZWFtaW5nSW5wdXRDYWxsEicuZ3JwYy50ZXN0aW5nLlN0cmVhbWluZ0lucHV0",
+ "Q2FsbFJlcXVlc3QaKC5ncnBjLnRlc3RpbmcuU3RyZWFtaW5nSW5wdXRDYWxs",
+ "UmVzcG9uc2UoARJpCg5GdWxsRHVwbGV4Q2FsbBIoLmdycGMudGVzdGluZy5T",
+ "dHJlYW1pbmdPdXRwdXRDYWxsUmVxdWVzdBopLmdycGMudGVzdGluZy5TdHJl",
+ "YW1pbmdPdXRwdXRDYWxsUmVzcG9uc2UoATABEmkKDkhhbGZEdXBsZXhDYWxs",
+ "EiguZ3JwYy50ZXN0aW5nLlN0cmVhbWluZ091dHB1dENhbGxSZXF1ZXN0Giku",
+ "Z3JwYy50ZXN0aW5nLlN0cmVhbWluZ091dHB1dENhbGxSZXNwb25zZSgBMAFi",
+ "BnByb3RvMw=="));
+ descriptor = pbr::FileDescriptor.InternalBuildGeneratedFileFrom(descriptorData,
+ new pbr::FileDescriptor[] { global::Grpc.Testing.Proto.Empty.Descriptor, global::Grpc.Testing.Messages.Descriptor, },
+ new pbr::GeneratedCodeInfo(null, null));
+ }
+ #endregion
+
+ }
+}
+
+#endregion Designer generated code
diff --git a/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs b/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs
index da0b7fb910..7a48d6e92e 100644
--- a/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs
+++ b/src/csharp/Grpc.IntegrationTesting/TestCredentials.cs
@@ -37,8 +37,6 @@ using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
-using Google.ProtocolBuffers;
-using grpc.testing;
using Grpc.Core;
using Grpc.Core.Utils;
using NUnit.Framework;
diff --git a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
index 697acb53d8..f63e148475 100644
--- a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
@@ -7,91 +7,97 @@ using System.Threading;
using System.Threading.Tasks;
using Grpc.Core;
-namespace grpc.testing {
+namespace Grpc.Testing {
public static class TestService
{
static readonly string __ServiceName = "grpc.testing.TestService";
- static readonly Marshaller<global::grpc.testing.Empty> __Marshaller_Empty = Marshallers.Create((arg) => arg.ToByteArray(), global::grpc.testing.Empty.ParseFrom);
- static readonly Marshaller<global::grpc.testing.SimpleRequest> __Marshaller_SimpleRequest = Marshallers.Create((arg) => arg.ToByteArray(), global::grpc.testing.SimpleRequest.ParseFrom);
- static readonly Marshaller<global::grpc.testing.SimpleResponse> __Marshaller_SimpleResponse = Marshallers.Create((arg) => arg.ToByteArray(), global::grpc.testing.SimpleResponse.ParseFrom);
- static readonly Marshaller<global::grpc.testing.StreamingOutputCallRequest> __Marshaller_StreamingOutputCallRequest = Marshallers.Create((arg) => arg.ToByteArray(), global::grpc.testing.StreamingOutputCallRequest.ParseFrom);
- static readonly Marshaller<global::grpc.testing.StreamingOutputCallResponse> __Marshaller_StreamingOutputCallResponse = Marshallers.Create((arg) => arg.ToByteArray(), global::grpc.testing.StreamingOutputCallResponse.ParseFrom);
- static readonly Marshaller<global::grpc.testing.StreamingInputCallRequest> __Marshaller_StreamingInputCallRequest = Marshallers.Create((arg) => arg.ToByteArray(), global::grpc.testing.StreamingInputCallRequest.ParseFrom);
- static readonly Marshaller<global::grpc.testing.StreamingInputCallResponse> __Marshaller_StreamingInputCallResponse = Marshallers.Create((arg) => arg.ToByteArray(), global::grpc.testing.StreamingInputCallResponse.ParseFrom);
+ static readonly Marshaller<global::Grpc.Testing.Empty> __Marshaller_Empty = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.Empty.Parser.ParseFrom);
+ static readonly Marshaller<global::Grpc.Testing.SimpleRequest> __Marshaller_SimpleRequest = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.SimpleRequest.Parser.ParseFrom);
+ static readonly Marshaller<global::Grpc.Testing.SimpleResponse> __Marshaller_SimpleResponse = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.SimpleResponse.Parser.ParseFrom);
+ static readonly Marshaller<global::Grpc.Testing.StreamingOutputCallRequest> __Marshaller_StreamingOutputCallRequest = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.StreamingOutputCallRequest.Parser.ParseFrom);
+ static readonly Marshaller<global::Grpc.Testing.StreamingOutputCallResponse> __Marshaller_StreamingOutputCallResponse = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.StreamingOutputCallResponse.Parser.ParseFrom);
+ static readonly Marshaller<global::Grpc.Testing.StreamingInputCallRequest> __Marshaller_StreamingInputCallRequest = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.StreamingInputCallRequest.Parser.ParseFrom);
+ static readonly Marshaller<global::Grpc.Testing.StreamingInputCallResponse> __Marshaller_StreamingInputCallResponse = Marshallers.Create((arg) => global::Google.Protobuf.MessageExtensions.ToByteArray(arg), global::Grpc.Testing.StreamingInputCallResponse.Parser.ParseFrom);
- static readonly Method<global::grpc.testing.Empty, global::grpc.testing.Empty> __Method_EmptyCall = new Method<global::grpc.testing.Empty, global::grpc.testing.Empty>(
+ static readonly Method<global::Grpc.Testing.Empty, global::Grpc.Testing.Empty> __Method_EmptyCall = new Method<global::Grpc.Testing.Empty, global::Grpc.Testing.Empty>(
MethodType.Unary,
__ServiceName,
"EmptyCall",
__Marshaller_Empty,
__Marshaller_Empty);
- static readonly Method<global::grpc.testing.SimpleRequest, global::grpc.testing.SimpleResponse> __Method_UnaryCall = new Method<global::grpc.testing.SimpleRequest, global::grpc.testing.SimpleResponse>(
+ static readonly Method<global::Grpc.Testing.SimpleRequest, global::Grpc.Testing.SimpleResponse> __Method_UnaryCall = new Method<global::Grpc.Testing.SimpleRequest, global::Grpc.Testing.SimpleResponse>(
MethodType.Unary,
__ServiceName,
"UnaryCall",
__Marshaller_SimpleRequest,
__Marshaller_SimpleResponse);
- static readonly Method<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> __Method_StreamingOutputCall = new Method<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse>(
+ static readonly Method<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> __Method_StreamingOutputCall = new Method<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse>(
MethodType.ServerStreaming,
__ServiceName,
"StreamingOutputCall",
__Marshaller_StreamingOutputCallRequest,
__Marshaller_StreamingOutputCallResponse);
- static readonly Method<global::grpc.testing.StreamingInputCallRequest, global::grpc.testing.StreamingInputCallResponse> __Method_StreamingInputCall = new Method<global::grpc.testing.StreamingInputCallRequest, global::grpc.testing.StreamingInputCallResponse>(
+ static readonly Method<global::Grpc.Testing.StreamingInputCallRequest, global::Grpc.Testing.StreamingInputCallResponse> __Method_StreamingInputCall = new Method<global::Grpc.Testing.StreamingInputCallRequest, global::Grpc.Testing.StreamingInputCallResponse>(
MethodType.ClientStreaming,
__ServiceName,
"StreamingInputCall",
__Marshaller_StreamingInputCallRequest,
__Marshaller_StreamingInputCallResponse);
- static readonly Method<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> __Method_FullDuplexCall = new Method<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse>(
+ static readonly Method<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> __Method_FullDuplexCall = new Method<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse>(
MethodType.DuplexStreaming,
__ServiceName,
"FullDuplexCall",
__Marshaller_StreamingOutputCallRequest,
__Marshaller_StreamingOutputCallResponse);
- static readonly Method<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> __Method_HalfDuplexCall = new Method<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse>(
+ static readonly Method<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> __Method_HalfDuplexCall = new Method<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse>(
MethodType.DuplexStreaming,
__ServiceName,
"HalfDuplexCall",
__Marshaller_StreamingOutputCallRequest,
__Marshaller_StreamingOutputCallResponse);
+ // service descriptor
+ public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
+ {
+ get { return global::Grpc.Testing.Test.Descriptor.Services[0]; }
+ }
+
// client interface
public interface ITestServiceClient
{
- global::grpc.testing.Empty EmptyCall(global::grpc.testing.Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- global::grpc.testing.Empty EmptyCall(global::grpc.testing.Empty request, CallOptions options);
- AsyncUnaryCall<global::grpc.testing.Empty> EmptyCallAsync(global::grpc.testing.Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- AsyncUnaryCall<global::grpc.testing.Empty> EmptyCallAsync(global::grpc.testing.Empty request, CallOptions options);
- global::grpc.testing.SimpleResponse UnaryCall(global::grpc.testing.SimpleRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- global::grpc.testing.SimpleResponse UnaryCall(global::grpc.testing.SimpleRequest request, CallOptions options);
- AsyncUnaryCall<global::grpc.testing.SimpleResponse> UnaryCallAsync(global::grpc.testing.SimpleRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- AsyncUnaryCall<global::grpc.testing.SimpleResponse> UnaryCallAsync(global::grpc.testing.SimpleRequest request, CallOptions options);
- AsyncServerStreamingCall<global::grpc.testing.StreamingOutputCallResponse> StreamingOutputCall(global::grpc.testing.StreamingOutputCallRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- AsyncServerStreamingCall<global::grpc.testing.StreamingOutputCallResponse> StreamingOutputCall(global::grpc.testing.StreamingOutputCallRequest request, CallOptions options);
- AsyncClientStreamingCall<global::grpc.testing.StreamingInputCallRequest, global::grpc.testing.StreamingInputCallResponse> StreamingInputCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- AsyncClientStreamingCall<global::grpc.testing.StreamingInputCallRequest, global::grpc.testing.StreamingInputCallResponse> StreamingInputCall(CallOptions options);
- AsyncDuplexStreamingCall<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> FullDuplexCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- AsyncDuplexStreamingCall<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> FullDuplexCall(CallOptions options);
- AsyncDuplexStreamingCall<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> HalfDuplexCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
- AsyncDuplexStreamingCall<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> HalfDuplexCall(CallOptions options);
+ global::Grpc.Testing.Empty EmptyCall(global::Grpc.Testing.Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ global::Grpc.Testing.Empty EmptyCall(global::Grpc.Testing.Empty request, CallOptions options);
+ AsyncUnaryCall<global::Grpc.Testing.Empty> EmptyCallAsync(global::Grpc.Testing.Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ AsyncUnaryCall<global::Grpc.Testing.Empty> EmptyCallAsync(global::Grpc.Testing.Empty request, CallOptions options);
+ global::Grpc.Testing.SimpleResponse UnaryCall(global::Grpc.Testing.SimpleRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ global::Grpc.Testing.SimpleResponse UnaryCall(global::Grpc.Testing.SimpleRequest request, CallOptions options);
+ AsyncUnaryCall<global::Grpc.Testing.SimpleResponse> UnaryCallAsync(global::Grpc.Testing.SimpleRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ AsyncUnaryCall<global::Grpc.Testing.SimpleResponse> UnaryCallAsync(global::Grpc.Testing.SimpleRequest request, CallOptions options);
+ AsyncServerStreamingCall<global::Grpc.Testing.StreamingOutputCallResponse> StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ AsyncServerStreamingCall<global::Grpc.Testing.StreamingOutputCallResponse> StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, CallOptions options);
+ AsyncClientStreamingCall<global::Grpc.Testing.StreamingInputCallRequest, global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ AsyncClientStreamingCall<global::Grpc.Testing.StreamingInputCallRequest, global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(CallOptions options);
+ AsyncDuplexStreamingCall<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> FullDuplexCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ AsyncDuplexStreamingCall<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> FullDuplexCall(CallOptions options);
+ AsyncDuplexStreamingCall<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> HalfDuplexCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken));
+ AsyncDuplexStreamingCall<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> HalfDuplexCall(CallOptions options);
}
// server-side interface
public interface ITestService
{
- Task<global::grpc.testing.Empty> EmptyCall(global::grpc.testing.Empty request, ServerCallContext context);
- Task<global::grpc.testing.SimpleResponse> UnaryCall(global::grpc.testing.SimpleRequest request, ServerCallContext context);
- Task StreamingOutputCall(global::grpc.testing.StreamingOutputCallRequest request, IServerStreamWriter<global::grpc.testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
- Task<global::grpc.testing.StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<global::grpc.testing.StreamingInputCallRequest> requestStream, ServerCallContext context);
- Task FullDuplexCall(IAsyncStreamReader<global::grpc.testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::grpc.testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
- Task HalfDuplexCall(IAsyncStreamReader<global::grpc.testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::grpc.testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
+ Task<global::Grpc.Testing.Empty> EmptyCall(global::Grpc.Testing.Empty request, ServerCallContext context);
+ Task<global::Grpc.Testing.SimpleResponse> UnaryCall(global::Grpc.Testing.SimpleRequest request, ServerCallContext context);
+ Task StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
+ Task<global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(IAsyncStreamReader<global::Grpc.Testing.StreamingInputCallRequest> requestStream, ServerCallContext context);
+ Task FullDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
+ Task HalfDuplexCall(IAsyncStreamReader<global::Grpc.Testing.StreamingOutputCallRequest> requestStream, IServerStreamWriter<global::Grpc.Testing.StreamingOutputCallResponse> responseStream, ServerCallContext context);
}
// client stub
@@ -100,82 +106,82 @@ namespace grpc.testing {
public TestServiceClient(Channel channel) : base(channel)
{
}
- public global::grpc.testing.Empty EmptyCall(global::grpc.testing.Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public global::Grpc.Testing.Empty EmptyCall(global::Grpc.Testing.Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_EmptyCall, new CallOptions(headers, deadline, cancellationToken));
return Calls.BlockingUnaryCall(call, request);
}
- public global::grpc.testing.Empty EmptyCall(global::grpc.testing.Empty request, CallOptions options)
+ public global::Grpc.Testing.Empty EmptyCall(global::Grpc.Testing.Empty request, CallOptions options)
{
var call = CreateCall(__Method_EmptyCall, options);
return Calls.BlockingUnaryCall(call, request);
}
- public AsyncUnaryCall<global::grpc.testing.Empty> EmptyCallAsync(global::grpc.testing.Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public AsyncUnaryCall<global::Grpc.Testing.Empty> EmptyCallAsync(global::Grpc.Testing.Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_EmptyCall, new CallOptions(headers, deadline, cancellationToken));
return Calls.AsyncUnaryCall(call, request);
}
- public AsyncUnaryCall<global::grpc.testing.Empty> EmptyCallAsync(global::grpc.testing.Empty request, CallOptions options)
+ public AsyncUnaryCall<global::Grpc.Testing.Empty> EmptyCallAsync(global::Grpc.Testing.Empty request, CallOptions options)
{
var call = CreateCall(__Method_EmptyCall, options);
return Calls.AsyncUnaryCall(call, request);
}
- public global::grpc.testing.SimpleResponse UnaryCall(global::grpc.testing.SimpleRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public global::Grpc.Testing.SimpleResponse UnaryCall(global::Grpc.Testing.SimpleRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_UnaryCall, new CallOptions(headers, deadline, cancellationToken));
return Calls.BlockingUnaryCall(call, request);
}
- public global::grpc.testing.SimpleResponse UnaryCall(global::grpc.testing.SimpleRequest request, CallOptions options)
+ public global::Grpc.Testing.SimpleResponse UnaryCall(global::Grpc.Testing.SimpleRequest request, CallOptions options)
{
var call = CreateCall(__Method_UnaryCall, options);
return Calls.BlockingUnaryCall(call, request);
}
- public AsyncUnaryCall<global::grpc.testing.SimpleResponse> UnaryCallAsync(global::grpc.testing.SimpleRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public AsyncUnaryCall<global::Grpc.Testing.SimpleResponse> UnaryCallAsync(global::Grpc.Testing.SimpleRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_UnaryCall, new CallOptions(headers, deadline, cancellationToken));
return Calls.AsyncUnaryCall(call, request);
}
- public AsyncUnaryCall<global::grpc.testing.SimpleResponse> UnaryCallAsync(global::grpc.testing.SimpleRequest request, CallOptions options)
+ public AsyncUnaryCall<global::Grpc.Testing.SimpleResponse> UnaryCallAsync(global::Grpc.Testing.SimpleRequest request, CallOptions options)
{
var call = CreateCall(__Method_UnaryCall, options);
return Calls.AsyncUnaryCall(call, request);
}
- public AsyncServerStreamingCall<global::grpc.testing.StreamingOutputCallResponse> StreamingOutputCall(global::grpc.testing.StreamingOutputCallRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public AsyncServerStreamingCall<global::Grpc.Testing.StreamingOutputCallResponse> StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_StreamingOutputCall, new CallOptions(headers, deadline, cancellationToken));
return Calls.AsyncServerStreamingCall(call, request);
}
- public AsyncServerStreamingCall<global::grpc.testing.StreamingOutputCallResponse> StreamingOutputCall(global::grpc.testing.StreamingOutputCallRequest request, CallOptions options)
+ public AsyncServerStreamingCall<global::Grpc.Testing.StreamingOutputCallResponse> StreamingOutputCall(global::Grpc.Testing.StreamingOutputCallRequest request, CallOptions options)
{
var call = CreateCall(__Method_StreamingOutputCall, options);
return Calls.AsyncServerStreamingCall(call, request);
}
- public AsyncClientStreamingCall<global::grpc.testing.StreamingInputCallRequest, global::grpc.testing.StreamingInputCallResponse> StreamingInputCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public AsyncClientStreamingCall<global::Grpc.Testing.StreamingInputCallRequest, global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_StreamingInputCall, new CallOptions(headers, deadline, cancellationToken));
return Calls.AsyncClientStreamingCall(call);
}
- public AsyncClientStreamingCall<global::grpc.testing.StreamingInputCallRequest, global::grpc.testing.StreamingInputCallResponse> StreamingInputCall(CallOptions options)
+ public AsyncClientStreamingCall<global::Grpc.Testing.StreamingInputCallRequest, global::Grpc.Testing.StreamingInputCallResponse> StreamingInputCall(CallOptions options)
{
var call = CreateCall(__Method_StreamingInputCall, options);
return Calls.AsyncClientStreamingCall(call);
}
- public AsyncDuplexStreamingCall<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> FullDuplexCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public AsyncDuplexStreamingCall<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> FullDuplexCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_FullDuplexCall, new CallOptions(headers, deadline, cancellationToken));
return Calls.AsyncDuplexStreamingCall(call);
}
- public AsyncDuplexStreamingCall<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> FullDuplexCall(CallOptions options)
+ public AsyncDuplexStreamingCall<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> FullDuplexCall(CallOptions options)
{
var call = CreateCall(__Method_FullDuplexCall, options);
return Calls.AsyncDuplexStreamingCall(call);
}
- public AsyncDuplexStreamingCall<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> HalfDuplexCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
+ public AsyncDuplexStreamingCall<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> HalfDuplexCall(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default(CancellationToken))
{
var call = CreateCall(__Method_HalfDuplexCall, new CallOptions(headers, deadline, cancellationToken));
return Calls.AsyncDuplexStreamingCall(call);
}
- public AsyncDuplexStreamingCall<global::grpc.testing.StreamingOutputCallRequest, global::grpc.testing.StreamingOutputCallResponse> HalfDuplexCall(CallOptions options)
+ public AsyncDuplexStreamingCall<global::Grpc.Testing.StreamingOutputCallRequest, global::Grpc.Testing.StreamingOutputCallResponse> HalfDuplexCall(CallOptions options)
{
var call = CreateCall(__Method_HalfDuplexCall, options);
return Calls.AsyncDuplexStreamingCall(call);
diff --git a/src/csharp/Grpc.IntegrationTesting/TestServiceImpl.cs b/src/csharp/Grpc.IntegrationTesting/TestServiceImpl.cs
index ceebd5dd8c..c5bfcf08c0 100644
--- a/src/csharp/Grpc.IntegrationTesting/TestServiceImpl.cs
+++ b/src/csharp/Grpc.IntegrationTesting/TestServiceImpl.cs
@@ -35,11 +35,11 @@ using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
-using Google.ProtocolBuffers;
+using Google.Protobuf;
using Grpc.Core;
using Grpc.Core.Utils;
-namespace grpc.testing
+namespace Grpc.Testing
{
/// <summary>
/// Implementation of TestService server
@@ -48,22 +48,20 @@ namespace grpc.testing
{
public Task<Empty> EmptyCall(Empty request, ServerCallContext context)
{
- return Task.FromResult(Empty.DefaultInstance);
+ return Task.FromResult(new Empty());
}
public Task<SimpleResponse> UnaryCall(SimpleRequest request, ServerCallContext context)
{
- var response = SimpleResponse.CreateBuilder()
- .SetPayload(CreateZerosPayload(request.ResponseSize)).Build();
+ var response = new SimpleResponse { Payload = CreateZerosPayload(request.ResponseSize) };
return Task.FromResult(response);
}
public async Task StreamingOutputCall(StreamingOutputCallRequest request, IServerStreamWriter<StreamingOutputCallResponse> responseStream, ServerCallContext context)
{
- foreach (var responseParam in request.ResponseParametersList)
+ foreach (var responseParam in request.ResponseParameters)
{
- var response = StreamingOutputCallResponse.CreateBuilder()
- .SetPayload(CreateZerosPayload(responseParam.Size)).Build();
+ var response = new StreamingOutputCallResponse { Payload = CreateZerosPayload(responseParam.Size) };
await responseStream.WriteAsync(response);
}
}
@@ -75,17 +73,16 @@ namespace grpc.testing
{
sum += request.Payload.Body.Length;
});
- return StreamingInputCallResponse.CreateBuilder().SetAggregatedPayloadSize(sum).Build();
+ return new StreamingInputCallResponse { AggregatedPayloadSize = sum };
}
public async Task FullDuplexCall(IAsyncStreamReader<StreamingOutputCallRequest> requestStream, IServerStreamWriter<StreamingOutputCallResponse> responseStream, ServerCallContext context)
{
await requestStream.ForEachAsync(async request =>
{
- foreach (var responseParam in request.ResponseParametersList)
+ foreach (var responseParam in request.ResponseParameters)
{
- var response = StreamingOutputCallResponse.CreateBuilder()
- .SetPayload(CreateZerosPayload(responseParam.Size)).Build();
+ var response = new StreamingOutputCallResponse { Payload = CreateZerosPayload(responseParam.Size) };
await responseStream.WriteAsync(response);
}
});
@@ -98,7 +95,7 @@ namespace grpc.testing
private static Payload CreateZerosPayload(int size)
{
- return Payload.CreateBuilder().SetBody(ByteString.CopyFrom(new byte[size])).Build();
+ return new Payload { Body = ByteString.CopyFrom(new byte[size]) };
}
}
}
diff --git a/src/csharp/Grpc.IntegrationTesting/packages.config b/src/csharp/Grpc.IntegrationTesting/packages.config
index 0867b091b9..8dfded1964 100644
--- a/src/csharp/Grpc.IntegrationTesting/packages.config
+++ b/src/csharp/Grpc.IntegrationTesting/packages.config
@@ -3,6 +3,7 @@
<package id="BouncyCastle" version="1.7.0" targetFramework="net45" />
<package id="Google.Apis.Auth" version="1.9.3" targetFramework="net45" />
<package id="Google.Apis.Core" version="1.9.3" targetFramework="net45" />
+ <package id="Google.Protobuf" version="3.0.0-alpha4" targetFramework="net45" />
<package id="Google.ProtocolBuffers" version="2.4.1.521" targetFramework="net45" />
<package id="Ix-Async" version="1.2.3" targetFramework="net45" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net45" />
diff --git a/src/csharp/Grpc.IntegrationTesting/proto/empty.proto b/src/csharp/Grpc.IntegrationTesting/proto/empty.proto
index 4295a0a960..6d0eb937d6 100644
--- a/src/csharp/Grpc.IntegrationTesting/proto/empty.proto
+++ b/src/csharp/Grpc.IntegrationTesting/proto/empty.proto
@@ -28,7 +28,7 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-syntax = "proto2";
+syntax = "proto3";
package grpc.testing;
diff --git a/src/csharp/Grpc.IntegrationTesting/proto/messages.proto b/src/csharp/Grpc.IntegrationTesting/proto/messages.proto
index 65a8140465..7df85e3c13 100644
--- a/src/csharp/Grpc.IntegrationTesting/proto/messages.proto
+++ b/src/csharp/Grpc.IntegrationTesting/proto/messages.proto
@@ -30,7 +30,7 @@
// Message definitions to be used by integration test service definitions.
-syntax = "proto2";
+syntax = "proto3";
package grpc.testing;
@@ -49,46 +49,46 @@ enum PayloadType {
// A block of data, to simply increase gRPC message size.
message Payload {
// The type of data in body.
- optional PayloadType type = 1;
+ PayloadType type = 1;
// Primary contents of payload.
- optional bytes body = 2;
+ bytes body = 2;
}
// Unary request.
message SimpleRequest {
// Desired payload type in the response from the server.
// If response_type is RANDOM, server randomly chooses one from other formats.
- optional PayloadType response_type = 1;
+ PayloadType response_type = 1;
// Desired payload size in the response from the server.
// If response_type is COMPRESSABLE, this denotes the size before compression.
- optional int32 response_size = 2;
+ int32 response_size = 2;
// Optional input payload sent along with the request.
- optional Payload payload = 3;
+ Payload payload = 3;
// Whether SimpleResponse should include username.
- optional bool fill_username = 4;
+ bool fill_username = 4;
// Whether SimpleResponse should include OAuth scope.
- optional bool fill_oauth_scope = 5;
+ bool fill_oauth_scope = 5;
}
// Unary response, as configured by the request.
message SimpleResponse {
// Payload to increase message size.
- optional Payload payload = 1;
+ Payload payload = 1;
// The user the request came from, for verifying authentication was
// successful when the client expected it.
- optional string username = 2;
+ string username = 2;
// OAuth scope.
- optional string oauth_scope = 3;
+ string oauth_scope = 3;
}
// Client-streaming request.
message StreamingInputCallRequest {
// Optional input payload sent along with the request.
- optional Payload payload = 1;
+ Payload payload = 1;
// Not expecting any payload from the response.
}
@@ -96,18 +96,18 @@ message StreamingInputCallRequest {
// Client-streaming response.
message StreamingInputCallResponse {
// Aggregated size of payloads received from the client.
- optional int32 aggregated_payload_size = 1;
+ int32 aggregated_payload_size = 1;
}
// Configuration for a particular response.
message ResponseParameters {
// Desired payload sizes in responses from the server.
// If response_type is COMPRESSABLE, this denotes the size before compression.
- optional int32 size = 1;
+ int32 size = 1;
// Desired interval between consecutive responses in the response stream in
// microseconds.
- optional int32 interval_us = 2;
+ int32 interval_us = 2;
}
// Server-streaming request.
@@ -116,17 +116,17 @@ message StreamingOutputCallRequest {
// If response_type is RANDOM, the payload from each response in the stream
// might be of different types. This is to simulate a mixed type of payload
// stream.
- optional PayloadType response_type = 1;
+ PayloadType response_type = 1;
// Configuration for each expected response message.
repeated ResponseParameters response_parameters = 2;
// Optional input payload sent along with the request.
- optional Payload payload = 3;
+ Payload payload = 3;
}
// Server-streaming response, as configured by the request and parameters.
message StreamingOutputCallResponse {
// Payload to increase response size.
- optional Payload payload = 1;
+ Payload payload = 1;
}
diff --git a/src/csharp/Grpc.IntegrationTesting/proto/test.proto b/src/csharp/Grpc.IntegrationTesting/proto/test.proto
index 927a3a83aa..f9e0d2a039 100644
--- a/src/csharp/Grpc.IntegrationTesting/proto/test.proto
+++ b/src/csharp/Grpc.IntegrationTesting/proto/test.proto
@@ -30,7 +30,7 @@
// An integration test service that covers all the method signature permutations
// of unary/streaming requests/responses.
-syntax = "proto2";
+syntax = "proto3";
import "empty.proto";
import "messages.proto";
diff --git a/src/csharp/Grpc.Tools.nuspec b/src/csharp/Grpc.Tools.nuspec
index eabf5dc7db..48a7b1f3af 100644
--- a/src/csharp/Grpc.Tools.nuspec
+++ b/src/csharp/Grpc.Tools.nuspec
@@ -4,19 +4,18 @@
<id>Grpc.Tools</id>
<title>gRPC C# Tools</title>
<summary>Tools for C# implementation of gRPC - an RPC library and framework</summary>
- <description>Precompiled Windows binaries for generating protocol buffer messages and gRPC client/server code</description>
+ <description>Precompiled Windows binary for generating gRPC client/server code</description>
<version>$version$</version>
<authors>Google Inc.</authors>
<owners>grpc-packages</owners>
<licenseUrl>https://github.com/grpc/grpc/blob/master/LICENSE</licenseUrl>
<projectUrl>https://github.com/grpc/grpc</projectUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
- <releaseNotes>protoc.exe - protocol buffer compiler v3.0.0-alpha-3; grpc_csharp_plugin.exe - gRPC C# protoc plugin version $version$</releaseNotes>
+ <releaseNotes>grpc_csharp_plugin.exe - gRPC C# protoc plugin version $version$</releaseNotes>
<copyright>Copyright 2015, Google Inc.</copyright>
<tags>gRPC RPC Protocol HTTP/2</tags>
</metadata>
<files>
- <file src="protoc.exe" target="tools" />
- <file src="grpc_csharp_plugin.exe" target="tools" />
+ <file src="..\..\vsprojects\Release\grpc_csharp_plugin.exe" target="tools" />
</files>
</package>
diff --git a/src/csharp/README.md b/src/csharp/README.md
index bb5e165986..30523b3bd2 100644
--- a/src/csharp/README.md
+++ b/src/csharp/README.md
@@ -19,7 +19,7 @@ Usage: Windows
That will also pull all the transitive dependencies (including the native libraries that
gRPC C# is internally using).
-- Helloworld project example can be found in https://github.com/grpc/grpc-common/tree/master/csharp.
+- Helloworld project example can be found in https://github.com/grpc/grpc/tree/master/examples/csharp.
Usage: Linux (Mono)
--------------
@@ -50,7 +50,7 @@ Usage: Linux (Mono)
- Add NuGet package `Grpc` as a dependency (Project -> Add NuGet packages).
-- Helloworld project example can be found in https://github.com/grpc/grpc-common/tree/master/csharp.
+- Helloworld project example can be found in https://github.com/grpc/grpc/tree/master/examples/csharp.
Usage: MacOS (Mono)
--------------
@@ -73,7 +73,7 @@ Usage: MacOS (Mono)
- *You will be able to build your project in Xamarin Studio, but to run or test it,
you will need to run it under 64-bit version of Mono.*
-- Helloworld project example can be found in https://github.com/grpc/grpc-common/tree/master/csharp.
+- Helloworld project example can be found in https://github.com/grpc/grpc/tree/master/examples/csharp.
Building: Windows
-----------------
diff --git a/src/csharp/build_packages.bat b/src/csharp/build_packages.bat
index 8a11d01430..255b7469ab 100644
--- a/src/csharp/build_packages.bat
+++ b/src/csharp/build_packages.bat
@@ -1,8 +1,9 @@
@rem Builds gRPC NuGet packages
@rem Current package versions
-set VERSION=0.6.1
-set CORE_VERSION=0.10.1
+set VERSION=0.7.0
+set CORE_VERSION=0.11.0
+set PROTOBUF_VERSION=3.0.0-alpha4
@rem Adjust the location of nuget.exe
set NUGET=C:\nuget\nuget.exe
@@ -14,10 +15,12 @@ endlocal
@call buildall.bat BUILD_SIGNED || goto :error
+@call ..\..\vsprojects\build_plugins.bat || goto :error
+
%NUGET% pack ..\..\vsprojects\nuget_package\grpc.native.csharp_ext.nuspec -Version %CORE_VERSION% || goto :error
%NUGET% pack Grpc.Auth\Grpc.Auth.nuspec -Symbols -Version %VERSION% || goto :error
%NUGET% pack Grpc.Core\Grpc.Core.nuspec -Symbols -Version %VERSION% -Properties GrpcNativeCsharpExtVersion=%CORE_VERSION% || goto :error
-%NUGET% pack Grpc.HealthCheck\Grpc.HealthCheck.nuspec -Symbols -Version %VERSION% || goto :error
+%NUGET% pack Grpc.HealthCheck\Grpc.HealthCheck.nuspec -Symbols -Version %VERSION% -Properties ProtobufVersion=%PROTOBUF_VERSION% || goto :error
%NUGET% pack Grpc.Tools.nuspec -Version %VERSION% || goto :error
%NUGET% pack Grpc.nuspec -Version %VERSION% || goto :error
diff --git a/src/csharp/doc/grpc_csharp_public.shfbproj b/src/csharp/doc/grpc_csharp_public.shfbproj
index 05c93f4a13..d9b9749819 100644
--- a/src/csharp/doc/grpc_csharp_public.shfbproj
+++ b/src/csharp/doc/grpc_csharp_public.shfbproj
@@ -18,7 +18,8 @@
<Language>en-US</Language>
<DocumentationSources>
<DocumentationSource sourceFile="..\Grpc.Auth\Grpc.Auth.csproj" />
-<DocumentationSource sourceFile="..\Grpc.Core\Grpc.Core.csproj" /></DocumentationSources>
+ <DocumentationSource sourceFile="..\Grpc.Core\Grpc.Core.csproj" />
+ </DocumentationSources>
<BuildAssemblerVerbosity>OnlyWarningsAndErrors</BuildAssemblerVerbosity>
<HelpFileFormat>Website</HelpFileFormat>
<IndentHtml>False</IndentHtml>
@@ -37,6 +38,15 @@
<HelpTitle>gRPC C#</HelpTitle>
<ContentPlacement>AboveNamespaces</ContentPlacement>
<HtmlHelpName>Documentation</HtmlHelpName>
+ <NamespaceSummaries>
+ <NamespaceSummaryItem name="Grpc.Auth" isDocumented="True">Provides OAuth2 based authentication for gRPC. &lt;c&gt;Grpc.Auth&lt;/c&gt; currently consists of a set of very lightweight wrappers and uses C# &lt;a href="https://www.nuget.org/packages/Google.Apis.Auth/"&gt;Google.Apis.Auth&lt;/a&gt; library.</NamespaceSummaryItem>
+<NamespaceSummaryItem name="Grpc.Core" isDocumented="True">Main namespace for gRPC C# functionality. Contains concepts representing both client side and server side gRPC logic.
+
+&lt;seealso cref="Grpc.Core.Channel"/&gt;
+&lt;seealso cref="Grpc.Core.Server"/&gt;</NamespaceSummaryItem>
+<NamespaceSummaryItem name="Grpc.Core.Logging" isDocumented="True">Provides functionality to redirect gRPC logs to application-specified destination.</NamespaceSummaryItem>
+<NamespaceSummaryItem name="Grpc.Core.Utils" isDocumented="True">Various utilities for gRPC C#.</NamespaceSummaryItem></NamespaceSummaries>
+ <MissingTags>Summary, Parameter, AutoDocumentCtors, Namespace, TypeParameter, AutoDocumentDispose</MissingTags>
</PropertyGroup>
<!-- There are no properties for these groups. AnyCPU needs to appear in order for Visual Studio to perform
the build. The others are optional common platform types that may appear. -->
diff --git a/src/csharp/ext/grpc_csharp_ext.c b/src/csharp/ext/grpc_csharp_ext.c
index fc9470f93f..70c0fbcc50 100644
--- a/src/csharp/ext/grpc_csharp_ext.c
+++ b/src/csharp/ext/grpc_csharp_ext.c
@@ -595,7 +595,7 @@ GPR_EXPORT grpc_call_error GPR_CALLTYPE grpcsharp_call_start_server_streaming(
grpc_call *call, grpcsharp_batch_context *ctx, const char *send_buffer,
size_t send_buffer_len, grpc_metadata_array *initial_metadata, gpr_uint32 write_flags) {
/* TODO: don't use magic number */
- grpc_op ops[5];
+ grpc_op ops[4];
ops[0].op = GRPC_OP_SEND_INITIAL_METADATA;
grpcsharp_metadata_array_move(&(ctx->send_initial_metadata),
initial_metadata);
@@ -615,23 +615,18 @@ GPR_EXPORT grpc_call_error GPR_CALLTYPE grpcsharp_call_start_server_streaming(
ops[2].flags = 0;
ops[2].reserved = NULL;
- ops[3].op = GRPC_OP_RECV_INITIAL_METADATA;
- ops[3].data.recv_initial_metadata = &(ctx->recv_initial_metadata);
- ops[3].flags = 0;
- ops[3].reserved = NULL;
-
- ops[4].op = GRPC_OP_RECV_STATUS_ON_CLIENT;
- ops[4].data.recv_status_on_client.trailing_metadata =
+ ops[3].op = GRPC_OP_RECV_STATUS_ON_CLIENT;
+ ops[3].data.recv_status_on_client.trailing_metadata =
&(ctx->recv_status_on_client.trailing_metadata);
- ops[4].data.recv_status_on_client.status =
+ ops[3].data.recv_status_on_client.status =
&(ctx->recv_status_on_client.status);
/* not using preallocation for status_details */
- ops[4].data.recv_status_on_client.status_details =
+ ops[3].data.recv_status_on_client.status_details =
&(ctx->recv_status_on_client.status_details);
- ops[4].data.recv_status_on_client.status_details_capacity =
+ ops[3].data.recv_status_on_client.status_details_capacity =
&(ctx->recv_status_on_client.status_details_capacity);
- ops[4].flags = 0;
- ops[4].reserved = NULL;
+ ops[3].flags = 0;
+ ops[3].reserved = NULL;
return grpc_call_start_batch(call, ops, sizeof(ops) / sizeof(ops[0]), ctx,
NULL);
@@ -642,7 +637,7 @@ grpcsharp_call_start_duplex_streaming(grpc_call *call,
grpcsharp_batch_context *ctx,
grpc_metadata_array *initial_metadata) {
/* TODO: don't use magic number */
- grpc_op ops[3];
+ grpc_op ops[2];
ops[0].op = GRPC_OP_SEND_INITIAL_METADATA;
grpcsharp_metadata_array_move(&(ctx->send_initial_metadata),
initial_metadata);
@@ -652,28 +647,36 @@ grpcsharp_call_start_duplex_streaming(grpc_call *call,
ops[0].flags = 0;
ops[0].reserved = NULL;
- ops[1].op = GRPC_OP_RECV_INITIAL_METADATA;
- ops[1].data.recv_initial_metadata = &(ctx->recv_initial_metadata);
- ops[1].flags = 0;
- ops[1].reserved = NULL;
-
- ops[2].op = GRPC_OP_RECV_STATUS_ON_CLIENT;
- ops[2].data.recv_status_on_client.trailing_metadata =
+ ops[1].op = GRPC_OP_RECV_STATUS_ON_CLIENT;
+ ops[1].data.recv_status_on_client.trailing_metadata =
&(ctx->recv_status_on_client.trailing_metadata);
- ops[2].data.recv_status_on_client.status =
+ ops[1].data.recv_status_on_client.status =
&(ctx->recv_status_on_client.status);
/* not using preallocation for status_details */
- ops[2].data.recv_status_on_client.status_details =
+ ops[1].data.recv_status_on_client.status_details =
&(ctx->recv_status_on_client.status_details);
- ops[2].data.recv_status_on_client.status_details_capacity =
+ ops[1].data.recv_status_on_client.status_details_capacity =
&(ctx->recv_status_on_client.status_details_capacity);
- ops[2].flags = 0;
- ops[2].reserved = NULL;
+ ops[1].flags = 0;
+ ops[1].reserved = NULL;
return grpc_call_start_batch(call, ops, sizeof(ops) / sizeof(ops[0]), ctx,
NULL);
}
+GPR_EXPORT grpc_call_error GPR_CALLTYPE grpcsharp_call_recv_initial_metadata(
+ grpc_call *call, grpcsharp_batch_context *ctx) {
+ /* TODO: don't use magic number */
+ grpc_op ops[1];
+ ops[0].op = GRPC_OP_RECV_INITIAL_METADATA;
+ ops[0].data.recv_initial_metadata = &(ctx->recv_initial_metadata);
+ ops[0].flags = 0;
+ ops[0].reserved = NULL;
+
+ return grpc_call_start_batch(call, ops, sizeof(ops) / sizeof(ops[0]), ctx,
+ NULL);
+}
+
GPR_EXPORT grpc_call_error GPR_CALLTYPE
grpcsharp_call_send_message(grpc_call *call, grpcsharp_batch_context *ctx,
const char *send_buffer, size_t send_buffer_len,
@@ -834,11 +837,11 @@ grpcsharp_ssl_credentials_create(const char *pem_root_certs,
if (key_cert_pair_cert_chain || key_cert_pair_private_key) {
key_cert_pair.cert_chain = key_cert_pair_cert_chain;
key_cert_pair.private_key = key_cert_pair_private_key;
- return grpc_ssl_credentials_create(pem_root_certs, &key_cert_pair);
+ return grpc_ssl_credentials_create(pem_root_certs, &key_cert_pair, NULL);
} else {
GPR_ASSERT(!key_cert_pair_cert_chain);
GPR_ASSERT(!key_cert_pair_private_key);
- return grpc_ssl_credentials_create(pem_root_certs, NULL);
+ return grpc_ssl_credentials_create(pem_root_certs, NULL, NULL);
}
}
@@ -849,7 +852,7 @@ GPR_EXPORT void GPR_CALLTYPE grpcsharp_credentials_release(grpc_credentials *cre
GPR_EXPORT grpc_channel *GPR_CALLTYPE
grpcsharp_secure_channel_create(grpc_credentials *creds, const char *target,
const grpc_channel_args *args) {
- return grpc_secure_channel_create(creds, target, args);
+ return grpc_secure_channel_create(creds, target, args, NULL);
}
GPR_EXPORT grpc_server_credentials *GPR_CALLTYPE
@@ -873,7 +876,7 @@ grpcsharp_ssl_server_credentials_create(
}
creds = grpc_ssl_server_credentials_create(pem_root_certs, key_cert_pairs,
num_key_cert_pairs,
- force_client_auth);
+ force_client_auth, NULL);
gpr_free(key_cert_pairs);
return creds;
}
diff --git a/src/csharp/generate_proto_csharp.sh b/src/csharp/generate_proto_csharp.sh
index 7c3ba70922..a17f45b587 100755
--- a/src/csharp/generate_proto_csharp.sh
+++ b/src/csharp/generate_proto_csharp.sh
@@ -38,11 +38,11 @@ EXAMPLES_DIR=Grpc.Examples
INTEROP_DIR=Grpc.IntegrationTesting
HEALTHCHECK_DIR=Grpc.HealthCheck
-$PROTOC --plugin=$PLUGIN --grpc_out=$EXAMPLES_DIR \
+$PROTOC --plugin=$PLUGIN --csharp_out=$EXAMPLES_DIR --grpc_out=$EXAMPLES_DIR \
-I $EXAMPLES_DIR/proto $EXAMPLES_DIR/proto/math.proto
-$PROTOC --plugin=$PLUGIN --grpc_out=$INTEROP_DIR \
- -I $INTEROP_DIR/proto $INTEROP_DIR/proto/test.proto
+$PROTOC --plugin=$PLUGIN --csharp_out=$INTEROP_DIR --grpc_out=$INTEROP_DIR \
+ -I $INTEROP_DIR/proto $INTEROP_DIR/proto/*.proto
-$PROTOC --plugin=$PLUGIN --grpc_out=$HEALTHCHECK_DIR \
+$PROTOC --plugin=$PLUGIN --csharp_out=$HEALTHCHECK_DIR --grpc_out=$HEALTHCHECK_DIR \
-I $HEALTHCHECK_DIR/proto $HEALTHCHECK_DIR/proto/health.proto
diff --git a/src/node/ext/call.cc b/src/node/ext/call.cc
index 18858fa334..fddc1e214f 100644
--- a/src/node/ext/call.cc
+++ b/src/node/ext/call.cc
@@ -111,17 +111,19 @@ bool CreateMetadataArray(Handle<Object> metadata, grpc_metadata_array *array,
NanAssignPersistent(*handle, value);
resources->handles.push_back(unique_ptr<PersistentHolder>(
new PersistentHolder(handle)));
- continue;
+ } else {
+ return false;
}
- }
- if (value->IsString()) {
- Handle<String> string_value = value->ToString();
- NanUtf8String *utf8_value = new NanUtf8String(string_value);
- resources->strings.push_back(unique_ptr<NanUtf8String>(utf8_value));
- current->value = **utf8_value;
- current->value_length = string_value->Length();
} else {
- return false;
+ if (value->IsString()) {
+ Handle<String> string_value = value->ToString();
+ NanUtf8String *utf8_value = new NanUtf8String(string_value);
+ resources->strings.push_back(unique_ptr<NanUtf8String>(utf8_value));
+ current->value = **utf8_value;
+ current->value_length = string_value->Length();
+ } else {
+ return false;
+ }
}
array->count += 1;
}
@@ -156,8 +158,7 @@ Handle<Value> ParseMetadata(const grpc_metadata_array *metadata_array) {
}
if (EndsWith(elem->key, "-bin")) {
array->Set(index_map[elem->key],
- MakeFastBuffer(
- NanNewBufferHandle(elem->value, elem->value_length)));
+ NanNewBufferHandle(elem->value, elem->value_length));
} else {
array->Set(index_map[elem->key], NanNew(elem->value));
}
diff --git a/src/node/ext/channel.cc b/src/node/ext/channel.cc
index a61c830099..9aed96bbf5 100644
--- a/src/node/ext/channel.cc
+++ b/src/node/ext/channel.cc
@@ -161,7 +161,7 @@ NAN_METHOD(Channel::New) {
NULL);
} else {
wrapped_channel =
- grpc_secure_channel_create(creds, *host, channel_args_ptr);
+ grpc_secure_channel_create(creds, *host, channel_args_ptr, NULL);
}
if (channel_args_ptr != NULL) {
free(channel_args_ptr->args);
diff --git a/src/node/ext/credentials.cc b/src/node/ext/credentials.cc
index 21d61f1a7f..85a823a108 100644
--- a/src/node/ext/credentials.cc
+++ b/src/node/ext/credentials.cc
@@ -156,7 +156,8 @@ NAN_METHOD(Credentials::CreateSsl) {
"createSSl's third argument must be a Buffer if provided");
}
grpc_credentials *creds = grpc_ssl_credentials_create(
- root_certs, key_cert_pair.private_key == NULL ? NULL : &key_cert_pair);
+ root_certs, key_cert_pair.private_key == NULL ? NULL : &key_cert_pair,
+ NULL);
if (creds == NULL) {
NanReturnNull();
}
@@ -176,7 +177,7 @@ NAN_METHOD(Credentials::CreateComposite) {
Credentials *creds1 = ObjectWrap::Unwrap<Credentials>(args[0]->ToObject());
Credentials *creds2 = ObjectWrap::Unwrap<Credentials>(args[1]->ToObject());
grpc_credentials *creds = grpc_composite_credentials_create(
- creds1->wrapped_credentials, creds2->wrapped_credentials);
+ creds1->wrapped_credentials, creds2->wrapped_credentials, NULL);
if (creds == NULL) {
NanReturnNull();
}
@@ -185,7 +186,7 @@ NAN_METHOD(Credentials::CreateComposite) {
NAN_METHOD(Credentials::CreateGce) {
NanScope();
- grpc_credentials *creds = grpc_compute_engine_credentials_create();
+ grpc_credentials *creds = grpc_compute_engine_credentials_create(NULL);
if (creds == NULL) {
NanReturnNull();
}
@@ -202,8 +203,8 @@ NAN_METHOD(Credentials::CreateIam) {
}
NanUtf8String auth_token(args[0]);
NanUtf8String auth_selector(args[1]);
- grpc_credentials *creds = grpc_iam_credentials_create(*auth_token,
- *auth_selector);
+ grpc_credentials *creds =
+ grpc_iam_credentials_create(*auth_token, *auth_selector, NULL);
if (creds == NULL) {
NanReturnNull();
}
diff --git a/src/node/ext/server.cc b/src/node/ext/server.cc
index 01217bce79..32a8ff55b1 100644
--- a/src/node/ext/server.cc
+++ b/src/node/ext/server.cc
@@ -120,7 +120,7 @@ Server::Server(grpc_server *server) : wrapped_server(server) {
Server::~Server() {
this->ShutdownServer();
grpc_completion_queue_shutdown(this->shutdown_queue);
- grpc_server_destroy(wrapped_server);
+ grpc_server_destroy(this->wrapped_server);
grpc_completion_queue_destroy(this->shutdown_queue);
}
@@ -139,8 +139,11 @@ void Server::Init(Handle<Object> exports) {
NanSetPrototypeTemplate(tpl, "start",
NanNew<FunctionTemplate>(Start)->GetFunction());
- NanSetPrototypeTemplate(tpl, "shutdown",
- NanNew<FunctionTemplate>(Shutdown)->GetFunction());
+ NanSetPrototypeTemplate(tpl, "tryShutdown",
+ NanNew<FunctionTemplate>(TryShutdown)->GetFunction());
+ NanSetPrototypeTemplate(
+ tpl, "forceShutdown",
+ NanNew<FunctionTemplate>(ForceShutdown)->GetFunction());
NanAssignPersistent(fun_tpl, tpl);
Handle<Function> ctr = tpl->GetFunction();
@@ -153,14 +156,12 @@ bool Server::HasInstance(Handle<Value> val) {
}
void Server::ShutdownServer() {
- if (this->wrapped_server != NULL) {
- grpc_server_shutdown_and_notify(this->wrapped_server,
- this->shutdown_queue,
- NULL);
- grpc_completion_queue_pluck(this->shutdown_queue, NULL,
- gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
- this->wrapped_server = NULL;
- }
+ grpc_server_shutdown_and_notify(this->wrapped_server,
+ this->shutdown_queue,
+ NULL);
+ grpc_server_cancel_all_calls(this->wrapped_server);
+ grpc_completion_queue_pluck(this->shutdown_queue, NULL,
+ gpr_inf_future(GPR_CLOCK_REALTIME), NULL);
}
NAN_METHOD(Server::New) {
@@ -222,9 +223,6 @@ NAN_METHOD(Server::RequestCall) {
return NanThrowTypeError("requestCall can only be called on a Server");
}
Server *server = ObjectWrap::Unwrap<Server>(args.This());
- if (server->wrapped_server == NULL) {
- return NanThrowError("requestCall cannot be called on a shut down Server");
- }
NewCallOp *op = new NewCallOp();
unique_ptr<OpVec> ops(new OpVec());
ops->push_back(unique_ptr<Op>(op));
@@ -256,10 +254,6 @@ NAN_METHOD(Server::AddHttp2Port) {
"addHttp2Port's second argument must be ServerCredentials");
}
Server *server = ObjectWrap::Unwrap<Server>(args.This());
- if (server->wrapped_server == NULL) {
- return NanThrowError(
- "addHttp2Port cannot be called on a shut down Server");
- }
ServerCredentials *creds_object = ObjectWrap::Unwrap<ServerCredentials>(
args[1]->ToObject());
grpc_server_credentials *creds = creds_object->GetWrappedServerCredentials();
@@ -281,21 +275,30 @@ NAN_METHOD(Server::Start) {
return NanThrowTypeError("start can only be called on a Server");
}
Server *server = ObjectWrap::Unwrap<Server>(args.This());
- if (server->wrapped_server == NULL) {
- return NanThrowError("start cannot be called on a shut down Server");
- }
grpc_server_start(server->wrapped_server);
NanReturnUndefined();
}
-NAN_METHOD(ShutdownCallback) {
+NAN_METHOD(Server::TryShutdown) {
+ NanScope();
+ if (!HasInstance(args.This())) {
+ return NanThrowTypeError("tryShutdown can only be called on a Server");
+ }
+ Server *server = ObjectWrap::Unwrap<Server>(args.This());
+ unique_ptr<OpVec> ops(new OpVec());
+ grpc_server_shutdown_and_notify(
+ server->wrapped_server,
+ CompletionQueueAsyncWorker::GetQueue(),
+ new struct tag(new NanCallback(args[0].As<Function>()), ops.release(),
+ shared_ptr<Resources>(nullptr)));
+ CompletionQueueAsyncWorker::Next();
NanReturnUndefined();
}
-NAN_METHOD(Server::Shutdown) {
+NAN_METHOD(Server::ForceShutdown) {
NanScope();
if (!HasInstance(args.This())) {
- return NanThrowTypeError("shutdown can only be called on a Server");
+ return NanThrowTypeError("forceShutdown can only be called on a Server");
}
Server *server = ObjectWrap::Unwrap<Server>(args.This());
server->ShutdownServer();
diff --git a/src/node/ext/server.h b/src/node/ext/server.h
index faab7e3418..e7d5c3fb11 100644
--- a/src/node/ext/server.h
+++ b/src/node/ext/server.h
@@ -67,7 +67,8 @@ class Server : public ::node::ObjectWrap {
static NAN_METHOD(RequestCall);
static NAN_METHOD(AddHttp2Port);
static NAN_METHOD(Start);
- static NAN_METHOD(Shutdown);
+ static NAN_METHOD(TryShutdown);
+ static NAN_METHOD(ForceShutdown);
static NanCallback *constructor;
static v8::Persistent<v8::FunctionTemplate> fun_tpl;
diff --git a/src/node/ext/server_credentials.cc b/src/node/ext/server_credentials.cc
index 1b8e7b43fb..b1201eb664 100644
--- a/src/node/ext/server_credentials.cc
+++ b/src/node/ext/server_credentials.cc
@@ -41,6 +41,7 @@
namespace grpc {
namespace node {
+using v8::Array;
using v8::Exception;
using v8::External;
using v8::Function;
@@ -52,6 +53,7 @@ using v8::Local;
using v8::Object;
using v8::ObjectTemplate;
using v8::Persistent;
+using v8::String;
using v8::Value;
NanCallback *ServerCredentials::constructor;
@@ -122,25 +124,63 @@ NAN_METHOD(ServerCredentials::CreateSsl) {
// TODO: have the node API support multiple key/cert pairs.
NanScope();
char *root_certs = NULL;
- grpc_ssl_pem_key_cert_pair key_cert_pair;
if (::node::Buffer::HasInstance(args[0])) {
root_certs = ::node::Buffer::Data(args[0]);
} else if (!(args[0]->IsNull() || args[0]->IsUndefined())) {
return NanThrowTypeError(
"createSSl's first argument must be a Buffer if provided");
}
- if (!::node::Buffer::HasInstance(args[1])) {
- return NanThrowTypeError("createSsl's second argument must be a Buffer");
+ if (!args[1]->IsArray()) {
+ return NanThrowTypeError(
+ "createSsl's second argument must be a list of objects");
+ }
+ int force_client_auth = 0;
+ if (args[2]->IsBoolean()) {
+ force_client_auth = (int)args[2]->BooleanValue();
+ } else if (!(args[2]->IsUndefined() || args[2]->IsNull())) {
+ return NanThrowTypeError(
+ "createSsl's third argument must be a boolean if provided");
}
- key_cert_pair.private_key = ::node::Buffer::Data(args[1]);
- if (!::node::Buffer::HasInstance(args[2])) {
- return NanThrowTypeError("createSsl's third argument must be a Buffer");
+ Handle<Array> pair_list = Local<Array>::Cast(args[1]);
+ uint32_t key_cert_pair_count = pair_list->Length();
+ grpc_ssl_pem_key_cert_pair *key_cert_pairs = new grpc_ssl_pem_key_cert_pair[
+ key_cert_pair_count];
+
+ Handle<String> key_key = NanNew("private_key");
+ Handle<String> cert_key = NanNew("cert_chain");
+
+ for(uint32_t i = 0; i < key_cert_pair_count; i++) {
+ if (!pair_list->Get(i)->IsObject()) {
+ delete key_cert_pairs;
+ return NanThrowTypeError("Key/cert pairs must be objects");
+ }
+ Handle<Object> pair_obj = pair_list->Get(i)->ToObject();
+ if (!pair_obj->HasOwnProperty(key_key)) {
+ delete key_cert_pairs;
+ return NanThrowTypeError(
+ "Key/cert pairs must have a private_key and a cert_chain");
+ }
+ if (!pair_obj->HasOwnProperty(cert_key)) {
+ delete key_cert_pairs;
+ return NanThrowTypeError(
+ "Key/cert pairs must have a private_key and a cert_chain");
+ }
+ if (!::node::Buffer::HasInstance(pair_obj->Get(key_key))) {
+ delete key_cert_pairs;
+ return NanThrowTypeError("private_key must be a Buffer");
+ }
+ if (!::node::Buffer::HasInstance(pair_obj->Get(cert_key))) {
+ delete key_cert_pairs;
+ return NanThrowTypeError("cert_chain must be a Buffer");
+ }
+ key_cert_pairs[i].private_key = ::node::Buffer::Data(
+ pair_obj->Get(key_key));
+ key_cert_pairs[i].cert_chain = ::node::Buffer::Data(
+ pair_obj->Get(cert_key));
}
- key_cert_pair.cert_chain = ::node::Buffer::Data(args[2]);
- // TODO Add a force_client_auth parameter and pass it as the last parameter
- // here.
- grpc_server_credentials *creds =
- grpc_ssl_server_credentials_create(root_certs, &key_cert_pair, 1, 0);
+ grpc_server_credentials *creds = grpc_ssl_server_credentials_create(
+ root_certs, key_cert_pairs, key_cert_pair_count, force_client_auth, NULL);
+ delete key_cert_pairs;
if (creds == NULL) {
NanReturnNull();
}
diff --git a/src/node/index.js b/src/node/index.js
index 889b0ac0e9..51d3fa590c 100644
--- a/src/node/index.js
+++ b/src/node/index.js
@@ -41,6 +41,8 @@ var client = require('./src/client.js');
var server = require('./src/server.js');
+var Metadata = require('./src/metadata.js');
+
var grpc = require('bindings')('grpc');
/**
@@ -107,18 +109,12 @@ exports.getGoogleAuthDelegate = function getGoogleAuthDelegate(credential) {
* @param {function(Error, Object)} callback
*/
return function updateMetadata(authURI, metadata, callback) {
- metadata = _.clone(metadata);
- if (metadata.Authorization) {
- metadata.Authorization = _.clone(metadata.Authorization);
- } else {
- metadata.Authorization = [];
- }
credential.getRequestMetadata(authURI, function(err, header) {
if (err) {
callback(err);
return;
}
- metadata.Authorization.push(header.Authorization);
+ metadata.add('authorization', header.Authorization);
callback(null, metadata);
});
};
@@ -130,6 +126,11 @@ exports.getGoogleAuthDelegate = function getGoogleAuthDelegate(credential) {
exports.Server = server.Server;
/**
+ * @see module:src/metadata
+ */
+exports.Metadata = Metadata;
+
+/**
* Status name to code number mapping
*/
exports.status = grpc.status;
diff --git a/src/node/interop/interop_client.js b/src/node/interop/interop_client.js
index 2f8eaea41d..da5e0f4afb 100644
--- a/src/node/interop/interop_client.js
+++ b/src/node/interop/interop_client.js
@@ -321,13 +321,7 @@ function oauth2Test(expected_user, scope, per_rpc, client, done) {
credential.getAccessToken(function(err, token) {
assert.ifError(err);
var updateMetadata = function(authURI, metadata, callback) {
- metadata = _.clone(metadata);
- if (metadata.Authorization) {
- metadata.Authorization = _.clone(metadata.Authorization);
- } else {
- metadata.Authorization = [];
- }
- metadata.Authorization.push('Bearer ' + token);
+ metadata.Add('authorization', 'Bearer ' + token);
callback(null, metadata);
};
var makeTestCall = function(error, client_metadata) {
diff --git a/src/node/interop/interop_server.js b/src/node/interop/interop_server.js
index 1242a0f939..99155e9958 100644
--- a/src/node/interop/interop_server.js
+++ b/src/node/interop/interop_server.js
@@ -169,8 +169,8 @@ function getServer(port, tls) {
var key_data = fs.readFileSync(key_path);
var pem_data = fs.readFileSync(pem_path);
server_creds = grpc.ServerCredentials.createSsl(null,
- key_data,
- pem_data);
+ [{private_key: key_data,
+ cert_chain: pem_data}]);
} else {
server_creds = grpc.ServerCredentials.createInsecure();
}
diff --git a/src/node/src/client.js b/src/node/src/client.js
index ddd28e37b8..53b7cc3e8d 100644
--- a/src/node/src/client.js
+++ b/src/node/src/client.js
@@ -42,7 +42,9 @@ var _ = require('lodash');
var grpc = require('bindings')('grpc.node');
-var common = require('./common.js');
+var common = require('./common');
+
+var Metadata = require('./metadata');
var EventEmitter = require('events').EventEmitter;
@@ -254,8 +256,7 @@ function makeUnaryRequestFunction(method, serialize, deserialize) {
* serialize
* @param {function(?Error, value=)} callback The callback to for when the
* response is received
- * @param {array=} metadata Array of metadata key/value pairs to add to the
- * call
+ * @param {Metadata=} metadata Metadata to add to the call
* @param {Object=} options Options map
* @return {EventEmitter} An event emitter for stream related events
*/
@@ -264,7 +265,9 @@ function makeUnaryRequestFunction(method, serialize, deserialize) {
var emitter = new EventEmitter();
var call = getCall(this.$channel, method, options);
if (metadata === null || metadata === undefined) {
- metadata = {};
+ metadata = new Metadata();
+ } else {
+ metadata = metadata.clone();
}
emitter.cancel = function cancel() {
call.cancel();
@@ -283,13 +286,16 @@ function makeUnaryRequestFunction(method, serialize, deserialize) {
if (options) {
message.grpcWriteFlags = options.flags;
}
- client_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata;
+ client_batch[grpc.opType.SEND_INITIAL_METADATA] =
+ metadata._getCoreRepresentation();
client_batch[grpc.opType.SEND_MESSAGE] = message;
client_batch[grpc.opType.SEND_CLOSE_FROM_CLIENT] = true;
client_batch[grpc.opType.RECV_INITIAL_METADATA] = true;
client_batch[grpc.opType.RECV_MESSAGE] = true;
client_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true;
call.startBatch(client_batch, function(err, response) {
+ response.status.metadata = Metadata._fromCoreRepresentation(
+ response.status.metadata);
emitter.emit('status', response.status);
if (response.status.code !== grpc.status.OK) {
var error = new Error(response.status.details);
@@ -304,7 +310,8 @@ function makeUnaryRequestFunction(method, serialize, deserialize) {
return;
}
}
- emitter.emit('metadata', response.metadata);
+ emitter.emit('metadata', Metadata._fromCoreRepresentation(
+ response.metadata));
callback(null, deserialize(response.read));
});
});
@@ -328,7 +335,7 @@ function makeClientStreamRequestFunction(method, serialize, deserialize) {
* @this {Client} Client object. Must have a channel member.
* @param {function(?Error, value=)} callback The callback to for when the
* response is received
- * @param {array=} metadata Array of metadata key/value pairs to add to the
+ * @param {Metadata=} metadata Array of metadata key/value pairs to add to the
* call
* @param {Object=} options Options map
* @return {EventEmitter} An event emitter for stream related events
@@ -337,7 +344,9 @@ function makeClientStreamRequestFunction(method, serialize, deserialize) {
/* jshint validthis: true */
var call = getCall(this.$channel, method, options);
if (metadata === null || metadata === undefined) {
- metadata = {};
+ metadata = new Metadata();
+ } else {
+ metadata = metadata.clone();
}
var stream = new ClientWritableStream(call, serialize);
this.$_updateMetadata(this.$_auth_uri, metadata, function(error, metadata) {
@@ -347,7 +356,8 @@ function makeClientStreamRequestFunction(method, serialize, deserialize) {
return;
}
var metadata_batch = {};
- metadata_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata;
+ metadata_batch[grpc.opType.SEND_INITIAL_METADATA] =
+ metadata._getCoreRepresentation();
metadata_batch[grpc.opType.RECV_INITIAL_METADATA] = true;
call.startBatch(metadata_batch, function(err, response) {
if (err) {
@@ -355,12 +365,15 @@ function makeClientStreamRequestFunction(method, serialize, deserialize) {
// in the other batch.
return;
}
- stream.emit('metadata', response.metadata);
+ stream.emit('metadata', Metadata._fromCoreRepresentation(
+ response.metadata));
});
var client_batch = {};
client_batch[grpc.opType.RECV_MESSAGE] = true;
client_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true;
call.startBatch(client_batch, function(err, response) {
+ response.status.metadata = Metadata._fromCoreRepresentation(
+ response.status.metadata);
stream.emit('status', response.status);
if (response.status.code !== grpc.status.OK) {
var error = new Error(response.status.details);
@@ -398,7 +411,7 @@ function makeServerStreamRequestFunction(method, serialize, deserialize) {
* @this {SurfaceClient} Client object. Must have a channel member.
* @param {*} argument The argument to the call. Should be serializable with
* serialize
- * @param {array=} metadata Array of metadata key/value pairs to add to the
+ * @param {Metadata=} metadata Array of metadata key/value pairs to add to the
* call
* @param {Object} options Options map
* @return {EventEmitter} An event emitter for stream related events
@@ -407,7 +420,9 @@ function makeServerStreamRequestFunction(method, serialize, deserialize) {
/* jshint validthis: true */
var call = getCall(this.$channel, method, options);
if (metadata === null || metadata === undefined) {
- metadata = {};
+ metadata = new Metadata();
+ } else {
+ metadata = metadata.clone();
}
var stream = new ClientReadableStream(call, deserialize);
this.$_updateMetadata(this.$_auth_uri, metadata, function(error, metadata) {
@@ -421,7 +436,8 @@ function makeServerStreamRequestFunction(method, serialize, deserialize) {
if (options) {
message.grpcWriteFlags = options.flags;
}
- start_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata;
+ start_batch[grpc.opType.SEND_INITIAL_METADATA] =
+ metadata._getCoreRepresentation();
start_batch[grpc.opType.RECV_INITIAL_METADATA] = true;
start_batch[grpc.opType.SEND_MESSAGE] = message;
start_batch[grpc.opType.SEND_CLOSE_FROM_CLIENT] = true;
@@ -431,11 +447,14 @@ function makeServerStreamRequestFunction(method, serialize, deserialize) {
// in the other batch.
return;
}
- stream.emit('metadata', response.metadata);
+ stream.emit('metadata', Metadata._fromCoreRepresentation(
+ response.metadata));
});
var status_batch = {};
status_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true;
call.startBatch(status_batch, function(err, response) {
+ response.status.metadata = Metadata._fromCoreRepresentation(
+ response.status.metadata);
stream.emit('status', response.status);
if (response.status.code !== grpc.status.OK) {
var error = new Error(response.status.details);
@@ -470,7 +489,7 @@ function makeBidiStreamRequestFunction(method, serialize, deserialize) {
/**
* Make a bidirectional stream request with this method on the given channel.
* @this {SurfaceClient} Client object. Must have a channel member.
- * @param {array=} metadata Array of metadata key/value pairs to add to the
+ * @param {Metadata=} metadata Array of metadata key/value pairs to add to the
* call
* @param {Options} options Options map
* @return {EventEmitter} An event emitter for stream related events
@@ -479,7 +498,9 @@ function makeBidiStreamRequestFunction(method, serialize, deserialize) {
/* jshint validthis: true */
var call = getCall(this.$channel, method, options);
if (metadata === null || metadata === undefined) {
- metadata = {};
+ metadata = new Metadata();
+ } else {
+ metadata = metadata.clone();
}
var stream = new ClientDuplexStream(call, serialize, deserialize);
this.$_updateMetadata(this.$_auth_uri, metadata, function(error, metadata) {
@@ -489,7 +510,8 @@ function makeBidiStreamRequestFunction(method, serialize, deserialize) {
return;
}
var start_batch = {};
- start_batch[grpc.opType.SEND_INITIAL_METADATA] = metadata;
+ start_batch[grpc.opType.SEND_INITIAL_METADATA] =
+ metadata._getCoreRepresentation();
start_batch[grpc.opType.RECV_INITIAL_METADATA] = true;
call.startBatch(start_batch, function(err, response) {
if (err) {
@@ -497,11 +519,14 @@ function makeBidiStreamRequestFunction(method, serialize, deserialize) {
// in the other batch.
return;
}
- stream.emit('metadata', response.metadata);
+ stream.emit('metadata', Metadata._fromCoreRepresentation(
+ response.metadata));
});
var status_batch = {};
status_batch[grpc.opType.RECV_STATUS_ON_CLIENT] = true;
call.startBatch(status_batch, function(err, response) {
+ response.status.metadata = Metadata._fromCoreRepresentation(
+ response.status.metadata);
stream.emit('status', response.status);
if (response.status.code !== grpc.status.OK) {
var error = new Error(response.status.details);
diff --git a/src/node/src/metadata.js b/src/node/src/metadata.js
new file mode 100644
index 0000000000..c1da70b197
--- /dev/null
+++ b/src/node/src/metadata.js
@@ -0,0 +1,181 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/**
+ * Metadata module
+ * @module
+ */
+
+'use strict';
+
+var _ = require('lodash');
+
+/**
+ * Class for storing metadata. Keys are normalized to lowercase ASCII.
+ * @constructor
+ */
+function Metadata() {
+ this._internal_repr = {};
+}
+
+function normalizeKey(key) {
+ if (!(/^[A-Za-z\d_-]+$/.test(key))) {
+ throw new Error('Metadata keys must be nonempty strings containing only ' +
+ 'alphanumeric characters and hyphens');
+ }
+ return key.toLowerCase();
+}
+
+function validate(key, value) {
+ if (_.endsWith(key, '-bin')) {
+ if (!(value instanceof Buffer)) {
+ throw new Error('keys that end with \'-bin\' must have Buffer values');
+ }
+ } else {
+ if (!_.isString(value)) {
+ throw new Error(
+ 'keys that don\'t end with \'-bin\' must have String values');
+ }
+ if (!(/^[\x20-\x7E]*$/.test(value))) {
+ throw new Error('Metadata string values can only contain printable ' +
+ 'ASCII characters and space');
+ }
+ }
+}
+
+/**
+ * Sets the given value for the given key, replacing any other values associated
+ * with that key. Normalizes the key.
+ * @param {String} key The key to set
+ * @param {String|Buffer} value The value to set. Must be a buffer if and only
+ * if the normalized key ends with '-bin'
+ */
+Metadata.prototype.set = function(key, value) {
+ key = normalizeKey(key);
+ validate(key, value);
+ this._internal_repr[key] = [value];
+};
+
+/**
+ * Adds the given value for the given key. Normalizes the key.
+ * @param {String} key The key to add to.
+ * @param {String|Buffer} value The value to add. Must be a buffer if and only
+ * if the normalized key ends with '-bin'
+ */
+Metadata.prototype.add = function(key, value) {
+ key = normalizeKey(key);
+ validate(key, value);
+ if (!this._internal_repr[key]) {
+ this._internal_repr[key] = [];
+ }
+ this._internal_repr[key].push(value);
+};
+
+/**
+ * Remove the given key and any associated values. Normalizes the key.
+ * @param {String} key The key to remove
+ */
+Metadata.prototype.remove = function(key) {
+ key = normalizeKey(key);
+ if (Object.prototype.hasOwnProperty.call(this._internal_repr, key)) {
+ delete this._internal_repr[key];
+ }
+};
+
+/**
+ * Gets a list of all values associated with the key. Normalizes the key.
+ * @param {String} key The key to get
+ * @return {Array.<String|Buffer>} The values associated with that key
+ */
+Metadata.prototype.get = function(key) {
+ key = normalizeKey(key);
+ if (Object.prototype.hasOwnProperty.call(this._internal_repr, key)) {
+ return this._internal_repr[key];
+ } else {
+ return [];
+ }
+};
+
+/**
+ * Get a map of each key to a single associated value. This reflects the most
+ * common way that people will want to see metadata.
+ * @return {Object.<String,String|Buffer>} A key/value mapping of the metadata
+ */
+Metadata.prototype.getMap = function() {
+ var result = {};
+ _.forOwn(this._internal_repr, function(values, key) {
+ if(values.length > 0) {
+ result[key] = values[0];
+ }
+ });
+ return result;
+};
+
+/**
+ * Clone the metadata object.
+ * @return {Metadata} The new cloned object
+ */
+Metadata.prototype.clone = function() {
+ var copy = new Metadata();
+ _.forOwn(this._internal_repr, function(value, key) {
+ copy._internal_repr[key] = _.clone(value);
+ });
+ return copy;
+};
+
+/**
+ * Gets the metadata in the format used by interal code. Intended for internal
+ * use only. API stability is not guaranteed.
+ * @private
+ * @return {Object.<String, Array.<String|Buffer>>} The metadata
+ */
+Metadata.prototype._getCoreRepresentation = function() {
+ return this._internal_repr;
+};
+
+/**
+ * Creates a Metadata object from a metadata map in the internal format.
+ * Intended for internal use only. API stability is not guaranteed.
+ * @private
+ * @param {Object.<String, Array.<String|Buffer>>} The metadata
+ * @return {Metadata} The new Metadata object
+ */
+Metadata._fromCoreRepresentation = function(metadata) {
+ var newMetadata = new Metadata();
+ if (metadata) {
+ newMetadata._internal_repr = _.cloneDeep(metadata);
+ }
+ return newMetadata;
+};
+
+module.exports = Metadata;
diff --git a/src/node/src/server.js b/src/node/src/server.js
index 5037abae43..b6f162adf8 100644
--- a/src/node/src/server.js
+++ b/src/node/src/server.js
@@ -44,6 +44,8 @@ var grpc = require('bindings')('grpc.node');
var common = require('./common');
+var Metadata = require('./metadata');
+
var stream = require('stream');
var Readable = stream.Readable;
@@ -60,10 +62,10 @@ var EventEmitter = require('events').EventEmitter;
* @param {Object} error The error object
*/
function handleError(call, error) {
+ var statusMetadata = new Metadata();
var status = {
code: grpc.status.UNKNOWN,
- details: 'Unknown Error',
- metadata: {}
+ details: 'Unknown Error'
};
if (error.hasOwnProperty('message')) {
status.details = error.message;
@@ -75,11 +77,13 @@ function handleError(call, error) {
}
}
if (error.hasOwnProperty('metadata')) {
- status.metadata = error.metadata;
+ statusMetadata = error.metadata;
}
+ status.metadata = statusMetadata._getCoreRepresentation();
var error_batch = {};
if (!call.metadataSent) {
- error_batch[grpc.opType.SEND_INITIAL_METADATA] = {};
+ error_batch[grpc.opType.SEND_INITIAL_METADATA] =
+ (new Metadata())._getCoreRepresentation();
}
error_batch[grpc.opType.SEND_STATUS_FROM_SERVER] = status;
call.startBatch(error_batch, function(){});
@@ -114,22 +118,24 @@ function waitForCancel(call, emitter) {
* @param {*} value The value to respond with
* @param {function(*):Buffer=} serialize Serialization function for the
* response
- * @param {Object=} metadata Optional trailing metadata to send with status
+ * @param {Metadata=} metadata Optional trailing metadata to send with status
* @param {number=} flags Flags for modifying how the message is sent.
* Defaults to 0.
*/
function sendUnaryResponse(call, value, serialize, metadata, flags) {
var end_batch = {};
+ var statusMetadata = new Metadata();
var status = {
code: grpc.status.OK,
- details: 'OK',
- metadata: {}
+ details: 'OK'
};
if (metadata) {
- status.metadata = metadata;
+ statusMetadata = metadata;
}
+ status.metadata = statusMetadata._getCoreRepresentation();
if (!call.metadataSent) {
- end_batch[grpc.opType.SEND_INITIAL_METADATA] = {};
+ end_batch[grpc.opType.SEND_INITIAL_METADATA] =
+ (new Metadata())._getCoreRepresentation();
call.metadataSent = true;
}
var message = serialize(value);
@@ -151,14 +157,19 @@ function setUpWritable(stream, serialize) {
stream.status = {
code : grpc.status.OK,
details : 'OK',
- metadata : {}
+ metadata : new Metadata()
};
stream.serialize = common.wrapIgnoreNull(serialize);
function sendStatus() {
var batch = {};
if (!stream.call.metadataSent) {
stream.call.metadataSent = true;
- batch[grpc.opType.SEND_INITIAL_METADATA] = {};
+ batch[grpc.opType.SEND_INITIAL_METADATA] =
+ (new Metadata())._getCoreRepresentation();
+ }
+
+ if (stream.status.metadata) {
+ stream.status.metadata = stream.status.metadata._getCoreRepresentation();
}
batch[grpc.opType.SEND_STATUS_FROM_SERVER] = stream.status;
stream.call.startBatch(batch, function(){});
@@ -173,7 +184,7 @@ function setUpWritable(stream, serialize) {
function setStatus(err) {
var code = grpc.status.UNKNOWN;
var details = 'Unknown Error';
- var metadata = {};
+ var metadata = new Metadata();
if (err.hasOwnProperty('message')) {
details = err.message;
}
@@ -203,7 +214,7 @@ function setUpWritable(stream, serialize) {
/**
* Override of Writable#end method that allows for sending metadata with a
* success status.
- * @param {Object=} metadata Metadata to send with the status
+ * @param {Metadata=} metadata Metadata to send with the status
*/
stream.end = function(metadata) {
if (metadata) {
@@ -266,7 +277,8 @@ function _write(chunk, encoding, callback) {
/* jshint validthis: true */
var batch = {};
if (!this.call.metadataSent) {
- batch[grpc.opType.SEND_INITIAL_METADATA] = {};
+ batch[grpc.opType.SEND_INITIAL_METADATA] =
+ (new Metadata())._getCoreRepresentation();
this.call.metadataSent = true;
}
var message = this.serialize(chunk);
@@ -289,15 +301,15 @@ ServerWritableStream.prototype._write = _write;
/**
* Send the initial metadata for a writable stream.
- * @param {Object<String, Array<(String|Buffer)>>} responseMetadata Metadata
- * to send
+ * @param {Metadata} responseMetadata Metadata to send
*/
function sendMetadata(responseMetadata) {
/* jshint validthis: true */
if (!this.call.metadataSent) {
this.call.metadataSent = true;
var batch = [];
- batch[grpc.opType.SEND_INITIAL_METADATA] = responseMetadata;
+ batch[grpc.opType.SEND_INITIAL_METADATA] =
+ responseMetadata._getCoreRepresentation();
this.call.startBatch(batch, function(err) {
if (err) {
this.emit('error', err);
@@ -422,7 +434,7 @@ ServerDuplexStream.prototype.getPeer = getPeer;
* @access private
* @param {grpc.Call} call The call to handle
* @param {Object} handler Request handler object for the method that was called
- * @param {Object} metadata Metadata from the client
+ * @param {Metadata} metadata Metadata from the client
*/
function handleUnary(call, handler, metadata) {
var emitter = new EventEmitter();
@@ -430,7 +442,8 @@ function handleUnary(call, handler, metadata) {
if (!call.metadataSent) {
call.metadataSent = true;
var batch = {};
- batch[grpc.opType.SEND_INITIAL_METADATA] = responseMetadata;
+ batch[grpc.opType.SEND_INITIAL_METADATA] =
+ responseMetadata._getCoreRepresentation();
call.startBatch(batch, function() {});
}
};
@@ -478,7 +491,7 @@ function handleUnary(call, handler, metadata) {
* @access private
* @param {grpc.Call} call The call to handle
* @param {Object} handler Request handler object for the method that was called
- * @param {Object} metadata Metadata from the client
+ * @param {Metadata} metadata Metadata from the client
*/
function handleServerStreaming(call, handler, metadata) {
var stream = new ServerWritableStream(call, handler.serialize);
@@ -507,7 +520,7 @@ function handleServerStreaming(call, handler, metadata) {
* @access private
* @param {grpc.Call} call The call to handle
* @param {Object} handler Request handler object for the method that was called
- * @param {Object} metadata Metadata from the client
+ * @param {Metadata} metadata Metadata from the client
*/
function handleClientStreaming(call, handler, metadata) {
var stream = new ServerReadableStream(call, handler.deserialize);
@@ -515,7 +528,8 @@ function handleClientStreaming(call, handler, metadata) {
if (!call.metadataSent) {
call.metadataSent = true;
var batch = {};
- batch[grpc.opType.SEND_INITIAL_METADATA] = responseMetadata;
+ batch[grpc.opType.SEND_INITIAL_METADATA] =
+ responseMetadata._getCoreRepresentation();
call.startBatch(batch, function() {});
}
};
@@ -542,7 +556,7 @@ function handleClientStreaming(call, handler, metadata) {
* @access private
* @param {grpc.Call} call The call to handle
* @param {Object} handler Request handler object for the method that was called
- * @param {Object} metadata Metadata from the client
+ * @param {Metadata} metadata Metadata from the client
*/
function handleBidiStreaming(call, handler, metadata) {
var stream = new ServerDuplexStream(call, handler.serialize,
@@ -599,7 +613,7 @@ function Server(options) {
var details = event.new_call;
var call = details.call;
var method = details.method;
- var metadata = details.metadata;
+ var metadata = Metadata._fromCoreRepresentation(details.metadata);
if (method === null) {
return;
}
@@ -609,7 +623,8 @@ function Server(options) {
handler = handlers[method];
} else {
var batch = {};
- batch[grpc.opType.SEND_INITIAL_METADATA] = {};
+ batch[grpc.opType.SEND_INITIAL_METADATA] =
+ (new Metadata())._getCoreRepresentation();
batch[grpc.opType.SEND_STATUS_FROM_SERVER] = {
code: grpc.status.UNIMPLEMENTED,
details: 'This method is not available on this server.',
@@ -623,11 +638,26 @@ function Server(options) {
}
server.requestCall(handleNewCall);
};
+
+ /**
+ * Gracefully shuts down the server. The server will stop receiving new calls,
+ * and any pending calls will complete. The callback will be called when all
+ * pending calls have completed and the server is fully shut down. This method
+ * is idempotent with itself and forceShutdown.
+ * @param {function()} callback The shutdown complete callback
+ */
+ this.tryShutdown = function(callback) {
+ server.tryShutdown(callback);
+ };
+
/**
- * Shuts down the server.
+ * Forcibly shuts down the server. The server will stop receiving new calls
+ * and cancel all pending calls. When it returns, the server has shut down.
+ * This method is idempotent with itself and tryShutdown, and it will trigger
+ * any outstanding tryShutdown callbacks.
*/
- this.shutdown = function() {
- server.shutdown();
+ this.forceShutdown = function() {
+ server.forceShutdown();
};
}
diff --git a/src/node/test/call_test.js b/src/node/test/call_test.js
index 8d0f20b074..e7f071bcd5 100644
--- a/src/node/test/call_test.js
+++ b/src/node/test/call_test.js
@@ -61,7 +61,7 @@ describe('call', function() {
channel = new grpc.Channel('localhost:' + port, insecureCreds);
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
describe('constructor', function() {
it('should reject anything less than 3 arguments', function() {
diff --git a/src/node/test/end_to_end_test.js b/src/node/test/end_to_end_test.js
index 7574d98b8a..4b8da3bfb1 100644
--- a/src/node/test/end_to_end_test.js
+++ b/src/node/test/end_to_end_test.js
@@ -70,7 +70,7 @@ describe('end-to-end', function() {
channel = new grpc.Channel('localhost:' + port_num, insecureCreds);
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
it('should start and end a request without error', function(complete) {
var done = multiDone(complete, 2);
diff --git a/src/node/test/health_test.js b/src/node/test/health_test.js
index 04959f5f55..9267bff7eb 100644
--- a/src/node/test/health_test.js
+++ b/src/node/test/health_test.js
@@ -57,7 +57,7 @@ describe('Health Checking', function() {
grpc.Credentials.createInsecure());
});
after(function() {
- healthServer.shutdown();
+ healthServer.forceShutdown();
});
it('should say an enabled service is SERVING', function(done) {
healthClient.check({service: ''}, function(err, response) {
diff --git a/src/node/test/interop_sanity_test.js b/src/node/test/interop_sanity_test.js
index 0a5eb29c0c..2ca07c1d50 100644
--- a/src/node/test/interop_sanity_test.js
+++ b/src/node/test/interop_sanity_test.js
@@ -51,7 +51,7 @@ describe('Interop tests', function() {
done();
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
// This depends on not using a binary stream
it('should pass empty_unary', function(done) {
diff --git a/src/node/test/math_client_test.js b/src/node/test/math_client_test.js
index ef01870a4c..80b0c5ff2a 100644
--- a/src/node/test/math_client_test.js
+++ b/src/node/test/math_client_test.js
@@ -59,7 +59,7 @@ describe('Math client', function() {
done();
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
it('should handle a single request', function(done) {
var arg = {dividend: 7, divisor: 4};
diff --git a/src/node/test/metadata_test.js b/src/node/test/metadata_test.js
new file mode 100644
index 0000000000..86383f1bad
--- /dev/null
+++ b/src/node/test/metadata_test.js
@@ -0,0 +1,193 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+'use strict';
+
+var Metadata = require('../src/metadata.js');
+
+var assert = require('assert');
+
+describe('Metadata', function() {
+ var metadata;
+ beforeEach(function() {
+ metadata = new Metadata();
+ });
+ describe('#set', function() {
+ it('Only accepts string values for non "-bin" keys', function() {
+ assert.throws(function() {
+ metadata.set('key', new Buffer('value'));
+ });
+ assert.doesNotThrow(function() {
+ metadata.set('key', 'value');
+ });
+ });
+ it('Only accepts Buffer values for "-bin" keys', function() {
+ assert.throws(function() {
+ metadata.set('key-bin', 'value');
+ });
+ assert.doesNotThrow(function() {
+ metadata.set('key-bin', new Buffer('value'));
+ });
+ });
+ it('Rejects invalid keys', function() {
+ assert.throws(function() {
+ metadata.set('key$', 'value');
+ });
+ assert.throws(function() {
+ metadata.set('', 'value');
+ });
+ });
+ it('Rejects values with non-ASCII characters', function() {
+ assert.throws(function() {
+ metadata.set('key', 'résumé');
+ });
+ });
+ it('Saves values that can be retrieved', function() {
+ metadata.set('key', 'value');
+ assert.deepEqual(metadata.get('key'), ['value']);
+ });
+ it('Overwrites previous values', function() {
+ metadata.set('key', 'value1');
+ metadata.set('key', 'value2');
+ assert.deepEqual(metadata.get('key'), ['value2']);
+ });
+ it('Normalizes keys', function() {
+ metadata.set('Key', 'value1');
+ assert.deepEqual(metadata.get('key'), ['value1']);
+ metadata.set('KEY', 'value2');
+ assert.deepEqual(metadata.get('key'), ['value2']);
+ });
+ });
+ describe('#add', function() {
+ it('Only accepts string values for non "-bin" keys', function() {
+ assert.throws(function() {
+ metadata.add('key', new Buffer('value'));
+ });
+ assert.doesNotThrow(function() {
+ metadata.add('key', 'value');
+ });
+ });
+ it('Only accepts Buffer values for "-bin" keys', function() {
+ assert.throws(function() {
+ metadata.add('key-bin', 'value');
+ });
+ assert.doesNotThrow(function() {
+ metadata.add('key-bin', new Buffer('value'));
+ });
+ });
+ it('Rejects invalid keys', function() {
+ assert.throws(function() {
+ metadata.add('key$', 'value');
+ });
+ assert.throws(function() {
+ metadata.add('', 'value');
+ });
+ });
+ it('Saves values that can be retrieved', function() {
+ metadata.add('key', 'value');
+ assert.deepEqual(metadata.get('key'), ['value']);
+ });
+ it('Combines with previous values', function() {
+ metadata.add('key', 'value1');
+ metadata.add('key', 'value2');
+ assert.deepEqual(metadata.get('key'), ['value1', 'value2']);
+ });
+ it('Normalizes keys', function() {
+ metadata.add('Key', 'value1');
+ assert.deepEqual(metadata.get('key'), ['value1']);
+ metadata.add('KEY', 'value2');
+ assert.deepEqual(metadata.get('key'), ['value1', 'value2']);
+ });
+ });
+ describe('#remove', function() {
+ it('clears values from a key', function() {
+ metadata.add('key', 'value');
+ metadata.remove('key');
+ assert.deepEqual(metadata.get('key'), []);
+ });
+ it('Normalizes keys', function() {
+ metadata.add('key', 'value');
+ metadata.remove('KEY');
+ assert.deepEqual(metadata.get('key'), []);
+ });
+ });
+ describe('#get', function() {
+ beforeEach(function() {
+ metadata.add('key', 'value1');
+ metadata.add('key', 'value2');
+ metadata.add('key-bin', new Buffer('value'));
+ });
+ it('gets all values associated with a key', function() {
+ assert.deepEqual(metadata.get('key'), ['value1', 'value2']);
+ });
+ it('Normalizes keys', function() {
+ assert.deepEqual(metadata.get('KEY'), ['value1', 'value2']);
+ });
+ it('returns an empty list for non-existent keys', function() {
+ assert.deepEqual(metadata.get('non-existent-key'), []);
+ });
+ it('returns Buffers for "-bin" keys', function() {
+ assert(metadata.get('key-bin')[0] instanceof Buffer);
+ });
+ });
+ describe('#getMap', function() {
+ it('gets a map of keys to values', function() {
+ metadata.add('key1', 'value1');
+ metadata.add('Key2', 'value2');
+ metadata.add('KEY3', 'value3');
+ assert.deepEqual(metadata.getMap(),
+ {key1: 'value1',
+ key2: 'value2',
+ key3: 'value3'});
+ });
+ });
+ describe('#clone', function() {
+ it('retains values from the original', function() {
+ metadata.add('key', 'value');
+ var copy = metadata.clone();
+ assert.deepEqual(copy.get('key'), ['value']);
+ });
+ it('Does not see newly added values', function() {
+ metadata.add('key', 'value1');
+ var copy = metadata.clone();
+ metadata.add('key', 'value2');
+ assert.deepEqual(copy.get('key'), ['value1']);
+ });
+ it('Does not add new values to the original', function() {
+ metadata.add('key', 'value1');
+ var copy = metadata.clone();
+ copy.add('key', 'value2');
+ assert.deepEqual(metadata.get('key'), ['value1']);
+ });
+ });
+});
diff --git a/src/node/test/server_test.js b/src/node/test/server_test.js
index 20c9a07ffa..1e69d52e58 100644
--- a/src/node/test/server_test.js
+++ b/src/node/test/server_test.js
@@ -70,7 +70,9 @@ describe('server', function() {
var pem_path = path.join(__dirname, '../test/data/server1.pem');
var key_data = fs.readFileSync(key_path);
var pem_data = fs.readFileSync(pem_path);
- var creds = grpc.ServerCredentials.createSsl(null, key_data, pem_data);
+ var creds = grpc.ServerCredentials.createSsl(null,
+ [{private_key: key_data,
+ cert_chain: pem_data}]);
assert.doesNotThrow(function() {
port = server.addHttp2Port('0.0.0.0:0', creds);
});
@@ -90,7 +92,7 @@ describe('server', function() {
server.addHttp2Port('0.0.0.0:0', grpc.ServerCredentials.createInsecure());
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
it('should start without error', function() {
assert.doesNotThrow(function() {
@@ -98,4 +100,33 @@ describe('server', function() {
});
});
});
+ describe('shutdown', function() {
+ var server;
+ beforeEach(function() {
+ server = new grpc.Server();
+ server.addHttp2Port('0.0.0.0:0', grpc.ServerCredentials.createInsecure());
+ server.start();
+ });
+ afterEach(function() {
+ server.forceShutdown();
+ });
+ it('tryShutdown should shutdown successfully', function(done) {
+ server.tryShutdown(done);
+ });
+ it('forceShutdown should shutdown successfully', function() {
+ server.forceShutdown();
+ });
+ it('tryShutdown should be idempotent', function(done) {
+ server.tryShutdown(done);
+ server.tryShutdown(function() {});
+ });
+ it('forceShutdown should be idempotent', function() {
+ server.forceShutdown();
+ server.forceShutdown();
+ });
+ it('forceShutdown should trigger tryShutdown', function(done) {
+ server.tryShutdown(done);
+ server.forceShutdown();
+ });
+ });
});
diff --git a/src/node/test/surface_test.js b/src/node/test/surface_test.js
index c2b9323abf..6bb90a2303 100644
--- a/src/node/test/surface_test.js
+++ b/src/node/test/surface_test.js
@@ -104,7 +104,7 @@ describe('Server.prototype.addProtoService', function() {
server = new grpc.Server();
});
afterEach(function() {
- server.shutdown();
+ server.forceShutdown();
});
it('Should succeed with a single service', function() {
assert.doesNotThrow(function() {
@@ -166,7 +166,7 @@ describe('Client#$waitForReady', function() {
client = new Client('localhost:' + port, grpc.Credentials.createInsecure());
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
it('should complete when called alone', function(done) {
client.$waitForReady(Infinity, function(error) {
@@ -221,7 +221,7 @@ describe('Echo service', function() {
server.start();
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
it('should echo the recieved message directly', function(done) {
client.echo({value: 'test value', value2: 3}, function(error, response) {
@@ -266,7 +266,7 @@ describe('Generic client and server', function() {
grpc.Credentials.createInsecure());
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
it('Should respond with a capitalized string', function(done) {
client.capitalize('abc', function(err, response) {
@@ -280,6 +280,7 @@ describe('Generic client and server', function() {
describe('Echo metadata', function() {
var client;
var server;
+ var metadata;
before(function() {
var test_proto = ProtoBuf.loadProtoFile(__dirname + '/test_service.proto');
var test_service = test_proto.lookup('TestService');
@@ -312,42 +313,44 @@ describe('Echo metadata', function() {
var Client = surface_client.makeProtobufClientConstructor(test_service);
client = new Client('localhost:' + port, grpc.Credentials.createInsecure());
server.start();
+ metadata = new grpc.Metadata();
+ metadata.set('key', 'value');
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
it('with unary call', function(done) {
var call = client.unary({}, function(err, data) {
assert.ifError(err);
- }, {key: ['value']});
+ }, metadata);
call.on('metadata', function(metadata) {
- assert.deepEqual(metadata.key, ['value']);
+ assert.deepEqual(metadata.get('key'), ['value']);
done();
});
});
it('with client stream call', function(done) {
var call = client.clientStream(function(err, data) {
assert.ifError(err);
- }, {key: ['value']});
+ }, metadata);
call.on('metadata', function(metadata) {
- assert.deepEqual(metadata.key, ['value']);
+ assert.deepEqual(metadata.get('key'), ['value']);
done();
});
call.end();
});
it('with server stream call', function(done) {
- var call = client.serverStream({}, {key: ['value']});
+ var call = client.serverStream({}, metadata);
call.on('data', function() {});
call.on('metadata', function(metadata) {
- assert.deepEqual(metadata.key, ['value']);
+ assert.deepEqual(metadata.get('key'), ['value']);
done();
});
});
it('with bidi stream call', function(done) {
- var call = client.bidiStream({key: ['value']});
+ var call = client.bidiStream(metadata);
call.on('data', function() {});
call.on('metadata', function(metadata) {
- assert.deepEqual(metadata.key, ['value']);
+ assert.deepEqual(metadata.get('key'), ['value']);
done();
});
call.end();
@@ -355,9 +358,10 @@ describe('Echo metadata', function() {
it('shows the correct user-agent string', function(done) {
var version = require('../package.json').version;
var call = client.unary({}, function(err, data) { assert.ifError(err); },
- {key: ['value']});
+ metadata);
call.on('metadata', function(metadata) {
- assert(_.startsWith(metadata['user-agent'], 'grpc-node/' + version));
+ assert(_.startsWith(metadata.get('user-agent')[0],
+ 'grpc-node/' + version));
done();
});
});
@@ -372,13 +376,15 @@ describe('Other conditions', function() {
var test_proto = ProtoBuf.loadProtoFile(__dirname + '/test_service.proto');
test_service = test_proto.lookup('TestService');
server = new grpc.Server();
+ var trailer_metadata = new grpc.Metadata();
+ trailer_metadata.add('trailer-present', 'yes');
server.addProtoService(test_service, {
unary: function(call, cb) {
var req = call.request;
if (req.error) {
- cb(new Error('Requested error'), null, {trailer_present: ['yes']});
+ cb(new Error('Requested error'), null, trailer_metadata);
} else {
- cb(null, {count: 1}, {trailer_present: ['yes']});
+ cb(null, {count: 1}, trailer_metadata);
}
},
clientStream: function(stream, cb){
@@ -387,14 +393,14 @@ describe('Other conditions', function() {
stream.on('data', function(data) {
if (data.error) {
errored = true;
- cb(new Error('Requested error'), null, {trailer_present: ['yes']});
+ cb(new Error('Requested error'), null, trailer_metadata);
} else {
count += 1;
}
});
stream.on('end', function() {
if (!errored) {
- cb(null, {count: count}, {trailer_present: ['yes']});
+ cb(null, {count: count}, trailer_metadata);
}
});
},
@@ -402,13 +408,13 @@ describe('Other conditions', function() {
var req = stream.request;
if (req.error) {
var err = new Error('Requested error');
- err.metadata = {trailer_present: ['yes']};
+ err.metadata = trailer_metadata;
stream.emit('error', err);
} else {
for (var i = 0; i < 5; i++) {
stream.write({count: i});
}
- stream.end({trailer_present: ['yes']});
+ stream.end(trailer_metadata);
}
},
bidiStream: function(stream) {
@@ -416,10 +422,8 @@ describe('Other conditions', function() {
stream.on('data', function(data) {
if (data.error) {
var err = new Error('Requested error');
- err.metadata = {
- trailer_present: ['yes'],
- count: ['' + count]
- };
+ err.metadata = trailer_metadata.clone();
+ err.metadata.add('count', '' + count);
stream.emit('error', err);
} else {
stream.write({count: count});
@@ -427,7 +431,7 @@ describe('Other conditions', function() {
}
});
stream.on('end', function() {
- stream.end({trailer_present: ['yes']});
+ stream.end(trailer_metadata);
});
}
});
@@ -437,7 +441,7 @@ describe('Other conditions', function() {
server.start();
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
it('channel.getTarget should be available', function() {
assert.strictEqual(typeof client.$channel.getTarget(), 'string');
@@ -528,7 +532,7 @@ describe('Other conditions', function() {
assert.ifError(err);
});
call.on('status', function(status) {
- assert.deepEqual(status.metadata.trailer_present, ['yes']);
+ assert.deepEqual(status.metadata.get('trailer-present'), ['yes']);
done();
});
});
@@ -537,7 +541,7 @@ describe('Other conditions', function() {
assert(err);
});
call.on('status', function(status) {
- assert.deepEqual(status.metadata.trailer_present, ['yes']);
+ assert.deepEqual(status.metadata.get('trailer-present'), ['yes']);
done();
});
});
@@ -549,7 +553,7 @@ describe('Other conditions', function() {
call.write({error: false});
call.end();
call.on('status', function(status) {
- assert.deepEqual(status.metadata.trailer_present, ['yes']);
+ assert.deepEqual(status.metadata.get('trailer-present'), ['yes']);
done();
});
});
@@ -561,7 +565,7 @@ describe('Other conditions', function() {
call.write({error: true});
call.end();
call.on('status', function(status) {
- assert.deepEqual(status.metadata.trailer_present, ['yes']);
+ assert.deepEqual(status.metadata.get('trailer-present'), ['yes']);
done();
});
});
@@ -570,7 +574,7 @@ describe('Other conditions', function() {
call.on('data', function(){});
call.on('status', function(status) {
assert.strictEqual(status.code, grpc.status.OK);
- assert.deepEqual(status.metadata.trailer_present, ['yes']);
+ assert.deepEqual(status.metadata.get('trailer-present'), ['yes']);
done();
});
});
@@ -578,7 +582,7 @@ describe('Other conditions', function() {
var call = client.serverStream({error: true});
call.on('data', function(){});
call.on('error', function(error) {
- assert.deepEqual(error.metadata.trailer_present, ['yes']);
+ assert.deepEqual(error.metadata.get('trailer-present'), ['yes']);
done();
});
});
@@ -590,7 +594,7 @@ describe('Other conditions', function() {
call.on('data', function(){});
call.on('status', function(status) {
assert.strictEqual(status.code, grpc.status.OK);
- assert.deepEqual(status.metadata.trailer_present, ['yes']);
+ assert.deepEqual(status.metadata.get('trailer-present'), ['yes']);
done();
});
});
@@ -601,7 +605,7 @@ describe('Other conditions', function() {
call.end();
call.on('data', function(){});
call.on('error', function(error) {
- assert.deepEqual(error.metadata.trailer_present, ['yes']);
+ assert.deepEqual(error.metadata.get('trailer-present'), ['yes']);
done();
});
});
@@ -699,7 +703,7 @@ describe('Other conditions', function() {
});
afterEach(function() {
console.log('Shutting down server');
- proxy.shutdown();
+ proxy.forceShutdown();
});
describe('Cancellation', function() {
it('With a unary call', function(done) {
@@ -865,7 +869,7 @@ describe('Cancelling surface client', function() {
server.start();
});
after(function() {
- server.shutdown();
+ server.forceShutdown();
});
it('Should correctly cancel a unary call', function(done) {
var call = client.div({'divisor': 0, 'dividend': 0}, function(err, resp) {
diff --git a/src/objective-c/GRPCClient/private/GRPCSecureChannel.m b/src/objective-c/GRPCClient/private/GRPCSecureChannel.m
index 0a54804bb2..ce16655330 100644
--- a/src/objective-c/GRPCClient/private/GRPCSecureChannel.m
+++ b/src/objective-c/GRPCClient/private/GRPCSecureChannel.m
@@ -49,7 +49,7 @@ static grpc_credentials *CertificatesAtPath(NSString *path, NSError **errorPtr)
// Passing NULL to grpc_ssl_credentials_create produces behavior we don't want, so return.
return NULL;
}
- return grpc_ssl_credentials_create(contentInASCII.bytes, NULL);
+ return grpc_ssl_credentials_create(contentInASCII.bytes, NULL, NULL);
}
@implementation GRPCSecureChannel
@@ -101,8 +101,9 @@ static grpc_credentials *CertificatesAtPath(NSString *path, NSError **errorPtr)
- (instancetype)initWithHost:(NSString *)host
credentials:(grpc_credentials *)credentials
args:(grpc_channel_args *)args {
- return (self =
- [super initWithChannel:grpc_secure_channel_create(credentials, host.UTF8String, args)]);
+ return (self = [super
+ initWithChannel:grpc_secure_channel_create(
+ credentials, host.UTF8String, args, NULL)]);
}
// TODO(jcanizales): GRPCSecureChannel and GRPCUnsecuredChannel are just convenience initializers
diff --git a/src/objective-c/README.md b/src/objective-c/README.md
index e997b76d14..6c27657def 100644
--- a/src/objective-c/README.md
+++ b/src/objective-c/README.md
@@ -30,7 +30,7 @@ proceed.
## Write your API declaration in proto format
For this you can consult the [Protocol Buffers][]' official documentation, or learn from a quick
-example [here](https://github.com/grpc/grpc-common#defining-a-service).
+example [here](https://github.com/grpc/grpc/tree/master/examples#defining-a-service).
<a name="cocoapods"></a>
## Integrate a proto library in your project
diff --git a/src/objective-c/tests/GRPCClientTests.m b/src/objective-c/tests/GRPCClientTests.m
index 06581e7599..09a55e0704 100644
--- a/src/objective-c/tests/GRPCClientTests.m
+++ b/src/objective-c/tests/GRPCClientTests.m
@@ -53,6 +53,37 @@ static ProtoMethod *kInexistentMethod;
static ProtoMethod *kEmptyCallMethod;
static ProtoMethod *kUnaryCallMethod;
+// This is an observer class for testing that responseMetadata is KVO-compliant
+
+@interface PassthroughObserver : NSObject
+
+- (instancetype) initWithCallback:(void (^)(NSString*, id, NSDictionary*))callback;
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change
+ context:(void *)context;
+@end
+
+@implementation PassthroughObserver {
+ void (^_callback)(NSString*, id, NSDictionary*);
+}
+
+- (instancetype)initWithCallback:(void (^)(NSString *, id, NSDictionary *))callback {
+ self = [super init];
+ if (self) {
+ _callback = callback;
+ }
+ return self;
+
+}
+
+- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
+{
+ _callback(keyPath, object, change);
+ [object removeObserver:self forKeyPath:keyPath];
+}
+
+@end
+
@interface GRPCClientTests : XCTestCase
@end
@@ -183,4 +214,35 @@ static ProtoMethod *kUnaryCallMethod;
[self waitForExpectationsWithTimeout:4 handler:nil];
}
+- (void)testResponseMetadataKVO {
+ __weak XCTestExpectation *response = [self expectationWithDescription:@"Empty response received."];
+ __weak XCTestExpectation *completion = [self expectationWithDescription:@"Empty RPC completed."];
+ __weak XCTestExpectation *metadata = [self expectationWithDescription:@"Metadata changed."];
+
+ GRPCCall *call = [[GRPCCall alloc] initWithHost:kHostAddress
+ path:kEmptyCallMethod.HTTPPath
+ requestsWriter:[GRXWriter writerWithValue:[NSData data]]];
+
+ PassthroughObserver *observer = [[PassthroughObserver alloc] initWithCallback:^(NSString *keypath, id object, NSDictionary * change) {
+ if ([keypath isEqual: @"responseHeaders"]) {
+ [metadata fulfill];
+ }
+ }];
+
+ [call addObserver:observer forKeyPath:@"responseHeaders" options:0 context:NULL];
+
+ id<GRXWriteable> responsesWriteable = [[GRXWriteable alloc] initWithValueHandler:^(NSData *value) {
+ XCTAssertNotNil(value, @"nil value received as response.");
+ XCTAssertEqual([value length], 0, @"Non-empty response received: %@", value);
+ [response fulfill];
+ } completionHandler:^(NSError *errorOrNil) {
+ XCTAssertNil(errorOrNil, @"Finished with unexpected error: %@", errorOrNil);
+ [completion fulfill];
+ }];
+
+ [call startWithWriteable:responsesWriteable];
+
+ [self waitForExpectationsWithTimeout:8 handler:nil];
+}
+
@end
diff --git a/src/objective-c/tests/LocalClearTextTests.m b/src/objective-c/tests/LocalClearTextTests.m
index 4317614dd9..d01fe91afa 100644
--- a/src/objective-c/tests/LocalClearTextTests.m
+++ b/src/objective-c/tests/LocalClearTextTests.m
@@ -42,7 +42,7 @@
#import <RxLibrary/GRXWriter+Immediate.h>
// These tests require a gRPC "RouteGuide" sample server to be running locally. You can compile and
-// run one by following the instructions here: https://github.com/grpc/grpc-common/blob/master/cpp/cpptutorial.md#try-it-out
+// run one by following the instructions here: https://github.com/grpc/grpc/blob/master/examples/cpp/cpptutorial.md#try-it-out
// Be sure to have the C gRPC library installed in your system (for example, by having followed the
// instructions at https://github.com/grpc/homebrew-grpc
diff --git a/src/php/ext/grpc/channel.c b/src/php/ext/grpc/channel.c
index 7a981675de..a4313b6bd4 100644
--- a/src/php/ext/grpc/channel.c
+++ b/src/php/ext/grpc/channel.c
@@ -169,7 +169,7 @@ PHP_METHOD(Channel, __construct) {
} else {
gpr_log(GPR_DEBUG, "Initialized secure channel");
channel->wrapped =
- grpc_secure_channel_create(creds->wrapped, target, &args);
+ grpc_secure_channel_create(creds->wrapped, target, &args, NULL);
}
efree(args.args);
}
diff --git a/src/php/ext/grpc/credentials.c b/src/php/ext/grpc/credentials.c
index 01cb94e3aa..0eba6608bb 100644
--- a/src/php/ext/grpc/credentials.c
+++ b/src/php/ext/grpc/credentials.c
@@ -130,7 +130,7 @@ PHP_METHOD(Credentials, createSsl) {
}
grpc_credentials *creds = grpc_ssl_credentials_create(
pem_root_certs,
- pem_key_cert_pair.private_key == NULL ? NULL : &pem_key_cert_pair);
+ pem_key_cert_pair.private_key == NULL ? NULL : &pem_key_cert_pair, NULL);
zval *creds_object = grpc_php_wrap_credentials(creds);
RETURN_DESTROY_ZVAL(creds_object);
}
@@ -160,7 +160,7 @@ PHP_METHOD(Credentials, createComposite) {
(wrapped_grpc_credentials *)zend_object_store_get_object(
cred2_obj TSRMLS_CC);
grpc_credentials *creds =
- grpc_composite_credentials_create(cred1->wrapped, cred2->wrapped);
+ grpc_composite_credentials_create(cred1->wrapped, cred2->wrapped, NULL);
zval *creds_object = grpc_php_wrap_credentials(creds);
RETURN_DESTROY_ZVAL(creds_object);
}
@@ -170,7 +170,7 @@ PHP_METHOD(Credentials, createComposite) {
* @return Credentials The new GCE credentials object
*/
PHP_METHOD(Credentials, createGce) {
- grpc_credentials *creds = grpc_compute_engine_credentials_create();
+ grpc_credentials *creds = grpc_compute_engine_credentials_create(NULL);
zval *creds_object = grpc_php_wrap_credentials(creds);
RETURN_DESTROY_ZVAL(creds_object);
}
diff --git a/src/php/ext/grpc/server_credentials.c b/src/php/ext/grpc/server_credentials.c
index e9183c4598..79188246bc 100644
--- a/src/php/ext/grpc/server_credentials.c
+++ b/src/php/ext/grpc/server_credentials.c
@@ -118,7 +118,7 @@ PHP_METHOD(ServerCredentials, createSsl) {
/* TODO: add a force_client_auth field in ServerCredentials and pass it as
* the last parameter. */
grpc_server_credentials *creds = grpc_ssl_server_credentials_create(
- pem_root_certs, &pem_key_cert_pair, 1, 0);
+ pem_root_certs, &pem_key_cert_pair, 1, 0, NULL);
zval *creds_object = grpc_php_wrap_server_credentials(creds);
RETURN_DESTROY_ZVAL(creds_object);
}
diff --git a/src/php/tests/generated_code/AbstractGeneratedCodeTest.php b/src/php/tests/generated_code/AbstractGeneratedCodeTest.php
index 287621d930..a368dd4ee0 100644
--- a/src/php/tests/generated_code/AbstractGeneratedCodeTest.php
+++ b/src/php/tests/generated_code/AbstractGeneratedCodeTest.php
@@ -47,6 +47,10 @@ abstract class AbstractGeneratedCodeTest extends PHPUnit_Framework_TestCase {
$this->assertTrue(self::$client->waitForReady(250000));
}
+ public function testGetTarget() {
+ $this->assertTrue(is_string(self::$client->getTarget()));
+ }
+
public function testSimpleRequest() {
$div_arg = new math\DivArgs();
$div_arg->setDividend(7);
diff --git a/src/php/tests/interop/interop_client.php b/src/php/tests/interop/interop_client.php
index 376d306da0..bd15ee4303 100755
--- a/src/php/tests/interop/interop_client.php
+++ b/src/php/tests/interop/interop_client.php
@@ -332,11 +332,7 @@ if (in_array($args['test_case'], array(
$opts['update_metadata'] = $auth->getUpdateMetadataFunc();
}
-$internal_stub = new Grpc\BaseStub($server_address, $opts);
-hardAssert(is_string($internal_stub->getTarget()),
- 'Unexpected target URI value');
-
-$stub = new grpc\testing\TestServiceClient($internal_stub);
+$stub = new grpc\testing\TestServiceClient($server_address, $opts);
echo "Connecting to $server_address\n";
echo "Running test case $args[test_case]\n";
@@ -372,6 +368,11 @@ switch ($args['test_case']) {
case 'jwt_token_creds':
jwtTokenCreds($stub, $args);
break;
+ case 'cancel_after_begin':
+ // Currently unimplementable with the current API design
+ // Specifically, in the ClientStreamingCall->start() method, the
+ // messages are sent immediately after metadata is sent. There is
+ // currently no way to cancel before messages are sent.
default:
exit(1);
}
diff --git a/src/python/README.md b/src/python/README.md
index de0142db05..affce64884 100644
--- a/src/python/README.md
+++ b/src/python/README.md
@@ -52,9 +52,19 @@ BUILDING FROM SOURCE
---------------------
- Clone this repository
+- Initialize the git submodules
+```
+$ git submodule update --init
+```
+
+- Make the libraries
+```
+$ make
+```
+
- Use build_python.sh to build the Python code and install it into a virtual environment
```
-$ tools/run_tests/build_python.sh
+$ CONFIG=opt tools/run_tests/build_python.sh 2.7
```
TESTING
@@ -62,7 +72,7 @@ TESTING
- Use run_python.sh to run gRPC as it was installed into the virtual environment
```
-$ tools/run_tests/run_python.sh
+$ CONFIG=opt PYVER=2.7 tools/run_tests/run_python.sh
```
PACKAGING
diff --git a/src/python/grpcio/grpc/_adapter/_c/types.h b/src/python/grpcio/grpc/_adapter/_c/types.h
index f646465c63..f6ff957baa 100644
--- a/src/python/grpcio/grpc/_adapter/_c/types.h
+++ b/src/python/grpcio/grpc/_adapter/_c/types.h
@@ -146,6 +146,7 @@ typedef struct Server {
PyObject_HEAD
grpc_server *c_serv;
CompletionQueue *cq;
+ int shutdown_called;
} Server;
Server *pygrpc_Server_new(PyTypeObject *type, PyObject *args, PyObject *kwargs);
void pygrpc_Server_dealloc(Server *self);
@@ -156,6 +157,7 @@ PyObject *pygrpc_Server_add_http2_port(
PyObject *pygrpc_Server_start(Server *self, PyObject *ignored);
PyObject *pygrpc_Server_shutdown(
Server *self, PyObject *args, PyObject *kwargs);
+PyObject *pygrpc_Server_cancel_all_calls(Server *self, PyObject *unused);
extern PyTypeObject pygrpc_Server_type;
/*=========*/
diff --git a/src/python/grpcio/grpc/_adapter/_c/types/channel.c b/src/python/grpcio/grpc/_adapter/_c/types/channel.c
index c577ac05eb..79d39c4391 100644
--- a/src/python/grpcio/grpc/_adapter/_c/types/channel.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types/channel.c
@@ -106,7 +106,8 @@ Channel *pygrpc_Channel_new(
}
self = (Channel *)type->tp_alloc(type, 0);
if (creds) {
- self->c_chan = grpc_secure_channel_create(creds->c_creds, target, &c_args);
+ self->c_chan =
+ grpc_secure_channel_create(creds->c_creds, target, &c_args, NULL);
} else {
self->c_chan = grpc_insecure_channel_create(target, &c_args, NULL);
}
@@ -164,7 +165,7 @@ PyObject *pygrpc_Channel_watch_connectivity_state(
int last_observed_state;
CompletionQueue *completion_queue;
char *keywords[] = {"last_observed_state", "deadline",
- "completion_queue", "tag"};
+ "completion_queue", "tag", NULL};
if (!PyArg_ParseTupleAndKeywords(
args, kwargs, "idO!O:watch_connectivity_state", keywords,
&last_observed_state, &deadline, &pygrpc_CompletionQueue_type,
diff --git a/src/python/grpcio/grpc/_adapter/_c/types/client_credentials.c b/src/python/grpcio/grpc/_adapter/_c/types/client_credentials.c
index e314c15324..36fd207464 100644
--- a/src/python/grpcio/grpc/_adapter/_c/types/client_credentials.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types/client_credentials.c
@@ -135,9 +135,10 @@ ClientCredentials *pygrpc_ClientCredentials_ssl(
if (private_key && cert_chain) {
key_cert_pair.private_key = private_key;
key_cert_pair.cert_chain = cert_chain;
- self->c_creds = grpc_ssl_credentials_create(root_certs, &key_cert_pair);
+ self->c_creds =
+ grpc_ssl_credentials_create(root_certs, &key_cert_pair, NULL);
} else {
- self->c_creds = grpc_ssl_credentials_create(root_certs, NULL);
+ self->c_creds = grpc_ssl_credentials_create(root_certs, NULL, NULL);
}
if (!self->c_creds) {
Py_DECREF(self);
@@ -159,8 +160,8 @@ ClientCredentials *pygrpc_ClientCredentials_composite(
return NULL;
}
self = (ClientCredentials *)type->tp_alloc(type, 0);
- self->c_creds = grpc_composite_credentials_create(
- creds1->c_creds, creds2->c_creds);
+ self->c_creds =
+ grpc_composite_credentials_create(creds1->c_creds, creds2->c_creds, NULL);
if (!self->c_creds) {
Py_DECREF(self);
PyErr_SetString(PyExc_RuntimeError, "couldn't create composite credentials");
@@ -172,7 +173,7 @@ ClientCredentials *pygrpc_ClientCredentials_composite(
ClientCredentials *pygrpc_ClientCredentials_compute_engine(
PyTypeObject *type, PyObject *ignored) {
ClientCredentials *self = (ClientCredentials *)type->tp_alloc(type, 0);
- self->c_creds = grpc_compute_engine_credentials_create();
+ self->c_creds = grpc_compute_engine_credentials_create(NULL);
if (!self->c_creds) {
Py_DECREF(self);
PyErr_SetString(PyExc_RuntimeError,
@@ -195,7 +196,7 @@ ClientCredentials *pygrpc_ClientCredentials_service_account(
}
self = (ClientCredentials *)type->tp_alloc(type, 0);
self->c_creds = grpc_service_account_credentials_create(
- json_key, scope, pygrpc_cast_double_to_gpr_timespec(lifetime));
+ json_key, scope, pygrpc_cast_double_to_gpr_timespec(lifetime), NULL);
if (!self->c_creds) {
Py_DECREF(self);
PyErr_SetString(PyExc_RuntimeError,
@@ -218,7 +219,7 @@ ClientCredentials *pygrpc_ClientCredentials_jwt(
}
self = (ClientCredentials *)type->tp_alloc(type, 0);
self->c_creds = grpc_service_account_jwt_access_credentials_create(
- json_key, pygrpc_cast_double_to_gpr_timespec(lifetime));
+ json_key, pygrpc_cast_double_to_gpr_timespec(lifetime), NULL);
if (!self->c_creds) {
Py_DECREF(self);
PyErr_SetString(PyExc_RuntimeError, "couldn't create JWT credentials");
@@ -237,7 +238,8 @@ ClientCredentials *pygrpc_ClientCredentials_refresh_token(
return NULL;
}
self = (ClientCredentials *)type->tp_alloc(type, 0);
- self->c_creds = grpc_refresh_token_credentials_create(json_refresh_token);
+ self->c_creds =
+ grpc_refresh_token_credentials_create(json_refresh_token, NULL);
if (!self->c_creds) {
Py_DECREF(self);
PyErr_SetString(PyExc_RuntimeError,
@@ -259,7 +261,7 @@ ClientCredentials *pygrpc_ClientCredentials_iam(
}
self = (ClientCredentials *)type->tp_alloc(type, 0);
self->c_creds = grpc_iam_credentials_create(authorization_token,
- authority_selector);
+ authority_selector, NULL);
if (!self->c_creds) {
Py_DECREF(self);
PyErr_SetString(PyExc_RuntimeError, "couldn't create IAM credentials");
diff --git a/src/python/grpcio/grpc/_adapter/_c/types/server.c b/src/python/grpcio/grpc/_adapter/_c/types/server.c
index 15c98f28eb..8feab8aab1 100644
--- a/src/python/grpcio/grpc/_adapter/_c/types/server.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types/server.c
@@ -45,6 +45,8 @@ PyMethodDef pygrpc_Server_methods[] = {
METH_KEYWORDS, ""},
{"start", (PyCFunction)pygrpc_Server_start, METH_NOARGS, ""},
{"shutdown", (PyCFunction)pygrpc_Server_shutdown, METH_KEYWORDS, ""},
+ {"cancel_all_calls", (PyCFunction)pygrpc_Server_cancel_all_calls,
+ METH_NOARGS, ""},
{NULL}
};
const char pygrpc_Server_doc[] = "See grpc._adapter._types.Server.";
@@ -109,6 +111,7 @@ Server *pygrpc_Server_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
pygrpc_discard_channel_args(c_args);
self->cq = cq;
Py_INCREF(self->cq);
+ self->shutdown_called = 0;
return self;
}
@@ -163,6 +166,7 @@ PyObject *pygrpc_Server_add_http2_port(
PyObject *pygrpc_Server_start(Server *self, PyObject *ignored) {
grpc_server_start(self->c_serv);
+ self->shutdown_called = 0;
Py_RETURN_NONE;
}
@@ -176,5 +180,17 @@ PyObject *pygrpc_Server_shutdown(
}
tag = pygrpc_produce_server_shutdown_tag(user_tag);
grpc_server_shutdown_and_notify(self->c_serv, self->cq->c_cq, tag);
+ self->shutdown_called = 1;
+ Py_RETURN_NONE;
+}
+
+PyObject *pygrpc_Server_cancel_all_calls(Server *self, PyObject *unused) {
+ if (!self->shutdown_called) {
+ PyErr_SetString(
+ PyExc_RuntimeError,
+ "shutdown must have been called prior to calling cancel_all_calls!");
+ return NULL;
+ }
+ grpc_server_cancel_all_calls(self->c_serv);
Py_RETURN_NONE;
}
diff --git a/src/python/grpcio/grpc/_adapter/_c/types/server_credentials.c b/src/python/grpcio/grpc/_adapter/_c/types/server_credentials.c
index f6859b79d7..df51a99b6a 100644
--- a/src/python/grpcio/grpc/_adapter/_c/types/server_credentials.c
+++ b/src/python/grpcio/grpc/_adapter/_c/types/server_credentials.c
@@ -99,11 +99,13 @@ ServerCredentials *pygrpc_ServerCredentials_ssl(
const char *root_certs;
PyObject *py_key_cert_pairs;
grpc_ssl_pem_key_cert_pair *key_cert_pairs;
+ int force_client_auth;
size_t num_key_cert_pairs;
size_t i;
- static char *keywords[] = {"root_certs", "key_cert_pairs", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwargs, "zO:ssl", keywords,
- &root_certs, &py_key_cert_pairs)) {
+ static char *keywords[] = {
+ "root_certs", "key_cert_pairs", "force_client_auth", NULL};
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "zOi:ssl", keywords,
+ &root_certs, &py_key_cert_pairs, &force_client_auth)) {
return NULL;
}
if (!PyList_Check(py_key_cert_pairs)) {
@@ -128,11 +130,8 @@ ServerCredentials *pygrpc_ServerCredentials_ssl(
}
self = (ServerCredentials *)type->tp_alloc(type, 0);
- /* TODO: Add a force_client_auth parameter in the python object and pass it
- here as the last arg. */
self->c_creds = grpc_ssl_server_credentials_create(
- root_certs, key_cert_pairs, num_key_cert_pairs, 0);
+ root_certs, key_cert_pairs, num_key_cert_pairs, force_client_auth, NULL);
gpr_free(key_cert_pairs);
return self;
}
-
diff --git a/src/python/grpcio/grpc/_adapter/_intermediary_low.py b/src/python/grpcio/grpc/_adapter/_intermediary_low.py
index e7bf9dc462..06358e72bc 100644
--- a/src/python/grpcio/grpc/_adapter/_intermediary_low.py
+++ b/src/python/grpcio/grpc/_adapter/_intermediary_low.py
@@ -255,5 +255,6 @@ class ClientCredentials(object):
class ServerCredentials(object):
"""Adapter from old _low.ServerCredentials interface to new _low.ServerCredentials."""
- def __init__(self, root_credentials, pair_sequence):
- self._internal = _low.ServerCredentials.ssl(root_credentials, list(pair_sequence))
+ def __init__(self, root_credentials, pair_sequence, force_client_auth):
+ self._internal = _low.ServerCredentials.ssl(
+ root_credentials, list(pair_sequence), force_client_auth)
diff --git a/src/python/grpcio/grpc/_adapter/_low.py b/src/python/grpcio/grpc/_adapter/_low.py
index 147086e725..3859ebb0e2 100644
--- a/src/python/grpcio/grpc/_adapter/_low.py
+++ b/src/python/grpcio/grpc/_adapter/_low.py
@@ -124,3 +124,6 @@ class Server(_types.Server):
def request_call(self, completion_queue, tag):
return self.server.request_call(completion_queue.completion_queue, tag)
+
+ def cancel_all_calls(self):
+ return self.server.cancel_all_calls()
diff --git a/src/python/grpcio/grpc/_adapter/fore.py b/src/python/grpcio/grpc/_adapter/fore.py
index 7d88bda263..daa41e8bde 100644
--- a/src/python/grpcio/grpc/_adapter/fore.py
+++ b/src/python/grpcio/grpc/_adapter/fore.py
@@ -288,7 +288,7 @@ class ForeLink(base_interfaces.ForeLink, activated.Activated):
self._port = self._server.add_http2_addr(address)
else:
server_credentials = _low.ServerCredentials(
- self._root_certificates, self._key_chain_pairs)
+ self._root_certificates, self._key_chain_pairs, False)
self._server = _low.Server(self._completion_queue)
self._port = self._server.add_secure_http2_addr(
address, server_credentials)
diff --git a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxd b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxd
index d065383587..c793774c8d 100644
--- a/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxd
+++ b/src/python/grpcio/grpc/_cython/_cygrpc/grpc.pxd
@@ -332,7 +332,7 @@ cdef extern from "grpc/grpc_security.h":
grpc_server_credentials *grpc_ssl_server_credentials_create(
const char *pem_root_certs,
grpc_ssl_pem_key_cert_pair *pem_key_cert_pairs,
- size_t num_key_cert_pairs);
+ size_t num_key_cert_pairs)
void grpc_server_credentials_release(grpc_server_credentials *creds)
int grpc_server_add_secure_http2_port(grpc_server *server, const char *addr,
diff --git a/src/python/grpcio/grpc/_links/invocation.py b/src/python/grpcio/grpc/_links/invocation.py
index 0058ae91f8..ee3d72fdbc 100644
--- a/src/python/grpcio/grpc/_links/invocation.py
+++ b/src/python/grpcio/grpc/_links/invocation.py
@@ -101,7 +101,7 @@ class _Kernel(object):
else:
ticket = links.Ticket(
operation_id, rpc_state.sequence_number, None, None, None, None, 1,
- None, None, None, None, None, None)
+ None, None, None, None, None, None, None)
rpc_state.sequence_number += 1
self._relay.add_value(ticket)
rpc_state.low_write = _LowWrite.OPEN
@@ -118,7 +118,7 @@ class _Kernel(object):
ticket = links.Ticket(
operation_id, rpc_state.sequence_number, None, None, None, None, None,
None, rpc_state.response_deserializer(event.bytes), None, None, None,
- None)
+ None, None)
rpc_state.sequence_number += 1
self._relay.add_value(ticket)
@@ -129,7 +129,7 @@ class _Kernel(object):
ticket = links.Ticket(
operation_id, rpc_state.sequence_number, None, None,
links.Ticket.Subscription.FULL, None, None, event.metadata, None, None,
- None, None, None)
+ None, None, None, None)
rpc_state.sequence_number += 1
self._relay.add_value(ticket)
@@ -141,12 +141,14 @@ class _Kernel(object):
termination = links.Ticket.Termination.CANCELLATION
elif event.status.code is _intermediary_low.Code.DEADLINE_EXCEEDED:
termination = links.Ticket.Termination.EXPIRATION
+ elif event.status.code is _intermediary_low.Code.UNKNOWN:
+ termination = links.Ticket.Termination.LOCAL_FAILURE
else:
termination = links.Ticket.Termination.TRANSMISSION_FAILURE
ticket = links.Ticket(
operation_id, rpc_state.sequence_number, None, None, None, None, None,
None, None, event.metadata, event.status.code, event.status.details,
- termination)
+ termination, None)
rpc_state.sequence_number += 1
self._relay.add_value(ticket)
@@ -349,7 +351,7 @@ def invocation_link(channel, host, request_serializers, response_deserializers):
"""Creates an InvocationLink.
Args:
- channel: A channel for use by the link.
+ channel: An _intermediary_low.Channel for use by the link.
host: The host to specify when invoking RPCs.
request_serializers: A dict from group-method pair to request object
serialization behavior.
diff --git a/src/python/grpcio/grpc/_links/service.py b/src/python/grpcio/grpc/_links/service.py
index 5c636d61ab..10634e43b5 100644
--- a/src/python/grpcio/grpc/_links/service.py
+++ b/src/python/grpcio/grpc/_links/service.py
@@ -40,6 +40,19 @@ from grpc.framework.foundation import logging_pool
from grpc.framework.foundation import relay
from grpc.framework.interfaces.links import links
+_TERMINATION_KIND_TO_CODE = {
+ links.Ticket.Termination.COMPLETION: _intermediary_low.Code.OK,
+ links.Ticket.Termination.CANCELLATION: _intermediary_low.Code.CANCELLED,
+ links.Ticket.Termination.EXPIRATION:
+ _intermediary_low.Code.DEADLINE_EXCEEDED,
+ links.Ticket.Termination.SHUTDOWN: _intermediary_low.Code.UNAVAILABLE,
+ links.Ticket.Termination.RECEPTION_FAILURE: _intermediary_low.Code.INTERNAL,
+ links.Ticket.Termination.TRANSMISSION_FAILURE:
+ _intermediary_low.Code.INTERNAL,
+ links.Ticket.Termination.LOCAL_FAILURE: _intermediary_low.Code.UNKNOWN,
+ links.Ticket.Termination.REMOTE_FAILURE: _intermediary_low.Code.UNKNOWN,
+}
+
@enum.unique
class _Read(enum.Enum):
@@ -93,6 +106,15 @@ def _metadatafy(call, metadata):
call.add_metadata(metadata_key, metadata_value)
+def _status(termination_kind, code, details):
+ effective_details = b'' if details is None else details
+ if code is None:
+ effective_code = _TERMINATION_KIND_TO_CODE[termination_kind]
+ else:
+ effective_code = code
+ return _intermediary_low.Status(effective_code, effective_details)
+
+
class _Kernel(object):
def __init__(self, request_deserializers, response_serializers, ticket_relay):
@@ -131,7 +153,7 @@ class _Kernel(object):
ticket = links.Ticket(
call, 0, group, method, links.Ticket.Subscription.FULL,
service_acceptance.deadline - time.time(), None, event.metadata, None,
- None, None, None, None)
+ None, None, None, None, 'TODO: Service Context Object!')
self._relay.add_value(ticket)
def _on_read_event(self, event):
@@ -157,7 +179,7 @@ class _Kernel(object):
# rpc_state.read = _Read.AWAITING_ALLOWANCE
ticket = links.Ticket(
call, rpc_state.sequence_number, None, None, None, None, None, None,
- payload, None, None, None, termination)
+ payload, None, None, None, termination, None)
rpc_state.sequence_number += 1
self._relay.add_value(ticket)
@@ -170,13 +192,15 @@ class _Kernel(object):
if rpc_state.high_write is _HighWrite.CLOSED:
if rpc_state.terminal_metadata is not None:
_metadatafy(call, rpc_state.terminal_metadata)
- call.status(
- _intermediary_low.Status(rpc_state.code, rpc_state.message), call)
+ status = _status(
+ links.Ticket.Termination.COMPLETION, rpc_state.code,
+ rpc_state.message)
+ call.status(status, call)
rpc_state.low_write = _LowWrite.CLOSED
else:
ticket = links.Ticket(
call, rpc_state.sequence_number, None, None, None, None, 1, None,
- None, None, None, None, None)
+ None, None, None, None, None, None)
rpc_state.sequence_number += 1
self._relay.add_value(ticket)
rpc_state.low_write = _LowWrite.OPEN
@@ -198,7 +222,7 @@ class _Kernel(object):
termination = links.Ticket.Termination.TRANSMISSION_FAILURE
ticket = links.Ticket(
call, rpc_state.sequence_number, None, None, None, None, None, None,
- None, None, None, None, termination)
+ None, None, None, None, termination, None)
rpc_state.sequence_number += 1
self._relay.add_value(ticket)
@@ -239,7 +263,7 @@ class _Kernel(object):
elif not rpc_state.premetadataed:
if (ticket.terminal_metadata is not None or
ticket.payload is not None or
- ticket.termination is links.Ticket.Termination.COMPLETION or
+ ticket.termination is not None or
ticket.code is not None or
ticket.message is not None):
call.premetadata()
@@ -257,11 +281,11 @@ class _Kernel(object):
termination = None
else:
termination = links.Ticket.Termination.COMPLETION
- ticket = links.Ticket(
+ early_read_ticket = links.Ticket(
call, rpc_state.sequence_number, None, None, None, None, None,
- None, payload, None, None, None, termination)
+ None, payload, None, None, None, termination, None)
rpc_state.sequence_number += 1
- self._relay.add_value(ticket)
+ self._relay.add_value(early_read_ticket)
if ticket.payload is not None:
call.write(rpc_state.response_serializer(ticket.payload), call)
@@ -279,14 +303,17 @@ class _Kernel(object):
if rpc_state.low_write is _LowWrite.OPEN:
if rpc_state.terminal_metadata is not None:
_metadatafy(call, rpc_state.terminal_metadata)
- status = _intermediary_low.Status(
- _intermediary_low.Code.OK
- if rpc_state.code is None else rpc_state.code,
- '' if rpc_state.message is None else rpc_state.message)
+ status = _status(
+ links.Ticket.Termination.COMPLETION, rpc_state.code,
+ rpc_state.message)
call.status(status, call)
rpc_state.low_write = _LowWrite.CLOSED
elif ticket.termination is not None:
- call.cancel()
+ if rpc_state.terminal_metadata is not None:
+ _metadatafy(call, rpc_state.terminal_metadata)
+ status = _status(
+ ticket.termination, rpc_state.code, rpc_state.message)
+ call.status(status, call)
self._rpc_states.pop(call, None)
def add_port(self, port, server_credentials):
@@ -339,10 +366,10 @@ class ServiceLink(links.Link):
"""Adds a port on which to service RPCs after this link has been started.
Args:
- port: The port on which to service RPCs, or zero to request that a port be
- automatically selected and used.
- server_credentials: A ServerCredentials object, or None for insecure
- service.
+ port: The port on which to service RPCs, or zero to request that a port
+ be automatically selected and used.
+ server_credentials: An _intermediary_low.ServerCredentials object, or
+ None for insecure service.
Returns:
A port on which RPCs will be serviced after this link has been started.
diff --git a/src/python/grpcio/grpc/beta/__init__.py b/src/python/grpcio/grpc/beta/__init__.py
new file mode 100644
index 0000000000..b89398809f
--- /dev/null
+++ b/src/python/grpcio/grpc/beta/__init__.py
@@ -0,0 +1,28 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/src/python/grpcio/grpc/beta/_connectivity_channel.py b/src/python/grpcio/grpc/beta/_connectivity_channel.py
new file mode 100644
index 0000000000..457ede79f2
--- /dev/null
+++ b/src/python/grpcio/grpc/beta/_connectivity_channel.py
@@ -0,0 +1,148 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Affords a connectivity-state-listenable channel."""
+
+import threading
+import time
+
+from grpc._adapter import _low
+from grpc.framework.foundation import callable_util
+
+_CHANNEL_SUBSCRIPTION_CALLBACK_ERROR_LOG_MESSAGE = (
+ 'Exception calling channel subscription callback!')
+
+
+class ConnectivityChannel(object):
+
+ def __init__(self, low_channel, mapping):
+ self._lock = threading.Lock()
+ self._low_channel = low_channel
+ self._mapping = mapping
+
+ self._polling = False
+ self._connectivity = None
+ self._try_to_connect = False
+ self._callbacks_and_connectivities = []
+ self._delivering = False
+
+ def _deliveries(self, connectivity):
+ callbacks_needing_update = []
+ for callback_and_connectivity in self._callbacks_and_connectivities:
+ callback, callback_connectivity = callback_and_connectivity
+ if callback_connectivity is not connectivity:
+ callbacks_needing_update.append(callback)
+ callback_and_connectivity[1] = connectivity
+ return callbacks_needing_update
+
+ def _deliver(self, initial_connectivity, initial_callbacks):
+ connectivity = initial_connectivity
+ callbacks = initial_callbacks
+ while True:
+ for callback in callbacks:
+ callable_util.call_logging_exceptions(
+ callback, _CHANNEL_SUBSCRIPTION_CALLBACK_ERROR_LOG_MESSAGE,
+ connectivity)
+ with self._lock:
+ callbacks = self._deliveries(self._connectivity)
+ if callbacks:
+ connectivity = self._connectivity
+ else:
+ self._delivering = False
+ return
+
+ def _spawn_delivery(self, connectivity, callbacks):
+ delivering_thread = threading.Thread(
+ target=self._deliver, args=(connectivity, callbacks,))
+ delivering_thread.start()
+ self._delivering = True
+
+ # TODO(issue 3064): Don't poll.
+ def _poll_connectivity(self, low_channel, initial_try_to_connect):
+ try_to_connect = initial_try_to_connect
+ low_connectivity = low_channel.check_connectivity_state(try_to_connect)
+ with self._lock:
+ self._connectivity = self._mapping[low_connectivity]
+ callbacks = tuple(
+ callback for callback, unused_but_known_to_be_none_connectivity
+ in self._callbacks_and_connectivities)
+ for callback_and_connectivity in self._callbacks_and_connectivities:
+ callback_and_connectivity[1] = self._connectivity
+ if callbacks:
+ self._spawn_delivery(self._connectivity, callbacks)
+ completion_queue = _low.CompletionQueue()
+ while True:
+ low_channel.watch_connectivity_state(
+ low_connectivity, time.time() + 0.2, completion_queue, None)
+ event = completion_queue.next()
+ with self._lock:
+ if not self._callbacks_and_connectivities and not self._try_to_connect:
+ self._polling = False
+ self._connectivity = None
+ completion_queue.shutdown()
+ break
+ try_to_connect = self._try_to_connect
+ self._try_to_connect = False
+ if event.success or try_to_connect:
+ low_connectivity = low_channel.check_connectivity_state(try_to_connect)
+ with self._lock:
+ self._connectivity = self._mapping[low_connectivity]
+ if not self._delivering:
+ callbacks = self._deliveries(self._connectivity)
+ if callbacks:
+ self._spawn_delivery(self._connectivity, callbacks)
+
+ def subscribe(self, callback, try_to_connect):
+ with self._lock:
+ if not self._callbacks_and_connectivities and not self._polling:
+ polling_thread = threading.Thread(
+ target=self._poll_connectivity,
+ args=(self._low_channel, bool(try_to_connect)))
+ polling_thread.start()
+ self._polling = True
+ self._callbacks_and_connectivities.append([callback, None])
+ elif not self._delivering and self._connectivity is not None:
+ self._spawn_delivery(self._connectivity, (callback,))
+ self._try_to_connect |= bool(try_to_connect)
+ self._callbacks_and_connectivities.append(
+ [callback, self._connectivity])
+ else:
+ self._try_to_connect |= bool(try_to_connect)
+ self._callbacks_and_connectivities.append([callback, None])
+
+ def unsubscribe(self, callback):
+ with self._lock:
+ for index, (subscribed_callback, unused_connectivity) in enumerate(
+ self._callbacks_and_connectivities):
+ if callback == subscribed_callback:
+ self._callbacks_and_connectivities.pop(index)
+ break
+
+ def low_channel(self):
+ return self._low_channel
diff --git a/src/python/grpcio/grpc/beta/beta.py b/src/python/grpcio/grpc/beta/beta.py
new file mode 100644
index 0000000000..40cad5e486
--- /dev/null
+++ b/src/python/grpcio/grpc/beta/beta.py
@@ -0,0 +1,114 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Entry points into gRPC Python Beta."""
+
+import enum
+
+from grpc._adapter import _low
+from grpc._adapter import _types
+from grpc.beta import _connectivity_channel
+
+_CHANNEL_SUBSCRIPTION_CALLBACK_ERROR_LOG_MESSAGE = (
+ 'Exception calling channel subscription callback!')
+
+
+@enum.unique
+class ChannelConnectivity(enum.Enum):
+ """Mirrors grpc_connectivity_state in the gRPC Core.
+
+ Attributes:
+ IDLE: The channel is idle.
+ CONNECTING: The channel is connecting.
+ READY: The channel is ready to conduct RPCs.
+ TRANSIENT_FAILURE: The channel has seen a failure from which it expects to
+ recover.
+ FATAL_FAILURE: The channel has seen a failure from which it cannot recover.
+ """
+
+ IDLE = (_types.ConnectivityState.IDLE, 'idle',)
+ CONNECTING = (_types.ConnectivityState.CONNECTING, 'connecting',)
+ READY = (_types.ConnectivityState.READY, 'ready',)
+ TRANSIENT_FAILURE = (
+ _types.ConnectivityState.TRANSIENT_FAILURE, 'transient failure',)
+ FATAL_FAILURE = (_types.ConnectivityState.FATAL_FAILURE, 'fatal failure',)
+
+_LOW_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY = {
+ state: connectivity for state, connectivity in zip(
+ _types.ConnectivityState, ChannelConnectivity)
+}
+
+
+class Channel(object):
+ """A channel to a remote host through which RPCs may be conducted.
+
+ Only the "subscribe" and "unsubscribe" methods are supported for application
+ use. This class' instance constructor and all other attributes are
+ unsupported.
+ """
+
+ def __init__(self, low_channel):
+ self._connectivity_channel = _connectivity_channel.ConnectivityChannel(
+ low_channel, _LOW_CONNECTIVITY_STATE_TO_CHANNEL_CONNECTIVITY)
+
+ def subscribe(self, callback, try_to_connect=None):
+ """Subscribes to this Channel's connectivity.
+
+ Args:
+ callback: A callable to be invoked and passed this Channel's connectivity.
+ The callable will be invoked immediately upon subscription and again for
+ every change to this Channel's connectivity thereafter until it is
+ unsubscribed.
+ try_to_connect: A boolean indicating whether or not this Channel should
+ attempt to connect if it is not already connected and ready to conduct
+ RPCs.
+ """
+ self._connectivity_channel.subscribe(callback, try_to_connect)
+
+ def unsubscribe(self, callback):
+ """Unsubscribes a callback from this Channel's connectivity.
+
+ Args:
+ callback: A callable previously registered with this Channel from having
+ been passed to its "subscribe" method.
+ """
+ self._connectivity_channel.unsubscribe(callback)
+
+
+def create_insecure_channel(host, port):
+ """Creates an insecure Channel to a remote host.
+
+ Args:
+ host: The name of the remote host to which to connect.
+ port: The port of the remote host to which to connect.
+
+ Returns:
+ A Channel to the remote host through which RPCs may be conducted.
+ """
+ return Channel(_low.Channel('%s:%d' % (host, port), ()))
diff --git a/src/python/grpcio/grpc/beta/utilities.py b/src/python/grpcio/grpc/beta/utilities.py
new file mode 100644
index 0000000000..1b5356e3ad
--- /dev/null
+++ b/src/python/grpcio/grpc/beta/utilities.py
@@ -0,0 +1,161 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Utilities for the gRPC Python Beta API."""
+
+import threading
+import time
+
+from grpc.beta import beta
+from grpc.framework.foundation import callable_util
+from grpc.framework.foundation import future
+
+_DONE_CALLBACK_EXCEPTION_LOG_MESSAGE = (
+ 'Exception calling connectivity future "done" callback!')
+
+
+class _ChannelReadyFuture(future.Future):
+
+ def __init__(self, channel):
+ self._condition = threading.Condition()
+ self._channel = channel
+
+ self._matured = False
+ self._cancelled = False
+ self._done_callbacks = []
+
+ def _block(self, timeout):
+ until = None if timeout is None else time.time() + timeout
+ with self._condition:
+ while True:
+ if self._cancelled:
+ raise future.CancelledError()
+ elif self._matured:
+ return
+ else:
+ if until is None:
+ self._condition.wait()
+ else:
+ remaining = until - time.time()
+ if remaining < 0:
+ raise future.TimeoutError()
+ else:
+ self._condition.wait(timeout=remaining)
+
+ def _update(self, connectivity):
+ with self._condition:
+ if not self._cancelled and connectivity is beta.ChannelConnectivity.READY:
+ self._matured = True
+ self._channel.unsubscribe(self._update)
+ self._condition.notify_all()
+ done_callbacks = tuple(self._done_callbacks)
+ self._done_callbacks = None
+ else:
+ return
+
+ for done_callback in done_callbacks:
+ callable_util.call_logging_exceptions(
+ done_callback, _DONE_CALLBACK_EXCEPTION_LOG_MESSAGE, self)
+
+ def cancel(self):
+ with self._condition:
+ if not self._matured:
+ self._cancelled = True
+ self._channel.unsubscribe(self._update)
+ self._condition.notify_all()
+ done_callbacks = tuple(self._done_callbacks)
+ self._done_callbacks = None
+ else:
+ return False
+
+ for done_callback in done_callbacks:
+ callable_util.call_logging_exceptions(
+ done_callback, _DONE_CALLBACK_EXCEPTION_LOG_MESSAGE, self)
+
+ def cancelled(self):
+ with self._condition:
+ return self._cancelled
+
+ def running(self):
+ with self._condition:
+ return not self._cancelled and not self._matured
+
+ def done(self):
+ with self._condition:
+ return self._cancelled or self._matured
+
+ def result(self, timeout=None):
+ self._block(timeout)
+ return None
+
+ def exception(self, timeout=None):
+ self._block(timeout)
+ return None
+
+ def traceback(self, timeout=None):
+ self._block(timeout)
+ return None
+
+ def add_done_callback(self, fn):
+ with self._condition:
+ if not self._cancelled and not self._matured:
+ self._done_callbacks.append(fn)
+ return
+
+ fn(self)
+
+ def start(self):
+ with self._condition:
+ self._channel.subscribe(self._update, try_to_connect=True)
+
+ def __del__(self):
+ with self._condition:
+ if not self._cancelled and not self._matured:
+ self._channel.unsubscribe(self._update)
+
+
+def channel_ready_future(channel):
+ """Creates a future.Future that matures when a beta.Channel is ready.
+
+ Cancelling the returned future.Future does not tell the given beta.Channel to
+ abandon attempts it may have been making to connect; cancelling merely
+ deactivates the return future.Future's subscription to the given
+ beta.Channel's connectivity.
+
+ Args:
+ channel: A beta.Channel.
+
+ Returns:
+ A future.Future that matures when the given Channel has connectivity
+ beta.ChannelConnectivity.READY.
+ """
+ ready_future = _ChannelReadyFuture(channel)
+ ready_future.start()
+ return ready_future
+
diff --git a/src/python/grpcio/grpc/framework/core/__init__.py b/src/python/grpcio/grpc/framework/core/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/grpcio/grpc/framework/core/_constants.py b/src/python/grpcio/grpc/framework/core/_constants.py
new file mode 100644
index 0000000000..d3be3a4c4a
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_constants.py
@@ -0,0 +1,59 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Private constants for the package."""
+
+from grpc.framework.interfaces.base import base
+from grpc.framework.interfaces.links import links
+
+TICKET_SUBSCRIPTION_FOR_BASE_SUBSCRIPTION_KIND = {
+ base.Subscription.Kind.NONE: links.Ticket.Subscription.NONE,
+ base.Subscription.Kind.TERMINATION_ONLY:
+ links.Ticket.Subscription.TERMINATION,
+ base.Subscription.Kind.FULL: links.Ticket.Subscription.FULL,
+ }
+
+# Mapping from abortive operation outcome to ticket termination to be
+# sent to the other side of the operation, or None to indicate that no
+# ticket should be sent to the other side in the event of such an
+# outcome.
+ABORTION_OUTCOME_TO_TICKET_TERMINATION = {
+ base.Outcome.CANCELLED: links.Ticket.Termination.CANCELLATION,
+ base.Outcome.EXPIRED: links.Ticket.Termination.EXPIRATION,
+ base.Outcome.LOCAL_SHUTDOWN: links.Ticket.Termination.SHUTDOWN,
+ base.Outcome.REMOTE_SHUTDOWN: None,
+ base.Outcome.RECEPTION_FAILURE: links.Ticket.Termination.RECEPTION_FAILURE,
+ base.Outcome.TRANSMISSION_FAILURE: None,
+ base.Outcome.LOCAL_FAILURE: links.Ticket.Termination.LOCAL_FAILURE,
+ base.Outcome.REMOTE_FAILURE: links.Ticket.Termination.REMOTE_FAILURE,
+}
+
+INTERNAL_ERROR_LOG_MESSAGE = ':-( RPC Framework (Core) internal error! )-:'
+TERMINATION_CALLBACK_EXCEPTION_LOG_MESSAGE = (
+ 'Exception calling termination callback!')
diff --git a/src/python/grpcio/grpc/framework/core/_context.py b/src/python/grpcio/grpc/framework/core/_context.py
new file mode 100644
index 0000000000..76b3534530
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_context.py
@@ -0,0 +1,92 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""State and behavior for operation context."""
+
+import time
+
+# _interfaces is referenced from specification in this module.
+from grpc.framework.core import _interfaces # pylint: disable=unused-import
+from grpc.framework.interfaces.base import base
+
+
+class OperationContext(base.OperationContext):
+ """An implementation of interfaces.OperationContext."""
+
+ def __init__(
+ self, lock, termination_manager, transmission_manager,
+ expiration_manager):
+ """Constructor.
+
+ Args:
+ lock: The operation-wide lock.
+ termination_manager: The _interfaces.TerminationManager for the operation.
+ transmission_manager: The _interfaces.TransmissionManager for the
+ operation.
+ expiration_manager: The _interfaces.ExpirationManager for the operation.
+ """
+ self._lock = lock
+ self._termination_manager = termination_manager
+ self._transmission_manager = transmission_manager
+ self._expiration_manager = expiration_manager
+
+ def _abort(self, outcome):
+ with self._lock:
+ if self._termination_manager.outcome is None:
+ self._termination_manager.abort(outcome)
+ self._transmission_manager.abort(outcome, None, None)
+ self._expiration_manager.terminate()
+
+ def outcome(self):
+ """See base.OperationContext.outcome for specification."""
+ with self._lock:
+ return self._termination_manager.outcome
+
+ def add_termination_callback(self, callback):
+ """See base.OperationContext.add_termination_callback."""
+ with self._lock:
+ if self._termination_manager.outcome is None:
+ self._termination_manager.add_callback(callback)
+ return None
+ else:
+ return self._termination_manager.outcome
+
+ def time_remaining(self):
+ """See base.OperationContext.time_remaining for specification."""
+ with self._lock:
+ deadline = self._expiration_manager.deadline()
+ return max(0.0, deadline - time.time())
+
+ def cancel(self):
+ """See base.OperationContext.cancel for specification."""
+ self._abort(base.Outcome.CANCELLED)
+
+ def fail(self, exception):
+ """See base.OperationContext.fail for specification."""
+ self._abort(base.Outcome.LOCAL_FAILURE)
diff --git a/src/python/grpcio/grpc/framework/core/_emission.py b/src/python/grpcio/grpc/framework/core/_emission.py
new file mode 100644
index 0000000000..2d7b2e2f10
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_emission.py
@@ -0,0 +1,98 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""State and behavior for handling emitted values."""
+
+from grpc.framework.core import _interfaces
+from grpc.framework.interfaces.base import base
+
+
+class EmissionManager(_interfaces.EmissionManager):
+ """An EmissionManager implementation."""
+
+ def __init__(
+ self, lock, termination_manager, transmission_manager,
+ expiration_manager):
+ """Constructor.
+
+ Args:
+ lock: The operation-wide lock.
+ termination_manager: The _interfaces.TerminationManager for the operation.
+ transmission_manager: The _interfaces.TransmissionManager for the
+ operation.
+ expiration_manager: The _interfaces.ExpirationManager for the operation.
+ """
+ self._lock = lock
+ self._termination_manager = termination_manager
+ self._transmission_manager = transmission_manager
+ self._expiration_manager = expiration_manager
+ self._ingestion_manager = None
+
+ self._initial_metadata_seen = False
+ self._payload_seen = False
+ self._completion_seen = False
+
+ def set_ingestion_manager(self, ingestion_manager):
+ """Sets the ingestion manager with which this manager will cooperate.
+
+ Args:
+ ingestion_manager: The _interfaces.IngestionManager for the operation.
+ """
+ self._ingestion_manager = ingestion_manager
+
+ def advance(
+ self, initial_metadata=None, payload=None, completion=None,
+ allowance=None):
+ initial_metadata_present = initial_metadata is not None
+ payload_present = payload is not None
+ completion_present = completion is not None
+ allowance_present = allowance is not None
+ with self._lock:
+ if self._termination_manager.outcome is None:
+ if (initial_metadata_present and (
+ self._initial_metadata_seen or self._payload_seen or
+ self._completion_seen) or
+ payload_present and self._completion_seen or
+ completion_present and self._completion_seen or
+ allowance_present and allowance <= 0):
+ self._termination_manager.abort(base.Outcome.LOCAL_FAILURE)
+ self._transmission_manager.abort(
+ base.Outcome.LOCAL_FAILURE, None, None)
+ self._expiration_manager.terminate()
+ else:
+ self._initial_metadata_seen |= initial_metadata_present
+ self._payload_seen |= payload_present
+ self._completion_seen |= completion_present
+ if completion_present:
+ self._termination_manager.emission_complete()
+ self._ingestion_manager.local_emissions_done()
+ self._transmission_manager.advance(
+ initial_metadata, payload, completion, allowance)
+ if allowance_present:
+ self._ingestion_manager.add_local_allowance(allowance)
diff --git a/src/python/grpcio/grpc/framework/core/_end.py b/src/python/grpcio/grpc/framework/core/_end.py
new file mode 100644
index 0000000000..fb2c532df6
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_end.py
@@ -0,0 +1,251 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Implementation of base.End."""
+
+import abc
+import enum
+import threading
+import uuid
+
+from grpc.framework.core import _operation
+from grpc.framework.core import _utilities
+from grpc.framework.foundation import callable_util
+from grpc.framework.foundation import later
+from grpc.framework.foundation import logging_pool
+from grpc.framework.interfaces.base import base
+from grpc.framework.interfaces.links import links
+from grpc.framework.interfaces.links import utilities
+
+_IDLE_ACTION_EXCEPTION_LOG_MESSAGE = 'Exception calling idle action!'
+
+
+class End(base.End, links.Link):
+ """A bridge between base.End and links.Link.
+
+ Implementations of this interface translate arriving tickets into
+ calls on application objects implementing base interfaces and
+ translate calls from application objects implementing base interfaces
+ into tickets sent to a joined link.
+ """
+ __metaclass__ = abc.ABCMeta
+
+
+class _Cycle(object):
+ """State for a single start-stop End lifecycle."""
+
+ def __init__(self, pool):
+ self.pool = pool
+ self.grace = False
+ self.futures = []
+ self.operations = {}
+ self.idle_actions = []
+
+
+def _abort(operations):
+ for operation in operations:
+ operation.abort(base.Outcome.LOCAL_SHUTDOWN)
+
+
+def _cancel_futures(futures):
+ for future in futures:
+ futures.cancel()
+
+
+def _future_shutdown(lock, cycle, event):
+ def in_future():
+ with lock:
+ _abort(cycle.operations.values())
+ _cancel_futures(cycle.futures)
+ pool = cycle.pool
+ cycle.pool.shutdown(wait=True)
+ return in_future
+
+
+def _termination_action(lock, stats, operation_id, cycle):
+ """Constructs the termination action for a single operation.
+
+ Args:
+ lock: A lock to hold during the termination action.
+ states: A mapping from base.Outcome values to integers to increment with
+ the outcome given to the termination action.
+ operation_id: The operation ID for the termination action.
+ cycle: A _Cycle value to be updated during the termination action.
+
+ Returns:
+ A callable that takes an operation outcome as its sole parameter and that
+ should be used as the termination action for the operation associated
+ with the given operation ID.
+ """
+ def termination_action(outcome):
+ with lock:
+ stats[outcome] += 1
+ cycle.operations.pop(operation_id, None)
+ if not cycle.operations:
+ for action in cycle.idle_actions:
+ cycle.pool.submit(action)
+ cycle.idle_actions = []
+ if cycle.grace:
+ _cancel_futures(cycle.futures)
+ return termination_action
+
+
+class _End(End):
+ """An End implementation."""
+
+ def __init__(self, servicer_package):
+ """Constructor.
+
+ Args:
+ servicer_package: A _ServicerPackage for servicing operations or None if
+ this end will not be used to service operations.
+ """
+ self._lock = threading.Condition()
+ self._servicer_package = servicer_package
+
+ self._stats = {outcome: 0 for outcome in base.Outcome}
+
+ self._mate = None
+
+ self._cycle = None
+
+ def start(self):
+ """See base.End.start for specification."""
+ with self._lock:
+ if self._cycle is not None:
+ raise ValueError('Tried to start a not-stopped End!')
+ else:
+ self._cycle = _Cycle(logging_pool.pool(1))
+
+ def stop(self, grace):
+ """See base.End.stop for specification."""
+ with self._lock:
+ if self._cycle is None:
+ event = threading.Event()
+ event.set()
+ return event
+ elif not self._cycle.operations:
+ event = threading.Event()
+ self._cycle.pool.submit(event.set)
+ self._cycle.pool.shutdown(wait=False)
+ self._cycle = None
+ return event
+ else:
+ self._cycle.grace = True
+ event = threading.Event()
+ self._cycle.idle_actions.append(event.set)
+ if 0 < grace:
+ future = later.later(
+ grace, _future_shutdown(self._lock, self._cycle, event))
+ self._cycle.futures.append(future)
+ else:
+ _abort(self._cycle.operations.values())
+ return event
+
+ def operate(
+ self, group, method, subscription, timeout, initial_metadata=None,
+ payload=None, completion=None):
+ """See base.End.operate for specification."""
+ operation_id = uuid.uuid4()
+ with self._lock:
+ if self._cycle is None or self._cycle.grace:
+ raise ValueError('Can\'t operate on stopped or stopping End!')
+ termination_action = _termination_action(
+ self._lock, self._stats, operation_id, self._cycle)
+ operation = _operation.invocation_operate(
+ operation_id, group, method, subscription, timeout, initial_metadata,
+ payload, completion, self._mate.accept_ticket, termination_action,
+ self._cycle.pool)
+ self._cycle.operations[operation_id] = operation
+ return operation.context, operation.operator
+
+ def operation_stats(self):
+ """See base.End.operation_stats for specification."""
+ with self._lock:
+ return dict(self._stats)
+
+ def add_idle_action(self, action):
+ """See base.End.add_idle_action for specification."""
+ with self._lock:
+ if self._cycle is None:
+ raise ValueError('Can\'t add idle action to stopped End!')
+ action_with_exceptions_logged = callable_util.with_exceptions_logged(
+ action, _IDLE_ACTION_EXCEPTION_LOG_MESSAGE)
+ if self._cycle.operations:
+ self._cycle.idle_actions.append(action_with_exceptions_logged)
+ else:
+ self._cycle.pool.submit(action_with_exceptions_logged)
+
+ def accept_ticket(self, ticket):
+ """See links.Link.accept_ticket for specification."""
+ with self._lock:
+ if self._cycle is not None and not self._cycle.grace:
+ operation = self._cycle.operations.get(ticket.operation_id)
+ if operation is not None:
+ operation.handle_ticket(ticket)
+ elif self._servicer_package is not None:
+ termination_action = _termination_action(
+ self._lock, self._stats, ticket.operation_id, self._cycle)
+ operation = _operation.service_operate(
+ self._servicer_package, ticket, self._mate.accept_ticket,
+ termination_action, self._cycle.pool)
+ if operation is not None:
+ self._cycle.operations[ticket.operation_id] = operation
+
+ def join_link(self, link):
+ """See links.Link.join_link for specification."""
+ with self._lock:
+ self._mate = utilities.NULL_LINK if link is None else link
+
+
+def serviceless_end_link():
+ """Constructs an End usable only for invoking operations.
+
+ Returns:
+ An End usable for translating operations into ticket exchange.
+ """
+ return _End(None)
+
+
+def serviceful_end_link(servicer, default_timeout, maximum_timeout):
+ """Constructs an End capable of servicing operations.
+
+ Args:
+ servicer: An interfaces.Servicer for servicing operations.
+ default_timeout: A length of time in seconds to be used as the default
+ time alloted for a single operation.
+ maximum_timeout: A length of time in seconds to be used as the maximum
+ time alloted for a single operation.
+
+ Returns:
+ An End capable of servicing the operations requested of it through ticket
+ exchange.
+ """
+ return _End(
+ _utilities.ServicerPackage(servicer, default_timeout, maximum_timeout))
diff --git a/src/python/grpcio/grpc/framework/core/_expiration.py b/src/python/grpcio/grpc/framework/core/_expiration.py
new file mode 100644
index 0000000000..d8690b3a02
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_expiration.py
@@ -0,0 +1,152 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""State and behavior for operation expiration."""
+
+import time
+
+from grpc.framework.core import _interfaces
+from grpc.framework.foundation import later
+from grpc.framework.interfaces.base import base
+
+
+class _ExpirationManager(_interfaces.ExpirationManager):
+ """An implementation of _interfaces.ExpirationManager."""
+
+ def __init__(
+ self, commencement, timeout, maximum_timeout, lock, termination_manager,
+ transmission_manager):
+ """Constructor.
+
+ Args:
+ commencement: The time in seconds since the epoch at which the operation
+ began.
+ timeout: A length of time in seconds to allow for the operation to run.
+ maximum_timeout: The maximum length of time in seconds to allow for the
+ operation to run despite what is requested via this object's
+ change_timout method.
+ lock: The operation-wide lock.
+ termination_manager: The _interfaces.TerminationManager for the operation.
+ transmission_manager: The _interfaces.TransmissionManager for the
+ operation.
+ """
+ self._lock = lock
+ self._termination_manager = termination_manager
+ self._transmission_manager = transmission_manager
+ self._commencement = commencement
+ self._maximum_timeout = maximum_timeout
+
+ self._timeout = timeout
+ self._deadline = commencement + timeout
+ self._index = None
+ self._future = None
+
+ def _expire(self, index):
+ def expire():
+ with self._lock:
+ if self._future is not None and index == self._index:
+ self._future = None
+ self._termination_manager.expire()
+ self._transmission_manager.abort(base.Outcome.EXPIRED, None, None)
+ return expire
+
+ def start(self):
+ self._index = 0
+ self._future = later.later(self._timeout, self._expire(0))
+
+ def change_timeout(self, timeout):
+ if self._future is not None and timeout != self._timeout:
+ self._future.cancel()
+ new_timeout = min(timeout, self._maximum_timeout)
+ new_index = self._index + 1
+ self._timeout = new_timeout
+ self._deadline = self._commencement + new_timeout
+ self._index = new_index
+ delay = self._deadline - time.time()
+ self._future = later.later(delay, self._expire(new_index))
+ if new_timeout != timeout:
+ self._transmission_manager.timeout(new_timeout)
+
+ def deadline(self):
+ return self._deadline
+
+ def terminate(self):
+ if self._future:
+ self._future.cancel()
+ self._future = None
+ self._deadline_index = None
+
+
+def invocation_expiration_manager(
+ timeout, lock, termination_manager, transmission_manager):
+ """Creates an _interfaces.ExpirationManager appropriate for front-side use.
+
+ Args:
+ timeout: A length of time in seconds to allow for the operation to run.
+ lock: The operation-wide lock.
+ termination_manager: The _interfaces.TerminationManager for the operation.
+ transmission_manager: The _interfaces.TransmissionManager for the
+ operation.
+
+ Returns:
+ An _interfaces.ExpirationManager appropriate for invocation-side use.
+ """
+ expiration_manager = _ExpirationManager(
+ time.time(), timeout, timeout, lock, termination_manager,
+ transmission_manager)
+ expiration_manager.start()
+ return expiration_manager
+
+
+def service_expiration_manager(
+ timeout, default_timeout, maximum_timeout, lock, termination_manager,
+ transmission_manager):
+ """Creates an _interfaces.ExpirationManager appropriate for back-side use.
+
+ Args:
+ timeout: A length of time in seconds to allow for the operation to run. May
+ be None in which case default_timeout will be used.
+ default_timeout: The default length of time in seconds to allow for the
+ operation to run if the front-side customer has not specified such a value
+ (or if the value they specified is not yet known).
+ maximum_timeout: The maximum length of time in seconds to allow for the
+ operation to run.
+ lock: The operation-wide lock.
+ termination_manager: The _interfaces.TerminationManager for the operation.
+ transmission_manager: The _interfaces.TransmissionManager for the
+ operation.
+
+ Returns:
+ An _interfaces.ExpirationManager appropriate for service-side use.
+ """
+ expiration_manager = _ExpirationManager(
+ time.time(), default_timeout if timeout is None else timeout,
+ maximum_timeout, lock, termination_manager, transmission_manager)
+ expiration_manager.start()
+ return expiration_manager
diff --git a/src/python/grpcio/grpc/framework/core/_ingestion.py b/src/python/grpcio/grpc/framework/core/_ingestion.py
new file mode 100644
index 0000000000..7b8127f3fc
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_ingestion.py
@@ -0,0 +1,426 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""State and behavior for ingestion during an operation."""
+
+import abc
+import collections
+import enum
+
+from grpc.framework.core import _constants
+from grpc.framework.core import _interfaces
+from grpc.framework.foundation import abandonment
+from grpc.framework.foundation import callable_util
+from grpc.framework.interfaces.base import base
+
+_CREATE_SUBSCRIPTION_EXCEPTION_LOG_MESSAGE = 'Exception initializing ingestion!'
+_INGESTION_EXCEPTION_LOG_MESSAGE = 'Exception during ingestion!'
+
+
+class _SubscriptionCreation(
+ collections.namedtuple(
+ '_SubscriptionCreation',
+ ('kind', 'subscription', 'code', 'message',))):
+ """A sum type for the outcome of ingestion initialization.
+
+ Attributes:
+ kind: A Kind value coarsely indicating how subscription creation completed.
+ subscription: The created subscription. Only present if kind is
+ Kind.SUBSCRIPTION.
+ code: A code value to be sent to the other side of the operation along with
+ an indication that the operation is being aborted due to an error on the
+ remote side of the operation. Only present if kind is Kind.REMOTE_ERROR.
+ message: A message value to be sent to the other side of the operation
+ along with an indication that the operation is being aborted due to an
+ error on the remote side of the operation. Only present if kind is
+ Kind.REMOTE_ERROR.
+ """
+
+ @enum.unique
+ class Kind(enum.Enum):
+ SUBSCRIPTION = 'subscription'
+ REMOTE_ERROR = 'remote error'
+ ABANDONED = 'abandoned'
+
+
+class _SubscriptionCreator(object):
+ """Common specification of subscription-creating behavior."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def create(self, group, method):
+ """Creates the base.Subscription of the local customer.
+
+ Any exceptions raised by this method should be attributed to and treated as
+ defects in the customer code called by this method.
+
+ Args:
+ group: The group identifier of the operation.
+ method: The method identifier of the operation.
+
+ Returns:
+ A _SubscriptionCreation describing the result of subscription creation.
+ """
+ raise NotImplementedError()
+
+
+class _ServiceSubscriptionCreator(_SubscriptionCreator):
+ """A _SubscriptionCreator appropriate for service-side use."""
+
+ def __init__(self, servicer, operation_context, output_operator):
+ """Constructor.
+
+ Args:
+ servicer: The base.Servicer that will service the operation.
+ operation_context: A base.OperationContext for the operation to be passed
+ to the customer.
+ output_operator: A base.Operator for the operation to be passed to the
+ customer and to be called by the customer to accept operation data
+ emitted by the customer.
+ """
+ self._servicer = servicer
+ self._operation_context = operation_context
+ self._output_operator = output_operator
+
+ def create(self, group, method):
+ try:
+ subscription = self._servicer.service(
+ group, method, self._operation_context, self._output_operator)
+ except base.NoSuchMethodError as e:
+ return _SubscriptionCreation(
+ _SubscriptionCreation.Kind.REMOTE_ERROR, None, e.code, e.message)
+ except abandonment.Abandoned:
+ return _SubscriptionCreation(
+ _SubscriptionCreation.Kind.ABANDONED, None, None, None)
+ else:
+ return _SubscriptionCreation(
+ _SubscriptionCreation.Kind.SUBSCRIPTION, subscription, None, None)
+
+
+def _wrap(behavior):
+ def wrapped(*args, **kwargs):
+ try:
+ behavior(*args, **kwargs)
+ except abandonment.Abandoned:
+ return False
+ else:
+ return True
+ return wrapped
+
+
+class _IngestionManager(_interfaces.IngestionManager):
+ """An implementation of _interfaces.IngestionManager."""
+
+ def __init__(
+ self, lock, pool, subscription, subscription_creator, termination_manager,
+ transmission_manager, expiration_manager):
+ """Constructor.
+
+ Args:
+ lock: The operation-wide lock.
+ pool: A thread pool in which to execute customer code.
+ subscription: A base.Subscription describing the customer's interest in
+ operation values from the other side. May be None if
+ subscription_creator is not None.
+ subscription_creator: A _SubscriptionCreator wrapping the portion of
+ customer code that when called returns the base.Subscription describing
+ the customer's interest in operation values from the other side. May be
+ None if subscription is not None.
+ termination_manager: The _interfaces.TerminationManager for the operation.
+ transmission_manager: The _interfaces.TransmissionManager for the
+ operation.
+ expiration_manager: The _interfaces.ExpirationManager for the operation.
+ """
+ self._lock = lock
+ self._pool = pool
+ self._termination_manager = termination_manager
+ self._transmission_manager = transmission_manager
+ self._expiration_manager = expiration_manager
+
+ if subscription is None:
+ self._subscription_creator = subscription_creator
+ self._wrapped_operator = None
+ elif subscription.kind is base.Subscription.Kind.FULL:
+ self._subscription_creator = None
+ self._wrapped_operator = _wrap(subscription.operator.advance)
+ else:
+ # TODO(nathaniel): Support other subscriptions.
+ raise ValueError('Unsupported subscription "%s"!' % subscription.kind)
+ self._pending_initial_metadata = None
+ self._pending_payloads = []
+ self._pending_completion = None
+ self._local_allowance = 1
+ # A nonnegative integer or None, with None indicating that the local
+ # customer is done emitting anyway so there's no need to bother it by
+ # informing it that the remote customer has granted it further permission to
+ # emit.
+ self._remote_allowance = 0
+ self._processing = False
+
+ def _abort_internal_only(self):
+ self._subscription_creator = None
+ self._wrapped_operator = None
+ self._pending_initial_metadata = None
+ self._pending_payloads = None
+ self._pending_completion = None
+
+ def _abort_and_notify(self, outcome, code, message):
+ self._abort_internal_only()
+ self._termination_manager.abort(outcome)
+ self._transmission_manager.abort(outcome, code, message)
+ self._expiration_manager.terminate()
+
+ def _operator_next(self):
+ """Computes the next step for full-subscription ingestion.
+
+ Returns:
+ An initial_metadata, payload, completion, allowance, continue quintet
+ indicating what operation values (if any) are available to pass into
+ customer code and whether or not there is anything immediately
+ actionable to call customer code to do.
+ """
+ if self._wrapped_operator is None:
+ return None, None, None, None, False
+ else:
+ initial_metadata, payload, completion, allowance, action = [None] * 5
+ if self._pending_initial_metadata is not None:
+ initial_metadata = self._pending_initial_metadata
+ self._pending_initial_metadata = None
+ action = True
+ if self._pending_payloads and 0 < self._local_allowance:
+ payload = self._pending_payloads.pop(0)
+ self._local_allowance -= 1
+ action = True
+ if not self._pending_payloads and self._pending_completion is not None:
+ completion = self._pending_completion
+ self._pending_completion = None
+ action = True
+ if self._remote_allowance is not None and 0 < self._remote_allowance:
+ allowance = self._remote_allowance
+ self._remote_allowance = 0
+ action = True
+ return initial_metadata, payload, completion, allowance, bool(action)
+
+ def _operator_process(
+ self, wrapped_operator, initial_metadata, payload,
+ completion, allowance):
+ while True:
+ advance_outcome = callable_util.call_logging_exceptions(
+ wrapped_operator, _INGESTION_EXCEPTION_LOG_MESSAGE,
+ initial_metadata=initial_metadata, payload=payload,
+ completion=completion, allowance=allowance)
+ if advance_outcome.exception is None:
+ if advance_outcome.return_value:
+ with self._lock:
+ if self._termination_manager.outcome is not None:
+ return
+ if completion is not None:
+ self._termination_manager.ingestion_complete()
+ initial_metadata, payload, completion, allowance, moar = (
+ self._operator_next())
+ if not moar:
+ self._processing = False
+ return
+ else:
+ with self._lock:
+ if self._termination_manager.outcome is None:
+ self._abort_and_notify(base.Outcome.LOCAL_FAILURE, None, None)
+ return
+ else:
+ with self._lock:
+ if self._termination_manager.outcome is None:
+ self._abort_and_notify(base.Outcome.LOCAL_FAILURE, None, None)
+ return
+
+ def _operator_post_create(self, subscription):
+ wrapped_operator = _wrap(subscription.operator.advance)
+ with self._lock:
+ if self._termination_manager.outcome is not None:
+ return
+ self._wrapped_operator = wrapped_operator
+ self._subscription_creator = None
+ metadata, payload, completion, allowance, moar = self._operator_next()
+ if not moar:
+ self._processing = False
+ return
+ self._operator_process(
+ wrapped_operator, metadata, payload, completion, allowance)
+
+ def _create(self, subscription_creator, group, name):
+ outcome = callable_util.call_logging_exceptions(
+ subscription_creator.create,
+ _CREATE_SUBSCRIPTION_EXCEPTION_LOG_MESSAGE, group, name)
+ if outcome.return_value is None:
+ with self._lock:
+ if self._termination_manager.outcome is None:
+ self._abort_and_notify(base.Outcome.LOCAL_FAILURE, None, None)
+ elif outcome.return_value.kind is _SubscriptionCreation.Kind.ABANDONED:
+ with self._lock:
+ if self._termination_manager.outcome is None:
+ self._abort_and_notify(base.Outcome.LOCAL_FAILURE, None, None)
+ elif outcome.return_value.kind is _SubscriptionCreation.Kind.REMOTE_ERROR:
+ code = outcome.return_value.code
+ message = outcome.return_value.message
+ with self._lock:
+ if self._termination_manager.outcome is None:
+ self._abort_and_notify(base.Outcome.REMOTE_FAILURE, code, message)
+ elif outcome.return_value.subscription.kind is base.Subscription.Kind.FULL:
+ self._operator_post_create(outcome.return_value.subscription)
+ else:
+ # TODO(nathaniel): Support other subscriptions.
+ raise ValueError(
+ 'Unsupported "%s"!' % outcome.return_value.subscription.kind)
+
+ def _store_advance(self, initial_metadata, payload, completion, allowance):
+ if initial_metadata is not None:
+ self._pending_initial_metadata = initial_metadata
+ if payload is not None:
+ self._pending_payloads.append(payload)
+ if completion is not None:
+ self._pending_completion = completion
+ if allowance is not None and self._remote_allowance is not None:
+ self._remote_allowance += allowance
+
+ def _operator_advance(self, initial_metadata, payload, completion, allowance):
+ if self._processing:
+ self._store_advance(initial_metadata, payload, completion, allowance)
+ else:
+ action = False
+ if initial_metadata is not None:
+ action = True
+ if payload is not None:
+ if 0 < self._local_allowance:
+ self._local_allowance -= 1
+ action = True
+ else:
+ self._pending_payloads.append(payload)
+ payload = False
+ if completion is not None:
+ if self._pending_payloads:
+ self._pending_completion = completion
+ else:
+ action = True
+ if allowance is not None and self._remote_allowance is not None:
+ allowance += self._remote_allowance
+ self._remote_allowance = 0
+ action = True
+ if action:
+ self._pool.submit(
+ callable_util.with_exceptions_logged(
+ self._operator_process, _constants.INTERNAL_ERROR_LOG_MESSAGE),
+ self._wrapped_operator, initial_metadata, payload, completion,
+ allowance)
+
+ def set_group_and_method(self, group, method):
+ """See _interfaces.IngestionManager.set_group_and_method for spec."""
+ if self._subscription_creator is not None and not self._processing:
+ self._pool.submit(
+ callable_util.with_exceptions_logged(
+ self._create, _constants.INTERNAL_ERROR_LOG_MESSAGE),
+ self._subscription_creator, group, method)
+ self._processing = True
+
+ def add_local_allowance(self, allowance):
+ """See _interfaces.IngestionManager.add_local_allowance for spec."""
+ if any((self._subscription_creator, self._wrapped_operator,)):
+ self._local_allowance += allowance
+ if not self._processing:
+ initial_metadata, payload, completion, allowance, moar = (
+ self._operator_next())
+ if moar:
+ self._pool.submit(
+ callable_util.with_exceptions_logged(
+ self._operator_process,
+ _constants.INTERNAL_ERROR_LOG_MESSAGE),
+ initial_metadata, payload, completion, allowance)
+
+ def local_emissions_done(self):
+ self._remote_allowance = None
+
+ def advance(self, initial_metadata, payload, completion, allowance):
+ """See _interfaces.IngestionManager.advance for specification."""
+ if self._subscription_creator is not None:
+ self._store_advance(initial_metadata, payload, completion, allowance)
+ elif self._wrapped_operator is not None:
+ self._operator_advance(initial_metadata, payload, completion, allowance)
+
+
+def invocation_ingestion_manager(
+ subscription, lock, pool, termination_manager, transmission_manager,
+ expiration_manager):
+ """Creates an IngestionManager appropriate for invocation-side use.
+
+ Args:
+ subscription: A base.Subscription indicating the customer's interest in the
+ data and results from the service-side of the operation.
+ lock: The operation-wide lock.
+ pool: A thread pool in which to execute customer code.
+ termination_manager: The _interfaces.TerminationManager for the operation.
+ transmission_manager: The _interfaces.TransmissionManager for the
+ operation.
+ expiration_manager: The _interfaces.ExpirationManager for the operation.
+
+ Returns:
+ An IngestionManager appropriate for invocation-side use.
+ """
+ return _IngestionManager(
+ lock, pool, subscription, None, termination_manager, transmission_manager,
+ expiration_manager)
+
+
+def service_ingestion_manager(
+ servicer, operation_context, output_operator, lock, pool,
+ termination_manager, transmission_manager, expiration_manager):
+ """Creates an IngestionManager appropriate for service-side use.
+
+ The returned IngestionManager will require its set_group_and_name method to be
+ called before its advance method may be called.
+
+ Args:
+ servicer: A base.Servicer for servicing the operation.
+ operation_context: A base.OperationContext for the operation to be passed to
+ the customer.
+ output_operator: A base.Operator for the operation to be passed to the
+ customer and to be called by the customer to accept operation data output
+ by the customer.
+ lock: The operation-wide lock.
+ pool: A thread pool in which to execute customer code.
+ termination_manager: The _interfaces.TerminationManager for the operation.
+ transmission_manager: The _interfaces.TransmissionManager for the
+ operation.
+ expiration_manager: The _interfaces.ExpirationManager for the operation.
+
+ Returns:
+ An IngestionManager appropriate for service-side use.
+ """
+ subscription_creator = _ServiceSubscriptionCreator(
+ servicer, operation_context, output_operator)
+ return _IngestionManager(
+ lock, pool, None, subscription_creator, termination_manager,
+ transmission_manager, expiration_manager)
diff --git a/src/python/grpcio/grpc/framework/core/_interfaces.py b/src/python/grpcio/grpc/framework/core/_interfaces.py
new file mode 100644
index 0000000000..deb5f34f9b
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_interfaces.py
@@ -0,0 +1,314 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Package-internal interfaces."""
+
+import abc
+
+from grpc.framework.interfaces.base import base
+
+
+class TerminationManager(object):
+ """An object responsible for handling the termination of an operation.
+
+ Attributes:
+ outcome: None if the operation is active or a base.Outcome value if it has
+ terminated.
+ """
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def add_callback(self, callback):
+ """Registers a callback to be called on operation termination.
+
+ If the operation has already terminated the callback will not be called.
+
+ Args:
+ callback: A callable that will be passed an interfaces.Outcome value.
+
+ Returns:
+ None if the operation has not yet terminated and the passed callback will
+ be called when it does, or a base.Outcome value describing the operation
+ termination if the operation has terminated and the callback will not be
+ called as a result of this method call.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def emission_complete(self):
+ """Indicates that emissions from customer code have completed."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def transmission_complete(self):
+ """Indicates that transmissions to the remote end are complete.
+
+ Returns:
+ True if the operation has terminated or False if the operation remains
+ ongoing.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def reception_complete(self):
+ """Indicates that reception from the other side is complete."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def ingestion_complete(self):
+ """Indicates that customer code ingestion of received values is complete."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def expire(self):
+ """Indicates that the operation must abort because it has taken too long."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def abort(self, outcome):
+ """Indicates that the operation must abort for the indicated reason.
+
+ Args:
+ outcome: An interfaces.Outcome indicating operation abortion.
+ """
+ raise NotImplementedError()
+
+
+class TransmissionManager(object):
+ """A manager responsible for transmitting to the other end of an operation."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def kick_off(
+ self, group, method, timeout, initial_metadata, payload, completion,
+ allowance):
+ """Transmits the values associated with operation invocation."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def advance(self, initial_metadata, payload, completion, allowance):
+ """Accepts values for transmission to the other end of the operation.
+
+ Args:
+ initial_metadata: An initial metadata value to be transmitted to the other
+ side of the operation. May only ever be non-None once.
+ payload: A payload value.
+ completion: A base.Completion value. May only ever be non-None in the last
+ transmission to be made to the other side.
+ allowance: A positive integer communicating the number of additional
+ payloads allowed to be transmitted from the other side to this side of
+ the operation, or None if no additional allowance is being granted in
+ this call.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def timeout(self, timeout):
+ """Accepts for transmission to the other side a new timeout value.
+
+ Args:
+ timeout: A positive float used as the new timeout value for the operation
+ to be transmitted to the other side.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def allowance(self, allowance):
+ """Indicates to this manager that the remote customer is allowing payloads.
+
+ Args:
+ allowance: A positive integer indicating the number of additional payloads
+ the remote customer is allowing to be transmitted from this side of the
+ operation.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def remote_complete(self):
+ """Indicates to this manager that data from the remote side is complete."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def abort(self, outcome, code, message):
+ """Indicates that the operation has aborted.
+
+ Args:
+ outcome: An interfaces.Outcome for the operation. If None, indicates that
+ the operation abortion should not be communicated to the other side of
+ the operation.
+ code: A code value to communicate to the other side of the operation
+ along with indication of operation abortion. May be None, and has no
+ effect if outcome is None.
+ message: A message value to communicate to the other side of the
+ operation along with indication of operation abortion. May be None, and
+ has no effect if outcome is None.
+ """
+ raise NotImplementedError()
+
+
+class ExpirationManager(object):
+ """A manager responsible for aborting the operation if it runs out of time."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def change_timeout(self, timeout):
+ """Changes the timeout allotted for the operation.
+
+ Operation duration is always measure from the beginning of the operation;
+ calling this method changes the operation's allotted time to timeout total
+ seconds, not timeout seconds from the time of this method call.
+
+ Args:
+ timeout: A length of time in seconds to allow for the operation.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def deadline(self):
+ """Returns the time until which the operation is allowed to run.
+
+ Returns:
+ The time (seconds since the epoch) at which the operation will expire.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def terminate(self):
+ """Indicates to this manager that the operation has terminated."""
+ raise NotImplementedError()
+
+
+class EmissionManager(base.Operator):
+ """A manager of values emitted by customer code."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def advance(
+ self, initial_metadata=None, payload=None, completion=None,
+ allowance=None):
+ """Accepts a value emitted by customer code.
+
+ This method should only be called by customer code.
+
+ Args:
+ initial_metadata: An initial metadata value emitted by the local customer
+ to be sent to the other side of the operation.
+ payload: A payload value emitted by the local customer to be sent to the
+ other side of the operation.
+ completion: A Completion value emitted by the local customer to be sent to
+ the other side of the operation.
+ allowance: A positive integer indicating an additional number of payloads
+ that the local customer is willing to accept from the other side of the
+ operation.
+ """
+ raise NotImplementedError()
+
+
+class IngestionManager(object):
+ """A manager responsible for executing customer code.
+
+ This name of this manager comes from its responsibility to pass successive
+ values from the other side of the operation into the code of the local
+ customer.
+ """
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def set_group_and_method(self, group, method):
+ """Communicates to this IngestionManager the operation group and method.
+
+ Args:
+ group: The group identifier of the operation.
+ method: The method identifier of the operation.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def add_local_allowance(self, allowance):
+ """Communicates to this IngestionManager that more payloads may be ingested.
+
+ Args:
+ allowance: A positive integer indicating an additional number of payloads
+ that the local customer is willing to ingest.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def local_emissions_done(self):
+ """Indicates to this manager that local emissions are done."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def advance(self, initial_metadata, payload, completion, allowance):
+ """Advances the operation by passing values to the local customer."""
+ raise NotImplementedError()
+
+
+class ReceptionManager(object):
+ """A manager responsible for receiving tickets from the other end."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def receive_ticket(self, ticket):
+ """Handle a ticket from the other side of the operation.
+
+ Args:
+ ticket: An interfaces.BackToFrontTicket or interfaces.FrontToBackTicket
+ appropriate to this end of the operation and this object.
+ """
+ raise NotImplementedError()
+
+
+class Operation(object):
+ """An ongoing operation.
+
+ Attributes:
+ context: A base.OperationContext object for the operation.
+ operator: A base.Operator object for the operation for use by the customer
+ of the operation.
+ """
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def handle_ticket(self, ticket):
+ """Handle a ticket from the other side of the operation.
+
+ Args:
+ ticket: A links.Ticket from the other side of the operation.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def abort(self, outcome):
+ """Aborts the operation.
+
+ Args:
+ outcome: A base.Outcome value indicating operation abortion.
+ """
+ raise NotImplementedError()
diff --git a/src/python/grpcio/grpc/framework/core/_operation.py b/src/python/grpcio/grpc/framework/core/_operation.py
new file mode 100644
index 0000000000..cc873c03f9
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_operation.py
@@ -0,0 +1,192 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Implementation of operations."""
+
+import threading
+
+# _utilities is referenced from specification in this module.
+from grpc.framework.core import _context
+from grpc.framework.core import _emission
+from grpc.framework.core import _expiration
+from grpc.framework.core import _ingestion
+from grpc.framework.core import _interfaces
+from grpc.framework.core import _reception
+from grpc.framework.core import _termination
+from grpc.framework.core import _transmission
+from grpc.framework.core import _utilities # pylint: disable=unused-import
+
+
+class _EasyOperation(_interfaces.Operation):
+ """A trivial implementation of interfaces.Operation."""
+
+ def __init__(
+ self, lock, termination_manager, transmission_manager, expiration_manager,
+ context, operator, reception_manager):
+ """Constructor.
+
+ Args:
+ lock: The operation-wide lock.
+ termination_manager: The _interfaces.TerminationManager for the operation.
+ transmission_manager: The _interfaces.TransmissionManager for the
+ operation.
+ expiration_manager: The _interfaces.ExpirationManager for the operation.
+ context: A base.OperationContext for use by the customer during the
+ operation.
+ operator: A base.Operator for use by the customer during the operation.
+ reception_manager: The _interfaces.ReceptionManager for the operation.
+ """
+ self._lock = lock
+ self._termination_manager = termination_manager
+ self._transmission_manager = transmission_manager
+ self._expiration_manager = expiration_manager
+ self._reception_manager = reception_manager
+
+ self.context = context
+ self.operator = operator
+
+ def handle_ticket(self, ticket):
+ with self._lock:
+ self._reception_manager.receive_ticket(ticket)
+
+ def abort(self, outcome):
+ with self._lock:
+ if self._termination_manager.outcome is None:
+ self._termination_manager.abort(outcome)
+ self._transmission_manager.abort(outcome, None, None)
+ self._expiration_manager.terminate()
+
+
+def invocation_operate(
+ operation_id, group, method, subscription, timeout, initial_metadata,
+ payload, completion, ticket_sink, termination_action, pool):
+ """Constructs objects necessary for front-side operation management.
+
+ Args:
+ operation_id: An object identifying the operation.
+ group: The group identifier of the operation.
+ method: The method identifier of the operation.
+ subscription: A base.Subscription describing the customer's interest in the
+ results of the operation.
+ timeout: A length of time in seconds to allow for the operation.
+ initial_metadata: An initial metadata value to be sent to the other side of
+ the operation. May be None if the initial metadata will be passed later or
+ if there will be no initial metadata passed at all.
+ payload: The first payload value to be transmitted to the other side. May be
+ None if there is no such value or if the customer chose not to pass it at
+ operation invocation.
+ completion: A base.Completion value indicating the end of values passed to
+ the other side of the operation.
+ ticket_sink: A callable that accepts links.Tickets and delivers them to the
+ other side of the operation.
+ termination_action: A callable that accepts the outcome of the operation as
+ a base.Outcome value to be called on operation completion.
+ pool: A thread pool with which to do the work of the operation.
+
+ Returns:
+ An _interfaces.Operation for the operation.
+ """
+ lock = threading.Lock()
+ with lock:
+ termination_manager = _termination.invocation_termination_manager(
+ termination_action, pool)
+ transmission_manager = _transmission.TransmissionManager(
+ operation_id, ticket_sink, lock, pool, termination_manager)
+ expiration_manager = _expiration.invocation_expiration_manager(
+ timeout, lock, termination_manager, transmission_manager)
+ operation_context = _context.OperationContext(
+ lock, termination_manager, transmission_manager, expiration_manager)
+ emission_manager = _emission.EmissionManager(
+ lock, termination_manager, transmission_manager, expiration_manager)
+ ingestion_manager = _ingestion.invocation_ingestion_manager(
+ subscription, lock, pool, termination_manager, transmission_manager,
+ expiration_manager)
+ reception_manager = _reception.ReceptionManager(
+ termination_manager, transmission_manager, expiration_manager,
+ ingestion_manager)
+
+ termination_manager.set_expiration_manager(expiration_manager)
+ transmission_manager.set_expiration_manager(expiration_manager)
+ emission_manager.set_ingestion_manager(ingestion_manager)
+
+ transmission_manager.kick_off(
+ group, method, timeout, initial_metadata, payload, completion, None)
+
+ return _EasyOperation(
+ lock, termination_manager, transmission_manager, expiration_manager,
+ operation_context, emission_manager, reception_manager)
+
+
+def service_operate(
+ servicer_package, ticket, ticket_sink, termination_action, pool):
+ """Constructs an Operation for service of an operation.
+
+ Args:
+ servicer_package: A _utilities.ServicerPackage to be used servicing the
+ operation.
+ ticket: The first links.Ticket received for the operation.
+ ticket_sink: A callable that accepts links.Tickets and delivers them to the
+ other side of the operation.
+ termination_action: A callable that accepts the outcome of the operation as
+ a base.Outcome value to be called on operation completion.
+ pool: A thread pool with which to do the work of the operation.
+
+ Returns:
+ An _interfaces.Operation for the operation.
+ """
+ lock = threading.Lock()
+ with lock:
+ termination_manager = _termination.service_termination_manager(
+ termination_action, pool)
+ transmission_manager = _transmission.TransmissionManager(
+ ticket.operation_id, ticket_sink, lock, pool, termination_manager)
+ expiration_manager = _expiration.service_expiration_manager(
+ ticket.timeout, servicer_package.default_timeout,
+ servicer_package.maximum_timeout, lock, termination_manager,
+ transmission_manager)
+ operation_context = _context.OperationContext(
+ lock, termination_manager, transmission_manager, expiration_manager)
+ emission_manager = _emission.EmissionManager(
+ lock, termination_manager, transmission_manager, expiration_manager)
+ ingestion_manager = _ingestion.service_ingestion_manager(
+ servicer_package.servicer, operation_context, emission_manager, lock,
+ pool, termination_manager, transmission_manager, expiration_manager)
+ reception_manager = _reception.ReceptionManager(
+ termination_manager, transmission_manager, expiration_manager,
+ ingestion_manager)
+
+ termination_manager.set_expiration_manager(expiration_manager)
+ transmission_manager.set_expiration_manager(expiration_manager)
+ emission_manager.set_ingestion_manager(ingestion_manager)
+
+ reception_manager.receive_ticket(ticket)
+
+ return _EasyOperation(
+ lock, termination_manager, transmission_manager, expiration_manager,
+ operation_context, emission_manager, reception_manager)
diff --git a/src/python/grpcio/grpc/framework/core/_reception.py b/src/python/grpcio/grpc/framework/core/_reception.py
new file mode 100644
index 0000000000..1cebe3874b
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_reception.py
@@ -0,0 +1,139 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""State and behavior for ticket reception."""
+
+from grpc.framework.core import _interfaces
+from grpc.framework.interfaces.base import base
+from grpc.framework.interfaces.base import utilities
+from grpc.framework.interfaces.links import links
+
+_REMOTE_TICKET_TERMINATION_TO_LOCAL_OUTCOME = {
+ links.Ticket.Termination.CANCELLATION: base.Outcome.CANCELLED,
+ links.Ticket.Termination.EXPIRATION: base.Outcome.EXPIRED,
+ links.Ticket.Termination.SHUTDOWN: base.Outcome.REMOTE_SHUTDOWN,
+ links.Ticket.Termination.RECEPTION_FAILURE: base.Outcome.RECEPTION_FAILURE,
+ links.Ticket.Termination.TRANSMISSION_FAILURE:
+ base.Outcome.TRANSMISSION_FAILURE,
+ links.Ticket.Termination.LOCAL_FAILURE: base.Outcome.REMOTE_FAILURE,
+ links.Ticket.Termination.REMOTE_FAILURE: base.Outcome.LOCAL_FAILURE,
+}
+
+
+class ReceptionManager(_interfaces.ReceptionManager):
+ """A ReceptionManager based around a _Receiver passed to it."""
+
+ def __init__(
+ self, termination_manager, transmission_manager, expiration_manager,
+ ingestion_manager):
+ """Constructor.
+
+ Args:
+ termination_manager: The operation's _interfaces.TerminationManager.
+ transmission_manager: The operation's _interfaces.TransmissionManager.
+ expiration_manager: The operation's _interfaces.ExpirationManager.
+ ingestion_manager: The operation's _interfaces.IngestionManager.
+ """
+ self._termination_manager = termination_manager
+ self._transmission_manager = transmission_manager
+ self._expiration_manager = expiration_manager
+ self._ingestion_manager = ingestion_manager
+
+ self._lowest_unseen_sequence_number = 0
+ self._out_of_sequence_tickets = {}
+ self._aborted = False
+
+ def _abort(self, outcome):
+ self._aborted = True
+ if self._termination_manager.outcome is None:
+ self._termination_manager.abort(outcome)
+ self._transmission_manager.abort(None, None, None)
+ self._expiration_manager.terminate()
+
+ def _sequence_failure(self, ticket):
+ """Determines a just-arrived ticket's sequential legitimacy.
+
+ Args:
+ ticket: A just-arrived ticket.
+
+ Returns:
+ True if the ticket is sequentially legitimate; False otherwise.
+ """
+ if ticket.sequence_number < self._lowest_unseen_sequence_number:
+ return True
+ elif ticket.sequence_number in self._out_of_sequence_tickets:
+ return True
+ else:
+ return False
+
+ def _process_one(self, ticket):
+ if ticket.sequence_number == 0:
+ self._ingestion_manager.set_group_and_method(ticket.group, ticket.method)
+ if ticket.timeout is not None:
+ self._expiration_manager.change_timeout(ticket.timeout)
+ if ticket.termination is None:
+ completion = None
+ else:
+ completion = utilities.completion(
+ ticket.terminal_metadata, ticket.code, ticket.message)
+ self._ingestion_manager.advance(
+ ticket.initial_metadata, ticket.payload, completion, ticket.allowance)
+ if ticket.allowance is not None:
+ self._transmission_manager.allowance(ticket.allowance)
+
+ def _process(self, ticket):
+ """Process those tickets ready to be processed.
+
+ Args:
+ ticket: A just-arrived ticket the sequence number of which matches this
+ _ReceptionManager's _lowest_unseen_sequence_number field.
+ """
+ while True:
+ self._process_one(ticket)
+ next_ticket = self._out_of_sequence_tickets.pop(
+ ticket.sequence_number + 1, None)
+ if next_ticket is None:
+ self._lowest_unseen_sequence_number = ticket.sequence_number + 1
+ return
+ else:
+ ticket = next_ticket
+
+ def receive_ticket(self, ticket):
+ """See _interfaces.ReceptionManager.receive_ticket for specification."""
+ if self._aborted:
+ return
+ elif self._sequence_failure(ticket):
+ self._abort(base.Outcome.RECEPTION_FAILURE)
+ elif ticket.termination not in (None, links.Ticket.Termination.COMPLETION):
+ outcome = _REMOTE_TICKET_TERMINATION_TO_LOCAL_OUTCOME[ticket.termination]
+ self._abort(outcome)
+ elif ticket.sequence_number == self._lowest_unseen_sequence_number:
+ self._process(ticket)
+ else:
+ self._out_of_sequence_tickets[ticket.sequence_number] = ticket
diff --git a/src/python/grpcio/grpc/framework/core/_termination.py b/src/python/grpcio/grpc/framework/core/_termination.py
new file mode 100644
index 0000000000..ad9f6123d8
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_termination.py
@@ -0,0 +1,212 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""State and behavior for operation termination."""
+
+import abc
+
+from grpc.framework.core import _constants
+from grpc.framework.core import _interfaces
+from grpc.framework.foundation import callable_util
+from grpc.framework.interfaces.base import base
+
+
+def _invocation_completion_predicate(
+ unused_emission_complete, unused_transmission_complete,
+ unused_reception_complete, ingestion_complete):
+ return ingestion_complete
+
+
+def _service_completion_predicate(
+ unused_emission_complete, transmission_complete, unused_reception_complete,
+ unused_ingestion_complete):
+ return transmission_complete
+
+
+class TerminationManager(_interfaces.TerminationManager):
+ """A _interfaces.TransmissionManager on which another manager may be set."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def set_expiration_manager(self, expiration_manager):
+ """Sets the expiration manager with which this manager will interact.
+
+ Args:
+ expiration_manager: The _interfaces.ExpirationManager associated with the
+ current operation.
+ """
+ raise NotImplementedError()
+
+
+class _TerminationManager(TerminationManager):
+ """An implementation of TerminationManager."""
+
+ def __init__(self, predicate, action, pool):
+ """Constructor.
+
+ Args:
+ predicate: One of _invocation_completion_predicate or
+ _service_completion_predicate to be used to determine when the operation
+ has completed.
+ action: A behavior to pass the operation outcome on operation termination.
+ pool: A thread pool.
+ """
+ self._predicate = predicate
+ self._action = action
+ self._pool = pool
+ self._expiration_manager = None
+
+ self.outcome = None
+ self._callbacks = []
+
+ self._emission_complete = False
+ self._transmission_complete = False
+ self._reception_complete = False
+ self._ingestion_complete = False
+
+ def set_expiration_manager(self, expiration_manager):
+ self._expiration_manager = expiration_manager
+
+ def _terminate_internal_only(self, outcome):
+ """Terminates the operation.
+
+ Args:
+ outcome: A base.Outcome describing the outcome of the operation.
+ """
+ self.outcome = outcome
+ callbacks = list(self._callbacks)
+ self._callbacks = None
+
+ act = callable_util.with_exceptions_logged(
+ self._action, _constants.INTERNAL_ERROR_LOG_MESSAGE)
+
+ if outcome is base.Outcome.LOCAL_FAILURE:
+ self._pool.submit(act, outcome)
+ else:
+ def call_callbacks_and_act(callbacks, outcome):
+ for callback in callbacks:
+ callback_outcome = callable_util.call_logging_exceptions(
+ callback, _constants.TERMINATION_CALLBACK_EXCEPTION_LOG_MESSAGE,
+ outcome)
+ if callback_outcome.exception is not None:
+ outcome = base.Outcome.LOCAL_FAILURE
+ break
+ act(outcome)
+
+ self._pool.submit(
+ callable_util.with_exceptions_logged(
+ call_callbacks_and_act, _constants.INTERNAL_ERROR_LOG_MESSAGE),
+ callbacks, outcome)
+
+ def _terminate_and_notify(self, outcome):
+ self._terminate_internal_only(outcome)
+ self._expiration_manager.terminate()
+
+ def _perhaps_complete(self):
+ if self._predicate(
+ self._emission_complete, self._transmission_complete,
+ self._reception_complete, self._ingestion_complete):
+ self._terminate_and_notify(base.Outcome.COMPLETED)
+ return True
+ else:
+ return False
+
+ def is_active(self):
+ """See _interfaces.TerminationManager.is_active for specification."""
+ return self.outcome is None
+
+ def add_callback(self, callback):
+ """See _interfaces.TerminationManager.add_callback for specification."""
+ if self.outcome is None:
+ self._callbacks.append(callback)
+ return None
+ else:
+ return self.outcome
+
+ def emission_complete(self):
+ """See superclass method for specification."""
+ if self.outcome is None:
+ self._emission_complete = True
+ self._perhaps_complete()
+
+ def transmission_complete(self):
+ """See superclass method for specification."""
+ if self.outcome is None:
+ self._transmission_complete = True
+ return self._perhaps_complete()
+ else:
+ return False
+
+ def reception_complete(self):
+ """See superclass method for specification."""
+ if self.outcome is None:
+ self._reception_complete = True
+ self._perhaps_complete()
+
+ def ingestion_complete(self):
+ """See superclass method for specification."""
+ if self.outcome is None:
+ self._ingestion_complete = True
+ self._perhaps_complete()
+
+ def expire(self):
+ """See _interfaces.TerminationManager.expire for specification."""
+ self._terminate_internal_only(base.Outcome.EXPIRED)
+
+ def abort(self, outcome):
+ """See _interfaces.TerminationManager.abort for specification."""
+ self._terminate_and_notify(outcome)
+
+
+def invocation_termination_manager(action, pool):
+ """Creates a TerminationManager appropriate for invocation-side use.
+
+ Args:
+ action: An action to call on operation termination.
+ pool: A thread pool in which to execute the passed action and any
+ termination callbacks that are registered during the operation.
+
+ Returns:
+ A TerminationManager appropriate for invocation-side use.
+ """
+ return _TerminationManager(_invocation_completion_predicate, action, pool)
+
+
+def service_termination_manager(action, pool):
+ """Creates a TerminationManager appropriate for service-side use.
+
+ Args:
+ action: An action to call on operation termination.
+ pool: A thread pool in which to execute the passed action and any
+ termination callbacks that are registered during the operation.
+
+ Returns:
+ A TerminationManager appropriate for service-side use.
+ """
+ return _TerminationManager(_service_completion_predicate, action, pool)
diff --git a/src/python/grpcio/grpc/framework/core/_transmission.py b/src/python/grpcio/grpc/framework/core/_transmission.py
new file mode 100644
index 0000000000..efef87dd4c
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_transmission.py
@@ -0,0 +1,302 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""State and behavior for ticket transmission during an operation."""
+
+from grpc.framework.core import _constants
+from grpc.framework.core import _interfaces
+from grpc.framework.foundation import callable_util
+from grpc.framework.interfaces.base import base
+from grpc.framework.interfaces.links import links
+
+_TRANSMISSION_EXCEPTION_LOG_MESSAGE = 'Exception during transmission!'
+
+
+def _explode_completion(completion):
+ if completion is None:
+ return None, None, None, None
+ else:
+ return (
+ completion.terminal_metadata, completion.code, completion.message,
+ links.Ticket.Termination.COMPLETION)
+
+
+class TransmissionManager(_interfaces.TransmissionManager):
+ """An _interfaces.TransmissionManager that sends links.Tickets."""
+
+ def __init__(
+ self, operation_id, ticket_sink, lock, pool, termination_manager):
+ """Constructor.
+
+ Args:
+ operation_id: The operation's ID.
+ ticket_sink: A callable that accepts tickets and sends them to the other
+ side of the operation.
+ lock: The operation-servicing-wide lock object.
+ pool: A thread pool in which the work of transmitting tickets will be
+ performed.
+ termination_manager: The _interfaces.TerminationManager associated with
+ this operation.
+ """
+ self._lock = lock
+ self._pool = pool
+ self._ticket_sink = ticket_sink
+ self._operation_id = operation_id
+ self._termination_manager = termination_manager
+ self._expiration_manager = None
+
+ self._lowest_unused_sequence_number = 0
+ self._remote_allowance = 1
+ self._remote_complete = False
+ self._timeout = None
+ self._local_allowance = 0
+ self._initial_metadata = None
+ self._payloads = []
+ self._completion = None
+ self._aborted = False
+ self._abortion_outcome = None
+ self._transmitting = False
+
+ def set_expiration_manager(self, expiration_manager):
+ """Sets the ExpirationManager with which this manager will cooperate."""
+ self._expiration_manager = expiration_manager
+
+ def _next_ticket(self):
+ """Creates the next ticket to be transmitted.
+
+ Returns:
+ A links.Ticket to be sent to the other side of the operation or None if
+ there is nothing to be sent at this time.
+ """
+ if self._aborted:
+ if self._abortion_outcome is None:
+ return None
+ else:
+ termination = _constants.ABORTION_OUTCOME_TO_TICKET_TERMINATION[
+ self._abortion_outcome]
+ if termination is None:
+ return None
+ else:
+ self._abortion_outcome = None
+ if self._completion is None:
+ code, message = None, None
+ else:
+ code, message = self._completion.code, self._completion.message
+ return links.Ticket(
+ self._operation_id, self._lowest_unused_sequence_number, None,
+ None, None, None, None, None, None, None, code, message,
+ termination, None)
+
+ action = False
+ # TODO(nathaniel): Support other subscriptions.
+ local_subscription = links.Ticket.Subscription.FULL
+ timeout = self._timeout
+ if timeout is not None:
+ self._timeout = None
+ action = True
+ if self._local_allowance <= 0:
+ allowance = None
+ else:
+ allowance = self._local_allowance
+ self._local_allowance = 0
+ action = True
+ initial_metadata = self._initial_metadata
+ if initial_metadata is not None:
+ self._initial_metadata = None
+ action = True
+ if not self._payloads or self._remote_allowance <= 0:
+ payload = None
+ else:
+ payload = self._payloads.pop(0)
+ self._remote_allowance -= 1
+ action = True
+ if self._completion is None or self._payloads:
+ terminal_metadata, code, message, termination = None, None, None, None
+ else:
+ terminal_metadata, code, message, termination = _explode_completion(
+ self._completion)
+ self._completion = None
+ action = True
+
+ if action:
+ ticket = links.Ticket(
+ self._operation_id, self._lowest_unused_sequence_number, None, None,
+ local_subscription, timeout, allowance, initial_metadata, payload,
+ terminal_metadata, code, message, termination, None)
+ self._lowest_unused_sequence_number += 1
+ return ticket
+ else:
+ return None
+
+ def _transmit(self, ticket):
+ """Commences the transmission loop sending tickets.
+
+ Args:
+ ticket: A links.Ticket to be sent to the other side of the operation.
+ """
+ def transmit(ticket):
+ while True:
+ transmission_outcome = callable_util.call_logging_exceptions(
+ self._ticket_sink, _TRANSMISSION_EXCEPTION_LOG_MESSAGE, ticket)
+ if transmission_outcome.exception is None:
+ with self._lock:
+ if ticket.termination is links.Ticket.Termination.COMPLETION:
+ self._termination_manager.transmission_complete()
+ ticket = self._next_ticket()
+ if ticket is None:
+ self._transmitting = False
+ return
+ else:
+ with self._lock:
+ if self._termination_manager.outcome is None:
+ self._termination_manager.abort(base.Outcome.TRANSMISSION_FAILURE)
+ self._expiration_manager.terminate()
+ return
+
+ self._pool.submit(callable_util.with_exceptions_logged(
+ transmit, _constants.INTERNAL_ERROR_LOG_MESSAGE), ticket)
+ self._transmitting = True
+
+ def kick_off(
+ self, group, method, timeout, initial_metadata, payload, completion,
+ allowance):
+ """See _interfaces.TransmissionManager.kickoff for specification."""
+ # TODO(nathaniel): Support other subscriptions.
+ subscription = links.Ticket.Subscription.FULL
+ terminal_metadata, code, message, termination = _explode_completion(
+ completion)
+ self._remote_allowance = 1 if payload is None else 0
+ ticket = links.Ticket(
+ self._operation_id, 0, group, method, subscription, timeout, allowance,
+ initial_metadata, payload, terminal_metadata, code, message,
+ termination, None)
+ self._lowest_unused_sequence_number = 1
+ self._transmit(ticket)
+
+ def advance(self, initial_metadata, payload, completion, allowance):
+ """See _interfaces.TransmissionManager.advance for specification."""
+ effective_initial_metadata = initial_metadata
+ effective_payload = payload
+ effective_completion = completion
+ if allowance is not None and not self._remote_complete:
+ effective_allowance = allowance
+ else:
+ effective_allowance = None
+ if self._transmitting:
+ if effective_initial_metadata is not None:
+ self._initial_metadata = effective_initial_metadata
+ if effective_payload is not None:
+ self._payloads.append(effective_payload)
+ if effective_completion is not None:
+ self._completion = effective_completion
+ if effective_allowance is not None:
+ self._local_allowance += effective_allowance
+ else:
+ if effective_payload is not None:
+ if 0 < self._remote_allowance:
+ ticket_payload = effective_payload
+ self._remote_allowance -= 1
+ else:
+ self._payloads.append(effective_payload)
+ ticket_payload = None
+ else:
+ ticket_payload = None
+ if effective_completion is not None and not self._payloads:
+ ticket_completion = effective_completion
+ else:
+ self._completion = effective_completion
+ ticket_completion = None
+ if any(
+ (effective_initial_metadata, ticket_payload, ticket_completion,
+ effective_allowance)):
+ terminal_metadata, code, message, termination = _explode_completion(
+ completion)
+ ticket = links.Ticket(
+ self._operation_id, self._lowest_unused_sequence_number, None, None,
+ None, None, allowance, effective_initial_metadata, ticket_payload,
+ terminal_metadata, code, message, termination, None)
+ self._lowest_unused_sequence_number += 1
+ self._transmit(ticket)
+
+ def timeout(self, timeout):
+ """See _interfaces.TransmissionManager.timeout for specification."""
+ if self._transmitting:
+ self._timeout = timeout
+ else:
+ ticket = links.Ticket(
+ self._operation_id, self._lowest_unused_sequence_number, None, None,
+ None, timeout, None, None, None, None, None, None, None, None)
+ self._lowest_unused_sequence_number += 1
+ self._transmit(ticket)
+
+ def allowance(self, allowance):
+ """See _interfaces.TransmissionManager.allowance for specification."""
+ if self._transmitting or not self._payloads:
+ self._remote_allowance += allowance
+ else:
+ self._remote_allowance += allowance - 1
+ payload = self._payloads.pop(0)
+ if self._payloads:
+ completion = None
+ else:
+ completion = self._completion
+ self._completion = None
+ terminal_metadata, code, message, termination = _explode_completion(
+ completion)
+ ticket = links.Ticket(
+ self._operation_id, self._lowest_unused_sequence_number, None, None,
+ None, None, None, None, payload, terminal_metadata, code, message,
+ termination, None)
+ self._lowest_unused_sequence_number += 1
+ self._transmit(ticket)
+
+ def remote_complete(self):
+ """See _interfaces.TransmissionManager.remote_complete for specification."""
+ self._remote_complete = True
+ self._local_allowance = 0
+
+ def abort(self, outcome, code, message):
+ """See _interfaces.TransmissionManager.abort for specification."""
+ if self._transmitting:
+ self._aborted, self._abortion_outcome = True, outcome
+ else:
+ self._aborted = True
+ if outcome is not None:
+ termination = _constants.ABORTION_OUTCOME_TO_TICKET_TERMINATION[
+ outcome]
+ if termination is not None:
+ if self._completion is None:
+ code, message = None, None
+ else:
+ code, message = self._completion.code, self._completion.message
+ ticket = links.Ticket(
+ self._operation_id, self._lowest_unused_sequence_number, None,
+ None, None, None, None, None, None, None, code, message,
+ termination, None)
+ self._transmit(ticket)
diff --git a/src/python/grpcio/grpc/framework/core/_utilities.py b/src/python/grpcio/grpc/framework/core/_utilities.py
new file mode 100644
index 0000000000..5b0d798751
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/_utilities.py
@@ -0,0 +1,46 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Package-internal utilities."""
+
+import collections
+
+
+class ServicerPackage(
+ collections.namedtuple(
+ 'ServicerPackage', ('servicer', 'default_timeout', 'maximum_timeout'))):
+ """A trivial bundle class.
+
+ Attributes:
+ servicer: A base.Servicer.
+ default_timeout: A float indicating the length of time in seconds to allow
+ for an operation invoked without a timeout.
+ maximum_timeout: A float indicating the maximum length of time in seconds to
+ allow for an operation.
+ """
diff --git a/src/python/grpcio/grpc/framework/core/implementations.py b/src/python/grpcio/grpc/framework/core/implementations.py
new file mode 100644
index 0000000000..364a7faed4
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/core/implementations.py
@@ -0,0 +1,62 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Entry points into the ticket-exchange-based base layer implementation."""
+
+# base and links are referenced from specification in this module.
+from grpc.framework.core import _end
+from grpc.framework.interfaces.base import base # pylint: disable=unused-import
+from grpc.framework.interfaces.links import links # pylint: disable=unused-import
+
+
+def invocation_end_link():
+ """Creates a base.End-links.Link suitable for operation invocation.
+
+ Returns:
+ An object that is both a base.End and a links.Link, that supports operation
+ invocation, and that translates operation invocation into ticket exchange.
+ """
+ return _end.serviceless_end_link()
+
+
+def service_end_link(servicer, default_timeout, maximum_timeout):
+ """Creates a base.End-links.Link suitable for operation service.
+
+ Args:
+ servicer: A base.Servicer for servicing operations.
+ default_timeout: A length of time in seconds to be used as the default
+ time alloted for a single operation.
+ maximum_timeout: A length of time in seconds to be used as the maximum
+ time alloted for a single operation.
+
+ Returns:
+ An object that is both a base.End and a links.Link and that services
+ operations that arrive at it through ticket exchange.
+ """
+ return _end.serviceful_end_link(servicer, default_timeout, maximum_timeout)
diff --git a/src/python/grpcio/grpc/framework/crust/__init__.py b/src/python/grpcio/grpc/framework/crust/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/crust/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/grpcio/grpc/framework/crust/_calls.py b/src/python/grpcio/grpc/framework/crust/_calls.py
new file mode 100644
index 0000000000..f9077bedfe
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/crust/_calls.py
@@ -0,0 +1,204 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Utility functions for invoking RPCs."""
+
+from grpc.framework.crust import _control
+from grpc.framework.interfaces.base import utilities
+from grpc.framework.interfaces.face import face
+
+_ITERATOR_EXCEPTION_LOG_MESSAGE = 'Exception iterating over requests!'
+
+_EMPTY_COMPLETION = utilities.completion(None, None, None)
+
+
+def _invoke(end, group, method, timeout, initial_metadata, payload, complete):
+ rendezvous = _control.Rendezvous(None, None)
+ operation_context, operator = end.operate(
+ group, method, utilities.full_subscription(rendezvous), timeout,
+ initial_metadata=initial_metadata, payload=payload,
+ completion=_EMPTY_COMPLETION if complete else None)
+ rendezvous.set_operator_and_context(operator, operation_context)
+ outcome = operation_context.add_termination_callback(rendezvous.set_outcome)
+ if outcome is not None:
+ rendezvous.set_outcome(outcome)
+ return rendezvous, operation_context, outcome
+
+
+def _event_return_unary(
+ receiver, abortion_callback, rendezvous, operation_context, outcome, pool):
+ if outcome is None:
+ def in_pool():
+ abortion = rendezvous.add_abortion_callback(abortion_callback)
+ if abortion is None:
+ try:
+ receiver.initial_metadata(rendezvous.initial_metadata())
+ receiver.response(next(rendezvous))
+ receiver.complete(
+ rendezvous.terminal_metadata(), rendezvous.code(),
+ rendezvous.details())
+ except face.AbortionError:
+ pass
+ else:
+ abortion_callback(abortion)
+ pool.submit(_control.pool_wrap(in_pool, operation_context))
+ return rendezvous
+
+
+def _event_return_stream(
+ receiver, abortion_callback, rendezvous, operation_context, outcome, pool):
+ if outcome is None:
+ def in_pool():
+ abortion = rendezvous.add_abortion_callback(abortion_callback)
+ if abortion is None:
+ try:
+ receiver.initial_metadata(rendezvous.initial_metadata())
+ for response in rendezvous:
+ receiver.response(response)
+ receiver.complete(
+ rendezvous.terminal_metadata(), rendezvous.code(),
+ rendezvous.details())
+ except face.AbortionError:
+ pass
+ else:
+ abortion_callback(abortion)
+ pool.submit(_control.pool_wrap(in_pool, operation_context))
+ return rendezvous
+
+
+def blocking_unary_unary(
+ end, group, method, timeout, with_call, initial_metadata, payload):
+ """Services in a blocking fashion a unary-unary servicer method."""
+ rendezvous, unused_operation_context, unused_outcome = _invoke(
+ end, group, method, timeout, initial_metadata, payload, True)
+ if with_call:
+ return next(rendezvous, rendezvous)
+ else:
+ return next(rendezvous)
+
+
+def future_unary_unary(end, group, method, timeout, initial_metadata, payload):
+ """Services a value-in value-out servicer method by returning a Future."""
+ rendezvous, unused_operation_context, unused_outcome = _invoke(
+ end, group, method, timeout, initial_metadata, payload, True)
+ return rendezvous
+
+
+def inline_unary_stream(end, group, method, timeout, initial_metadata, payload):
+ """Services a value-in stream-out servicer method."""
+ rendezvous, unused_operation_context, unused_outcome = _invoke(
+ end, group, method, timeout, initial_metadata, payload, True)
+ return rendezvous
+
+
+def blocking_stream_unary(
+ end, group, method, timeout, with_call, initial_metadata, payload_iterator,
+ pool):
+ """Services in a blocking fashion a stream-in value-out servicer method."""
+ rendezvous, operation_context, outcome = _invoke(
+ end, group, method, timeout, initial_metadata, None, False)
+ if outcome is None:
+ def in_pool():
+ for payload in payload_iterator:
+ rendezvous.consume(payload)
+ rendezvous.terminate()
+ pool.submit(_control.pool_wrap(in_pool, operation_context))
+ if with_call:
+ return next(rendezvous), rendezvous
+ else:
+ return next(rendezvous)
+ else:
+ if with_call:
+ return next(rendezvous), rendezvous
+ else:
+ return next(rendezvous)
+
+
+def future_stream_unary(
+ end, group, method, timeout, initial_metadata, payload_iterator, pool):
+ """Services a stream-in value-out servicer method by returning a Future."""
+ rendezvous, operation_context, outcome = _invoke(
+ end, group, method, timeout, initial_metadata, None, False)
+ if outcome is None:
+ def in_pool():
+ for payload in payload_iterator:
+ rendezvous.consume(payload)
+ rendezvous.terminate()
+ pool.submit(_control.pool_wrap(in_pool, operation_context))
+ return rendezvous
+
+
+def inline_stream_stream(
+ end, group, method, timeout, initial_metadata, payload_iterator, pool):
+ """Services a stream-in stream-out servicer method."""
+ rendezvous, operation_context, outcome = _invoke(
+ end, group, method, timeout, initial_metadata, None, False)
+ if outcome is None:
+ def in_pool():
+ for payload in payload_iterator:
+ rendezvous.consume(payload)
+ rendezvous.terminate()
+ pool.submit(_control.pool_wrap(in_pool, operation_context))
+ return rendezvous
+
+
+def event_unary_unary(
+ end, group, method, timeout, initial_metadata, payload, receiver,
+ abortion_callback, pool):
+ rendezvous, operation_context, outcome = _invoke(
+ end, group, method, timeout, initial_metadata, payload, True)
+ return _event_return_unary(
+ receiver, abortion_callback, rendezvous, operation_context, outcome, pool)
+
+
+def event_unary_stream(
+ end, group, method, timeout, initial_metadata, payload,
+ receiver, abortion_callback, pool):
+ rendezvous, operation_context, outcome = _invoke(
+ end, group, method, timeout, initial_metadata, payload, True)
+ return _event_return_stream(
+ receiver, abortion_callback, rendezvous, operation_context, outcome, pool)
+
+
+def event_stream_unary(
+ end, group, method, timeout, initial_metadata, receiver, abortion_callback,
+ pool):
+ rendezvous, operation_context, outcome = _invoke(
+ end, group, method, timeout, initial_metadata, None, False)
+ return _event_return_unary(
+ receiver, abortion_callback, rendezvous, operation_context, outcome, pool)
+
+
+def event_stream_stream(
+ end, group, method, timeout, initial_metadata, receiver, abortion_callback,
+ pool):
+ rendezvous, operation_context, outcome = _invoke(
+ end, group, method, timeout, initial_metadata, None, False)
+ return _event_return_stream(
+ receiver, abortion_callback, rendezvous, operation_context, outcome, pool)
diff --git a/src/python/grpcio/grpc/framework/crust/_control.py b/src/python/grpcio/grpc/framework/crust/_control.py
new file mode 100644
index 0000000000..01de3c15bd
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/crust/_control.py
@@ -0,0 +1,545 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""State and behavior for translating between sync and async control flow."""
+
+import collections
+import enum
+import sys
+import threading
+import time
+
+from grpc.framework.foundation import abandonment
+from grpc.framework.foundation import callable_util
+from grpc.framework.foundation import future
+from grpc.framework.foundation import stream
+from grpc.framework.interfaces.base import base
+from grpc.framework.interfaces.base import utilities
+from grpc.framework.interfaces.face import face
+
+_DONE_CALLBACK_LOG_MESSAGE = 'Exception calling Future "done" callback!'
+_INTERNAL_ERROR_LOG_MESSAGE = ':-( RPC Framework (Crust) Internal Error! )-:'
+
+_CANNOT_SET_INITIAL_METADATA = (
+ 'Could not set initial metadata - has it already been set, or has a ' +
+ 'payload already been sent?')
+_CANNOT_SET_TERMINAL_METADATA = (
+ 'Could not set terminal metadata - has it already been set, or has RPC ' +
+ 'completion already been indicated?')
+_CANNOT_SET_CODE = (
+ 'Could not set code - has it already been set, or has RPC completion ' +
+ 'already been indicated?')
+_CANNOT_SET_DETAILS = (
+ 'Could not set details - has it already been set, or has RPC completion ' +
+ 'already been indicated?')
+
+
+class _DummyOperator(base.Operator):
+
+ def advance(
+ self, initial_metadata=None, payload=None, completion=None,
+ allowance=None):
+ pass
+
+_DUMMY_OPERATOR = _DummyOperator()
+
+
+class _Awaited(
+ collections.namedtuple('_Awaited', ('kind', 'value',))):
+
+ @enum.unique
+ class Kind(enum.Enum):
+ NOT_YET_ARRIVED = 'not yet arrived'
+ ARRIVED = 'arrived'
+
+_NOT_YET_ARRIVED = _Awaited(_Awaited.Kind.NOT_YET_ARRIVED, None)
+_ARRIVED_AND_NONE = _Awaited(_Awaited.Kind.ARRIVED, None)
+
+
+class _Transitory(
+ collections.namedtuple('_Transitory', ('kind', 'value',))):
+
+ @enum.unique
+ class Kind(enum.Enum):
+ NOT_YET_SEEN = 'not yet seen'
+ PRESENT = 'present'
+ GONE = 'gone'
+
+_NOT_YET_SEEN = _Transitory(_Transitory.Kind.NOT_YET_SEEN, None)
+_GONE = _Transitory(_Transitory.Kind.GONE, None)
+
+
+class _Termination(
+ collections.namedtuple(
+ '_Termination', ('terminated', 'abortion', 'abortion_error',))):
+ """Values indicating whether and how an RPC has terminated.
+
+ Attributes:
+ terminated: A boolean indicating whether or not the RPC has terminated.
+ abortion: A face.Abortion value describing the RPC's abortion or None if the
+ RPC did not abort.
+ abortion_error: A face.AbortionError describing the RPC's abortion or None
+ if the RPC did not abort.
+ """
+
+_NOT_TERMINATED = _Termination(False, None, None)
+
+_OPERATION_OUTCOME_TO_TERMINATION_CONSTRUCTOR = {
+ base.Outcome.COMPLETED: lambda *unused_args: _Termination(True, None, None),
+ base.Outcome.CANCELLED: lambda *args: _Termination(
+ True, face.Abortion(face.Abortion.Kind.CANCELLED, *args),
+ face.CancellationError(*args)),
+ base.Outcome.EXPIRED: lambda *args: _Termination(
+ True, face.Abortion(face.Abortion.Kind.EXPIRED, *args),
+ face.ExpirationError(*args)),
+ base.Outcome.LOCAL_SHUTDOWN: lambda *args: _Termination(
+ True, face.Abortion(face.Abortion.Kind.LOCAL_SHUTDOWN, *args),
+ face.LocalShutdownError(*args)),
+ base.Outcome.REMOTE_SHUTDOWN: lambda *args: _Termination(
+ True, face.Abortion(face.Abortion.Kind.REMOTE_SHUTDOWN, *args),
+ face.RemoteShutdownError(*args)),
+ base.Outcome.RECEPTION_FAILURE: lambda *args: _Termination(
+ True, face.Abortion(face.Abortion.Kind.NETWORK_FAILURE, *args),
+ face.NetworkError(*args)),
+ base.Outcome.TRANSMISSION_FAILURE: lambda *args: _Termination(
+ True, face.Abortion(face.Abortion.Kind.NETWORK_FAILURE, *args),
+ face.NetworkError(*args)),
+ base.Outcome.LOCAL_FAILURE: lambda *args: _Termination(
+ True, face.Abortion(face.Abortion.Kind.LOCAL_FAILURE, *args),
+ face.LocalError(*args)),
+ base.Outcome.REMOTE_FAILURE: lambda *args: _Termination(
+ True, face.Abortion(face.Abortion.Kind.REMOTE_FAILURE, *args),
+ face.RemoteError(*args)),
+}
+
+
+def _wait_once_until(condition, until):
+ if until is None:
+ condition.wait()
+ else:
+ remaining = until - time.time()
+ if remaining < 0:
+ raise future.TimeoutError()
+ else:
+ condition.wait(timeout=remaining)
+
+
+def _done_callback_as_operation_termination_callback(
+ done_callback, rendezvous):
+ def operation_termination_callback(operation_outcome):
+ rendezvous.set_outcome(operation_outcome)
+ done_callback(rendezvous)
+ return operation_termination_callback
+
+
+def _abortion_callback_as_operation_termination_callback(
+ rpc_abortion_callback, rendezvous_set_outcome):
+ def operation_termination_callback(operation_outcome):
+ termination = rendezvous_set_outcome(operation_outcome)
+ if termination.abortion is not None:
+ rpc_abortion_callback(termination.abortion)
+ return operation_termination_callback
+
+
+class Rendezvous(base.Operator, future.Future, stream.Consumer, face.Call):
+ """A rendez-vous for the threads of an operation.
+
+ Instances of this object present iterator and stream.Consumer interfaces for
+ interacting with application code and present a base.Operator interface and
+ maintain a base.Operator internally for interacting with base interface code.
+ """
+
+ def __init__(self, operator, operation_context):
+ self._condition = threading.Condition()
+
+ self._operator = operator
+ self._operation_context = operation_context
+
+ self._up_initial_metadata = _NOT_YET_ARRIVED
+ self._up_payload = None
+ self._up_allowance = 1
+ self._up_completion = _NOT_YET_ARRIVED
+ self._down_initial_metadata = _NOT_YET_SEEN
+ self._down_payload = None
+ self._down_allowance = 1
+ self._down_terminal_metadata = _NOT_YET_SEEN
+ self._down_code = _NOT_YET_SEEN
+ self._down_details = _NOT_YET_SEEN
+
+ self._termination = _NOT_TERMINATED
+
+ # The semantics of future.Future.cancel and future.Future.cancelled are
+ # slightly wonky, so they have to be tracked separately from the rest of the
+ # result of the RPC. This field tracks whether cancellation was requested
+ # prior to termination of the RPC
+ self._cancelled = False
+
+ def set_operator_and_context(self, operator, operation_context):
+ with self._condition:
+ self._operator = operator
+ self._operation_context = operation_context
+
+ def _down_completion(self):
+ if self._down_terminal_metadata.kind is _Transitory.Kind.NOT_YET_SEEN:
+ terminal_metadata = None
+ self._down_terminal_metadata = _GONE
+ elif self._down_terminal_metadata.kind is _Transitory.Kind.PRESENT:
+ terminal_metadata = self._down_terminal_metadata.value
+ self._down_terminal_metadata = _GONE
+ else:
+ terminal_metadata = None
+ if self._down_code.kind is _Transitory.Kind.NOT_YET_SEEN:
+ code = None
+ self._down_code = _GONE
+ elif self._down_code.kind is _Transitory.Kind.PRESENT:
+ code = self._down_code.value
+ self._down_code = _GONE
+ else:
+ code = None
+ if self._down_details.kind is _Transitory.Kind.NOT_YET_SEEN:
+ details = None
+ self._down_details = _GONE
+ elif self._down_details.kind is _Transitory.Kind.PRESENT:
+ details = self._down_details.value
+ self._down_details = _GONE
+ else:
+ details = None
+ return utilities.completion(terminal_metadata, code, details)
+
+ def _set_outcome(self, outcome):
+ if not self._termination.terminated:
+ self._operator = _DUMMY_OPERATOR
+ self._operation_context = None
+ self._down_initial_metadata = _GONE
+ self._down_payload = None
+ self._down_terminal_metadata = _GONE
+ self._down_code = _GONE
+ self._down_details = _GONE
+
+ if self._up_initial_metadata.kind is _Awaited.Kind.NOT_YET_ARRIVED:
+ initial_metadata = None
+ else:
+ initial_metadata = self._up_initial_metadata.value
+ if self._up_completion.kind is _Awaited.Kind.NOT_YET_ARRIVED:
+ terminal_metadata, code, details = None, None, None
+ else:
+ terminal_metadata = self._up_completion.value.terminal_metadata
+ code = self._up_completion.value.code
+ details = self._up_completion.value.message
+ self._termination = _OPERATION_OUTCOME_TO_TERMINATION_CONSTRUCTOR[
+ outcome](initial_metadata, terminal_metadata, code, details)
+
+ self._condition.notify_all()
+
+ return self._termination
+
+ def advance(
+ self, initial_metadata=None, payload=None, completion=None,
+ allowance=None):
+ with self._condition:
+ if initial_metadata is not None:
+ self._up_initial_metadata = _Awaited(
+ _Awaited.Kind.ARRIVED, initial_metadata)
+ if payload is not None:
+ if self._up_initial_metadata.kind is _Awaited.Kind.NOT_YET_ARRIVED:
+ self._up_initial_metadata = _ARRIVED_AND_NONE
+ self._up_payload = payload
+ self._up_allowance -= 1
+ if completion is not None:
+ if self._up_initial_metadata.kind is _Awaited.Kind.NOT_YET_ARRIVED:
+ self._up_initial_metadata = _ARRIVED_AND_NONE
+ self._up_completion = _Awaited(
+ _Awaited.Kind.ARRIVED, completion)
+ if allowance is not None:
+ if self._down_payload is not None:
+ self._operator.advance(payload=self._down_payload)
+ self._down_payload = None
+ self._down_allowance += allowance - 1
+ else:
+ self._down_allowance += allowance
+ self._condition.notify_all()
+
+ def cancel(self):
+ with self._condition:
+ if self._operation_context is not None:
+ self._operation_context.cancel()
+ self._cancelled = True
+ return False
+
+ def cancelled(self):
+ with self._condition:
+ return self._cancelled
+
+ def running(self):
+ with self._condition:
+ return not self._termination.terminated
+
+ def done(self):
+ with self._condition:
+ return self._termination.terminated
+
+ def result(self, timeout=None):
+ until = None if timeout is None else time.time() + timeout
+ with self._condition:
+ while True:
+ if self._termination.terminated:
+ if self._termination.abortion is None:
+ return self._up_payload
+ elif self._termination.abortion.kind is face.Abortion.Kind.CANCELLED:
+ raise future.CancelledError()
+ else:
+ raise self._termination.abortion_error # pylint: disable=raising-bad-type
+ else:
+ _wait_once_until(self._condition, until)
+
+ def exception(self, timeout=None):
+ until = None if timeout is None else time.time() + timeout
+ with self._condition:
+ while True:
+ if self._termination.terminated:
+ if self._termination.abortion is None:
+ return None
+ else:
+ return self._termination.abortion_error
+ else:
+ _wait_once_until(self._condition, until)
+
+ def traceback(self, timeout=None):
+ until = None if timeout is None else time.time() + timeout
+ with self._condition:
+ while True:
+ if self._termination.terminated:
+ if self._termination.abortion_error is None:
+ return None
+ else:
+ abortion_error = self._termination.abortion_error
+ break
+ else:
+ _wait_once_until(self._condition, until)
+
+ try:
+ raise abortion_error
+ except face.AbortionError:
+ return sys.exc_info()[2]
+
+ def add_done_callback(self, fn):
+ with self._condition:
+ if self._operation_context is not None:
+ outcome = self._operation_context.add_termination_callback(
+ _done_callback_as_operation_termination_callback(fn, self))
+ if outcome is None:
+ return
+ else:
+ self._set_outcome(outcome)
+
+ fn(self)
+
+ def consume(self, value):
+ with self._condition:
+ while True:
+ if self._termination.terminated:
+ return
+ elif 0 < self._down_allowance:
+ self._operator.advance(payload=value)
+ self._down_allowance -= 1
+ return
+ else:
+ self._condition.wait()
+
+ def terminate(self):
+ with self._condition:
+ if self._termination.terminated:
+ return
+ elif self._down_code.kind is _Transitory.Kind.GONE:
+ # Conform to specified idempotence of terminate by ignoring extra calls.
+ return
+ else:
+ completion = self._down_completion()
+ self._operator.advance(completion=completion)
+
+ def consume_and_terminate(self, value):
+ with self._condition:
+ while True:
+ if self._termination.terminated:
+ return
+ elif 0 < self._down_allowance:
+ completion = self._down_completion()
+ self._operator.advance(payload=value, completion=completion)
+ return
+ else:
+ self._condition.wait()
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ with self._condition:
+ while True:
+ if self._termination.abortion_error is not None:
+ raise self._termination.abortion_error
+ elif self._up_payload is not None:
+ payload = self._up_payload
+ self._up_payload = None
+ if self._up_completion.kind is _Awaited.Kind.NOT_YET_ARRIVED:
+ self._operator.advance(allowance=1)
+ return payload
+ elif self._up_completion.kind is _Awaited.Kind.ARRIVED:
+ raise StopIteration()
+ else:
+ self._condition.wait()
+
+ def is_active(self):
+ with self._condition:
+ return not self._termination.terminated
+
+ def time_remaining(self):
+ if self._operation_context is None:
+ return 0
+ else:
+ return self._operation_context.time_remaining()
+
+ def add_abortion_callback(self, abortion_callback):
+ with self._condition:
+ if self._operation_context is None:
+ return self._termination.abortion
+ else:
+ outcome = self._operation_context.add_termination_callback(
+ _abortion_callback_as_operation_termination_callback(
+ abortion_callback, self.set_outcome))
+ if outcome is not None:
+ return self._set_outcome(outcome).abortion
+ else:
+ return self._termination.abortion
+
+ def initial_metadata(self):
+ with self._condition:
+ while True:
+ if self._up_initial_metadata.kind is _Awaited.Kind.ARRIVED:
+ return self._up_initial_metadata.value
+ elif self._termination.terminated:
+ return None
+ else:
+ self._condition.wait()
+
+ def terminal_metadata(self):
+ with self._condition:
+ while True:
+ if self._up_completion.kind is _Awaited.Kind.ARRIVED:
+ return self._up_completion.value.terminal_metadata
+ elif self._termination.terminated:
+ return None
+ else:
+ self._condition.wait()
+
+ def code(self):
+ with self._condition:
+ while True:
+ if self._up_completion.kind is _Awaited.Kind.ARRIVED:
+ return self._up_completion.value.code
+ elif self._termination.terminated:
+ return None
+ else:
+ self._condition.wait()
+
+ def details(self):
+ with self._condition:
+ while True:
+ if self._up_completion.kind is _Awaited.Kind.ARRIVED:
+ return self._up_completion.value.message
+ elif self._termination.terminated:
+ return None
+ else:
+ self._condition.wait()
+
+ def set_initial_metadata(self, initial_metadata):
+ with self._condition:
+ if (self._down_initial_metadata.kind is not
+ _Transitory.Kind.NOT_YET_SEEN):
+ raise ValueError(_CANNOT_SET_INITIAL_METADATA)
+ else:
+ self._down_initial_metadata = _GONE
+ self._operator.advance(initial_metadata=initial_metadata)
+
+ def set_terminal_metadata(self, terminal_metadata):
+ with self._condition:
+ if (self._down_terminal_metadata.kind is not
+ _Transitory.Kind.NOT_YET_SEEN):
+ raise ValueError(_CANNOT_SET_TERMINAL_METADATA)
+ else:
+ self._down_terminal_metadata = _Transitory(
+ _Transitory.Kind.PRESENT, terminal_metadata)
+
+ def set_code(self, code):
+ with self._condition:
+ if self._down_code.kind is not _Transitory.Kind.NOT_YET_SEEN:
+ raise ValueError(_CANNOT_SET_CODE)
+ else:
+ self._down_code = _Transitory(_Transitory.Kind.PRESENT, code)
+
+ def set_details(self, details):
+ with self._condition:
+ if self._down_details.kind is not _Transitory.Kind.NOT_YET_SEEN:
+ raise ValueError(_CANNOT_SET_DETAILS)
+ else:
+ self._down_details = _Transitory(_Transitory.Kind.PRESENT, details)
+
+ def set_outcome(self, outcome):
+ with self._condition:
+ return self._set_outcome(outcome)
+
+
+def pool_wrap(behavior, operation_context):
+ """Wraps an operation-related behavior so that it may be called in a pool.
+
+ Args:
+ behavior: A callable related to carrying out an operation.
+ operation_context: A base_interfaces.OperationContext for the operation.
+
+ Returns:
+ A callable that when called carries out the behavior of the given callable
+ and handles whatever exceptions it raises appropriately.
+ """
+ def translation(*args):
+ try:
+ behavior(*args)
+ except (
+ abandonment.Abandoned,
+ face.CancellationError,
+ face.ExpirationError,
+ face.LocalShutdownError,
+ face.RemoteShutdownError,
+ face.NetworkError,
+ face.RemoteError,
+ ) as e:
+ if operation_context.outcome() is None:
+ operation_context.fail(e)
+ except Exception as e:
+ operation_context.fail(e)
+ return callable_util.with_exceptions_logged(
+ translation, _INTERNAL_ERROR_LOG_MESSAGE)
diff --git a/src/python/grpcio/grpc/framework/crust/_service.py b/src/python/grpcio/grpc/framework/crust/_service.py
new file mode 100644
index 0000000000..2455a58f59
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/crust/_service.py
@@ -0,0 +1,166 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Behaviors for servicing RPCs."""
+
+from grpc.framework.crust import _control
+from grpc.framework.foundation import abandonment
+from grpc.framework.interfaces.base import utilities
+from grpc.framework.interfaces.face import face
+
+
+class _ServicerContext(face.ServicerContext):
+
+ def __init__(self, rendezvous):
+ self._rendezvous = rendezvous
+
+ def is_active(self):
+ return self._rendezvous.is_active()
+
+ def time_remaining(self):
+ return self._rendezvous.time_remaining()
+
+ def add_abortion_callback(self, abortion_callback):
+ return self._rendezvous.add_abortion_callback(abortion_callback)
+
+ def cancel(self):
+ self._rendezvous.cancel()
+
+ def invocation_metadata(self):
+ return self._rendezvous.initial_metadata()
+
+ def initial_metadata(self, initial_metadata):
+ self._rendezvous.set_initial_metadata(initial_metadata)
+
+ def terminal_metadata(self, terminal_metadata):
+ self._rendezvous.set_terminal_metadata(terminal_metadata)
+
+ def code(self, code):
+ self._rendezvous.set_code(code)
+
+ def details(self, details):
+ self._rendezvous.set_details(details)
+
+
+def _adaptation(pool, in_pool):
+ def adaptation(operator, operation_context):
+ rendezvous = _control.Rendezvous(operator, operation_context)
+ outcome = operation_context.add_termination_callback(rendezvous.set_outcome)
+ if outcome is None:
+ pool.submit(_control.pool_wrap(in_pool, operation_context), rendezvous)
+ return utilities.full_subscription(rendezvous)
+ else:
+ raise abandonment.Abandoned()
+ return adaptation
+
+
+def adapt_inline_unary_unary(method, pool):
+ def in_pool(rendezvous):
+ request = next(rendezvous)
+ response = method(request, _ServicerContext(rendezvous))
+ rendezvous.consume_and_terminate(response)
+ return _adaptation(pool, in_pool)
+
+
+def adapt_inline_unary_stream(method, pool):
+ def in_pool(rendezvous):
+ request = next(rendezvous)
+ response_iterator = method(request, _ServicerContext(rendezvous))
+ for response in response_iterator:
+ rendezvous.consume(response)
+ rendezvous.terminate()
+ return _adaptation(pool, in_pool)
+
+
+def adapt_inline_stream_unary(method, pool):
+ def in_pool(rendezvous):
+ response = method(rendezvous, _ServicerContext(rendezvous))
+ rendezvous.consume_and_terminate(response)
+ return _adaptation(pool, in_pool)
+
+
+def adapt_inline_stream_stream(method, pool):
+ def in_pool(rendezvous):
+ response_iterator = method(rendezvous, _ServicerContext(rendezvous))
+ for response in response_iterator:
+ rendezvous.consume(response)
+ rendezvous.terminate()
+ return _adaptation(pool, in_pool)
+
+
+def adapt_event_unary_unary(method, pool):
+ def in_pool(rendezvous):
+ request = next(rendezvous)
+ method(
+ request, rendezvous.consume_and_terminate, _ServicerContext(rendezvous))
+ return _adaptation(pool, in_pool)
+
+
+def adapt_event_unary_stream(method, pool):
+ def in_pool(rendezvous):
+ request = next(rendezvous)
+ method(request, rendezvous, _ServicerContext(rendezvous))
+ return _adaptation(pool, in_pool)
+
+
+def adapt_event_stream_unary(method, pool):
+ def in_pool(rendezvous):
+ request_consumer = method(
+ rendezvous.consume_and_terminate, _ServicerContext(rendezvous))
+ for request in rendezvous:
+ request_consumer.consume(request)
+ request_consumer.terminate()
+ return _adaptation(pool, in_pool)
+
+
+def adapt_event_stream_stream(method, pool):
+ def in_pool(rendezvous):
+ request_consumer = method(rendezvous, _ServicerContext(rendezvous))
+ for request in rendezvous:
+ request_consumer.consume(request)
+ request_consumer.terminate()
+ return _adaptation(pool, in_pool)
+
+
+def adapt_multi_method(multi_method, pool):
+ def adaptation(group, method, operator, operation_context):
+ rendezvous = _control.Rendezvous(operator, operation_context)
+ outcome = operation_context.add_termination_callback(rendezvous.set_outcome)
+ if outcome is None:
+ def in_pool():
+ request_consumer = multi_method(
+ group, method, rendezvous, _ServicerContext(rendezvous))
+ for request in rendezvous:
+ request_consumer.consume(request)
+ request_consumer.terminate()
+ pool.submit(_control.pool_wrap(in_pool, operation_context), rendezvous)
+ return utilities.full_subscription(rendezvous)
+ else:
+ raise abandonment.Abandoned()
+ return adaptation
diff --git a/src/python/grpcio/grpc/framework/crust/implementations.py b/src/python/grpcio/grpc/framework/crust/implementations.py
new file mode 100644
index 0000000000..12f7e79641
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/crust/implementations.py
@@ -0,0 +1,352 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Entry points into the Crust layer of RPC Framework."""
+
+from grpc.framework.common import cardinality
+from grpc.framework.common import style
+from grpc.framework.crust import _calls
+from grpc.framework.crust import _service
+from grpc.framework.interfaces.base import base
+from grpc.framework.interfaces.face import face
+
+
+class _BaseServicer(base.Servicer):
+
+ def __init__(self, adapted_methods, adapted_multi_method):
+ self._adapted_methods = adapted_methods
+ self._adapted_multi_method = adapted_multi_method
+
+ def service(self, group, method, context, output_operator):
+ adapted_method = self._adapted_methods.get((group, method), None)
+ if adapted_method is not None:
+ return adapted_method(output_operator, context)
+ elif self._adapted_multi_method is not None:
+ try:
+ return self._adapted_multi_method.service(
+ group, method, output_operator, context)
+ except face.NoSuchMethodError:
+ raise base.NoSuchMethodError()
+ else:
+ raise base.NoSuchMethodError()
+
+
+class _UnaryUnaryMultiCallable(face.UnaryUnaryMultiCallable):
+
+ def __init__(self, end, group, method, pool):
+ self._end = end
+ self._group = group
+ self._method = method
+ self._pool = pool
+
+ def __call__(
+ self, request, timeout, metadata=None, with_call=False):
+ return _calls.blocking_unary_unary(
+ self._end, self._group, self._method, timeout, with_call,
+ metadata, request)
+
+ def future(self, request, timeout, metadata=None):
+ return _calls.future_unary_unary(
+ self._end, self._group, self._method, timeout, metadata,
+ request)
+
+ def event(
+ self, request, receiver, abortion_callback, timeout,
+ metadata=None):
+ return _calls.event_unary_unary(
+ self._end, self._group, self._method, timeout, metadata,
+ request, receiver, abortion_callback, self._pool)
+
+
+class _UnaryStreamMultiCallable(face.UnaryStreamMultiCallable):
+
+ def __init__(self, end, group, method, pool):
+ self._end = end
+ self._group = group
+ self._method = method
+ self._pool = pool
+
+ def __call__(self, request, timeout, metadata=None):
+ return _calls.inline_unary_stream(
+ self._end, self._group, self._method, timeout, metadata,
+ request)
+
+ def event(
+ self, request, receiver, abortion_callback, timeout,
+ metadata=None):
+ return _calls.event_unary_stream(
+ self._end, self._group, self._method, timeout, metadata,
+ request, receiver, abortion_callback, self._pool)
+
+
+class _StreamUnaryMultiCallable(face.StreamUnaryMultiCallable):
+
+ def __init__(self, end, group, method, pool):
+ self._end = end
+ self._group = group
+ self._method = method
+ self._pool = pool
+
+ def __call__(
+ self, request_iterator, timeout, metadata=None,
+ with_call=False):
+ return _calls.blocking_stream_unary(
+ self._end, self._group, self._method, timeout, with_call,
+ metadata, request_iterator, self._pool)
+
+ def future(self, request_iterator, timeout, metadata=None):
+ return _calls.future_stream_unary(
+ self._end, self._group, self._method, timeout, metadata,
+ request_iterator, self._pool)
+
+ def event(
+ self, receiver, abortion_callback, timeout, metadata=None):
+ return _calls.event_stream_unary(
+ self._end, self._group, self._method, timeout, metadata,
+ receiver, abortion_callback, self._pool)
+
+
+class _StreamStreamMultiCallable(face.StreamStreamMultiCallable):
+
+ def __init__(self, end, group, method, pool):
+ self._end = end
+ self._group = group
+ self._method = method
+ self._pool = pool
+
+ def __call__(self, request_iterator, timeout, metadata=None):
+ return _calls.inline_stream_stream(
+ self._end, self._group, self._method, timeout, metadata,
+ request_iterator, self._pool)
+
+ def event(
+ self, receiver, abortion_callback, timeout, metadata=None):
+ return _calls.event_stream_stream(
+ self._end, self._group, self._method, timeout, metadata,
+ receiver, abortion_callback, self._pool)
+
+
+class _GenericStub(face.GenericStub):
+ """An face.GenericStub implementation."""
+
+ def __init__(self, end, pool):
+ self._end = end
+ self._pool = pool
+
+ def blocking_unary_unary(
+ self, group, method, request, timeout, metadata=None,
+ with_call=None):
+ return _calls.blocking_unary_unary(
+ self._end, group, method, timeout, with_call, metadata,
+ request)
+
+ def future_unary_unary(
+ self, group, method, request, timeout, metadata=None):
+ return _calls.future_unary_unary(
+ self._end, group, method, timeout, metadata, request)
+
+ def inline_unary_stream(
+ self, group, method, request, timeout, metadata=None):
+ return _calls.inline_unary_stream(
+ self._end, group, method, timeout, metadata, request)
+
+ def blocking_stream_unary(
+ self, group, method, request_iterator, timeout, metadata=None,
+ with_call=None):
+ return _calls.blocking_stream_unary(
+ self._end, group, method, timeout, with_call, metadata,
+ request_iterator, self._pool)
+
+ def future_stream_unary(
+ self, group, method, request_iterator, timeout, metadata=None):
+ return _calls.future_stream_unary(
+ self._end, group, method, timeout, metadata,
+ request_iterator, self._pool)
+
+ def inline_stream_stream(
+ self, group, method, request_iterator, timeout, metadata=None):
+ return _calls.inline_stream_stream(
+ self._end, group, method, timeout, metadata,
+ request_iterator, self._pool)
+
+ def event_unary_unary(
+ self, group, method, request, receiver, abortion_callback, timeout,
+ metadata=None):
+ return _calls.event_unary_unary(
+ self._end, group, method, timeout, metadata, request,
+ receiver, abortion_callback, self._pool)
+
+ def event_unary_stream(
+ self, group, method, request, receiver, abortion_callback, timeout,
+ metadata=None):
+ return _calls.event_unary_stream(
+ self._end, group, method, timeout, metadata, request,
+ receiver, abortion_callback, self._pool)
+
+ def event_stream_unary(
+ self, group, method, receiver, abortion_callback, timeout,
+ metadata=None):
+ return _calls.event_stream_unary(
+ self._end, group, method, timeout, metadata, receiver,
+ abortion_callback, self._pool)
+
+ def event_stream_stream(
+ self, group, method, receiver, abortion_callback, timeout,
+ metadata=None):
+ return _calls.event_stream_stream(
+ self._end, group, method, timeout, metadata, receiver,
+ abortion_callback, self._pool)
+
+ def unary_unary(self, group, method):
+ return _UnaryUnaryMultiCallable(self._end, group, method, self._pool)
+
+ def unary_stream(self, group, method):
+ return _UnaryStreamMultiCallable(self._end, group, method, self._pool)
+
+ def stream_unary(self, group, method):
+ return _StreamUnaryMultiCallable(self._end, group, method, self._pool)
+
+ def stream_stream(self, group, method):
+ return _StreamStreamMultiCallable(self._end, group, method, self._pool)
+
+
+class _DynamicStub(face.DynamicStub):
+ """An face.DynamicStub implementation."""
+
+ def __init__(self, end, group, cardinalities, pool):
+ self._end = end
+ self._group = group
+ self._cardinalities = cardinalities
+ self._pool = pool
+
+ def __getattr__(self, attr):
+ method_cardinality = self._cardinalities.get(attr)
+ if method_cardinality is cardinality.Cardinality.UNARY_UNARY:
+ return _UnaryUnaryMultiCallable(self._end, self._group, attr, self._pool)
+ elif method_cardinality is cardinality.Cardinality.UNARY_STREAM:
+ return _UnaryStreamMultiCallable(self._end, self._group, attr, self._pool)
+ elif method_cardinality is cardinality.Cardinality.STREAM_UNARY:
+ return _StreamUnaryMultiCallable(self._end, self._group, attr, self._pool)
+ elif method_cardinality is cardinality.Cardinality.STREAM_STREAM:
+ return _StreamStreamMultiCallable(
+ self._end, self._group, attr, self._pool)
+ else:
+ raise AttributeError('_DynamicStub object has no attribute "%s"!' % attr)
+
+
+def _adapt_method_implementations(method_implementations, pool):
+ adapted_implementations = {}
+ for name, method_implementation in method_implementations.iteritems():
+ if method_implementation.style is style.Service.INLINE:
+ if method_implementation.cardinality is cardinality.Cardinality.UNARY_UNARY:
+ adapted_implementations[name] = _service.adapt_inline_unary_unary(
+ method_implementation.unary_unary_inline, pool)
+ elif method_implementation.cardinality is cardinality.Cardinality.UNARY_STREAM:
+ adapted_implementations[name] = _service.adapt_inline_unary_stream(
+ method_implementation.unary_stream_inline, pool)
+ elif method_implementation.cardinality is cardinality.Cardinality.STREAM_UNARY:
+ adapted_implementations[name] = _service.adapt_inline_stream_unary(
+ method_implementation.stream_unary_inline, pool)
+ elif method_implementation.cardinality is cardinality.Cardinality.STREAM_STREAM:
+ adapted_implementations[name] = _service.adapt_inline_stream_stream(
+ method_implementation.stream_stream_inline, pool)
+ elif method_implementation.style is style.Service.EVENT:
+ if method_implementation.cardinality is cardinality.Cardinality.UNARY_UNARY:
+ adapted_implementations[name] = _service.adapt_event_unary_unary(
+ method_implementation.unary_unary_event, pool)
+ elif method_implementation.cardinality is cardinality.Cardinality.UNARY_STREAM:
+ adapted_implementations[name] = _service.adapt_event_unary_stream(
+ method_implementation.unary_stream_event, pool)
+ elif method_implementation.cardinality is cardinality.Cardinality.STREAM_UNARY:
+ adapted_implementations[name] = _service.adapt_event_stream_unary(
+ method_implementation.stream_unary_event, pool)
+ elif method_implementation.cardinality is cardinality.Cardinality.STREAM_STREAM:
+ adapted_implementations[name] = _service.adapt_event_stream_stream(
+ method_implementation.stream_stream_event, pool)
+ return adapted_implementations
+
+
+def servicer(method_implementations, multi_method_implementation, pool):
+ """Creates a base.Servicer.
+
+ It is guaranteed that any passed face.MultiMethodImplementation will
+ only be called to service an RPC if there is no
+ face.MethodImplementation for the RPC method in the passed
+ method_implementations dictionary.
+
+ Args:
+ method_implementations: A dictionary from RPC method name to
+ face.MethodImplementation object to be used to service the named
+ RPC method.
+ multi_method_implementation: An face.MultiMethodImplementation to be
+ used to service any RPCs not serviced by the
+ face.MethodImplementations given in the method_implementations
+ dictionary, or None.
+ pool: A thread pool.
+
+ Returns:
+ A base.Servicer that services RPCs via the given implementations.
+ """
+ adapted_implementations = _adapt_method_implementations(
+ method_implementations, pool)
+ adapted_multi_method_implementation = _service.adapt_multi_method(
+ multi_method_implementation, pool)
+ return _BaseServicer(
+ adapted_implementations, adapted_multi_method_implementation)
+
+
+def generic_stub(end, pool):
+ """Creates an face.GenericStub.
+
+ Args:
+ end: A base.End.
+ pool: A futures.ThreadPoolExecutor.
+
+ Returns:
+ A face.GenericStub that performs RPCs via the given base.End.
+ """
+ return _GenericStub(end, pool)
+
+
+def dynamic_stub(end, group, cardinalities, pool):
+ """Creates an face.DynamicStub.
+
+ Args:
+ end: A base.End.
+ group: The group identifier for all RPCs to be made with the created
+ face.DynamicStub.
+ cardinalities: A dict from method identifier to cardinality.Cardinality
+ value identifying the cardinality of every RPC method to be supported by
+ the created face.DynamicStub.
+ pool: A futures.ThreadPoolExecutor.
+
+ Returns:
+ A face.DynamicStub that performs RPCs via the given base.End.
+ """
+ return _DynamicStub(end, group, cardinalities, pool)
diff --git a/src/python/grpcio/grpc/framework/interfaces/base/base.py b/src/python/grpcio/grpc/framework/interfaces/base/base.py
index 9d1651daac..bc52efb4c5 100644
--- a/src/python/grpcio/grpc/framework/interfaces/base/base.py
+++ b/src/python/grpcio/grpc/framework/interfaces/base/base.py
@@ -27,17 +27,46 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-"""The base interface of RPC Framework."""
+"""The base interface of RPC Framework.
+Implementations of this interface support the conduct of "operations":
+exchanges between two distinct ends of an arbitrary number of data payloads
+and metadata such as a name for the operation, initial and terminal metadata
+in each direction, and flow control. These operations may be used for transfers
+of data, remote procedure calls, status indication, or anything else
+applications choose.
+"""
+
+# threading is referenced from specification in this module.
import abc
import enum
+import threading
# abandonment is referenced from specification in this module.
from grpc.framework.foundation import abandonment # pylint: disable=unused-import
class NoSuchMethodError(Exception):
- """Indicates that an unrecognized operation has been called."""
+ """Indicates that an unrecognized operation has been called.
+
+ Attributes:
+ code: A code value to communicate to the other side of the operation along
+ with indication of operation termination. May be None.
+ details: A details value to communicate to the other side of the operation
+ along with indication of operation termination. May be None.
+ """
+
+ def __init__(self, code, details):
+ """Constructor.
+
+ Args:
+ code: A code value to communicate to the other side of the operation
+ along with indication of operation termination. May be None.
+ details: A details value to communicate to the other side of the
+ operation along with indication of operation termination. May be None.
+ """
+ self.code = code
+ self.details = details
@enum.unique
@@ -208,19 +237,26 @@ class End(object):
raise NotImplementedError()
@abc.abstractmethod
- def stop_gracefully(self):
- """Gracefully stops this object's service of operations.
+ def stop(self, grace):
+ """Stops this object's service of operations.
- Operations in progress will be allowed to complete, and this method blocks
- until all of them have.
- """
- raise NotImplementedError()
+ This object will refuse service of new operations as soon as this method is
+ called but operations under way at the time of the call may be given a
+ grace period during which they are allowed to finish.
- @abc.abstractmethod
- def stop_immediately(self):
- """Immediately stops this object's service of operations.
+ Args:
+ grace: A duration of time in seconds to allow ongoing operations to
+ terminate before being forcefully terminated by the stopping of this
+ End. May be zero to terminate all ongoing operations and immediately
+ stop.
- Operations in progress will not be allowed to complete.
+ Returns:
+ A threading.Event that will be set to indicate all operations having
+ terminated and this End having completely stopped. The returned event
+ may not be set until after the full grace period (if some ongoing
+ operation continues for the full length of the period) or it may be set
+ much sooner (if for example this End had no operations in progress at
+ the time its stop method was called).
"""
raise NotImplementedError()
diff --git a/src/python/grpcio/grpc/framework/interfaces/face/__init__.py b/src/python/grpcio/grpc/framework/interfaces/face/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/interfaces/face/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/grpcio/grpc/framework/interfaces/face/face.py b/src/python/grpcio/grpc/framework/interfaces/face/face.py
new file mode 100644
index 0000000000..948e7505b6
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/interfaces/face/face.py
@@ -0,0 +1,933 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Interfaces defining the Face layer of RPC Framework."""
+
+import abc
+import collections
+import enum
+
+# cardinality, style, abandonment, future, and stream are
+# referenced from specification in this module.
+from grpc.framework.common import cardinality # pylint: disable=unused-import
+from grpc.framework.common import style # pylint: disable=unused-import
+from grpc.framework.foundation import abandonment # pylint: disable=unused-import
+from grpc.framework.foundation import future # pylint: disable=unused-import
+from grpc.framework.foundation import stream # pylint: disable=unused-import
+
+
+class NoSuchMethodError(Exception):
+ """Raised by customer code to indicate an unrecognized method.
+
+ Attributes:
+ group: The group of the unrecognized method.
+ name: The name of the unrecognized method.
+ """
+
+ def __init__(self, group, method):
+ """Constructor.
+
+ Args:
+ group: The group identifier of the unrecognized RPC name.
+ method: The method identifier of the unrecognized RPC name.
+ """
+ super(NoSuchMethodError, self).__init__()
+ self.group = group
+ self.method = method
+
+ def __repr__(self):
+ return 'face.NoSuchMethodError(%s, %s)' % (self.group, self.method,)
+
+
+class Abortion(
+ collections.namedtuple(
+ 'Abortion',
+ ('kind', 'initial_metadata', 'terminal_metadata', 'code', 'details',))):
+ """A value describing RPC abortion.
+
+ Attributes:
+ kind: A Kind value identifying how the RPC failed.
+ initial_metadata: The initial metadata from the other side of the RPC or
+ None if no initial metadata value was received.
+ terminal_metadata: The terminal metadata from the other side of the RPC or
+ None if no terminal metadata value was received.
+ code: The code value from the other side of the RPC or None if no code value
+ was received.
+ details: The details value from the other side of the RPC or None if no
+ details value was received.
+ """
+
+ @enum.unique
+ class Kind(enum.Enum):
+ """Types of RPC abortion."""
+
+ CANCELLED = 'cancelled'
+ EXPIRED = 'expired'
+ LOCAL_SHUTDOWN = 'local shutdown'
+ REMOTE_SHUTDOWN = 'remote shutdown'
+ NETWORK_FAILURE = 'network failure'
+ LOCAL_FAILURE = 'local failure'
+ REMOTE_FAILURE = 'remote failure'
+
+
+class AbortionError(Exception):
+ """Common super type for exceptions indicating RPC abortion.
+
+ initial_metadata: The initial metadata from the other side of the RPC or
+ None if no initial metadata value was received.
+ terminal_metadata: The terminal metadata from the other side of the RPC or
+ None if no terminal metadata value was received.
+ code: The code value from the other side of the RPC or None if no code value
+ was received.
+ details: The details value from the other side of the RPC or None if no
+ details value was received.
+ """
+ __metaclass__ = abc.ABCMeta
+
+ def __init__(self, initial_metadata, terminal_metadata, code, details):
+ super(AbortionError, self).__init__()
+ self.initial_metadata = initial_metadata
+ self.terminal_metadata = terminal_metadata
+ self.code = code
+ self.details = details
+
+
+class CancellationError(AbortionError):
+ """Indicates that an RPC has been cancelled."""
+
+
+class ExpirationError(AbortionError):
+ """Indicates that an RPC has expired ("timed out")."""
+
+
+class LocalShutdownError(AbortionError):
+ """Indicates that an RPC has terminated due to local shutdown of RPCs."""
+
+
+class RemoteShutdownError(AbortionError):
+ """Indicates that an RPC has terminated due to remote shutdown of RPCs."""
+
+
+class NetworkError(AbortionError):
+ """Indicates that some error occurred on the network."""
+
+
+class LocalError(AbortionError):
+ """Indicates that an RPC has terminated due to a local defect."""
+
+
+class RemoteError(AbortionError):
+ """Indicates that an RPC has terminated due to a remote defect."""
+
+
+class RpcContext(object):
+ """Provides RPC-related information and action."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def is_active(self):
+ """Describes whether the RPC is active or has terminated."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def time_remaining(self):
+ """Describes the length of allowed time remaining for the RPC.
+
+ Returns:
+ A nonnegative float indicating the length of allowed time in seconds
+ remaining for the RPC to complete before it is considered to have timed
+ out.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def add_abortion_callback(self, abortion_callback):
+ """Registers a callback to be called if the RPC is aborted.
+
+ Args:
+ abortion_callback: A callable to be called and passed an Abortion value
+ in the event of RPC abortion.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def cancel(self):
+ """Cancels the RPC.
+
+ Idempotent and has no effect if the RPC has already terminated.
+ """
+ raise NotImplementedError()
+
+
+class Call(RpcContext):
+ """Invocation-side utility object for an RPC."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def initial_metadata(self):
+ """Accesses the initial metadata from the service-side of the RPC.
+
+ This method blocks until the value is available or is known not to have been
+ emitted from the service-side of the RPC.
+
+ Returns:
+ The initial metadata object emitted by the service-side of the RPC, or
+ None if there was no such value.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def terminal_metadata(self):
+ """Accesses the terminal metadata from the service-side of the RPC.
+
+ This method blocks until the value is available or is known not to have been
+ emitted from the service-side of the RPC.
+
+ Returns:
+ The terminal metadata object emitted by the service-side of the RPC, or
+ None if there was no such value.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def code(self):
+ """Accesses the code emitted by the service-side of the RPC.
+
+ This method blocks until the value is available or is known not to have been
+ emitted from the service-side of the RPC.
+
+ Returns:
+ The code object emitted by the service-side of the RPC, or None if there
+ was no such value.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def details(self):
+ """Accesses the details value emitted by the service-side of the RPC.
+
+ This method blocks until the value is available or is known not to have been
+ emitted from the service-side of the RPC.
+
+ Returns:
+ The details value emitted by the service-side of the RPC, or None if there
+ was no such value.
+ """
+ raise NotImplementedError()
+
+
+class ServicerContext(RpcContext):
+ """A context object passed to method implementations."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def invocation_metadata(self):
+ """Accesses the metadata from the invocation-side of the RPC.
+
+ This method blocks until the value is available or is known not to have been
+ emitted from the invocation-side of the RPC.
+
+ Returns:
+ The metadata object emitted by the invocation-side of the RPC, or None if
+ there was no such value.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def initial_metadata(self, initial_metadata):
+ """Accepts the service-side initial metadata value of the RPC.
+
+ This method need not be called by method implementations if they have no
+ service-side initial metadata to transmit.
+
+ Args:
+ initial_metadata: The service-side initial metadata value of the RPC to
+ be transmitted to the invocation side of the RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def terminal_metadata(self, terminal_metadata):
+ """Accepts the service-side terminal metadata value of the RPC.
+
+ This method need not be called by method implementations if they have no
+ service-side terminal metadata to transmit.
+
+ Args:
+ terminal_metadata: The service-side terminal metadata value of the RPC to
+ be transmitted to the invocation side of the RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def code(self, code):
+ """Accepts the service-side code of the RPC.
+
+ This method need not be called by method implementations if they have no
+ code to transmit.
+
+ Args:
+ code: The code of the RPC to be transmitted to the invocation side of the
+ RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def details(self, details):
+ """Accepts the service-side details of the RPC.
+
+ This method need not be called by method implementations if they have no
+ service-side details to transmit.
+
+ Args:
+ details: The service-side details value of the RPC to be transmitted to
+ the invocation side of the RPC.
+ """
+ raise NotImplementedError()
+
+
+class ResponseReceiver(object):
+ """Invocation-side object used to accept the output of an RPC."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def initial_metadata(self, initial_metadata):
+ """Receives the initial metadata from the service-side of the RPC.
+
+ Args:
+ initial_metadata: The initial metadata object emitted from the
+ service-side of the RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def response(self, response):
+ """Receives a response from the service-side of the RPC.
+
+ Args:
+ response: A response object emitted from the service-side of the RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def complete(self, terminal_metadata, code, details):
+ """Receives the completion values emitted from the service-side of the RPC.
+
+ Args:
+ terminal_metadata: The terminal metadata object emitted from the
+ service-side of the RPC.
+ code: The code object emitted from the service-side of the RPC.
+ details: The details object emitted from the service-side of the RPC.
+ """
+ raise NotImplementedError()
+
+
+class UnaryUnaryMultiCallable(object):
+ """Affords invoking a unary-unary RPC in any call style."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def __call__(
+ self, request, timeout, metadata=None, with_call=False):
+ """Synchronously invokes the underlying RPC.
+
+ Args:
+ request: The request value for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of
+ the RPC.
+ with_call: Whether or not to include return a Call for the RPC in addition
+ to the reponse.
+
+ Returns:
+ The response value for the RPC, and a Call for the RPC if with_call was
+ set to True at invocation.
+
+ Raises:
+ AbortionError: Indicating that the RPC was aborted.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def future(self, request, timeout, metadata=None):
+ """Asynchronously invokes the underlying RPC.
+
+ Args:
+ request: The request value for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of
+ the RPC.
+
+ Returns:
+ An object that is both a Call for the RPC and a future.Future. In the
+ event of RPC completion, the return Future's result value will be the
+ response value of the RPC. In the event of RPC abortion, the returned
+ Future's exception value will be an AbortionError.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def event(
+ self, request, receiver, abortion_callback, timeout,
+ metadata=None):
+ """Asynchronously invokes the underlying RPC.
+
+ Args:
+ request: The request value for the RPC.
+ receiver: A ResponseReceiver to be passed the response data of the RPC.
+ abortion_callback: A callback to be called and passed an Abortion value
+ in the event of RPC abortion.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of
+ the RPC.
+
+ Returns:
+ A Call for the RPC.
+ """
+ raise NotImplementedError()
+
+
+class UnaryStreamMultiCallable(object):
+ """Affords invoking a unary-stream RPC in any call style."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def __call__(self, request, timeout, metadata=None):
+ """Invokes the underlying RPC.
+
+ Args:
+ request: The request value for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of
+ the RPC.
+
+ Returns:
+ An object that is both a Call for the RPC and an iterator of response
+ values. Drawing response values from the returned iterator may raise
+ AbortionError indicating abortion of the RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def event(
+ self, request, receiver, abortion_callback, timeout,
+ metadata=None):
+ """Asynchronously invokes the underlying RPC.
+
+ Args:
+ request: The request value for the RPC.
+ receiver: A ResponseReceiver to be passed the response data of the RPC.
+ abortion_callback: A callback to be called and passed an Abortion value
+ in the event of RPC abortion.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of
+ the RPC.
+
+ Returns:
+ A Call object for the RPC.
+ """
+ raise NotImplementedError()
+
+
+class StreamUnaryMultiCallable(object):
+ """Affords invoking a stream-unary RPC in any call style."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def __call__(
+ self, request_iterator, timeout, metadata=None,
+ with_call=False):
+ """Synchronously invokes the underlying RPC.
+
+ Args:
+ request_iterator: An iterator that yields request values for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of
+ the RPC.
+ with_call: Whether or not to include return a Call for the RPC in addition
+ to the reponse.
+
+ Returns:
+ The response value for the RPC, and a Call for the RPC if with_call was
+ set to True at invocation.
+
+ Raises:
+ AbortionError: Indicating that the RPC was aborted.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def future(self, request_iterator, timeout, metadata=None):
+ """Asynchronously invokes the underlying RPC.
+
+ Args:
+ request_iterator: An iterator that yields request values for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of
+ the RPC.
+
+ Returns:
+ An object that is both a Call for the RPC and a future.Future. In the
+ event of RPC completion, the return Future's result value will be the
+ response value of the RPC. In the event of RPC abortion, the returned
+ Future's exception value will be an AbortionError.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def event(
+ self, receiver, abortion_callback, timeout, metadata=None):
+ """Asynchronously invokes the underlying RPC.
+
+ Args:
+ receiver: A ResponseReceiver to be passed the response data of the RPC.
+ abortion_callback: A callback to be called and passed an Abortion value
+ in the event of RPC abortion.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of
+ the RPC.
+
+ Returns:
+ A single object that is both a Call object for the RPC and a
+ stream.Consumer to which the request values of the RPC should be passed.
+ """
+ raise NotImplementedError()
+
+
+class StreamStreamMultiCallable(object):
+ """Affords invoking a stream-stream RPC in any call style."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def __call__(self, request_iterator, timeout, metadata=None):
+ """Invokes the underlying RPC.
+
+ Args:
+ request_iterator: An iterator that yields request values for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of
+ the RPC.
+
+ Returns:
+ An object that is both a Call for the RPC and an iterator of response
+ values. Drawing response values from the returned iterator may raise
+ AbortionError indicating abortion of the RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def event(
+ self, receiver, abortion_callback, timeout, metadata=None):
+ """Asynchronously invokes the underlying RPC.
+
+ Args:
+ receiver: A ResponseReceiver to be passed the response data of the RPC.
+ abortion_callback: A callback to be called and passed an Abortion value
+ in the event of RPC abortion.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of
+ the RPC.
+
+ Returns:
+ A single object that is both a Call object for the RPC and a
+ stream.Consumer to which the request values of the RPC should be passed.
+ """
+ raise NotImplementedError()
+
+
+class MethodImplementation(object):
+ """A sum type that describes a method implementation.
+
+ Attributes:
+ cardinality: A cardinality.Cardinality value.
+ style: A style.Service value.
+ unary_unary_inline: The implementation of the method as a callable value
+ that takes a request value and a ServicerContext object and returns a
+ response value. Only non-None if cardinality is
+ cardinality.Cardinality.UNARY_UNARY and style is style.Service.INLINE.
+ unary_stream_inline: The implementation of the method as a callable value
+ that takes a request value and a ServicerContext object and returns an
+ iterator of response values. Only non-None if cardinality is
+ cardinality.Cardinality.UNARY_STREAM and style is style.Service.INLINE.
+ stream_unary_inline: The implementation of the method as a callable value
+ that takes an iterator of request values and a ServicerContext object and
+ returns a response value. Only non-None if cardinality is
+ cardinality.Cardinality.STREAM_UNARY and style is style.Service.INLINE.
+ stream_stream_inline: The implementation of the method as a callable value
+ that takes an iterator of request values and a ServicerContext object and
+ returns an iterator of response values. Only non-None if cardinality is
+ cardinality.Cardinality.STREAM_STREAM and style is style.Service.INLINE.
+ unary_unary_event: The implementation of the method as a callable value that
+ takes a request value, a response callback to which to pass the response
+ value of the RPC, and a ServicerContext. Only non-None if cardinality is
+ cardinality.Cardinality.UNARY_UNARY and style is style.Service.EVENT.
+ unary_stream_event: The implementation of the method as a callable value
+ that takes a request value, a stream.Consumer to which to pass the
+ response values of the RPC, and a ServicerContext. Only non-None if
+ cardinality is cardinality.Cardinality.UNARY_STREAM and style is
+ style.Service.EVENT.
+ stream_unary_event: The implementation of the method as a callable value
+ that takes a response callback to which to pass the response value of the
+ RPC and a ServicerContext and returns a stream.Consumer to which the
+ request values of the RPC should be passed. Only non-None if cardinality
+ is cardinality.Cardinality.STREAM_UNARY and style is style.Service.EVENT.
+ stream_stream_event: The implementation of the method as a callable value
+ that takes a stream.Consumer to which to pass the response values of the
+ RPC and a ServicerContext and returns a stream.Consumer to which the
+ request values of the RPC should be passed. Only non-None if cardinality
+ is cardinality.Cardinality.STREAM_STREAM and style is
+ style.Service.EVENT.
+ """
+ __metaclass__ = abc.ABCMeta
+
+
+class MultiMethodImplementation(object):
+ """A general type able to service many methods."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def service(self, group, method, response_consumer, context):
+ """Services an RPC.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ response_consumer: A stream.Consumer to be called to accept the response
+ values of the RPC.
+ context: a ServicerContext object.
+
+ Returns:
+ A stream.Consumer with which to accept the request values of the RPC. The
+ consumer returned from this method may or may not be invoked to
+ completion: in the case of RPC abortion, RPC Framework will simply stop
+ passing values to this object. Implementations must not assume that this
+ object will be called to completion of the request stream or even called
+ at all.
+
+ Raises:
+ abandonment.Abandoned: May or may not be raised when the RPC has been
+ aborted.
+ NoSuchMethodError: If this MultiMethod does not recognize the given group
+ and name for the RPC and is not able to service the RPC.
+ """
+ raise NotImplementedError()
+
+
+class GenericStub(object):
+ """Affords RPC invocation via generic methods."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def blocking_unary_unary(
+ self, group, method, request, timeout, metadata=None,
+ with_call=False):
+ """Invokes a unary-request-unary-response method.
+
+ This method blocks until either returning the response value of the RPC
+ (in the event of RPC completion) or raising an exception (in the event of
+ RPC abortion).
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ request: The request value for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of the RPC.
+ with_call: Whether or not to include return a Call for the RPC in addition
+ to the reponse.
+
+ Returns:
+ The response value for the RPC, and a Call for the RPC if with_call was
+ set to True at invocation.
+
+ Raises:
+ AbortionError: Indicating that the RPC was aborted.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def future_unary_unary(
+ self, group, method, request, timeout, metadata=None):
+ """Invokes a unary-request-unary-response method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ request: The request value for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of the RPC.
+
+ Returns:
+ An object that is both a Call for the RPC and a future.Future. In the
+ event of RPC completion, the return Future's result value will be the
+ response value of the RPC. In the event of RPC abortion, the returned
+ Future's exception value will be an AbortionError.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def inline_unary_stream(
+ self, group, method, request, timeout, metadata=None):
+ """Invokes a unary-request-stream-response method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ request: The request value for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of the RPC.
+
+ Returns:
+ An object that is both a Call for the RPC and an iterator of response
+ values. Drawing response values from the returned iterator may raise
+ AbortionError indicating abortion of the RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def blocking_stream_unary(
+ self, group, method, request_iterator, timeout, metadata=None,
+ with_call=False):
+ """Invokes a stream-request-unary-response method.
+
+ This method blocks until either returning the response value of the RPC
+ (in the event of RPC completion) or raising an exception (in the event of
+ RPC abortion).
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ request_iterator: An iterator that yields request values for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of the RPC.
+ with_call: Whether or not to include return a Call for the RPC in addition
+ to the reponse.
+
+ Returns:
+ The response value for the RPC, and a Call for the RPC if with_call was
+ set to True at invocation.
+
+ Raises:
+ AbortionError: Indicating that the RPC was aborted.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def future_stream_unary(
+ self, group, method, request_iterator, timeout, metadata=None):
+ """Invokes a stream-request-unary-response method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ request_iterator: An iterator that yields request values for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of the RPC.
+
+ Returns:
+ An object that is both a Call for the RPC and a future.Future. In the
+ event of RPC completion, the return Future's result value will be the
+ response value of the RPC. In the event of RPC abortion, the returned
+ Future's exception value will be an AbortionError.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def inline_stream_stream(
+ self, group, method, request_iterator, timeout, metadata=None):
+ """Invokes a stream-request-stream-response method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ request_iterator: An iterator that yields request values for the RPC.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of the RPC.
+
+ Returns:
+ An object that is both a Call for the RPC and an iterator of response
+ values. Drawing response values from the returned iterator may raise
+ AbortionError indicating abortion of the RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def event_unary_unary(
+ self, group, method, request, receiver, abortion_callback, timeout,
+ metadata=None):
+ """Event-driven invocation of a unary-request-unary-response method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ request: The request value for the RPC.
+ receiver: A ResponseReceiver to be passed the response data of the RPC.
+ abortion_callback: A callback to be called and passed an Abortion value
+ in the event of RPC abortion.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of the RPC.
+
+ Returns:
+ A Call for the RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def event_unary_stream(
+ self, group, method, request, receiver, abortion_callback, timeout,
+ metadata=None):
+ """Event-driven invocation of a unary-request-stream-response method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ request: The request value for the RPC.
+ receiver: A ResponseReceiver to be passed the response data of the RPC.
+ abortion_callback: A callback to be called and passed an Abortion value
+ in the event of RPC abortion.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of the RPC.
+
+ Returns:
+ A Call for the RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def event_stream_unary(
+ self, group, method, receiver, abortion_callback, timeout,
+ metadata=None):
+ """Event-driven invocation of a unary-request-unary-response method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ receiver: A ResponseReceiver to be passed the response data of the RPC.
+ abortion_callback: A callback to be called and passed an Abortion value
+ in the event of RPC abortion.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of the RPC.
+
+ Returns:
+ A pair of a Call object for the RPC and a stream.Consumer to which the
+ request values of the RPC should be passed.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def event_stream_stream(
+ self, group, method, receiver, abortion_callback, timeout,
+ metadata=None):
+ """Event-driven invocation of a unary-request-stream-response method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+ receiver: A ResponseReceiver to be passed the response data of the RPC.
+ abortion_callback: A callback to be called and passed an Abortion value
+ in the event of RPC abortion.
+ timeout: A duration of time in seconds to allow for the RPC.
+ metadata: A metadata value to be passed to the service-side of the RPC.
+
+ Returns:
+ A pair of a Call object for the RPC and a stream.Consumer to which the
+ request values of the RPC should be passed.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def unary_unary(self, group, method):
+ """Creates a UnaryUnaryMultiCallable for a unary-unary method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+
+ Returns:
+ A UnaryUnaryMultiCallable value for the named unary-unary method.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def unary_stream(self, group, method):
+ """Creates a UnaryStreamMultiCallable for a unary-stream method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+
+ Returns:
+ A UnaryStreamMultiCallable value for the name unary-stream method.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def stream_unary(self, group, method):
+ """Creates a StreamUnaryMultiCallable for a stream-unary method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+
+ Returns:
+ A StreamUnaryMultiCallable value for the named stream-unary method.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def stream_stream(self, group, method):
+ """Creates a StreamStreamMultiCallable for a stream-stream method.
+
+ Args:
+ group: The group identifier of the RPC.
+ method: The method identifier of the RPC.
+
+ Returns:
+ A StreamStreamMultiCallable value for the named stream-stream method.
+ """
+ raise NotImplementedError()
+
+
+class DynamicStub(object):
+ """Affords RPC invocation via attributes corresponding to afforded methods.
+
+ Instances of this type may be scoped to a single group so that attribute
+ access is unambiguous.
+
+ Instances of this type respond to attribute access as follows: if the
+ requested attribute is the name of a unary-unary method, the value of the
+ attribute will be a UnaryUnaryMultiCallable with which to invoke an RPC; if
+ the requested attribute is the name of a unary-stream method, the value of the
+ attribute will be a UnaryStreamMultiCallable with which to invoke an RPC; if
+ the requested attribute is the name of a stream-unary method, the value of the
+ attribute will be a StreamUnaryMultiCallable with which to invoke an RPC; and
+ if the requested attribute is the name of a stream-stream method, the value of
+ the attribute will be a StreamStreamMultiCallable with which to invoke an RPC.
+ """
+ __metaclass__ = abc.ABCMeta
diff --git a/src/python/grpcio/grpc/framework/interfaces/face/utilities.py b/src/python/grpcio/grpc/framework/interfaces/face/utilities.py
new file mode 100644
index 0000000000..db2ec6ed87
--- /dev/null
+++ b/src/python/grpcio/grpc/framework/interfaces/face/utilities.py
@@ -0,0 +1,178 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Utilities for RPC Framework's Face interface."""
+
+import collections
+
+# stream is referenced from specification in this module.
+from grpc.framework.common import cardinality
+from grpc.framework.common import style
+from grpc.framework.foundation import stream # pylint: disable=unused-import
+from grpc.framework.interfaces.face import face
+
+
+class _MethodImplementation(
+ face.MethodImplementation,
+ collections.namedtuple(
+ '_MethodImplementation',
+ ['cardinality', 'style', 'unary_unary_inline', 'unary_stream_inline',
+ 'stream_unary_inline', 'stream_stream_inline', 'unary_unary_event',
+ 'unary_stream_event', 'stream_unary_event', 'stream_stream_event',])):
+ pass
+
+
+def unary_unary_inline(behavior):
+ """Creates an face.MethodImplementation for the given behavior.
+
+ Args:
+ behavior: The implementation of a unary-unary RPC method as a callable value
+ that takes a request value and an face.ServicerContext object and
+ returns a response value.
+
+ Returns:
+ An face.MethodImplementation derived from the given behavior.
+ """
+ return _MethodImplementation(
+ cardinality.Cardinality.UNARY_UNARY, style.Service.INLINE, behavior,
+ None, None, None, None, None, None, None)
+
+
+def unary_stream_inline(behavior):
+ """Creates an face.MethodImplementation for the given behavior.
+
+ Args:
+ behavior: The implementation of a unary-stream RPC method as a callable
+ value that takes a request value and an face.ServicerContext object and
+ returns an iterator of response values.
+
+ Returns:
+ An face.MethodImplementation derived from the given behavior.
+ """
+ return _MethodImplementation(
+ cardinality.Cardinality.UNARY_STREAM, style.Service.INLINE, None,
+ behavior, None, None, None, None, None, None)
+
+
+def stream_unary_inline(behavior):
+ """Creates an face.MethodImplementation for the given behavior.
+
+ Args:
+ behavior: The implementation of a stream-unary RPC method as a callable
+ value that takes an iterator of request values and an
+ face.ServicerContext object and returns a response value.
+
+ Returns:
+ An face.MethodImplementation derived from the given behavior.
+ """
+ return _MethodImplementation(
+ cardinality.Cardinality.STREAM_UNARY, style.Service.INLINE, None, None,
+ behavior, None, None, None, None, None)
+
+
+def stream_stream_inline(behavior):
+ """Creates an face.MethodImplementation for the given behavior.
+
+ Args:
+ behavior: The implementation of a stream-stream RPC method as a callable
+ value that takes an iterator of request values and an
+ face.ServicerContext object and returns an iterator of response values.
+
+ Returns:
+ An face.MethodImplementation derived from the given behavior.
+ """
+ return _MethodImplementation(
+ cardinality.Cardinality.STREAM_STREAM, style.Service.INLINE, None, None,
+ None, behavior, None, None, None, None)
+
+
+def unary_unary_event(behavior):
+ """Creates an face.MethodImplementation for the given behavior.
+
+ Args:
+ behavior: The implementation of a unary-unary RPC method as a callable
+ value that takes a request value, a response callback to which to pass
+ the response value of the RPC, and an face.ServicerContext.
+
+ Returns:
+ An face.MethodImplementation derived from the given behavior.
+ """
+ return _MethodImplementation(
+ cardinality.Cardinality.UNARY_UNARY, style.Service.EVENT, None, None,
+ None, None, behavior, None, None, None)
+
+
+def unary_stream_event(behavior):
+ """Creates an face.MethodImplementation for the given behavior.
+
+ Args:
+ behavior: The implementation of a unary-stream RPC method as a callable
+ value that takes a request value, a stream.Consumer to which to pass the
+ the response values of the RPC, and an face.ServicerContext.
+
+ Returns:
+ An face.MethodImplementation derived from the given behavior.
+ """
+ return _MethodImplementation(
+ cardinality.Cardinality.UNARY_STREAM, style.Service.EVENT, None, None,
+ None, None, None, behavior, None, None)
+
+
+def stream_unary_event(behavior):
+ """Creates an face.MethodImplementation for the given behavior.
+
+ Args:
+ behavior: The implementation of a stream-unary RPC method as a callable
+ value that takes a response callback to which to pass the response value
+ of the RPC and an face.ServicerContext and returns a stream.Consumer to
+ which the request values of the RPC should be passed.
+
+ Returns:
+ An face.MethodImplementation derived from the given behavior.
+ """
+ return _MethodImplementation(
+ cardinality.Cardinality.STREAM_UNARY, style.Service.EVENT, None, None,
+ None, None, None, None, behavior, None)
+
+
+def stream_stream_event(behavior):
+ """Creates an face.MethodImplementation for the given behavior.
+
+ Args:
+ behavior: The implementation of a stream-stream RPC method as a callable
+ value that takes a stream.Consumer to which to pass the response values
+ of the RPC and an face.ServicerContext and returns a stream.Consumer to
+ which the request values of the RPC should be passed.
+
+ Returns:
+ An face.MethodImplementation derived from the given behavior.
+ """
+ return _MethodImplementation(
+ cardinality.Cardinality.STREAM_STREAM, style.Service.EVENT, None, None,
+ None, None, None, None, None, behavior)
diff --git a/src/python/grpcio/grpc/framework/interfaces/links/links.py b/src/python/grpcio/grpc/framework/interfaces/links/links.py
index 5ebbac8a6f..b98a30a399 100644
--- a/src/python/grpcio/grpc/framework/interfaces/links/links.py
+++ b/src/python/grpcio/grpc/framework/interfaces/links/links.py
@@ -34,12 +34,30 @@ import collections
import enum
+class Transport(collections.namedtuple('Transport', ('kind', 'value',))):
+ """A sum type for handles to an underlying transport system.
+
+ Attributes:
+ kind: A Kind value identifying the kind of value being passed to or from
+ the underlying transport.
+ value: The value being passed through RPC Framework between the high-level
+ application and the underlying transport.
+ """
+
+ @enum.unique
+ class Kind(enum.Enum):
+ CALL_OPTION = 'call option'
+ SERVICER_CONTEXT = 'servicer context'
+ INVOCATION_CONTEXT = 'invocation context'
+
+
class Ticket(
collections.namedtuple(
'Ticket',
- ['operation_id', 'sequence_number', 'group', 'method', 'subscription',
+ ('operation_id', 'sequence_number', 'group', 'method', 'subscription',
'timeout', 'allowance', 'initial_metadata', 'payload',
- 'terminal_metadata', 'code', 'message', 'termination'])):
+ 'terminal_metadata', 'code', 'message', 'termination',
+ 'transport',))):
"""A sum type for all values sent from a front to a back.
Attributes:
@@ -81,6 +99,8 @@ class Ticket(
termination: A Termination value describing the end of the operation, or
None if the operation has not yet terminated. If set, no further tickets
may be sent in the same direction.
+ transport: A Transport value or None, with further semantics being a matter
+ between high-level application and underlying transport.
"""
@enum.unique
@@ -98,7 +118,7 @@ class Ticket(
COMPLETION = 'completion'
CANCELLATION = 'cancellation'
EXPIRATION = 'expiration'
- LOCAL_SHUTDOWN = 'local shutdown'
+ SHUTDOWN = 'shutdown'
RECEPTION_FAILURE = 'reception failure'
TRANSMISSION_FAILURE = 'transmission failure'
LOCAL_FAILURE = 'local failure'
diff --git a/src/python/grpcio_test/grpc_interop/client.py b/src/python/grpcio_test/grpc_interop/client.py
index 2dd2103cbe..36afe6c096 100644
--- a/src/python/grpcio_test/grpc_interop/client.py
+++ b/src/python/grpcio_test/grpc_interop/client.py
@@ -70,7 +70,13 @@ def _oauth_access_token(args):
def _stub(args):
if args.oauth_scope:
- metadata_transformer = lambda x: [('Authorization', 'Bearer %s' % _oauth_access_token(args))]
+ if args.test_case == 'oauth2_auth_token':
+ access_token = _oauth_access_token(args)
+ metadata_transformer = lambda x: [
+ ('Authorization', 'Bearer %s' % access_token)]
+ else:
+ metadata_transformer = lambda x: [
+ ('Authorization', 'Bearer %s' % _oauth_access_token(args))]
else:
metadata_transformer = lambda x: []
if args.use_tls:
diff --git a/src/python/grpcio_test/grpc_interop/methods.py b/src/python/grpcio_test/grpc_interop/methods.py
index 7a831f3cbd..642458e892 100644
--- a/src/python/grpcio_test/grpc_interop/methods.py
+++ b/src/python/grpcio_test/grpc_interop/methods.py
@@ -360,6 +360,19 @@ def _service_account_creds(stub, args):
(response.oauth_scope, args.oauth_scope))
+def _oauth2_auth_token(stub, args):
+ json_key_filename = os.environ[
+ oauth2client_client.GOOGLE_APPLICATION_CREDENTIALS]
+ wanted_email = json.load(open(json_key_filename, 'rb'))['client_email']
+ response = _large_unary_common_behavior(stub, True, True)
+ if wanted_email != response.username:
+ raise ValueError(
+ 'expected username %s, got %s' % (wanted_email, response.username))
+ if args.oauth_scope.find(response.oauth_scope) == -1:
+ raise ValueError(
+ 'expected to find oauth scope "%s" in received "%s"' %
+ (response.oauth_scope, args.oauth_scope))
+
@enum.unique
class TestCase(enum.Enum):
EMPTY_UNARY = 'empty_unary'
@@ -371,6 +384,7 @@ class TestCase(enum.Enum):
CANCEL_AFTER_FIRST_RESPONSE = 'cancel_after_first_response'
COMPUTE_ENGINE_CREDS = 'compute_engine_creds'
SERVICE_ACCOUNT_CREDS = 'service_account_creds'
+ OAUTH2_AUTH_TOKEN = 'oauth2_auth_token'
TIMEOUT_ON_SLEEPING_SERVER = 'timeout_on_sleeping_server'
def test_interoperability(self, stub, args):
@@ -394,5 +408,7 @@ class TestCase(enum.Enum):
_compute_engine_creds(stub, args)
elif self is TestCase.SERVICE_ACCOUNT_CREDS:
_service_account_creds(stub, args)
+ elif self is TestCase.OAUTH2_AUTH_TOKEN:
+ _oauth2_auth_token(stub, args)
else:
raise NotImplementedError('Test case "%s" not implemented!' % self.name)
diff --git a/src/python/grpcio_test/grpc_test/_adapter/_links_test.py b/src/python/grpcio_test/grpc_test/_adapter/_links_test.py
index c4686b327a..4077b8e350 100644
--- a/src/python/grpcio_test/grpc_test/_adapter/_links_test.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_links_test.py
@@ -46,8 +46,8 @@ _TIMEOUT = 32
# TODO(nathaniel): End-to-end metadata testing.
def _transform_metadata(unused_metadata):
return (
- ('one unused key', 'one unused value'),
- ('another unused key', 'another unused value'),
+ ('one_unused_key', 'one unused value'),
+ ('another_unused_key', 'another unused value'),
)
diff --git a/src/python/grpcio_test/grpc_test/_adapter/_low_test.py b/src/python/grpcio_test/grpc_test/_adapter/_low_test.py
index 44fe760fbc..70149127da 100644
--- a/src/python/grpcio_test/grpc_test/_adapter/_low_test.py
+++ b/src/python/grpcio_test/grpc_test/_adapter/_low_test.py
@@ -52,7 +52,6 @@ def wait_for_events(completion_queues, deadline):
def set_ith_result(i, completion_queue):
result = completion_queue.next(deadline)
with lock:
- print i, completion_queue, result, time.time() - deadline
results[i] = result
for i, completion_queue in enumerate(completion_queues):
thread = threading.Thread(target=set_ith_result,
@@ -80,10 +79,12 @@ class InsecureServerInsecureClient(unittest.TestCase):
del self.client_channel
self.client_completion_queue.shutdown()
- while self.client_completion_queue.next().type != _types.EventType.QUEUE_SHUTDOWN:
+ while (self.client_completion_queue.next().type !=
+ _types.EventType.QUEUE_SHUTDOWN):
pass
self.server_completion_queue.shutdown()
- while self.server_completion_queue.next().type != _types.EventType.QUEUE_SHUTDOWN:
+ while (self.server_completion_queue.next().type !=
+ _types.EventType.QUEUE_SHUTDOWN):
pass
del self.client_completion_queue
@@ -91,58 +92,68 @@ class InsecureServerInsecureClient(unittest.TestCase):
del self.server
def testEcho(self):
- DEADLINE = time.time()+5
- DEADLINE_TOLERANCE = 0.25
- CLIENT_METADATA_ASCII_KEY = 'key'
- CLIENT_METADATA_ASCII_VALUE = 'val'
- CLIENT_METADATA_BIN_KEY = 'key-bin'
- CLIENT_METADATA_BIN_VALUE = b'\0'*1000
- SERVER_INITIAL_METADATA_KEY = 'init_me_me_me'
- SERVER_INITIAL_METADATA_VALUE = 'whodawha?'
- SERVER_TRAILING_METADATA_KEY = 'california_is_in_a_drought'
- SERVER_TRAILING_METADATA_VALUE = 'zomg it is'
- SERVER_STATUS_CODE = _types.StatusCode.OK
- SERVER_STATUS_DETAILS = 'our work is never over'
- REQUEST = 'in death a member of project mayhem has a name'
- RESPONSE = 'his name is robert paulson'
- METHOD = 'twinkies'
- HOST = 'hostess'
+ deadline = time.time() + 5
+ event_time_tolerance = 2
+ deadline_tolerance = 0.25
+ client_metadata_ascii_key = 'key'
+ client_metadata_ascii_value = 'val'
+ client_metadata_bin_key = 'key-bin'
+ client_metadata_bin_value = b'\0'*1000
+ server_initial_metadata_key = 'init_me_me_me'
+ server_initial_metadata_value = 'whodawha?'
+ server_trailing_metadata_key = 'california_is_in_a_drought'
+ server_trailing_metadata_value = 'zomg it is'
+ server_status_code = _types.StatusCode.OK
+ server_status_details = 'our work is never over'
+ request = 'blarghaflargh'
+ response = 'his name is robert paulson'
+ method = 'twinkies'
+ host = 'hostess'
server_request_tag = object()
- request_call_result = self.server.request_call(self.server_completion_queue, server_request_tag)
+ request_call_result = self.server.request_call(self.server_completion_queue,
+ server_request_tag)
- self.assertEquals(_types.CallError.OK, request_call_result)
+ self.assertEqual(_types.CallError.OK, request_call_result)
client_call_tag = object()
- client_call = self.client_channel.create_call(self.client_completion_queue, METHOD, HOST, DEADLINE)
- client_initial_metadata = [(CLIENT_METADATA_ASCII_KEY, CLIENT_METADATA_ASCII_VALUE), (CLIENT_METADATA_BIN_KEY, CLIENT_METADATA_BIN_VALUE)]
+ client_call = self.client_channel.create_call(
+ self.client_completion_queue, method, host, deadline)
+ client_initial_metadata = [
+ (client_metadata_ascii_key, client_metadata_ascii_value),
+ (client_metadata_bin_key, client_metadata_bin_value)
+ ]
client_start_batch_result = client_call.start_batch([
_types.OpArgs.send_initial_metadata(client_initial_metadata),
- _types.OpArgs.send_message(REQUEST, 0),
+ _types.OpArgs.send_message(request, 0),
_types.OpArgs.send_close_from_client(),
_types.OpArgs.recv_initial_metadata(),
_types.OpArgs.recv_message(),
_types.OpArgs.recv_status_on_client()
], client_call_tag)
- self.assertEquals(_types.CallError.OK, client_start_batch_result)
+ self.assertEqual(_types.CallError.OK, client_start_batch_result)
- client_no_event, request_event, = wait_for_events([self.client_completion_queue, self.server_completion_queue], time.time() + 2)
- self.assertEquals(client_no_event, None)
- self.assertEquals(_types.EventType.OP_COMPLETE, request_event.type)
+ client_no_event, request_event, = wait_for_events(
+ [self.client_completion_queue, self.server_completion_queue],
+ time.time() + event_time_tolerance)
+ self.assertEqual(client_no_event, None)
+ self.assertEqual(_types.EventType.OP_COMPLETE, request_event.type)
self.assertIsInstance(request_event.call, _low.Call)
self.assertIs(server_request_tag, request_event.tag)
- self.assertEquals(1, len(request_event.results))
+ self.assertEqual(1, len(request_event.results))
received_initial_metadata = dict(request_event.results[0].initial_metadata)
# Check that our metadata were transmitted
- self.assertEquals(
+ self.assertEqual(
dict(client_initial_metadata),
- dict((x, received_initial_metadata[x]) for x in zip(*client_initial_metadata)[0]))
+ dict((x, received_initial_metadata[x])
+ for x in zip(*client_initial_metadata)[0]))
# Check that Python's user agent string is a part of the full user agent
# string
self.assertIn('Python-gRPC-{}'.format(_grpcio_metadata.__version__),
received_initial_metadata['user-agent'])
- self.assertEquals(METHOD, request_event.call_details.method)
- self.assertEquals(HOST, request_event.call_details.host)
- self.assertLess(abs(DEADLINE - request_event.call_details.deadline), DEADLINE_TOLERANCE)
+ self.assertEqual(method, request_event.call_details.method)
+ self.assertEqual(host, request_event.call_details.host)
+ self.assertLess(abs(deadline - request_event.call_details.deadline),
+ deadline_tolerance)
# Check that the channel is connected, and that both it and the call have
# the proper target and peer; do this after the first flurry of messages to
@@ -155,33 +166,43 @@ class InsecureServerInsecureClient(unittest.TestCase):
server_call_tag = object()
server_call = request_event.call
- server_initial_metadata = [(SERVER_INITIAL_METADATA_KEY, SERVER_INITIAL_METADATA_VALUE)]
- server_trailing_metadata = [(SERVER_TRAILING_METADATA_KEY, SERVER_TRAILING_METADATA_VALUE)]
+ server_initial_metadata = [
+ (server_initial_metadata_key, server_initial_metadata_value)
+ ]
+ server_trailing_metadata = [
+ (server_trailing_metadata_key, server_trailing_metadata_value)
+ ]
server_start_batch_result = server_call.start_batch([
_types.OpArgs.send_initial_metadata(server_initial_metadata),
_types.OpArgs.recv_message(),
- _types.OpArgs.send_message(RESPONSE, 0),
+ _types.OpArgs.send_message(response, 0),
_types.OpArgs.recv_close_on_server(),
- _types.OpArgs.send_status_from_server(server_trailing_metadata, SERVER_STATUS_CODE, SERVER_STATUS_DETAILS)
+ _types.OpArgs.send_status_from_server(
+ server_trailing_metadata, server_status_code, server_status_details)
], server_call_tag)
- self.assertEquals(_types.CallError.OK, server_start_batch_result)
+ self.assertEqual(_types.CallError.OK, server_start_batch_result)
- client_event, server_event, = wait_for_events([self.client_completion_queue, self.server_completion_queue], time.time() + 1)
+ client_event, server_event, = wait_for_events(
+ [self.client_completion_queue, self.server_completion_queue],
+ time.time() + event_time_tolerance)
- self.assertEquals(6, len(client_event.results))
+ self.assertEqual(6, len(client_event.results))
found_client_op_types = set()
for client_result in client_event.results:
- self.assertNotIn(client_result.type, found_client_op_types) # we expect each op type to be unique
+ # we expect each op type to be unique
+ self.assertNotIn(client_result.type, found_client_op_types)
found_client_op_types.add(client_result.type)
if client_result.type == _types.OpType.RECV_INITIAL_METADATA:
- self.assertEquals(dict(server_initial_metadata), dict(client_result.initial_metadata))
+ self.assertEqual(dict(server_initial_metadata),
+ dict(client_result.initial_metadata))
elif client_result.type == _types.OpType.RECV_MESSAGE:
- self.assertEquals(RESPONSE, client_result.message)
+ self.assertEqual(response, client_result.message)
elif client_result.type == _types.OpType.RECV_STATUS_ON_CLIENT:
- self.assertEquals(dict(server_trailing_metadata), dict(client_result.trailing_metadata))
- self.assertEquals(SERVER_STATUS_DETAILS, client_result.status.details)
- self.assertEquals(SERVER_STATUS_CODE, client_result.status.code)
- self.assertEquals(set([
+ self.assertEqual(dict(server_trailing_metadata),
+ dict(client_result.trailing_metadata))
+ self.assertEqual(server_status_details, client_result.status.details)
+ self.assertEqual(server_status_code, client_result.status.code)
+ self.assertEqual(set([
_types.OpType.SEND_INITIAL_METADATA,
_types.OpType.SEND_MESSAGE,
_types.OpType.SEND_CLOSE_FROM_CLIENT,
@@ -190,16 +211,16 @@ class InsecureServerInsecureClient(unittest.TestCase):
_types.OpType.RECV_STATUS_ON_CLIENT
]), found_client_op_types)
- self.assertEquals(5, len(server_event.results))
+ self.assertEqual(5, len(server_event.results))
found_server_op_types = set()
for server_result in server_event.results:
self.assertNotIn(client_result.type, found_server_op_types)
found_server_op_types.add(server_result.type)
if server_result.type == _types.OpType.RECV_MESSAGE:
- self.assertEquals(REQUEST, server_result.message)
+ self.assertEqual(request, server_result.message)
elif server_result.type == _types.OpType.RECV_CLOSE_ON_SERVER:
self.assertFalse(server_result.cancelled)
- self.assertEquals(set([
+ self.assertEqual(set([
_types.OpType.SEND_INITIAL_METADATA,
_types.OpType.RECV_MESSAGE,
_types.OpType.SEND_MESSAGE,
@@ -211,5 +232,81 @@ class InsecureServerInsecureClient(unittest.TestCase):
del server_call
+class HangingServerShutdown(unittest.TestCase):
+
+ def setUp(self):
+ self.server_completion_queue = _low.CompletionQueue()
+ self.server = _low.Server(self.server_completion_queue, [])
+ self.port = self.server.add_http2_port('[::]:0')
+ self.client_completion_queue = _low.CompletionQueue()
+ self.client_channel = _low.Channel('localhost:%d'%self.port, [])
+
+ self.server.start()
+
+ def tearDown(self):
+ self.server.shutdown()
+ del self.client_channel
+
+ self.client_completion_queue.shutdown()
+ self.server_completion_queue.shutdown()
+ while True:
+ client_event, server_event = wait_for_events(
+ [self.client_completion_queue, self.server_completion_queue],
+ float("+inf"))
+ if (client_event.type == _types.EventType.QUEUE_SHUTDOWN and
+ server_event.type == _types.EventType.QUEUE_SHUTDOWN):
+ break
+
+ del self.client_completion_queue
+ del self.server_completion_queue
+ del self.server
+
+ def testHangingServerCall(self):
+ deadline = time.time() + 5
+ deadline_tolerance = 0.25
+ event_time_tolerance = 2
+ cancel_all_calls_time_tolerance = 0.5
+ request = 'blarghaflargh'
+ method = 'twinkies'
+ host = 'hostess'
+ server_request_tag = object()
+ request_call_result = self.server.request_call(self.server_completion_queue,
+ server_request_tag)
+
+ client_call_tag = object()
+ client_call = self.client_channel.create_call(self.client_completion_queue,
+ method, host, deadline)
+ client_start_batch_result = client_call.start_batch([
+ _types.OpArgs.send_initial_metadata([]),
+ _types.OpArgs.send_message(request, 0),
+ _types.OpArgs.send_close_from_client(),
+ _types.OpArgs.recv_initial_metadata(),
+ _types.OpArgs.recv_message(),
+ _types.OpArgs.recv_status_on_client()
+ ], client_call_tag)
+
+ client_no_event, request_event, = wait_for_events(
+ [self.client_completion_queue, self.server_completion_queue],
+ time.time() + event_time_tolerance)
+
+ # Now try to shutdown the server and expect that we see server shutdown
+ # almost immediately after calling cancel_all_calls.
+ with self.assertRaises(RuntimeError):
+ self.server.cancel_all_calls()
+ shutdown_tag = object()
+ self.server.shutdown(shutdown_tag)
+ pre_cancel_timestamp = time.time()
+ self.server.cancel_all_calls()
+ finish_shutdown_timestamp = None
+ client_call_event, server_shutdown_event = wait_for_events(
+ [self.client_completion_queue, self.server_completion_queue],
+ time.time() + event_time_tolerance)
+ self.assertIs(shutdown_tag, server_shutdown_event.tag)
+ self.assertGreater(pre_cancel_timestamp + cancel_all_calls_time_tolerance,
+ time.time())
+
+ del client_call
+
+
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/src/python/grpcio_test/grpc_test/_core_over_links_base_interface_test.py b/src/python/grpcio_test/grpc_test/_core_over_links_base_interface_test.py
new file mode 100644
index 0000000000..7fa90fe35f
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/_core_over_links_base_interface_test.py
@@ -0,0 +1,165 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Tests Base interface compliance of the core-over-gRPC-links stack."""
+
+import collections
+import logging
+import random
+import time
+import unittest
+
+from grpc._adapter import _intermediary_low
+from grpc._links import invocation
+from grpc._links import service
+from grpc.framework.core import implementations
+from grpc.framework.interfaces.base import utilities
+from grpc_test import test_common as grpc_test_common
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.interfaces.base import test_cases
+from grpc_test.framework.interfaces.base import test_interfaces
+
+_INVOCATION_INITIAL_METADATA = ((b'0', b'abc'), (b'1', b'def'), (b'2', b'ghi'),)
+_SERVICE_INITIAL_METADATA = ((b'3', b'jkl'), (b'4', b'mno'), (b'5', b'pqr'),)
+_SERVICE_TERMINAL_METADATA = ((b'6', b'stu'), (b'7', b'vwx'), (b'8', b'yza'),)
+_CODE = _intermediary_low.Code.OK
+_MESSAGE = b'test message'
+
+
+class _SerializationBehaviors(
+ collections.namedtuple(
+ '_SerializationBehaviors',
+ ('request_serializers', 'request_deserializers', 'response_serializers',
+ 'response_deserializers',))):
+ pass
+
+
+class _Links(
+ collections.namedtuple(
+ '_Links',
+ ('invocation_end_link', 'invocation_grpc_link', 'service_grpc_link',
+ 'service_end_link'))):
+ pass
+
+
+def _serialization_behaviors_from_serializations(serializations):
+ request_serializers = {}
+ request_deserializers = {}
+ response_serializers = {}
+ response_deserializers = {}
+ for (group, method), serialization in serializations.iteritems():
+ request_serializers[group, method] = serialization.serialize_request
+ request_deserializers[group, method] = serialization.deserialize_request
+ response_serializers[group, method] = serialization.serialize_response
+ response_deserializers[group, method] = serialization.deserialize_response
+ return _SerializationBehaviors(
+ request_serializers, request_deserializers, response_serializers,
+ response_deserializers)
+
+
+class _Implementation(test_interfaces.Implementation):
+
+ def instantiate(self, serializations, servicer):
+ serialization_behaviors = _serialization_behaviors_from_serializations(
+ serializations)
+ invocation_end_link = implementations.invocation_end_link()
+ service_end_link = implementations.service_end_link(
+ servicer, test_constants.DEFAULT_TIMEOUT,
+ test_constants.MAXIMUM_TIMEOUT)
+ service_grpc_link = service.service_link(
+ serialization_behaviors.request_deserializers,
+ serialization_behaviors.response_serializers)
+ port = service_grpc_link.add_port(0, None)
+ channel = _intermediary_low.Channel('localhost:%d' % port, None)
+ invocation_grpc_link = invocation.invocation_link(
+ channel, b'localhost',
+ serialization_behaviors.request_serializers,
+ serialization_behaviors.response_deserializers)
+
+ invocation_end_link.join_link(invocation_grpc_link)
+ invocation_grpc_link.join_link(invocation_end_link)
+ service_end_link.join_link(service_grpc_link)
+ service_grpc_link.join_link(service_end_link)
+ invocation_grpc_link.start()
+ service_grpc_link.start()
+ return invocation_end_link, service_end_link, (
+ invocation_grpc_link, service_grpc_link)
+
+ def destantiate(self, memo):
+ invocation_grpc_link, service_grpc_link = memo
+ invocation_grpc_link.stop()
+ service_grpc_link.stop_gracefully()
+
+ def invocation_initial_metadata(self):
+ return _INVOCATION_INITIAL_METADATA
+
+ def service_initial_metadata(self):
+ return _SERVICE_INITIAL_METADATA
+
+ def invocation_completion(self):
+ return utilities.completion(None, None, None)
+
+ def service_completion(self):
+ return utilities.completion(_SERVICE_TERMINAL_METADATA, _CODE, _MESSAGE)
+
+ def metadata_transmitted(self, original_metadata, transmitted_metadata):
+ return original_metadata is None or grpc_test_common.metadata_transmitted(
+ original_metadata, transmitted_metadata)
+
+ def completion_transmitted(self, original_completion, transmitted_completion):
+ if (original_completion.terminal_metadata is not None and
+ not grpc_test_common.metadata_transmitted(
+ original_completion.terminal_metadata,
+ transmitted_completion.terminal_metadata)):
+ return False
+ elif original_completion.code is not transmitted_completion.code:
+ return False
+ elif original_completion.message != transmitted_completion.message:
+ return False
+ else:
+ return True
+
+
+def setUpModule():
+ logging.warn('setUpModule!')
+
+
+def tearDownModule():
+ logging.warn('tearDownModule!')
+
+
+def load_tests(loader, tests, pattern):
+ return unittest.TestSuite(
+ tests=tuple(
+ loader.loadTestsFromTestCase(test_case_class)
+ for test_case_class in test_cases.test_cases(_Implementation())))
+
+
+if __name__ == '__main__':
+ unittest.main(verbosity=2)
diff --git a/src/python/grpcio_test/grpc_test/_crust_over_core_over_links_face_interface_test.py b/src/python/grpcio_test/grpc_test/_crust_over_core_over_links_face_interface_test.py
new file mode 100644
index 0000000000..25b99cbbaf
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/_crust_over_core_over_links_face_interface_test.py
@@ -0,0 +1,160 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Tests Face compliance of the crust-over-core-over-gRPC-links stack."""
+
+import collections
+import unittest
+
+from grpc._adapter import _intermediary_low
+from grpc._links import invocation
+from grpc._links import service
+from grpc.framework.core import implementations as core_implementations
+from grpc.framework.crust import implementations as crust_implementations
+from grpc.framework.foundation import logging_pool
+from grpc.framework.interfaces.links import utilities
+from grpc_test import test_common
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.interfaces.face import test_cases
+from grpc_test.framework.interfaces.face import test_interfaces
+from grpc_test.framework.interfaces.links import test_utilities
+
+
+class _SerializationBehaviors(
+ collections.namedtuple(
+ '_SerializationBehaviors',
+ ('request_serializers', 'request_deserializers', 'response_serializers',
+ 'response_deserializers',))):
+ pass
+
+
+def _serialization_behaviors_from_test_methods(test_methods):
+ request_serializers = {}
+ request_deserializers = {}
+ response_serializers = {}
+ response_deserializers = {}
+ for (group, method), test_method in test_methods.iteritems():
+ request_serializers[group, method] = test_method.serialize_request
+ request_deserializers[group, method] = test_method.deserialize_request
+ response_serializers[group, method] = test_method.serialize_response
+ response_deserializers[group, method] = test_method.deserialize_response
+ return _SerializationBehaviors(
+ request_serializers, request_deserializers, response_serializers,
+ response_deserializers)
+
+
+class _Implementation(test_interfaces.Implementation):
+
+ def instantiate(
+ self, methods, method_implementations, multi_method_implementation):
+ pool = logging_pool.pool(test_constants.POOL_SIZE)
+ servicer = crust_implementations.servicer(
+ method_implementations, multi_method_implementation, pool)
+ serialization_behaviors = _serialization_behaviors_from_test_methods(
+ methods)
+ invocation_end_link = core_implementations.invocation_end_link()
+ service_end_link = core_implementations.service_end_link(
+ servicer, test_constants.DEFAULT_TIMEOUT,
+ test_constants.MAXIMUM_TIMEOUT)
+ service_grpc_link = service.service_link(
+ serialization_behaviors.request_deserializers,
+ serialization_behaviors.response_serializers)
+ port = service_grpc_link.add_port(0, None)
+ channel = _intermediary_low.Channel('localhost:%d' % port, None)
+ invocation_grpc_link = invocation.invocation_link(
+ channel, b'localhost',
+ serialization_behaviors.request_serializers,
+ serialization_behaviors.response_deserializers)
+
+ invocation_end_link.join_link(invocation_grpc_link)
+ invocation_grpc_link.join_link(invocation_end_link)
+ service_grpc_link.join_link(service_end_link)
+ service_end_link.join_link(service_grpc_link)
+ service_end_link.start()
+ invocation_end_link.start()
+ invocation_grpc_link.start()
+ service_grpc_link.start()
+
+ generic_stub = crust_implementations.generic_stub(invocation_end_link, pool)
+ # TODO(nathaniel): Add a "groups" attribute to _digest.TestServiceDigest.
+ group = next(iter(methods))[0]
+ # TODO(nathaniel): Add a "cardinalities_by_group" attribute to
+ # _digest.TestServiceDigest.
+ cardinalities = {
+ method: method_object.cardinality()
+ for (group, method), method_object in methods.iteritems()}
+ dynamic_stub = crust_implementations.dynamic_stub(
+ invocation_end_link, group, cardinalities, pool)
+
+ return generic_stub, {group: dynamic_stub}, (
+ invocation_end_link, invocation_grpc_link, service_grpc_link,
+ service_end_link, pool)
+
+ def destantiate(self, memo):
+ (invocation_end_link, invocation_grpc_link, service_grpc_link,
+ service_end_link, pool) = memo
+ invocation_end_link.stop(0).wait()
+ invocation_grpc_link.stop()
+ service_grpc_link.stop_gracefully()
+ service_end_link.stop(0).wait()
+ invocation_end_link.join_link(utilities.NULL_LINK)
+ invocation_grpc_link.join_link(utilities.NULL_LINK)
+ service_grpc_link.join_link(utilities.NULL_LINK)
+ service_end_link.join_link(utilities.NULL_LINK)
+ pool.shutdown(wait=True)
+
+ def invocation_metadata(self):
+ return test_common.INVOCATION_INITIAL_METADATA
+
+ def initial_metadata(self):
+ return test_common.SERVICE_INITIAL_METADATA
+
+ def terminal_metadata(self):
+ return test_common.SERVICE_TERMINAL_METADATA
+
+ def code(self):
+ return _intermediary_low.Code.OK
+
+ def details(self):
+ return test_common.DETAILS
+
+ def metadata_transmitted(self, original_metadata, transmitted_metadata):
+ return original_metadata is None or grpc_test_common.metadata_transmitted(
+ original_metadata, transmitted_metadata)
+
+
+def load_tests(loader, tests, pattern):
+ return unittest.TestSuite(
+ tests=tuple(
+ loader.loadTestsFromTestCase(test_case_class)
+ for test_case_class in test_cases.test_cases(_Implementation())))
+
+
+if __name__ == '__main__':
+ unittest.main(verbosity=2)
diff --git a/src/python/grpcio_test/grpc_test/_cython/adapter_low_test.py b/src/python/grpcio_test/grpc_test/_cython/adapter_low_test.py
index 9bab930e56..f1bec238cf 100644
--- a/src/python/grpcio_test/grpc_test/_cython/adapter_low_test.py
+++ b/src/python/grpcio_test/grpc_test/_cython/adapter_low_test.py
@@ -76,7 +76,7 @@ class InsecureServerInsecureClient(unittest.TestCase):
CLIENT_METADATA_BIN_VALUE = b'\0'*1000
SERVER_INITIAL_METADATA_KEY = 'init_me_me_me'
SERVER_INITIAL_METADATA_VALUE = 'whodawha?'
- SERVER_TRAILING_METADATA_KEY = 'California_is_in_a_drought'
+ SERVER_TRAILING_METADATA_KEY = 'california_is_in_a_drought'
SERVER_TRAILING_METADATA_VALUE = 'zomg it is'
SERVER_STATUS_CODE = _types.StatusCode.OK
SERVER_STATUS_DETAILS = 'our work is never over'
diff --git a/src/python/grpcio_test/grpc_test/_links/_lonely_invocation_link_test.py b/src/python/grpcio_test/grpc_test/_links/_lonely_invocation_link_test.py
index abe240e07a..373a2b2a1f 100644
--- a/src/python/grpcio_test/grpc_test/_links/_lonely_invocation_link_test.py
+++ b/src/python/grpcio_test/grpc_test/_links/_lonely_invocation_link_test.py
@@ -66,7 +66,7 @@ class LonelyInvocationLinkTest(unittest.TestCase):
ticket = links.Ticket(
test_operation_id, 0, test_group, test_method,
links.Ticket.Subscription.FULL, test_constants.SHORT_TIMEOUT, 1, None,
- None, None, None, None, termination)
+ None, None, None, None, termination, None)
invocation_link.accept_ticket(ticket)
invocation_link_mate.block_until_tickets_satisfy(test_cases.terminated)
diff --git a/src/python/grpcio_test/grpc_test/_links/_transmission_test.py b/src/python/grpcio_test/grpc_test/_links/_transmission_test.py
index 9cdc9620f0..db011bca66 100644
--- a/src/python/grpcio_test/grpc_test/_links/_transmission_test.py
+++ b/src/python/grpcio_test/grpc_test/_links/_transmission_test.py
@@ -66,9 +66,9 @@ class TransmissionTest(test_cases.TransmissionTest, unittest.TestCase):
def create_invocation_initial_metadata(self):
return (
- ('first invocation initial metadata key', 'just a string value'),
- ('second invocation initial metadata key', '0123456789'),
- ('third invocation initial metadata key-bin', '\x00\x57' * 100),
+ ('first_invocation_initial_metadata_key', 'just a string value'),
+ ('second_invocation_initial_metadata_key', '0123456789'),
+ ('third_invocation_initial_metadata_key-bin', '\x00\x57' * 100),
)
def create_invocation_terminal_metadata(self):
@@ -76,16 +76,16 @@ class TransmissionTest(test_cases.TransmissionTest, unittest.TestCase):
def create_service_initial_metadata(self):
return (
- ('first service initial metadata key', 'just another string value'),
- ('second service initial metadata key', '9876543210'),
- ('third service initial metadata key-bin', '\x00\x59\x02' * 100),
+ ('first_service_initial_metadata_key', 'just another string value'),
+ ('second_service_initial_metadata_key', '9876543210'),
+ ('third_service_initial_metadata_key-bin', '\x00\x59\x02' * 100),
)
def create_service_terminal_metadata(self):
return (
- ('first service terminal metadata key', 'yet another string value'),
- ('second service terminal metadata key', 'abcdefghij'),
- ('third service terminal metadata key-bin', '\x00\x37' * 100),
+ ('first_service_terminal_metadata_key', 'yet another string value'),
+ ('second_service_terminal_metadata_key', 'abcdefghij'),
+ ('third_service_terminal_metadata_key-bin', '\x00\x37' * 100),
)
def create_invocation_completion(self):
@@ -128,14 +128,14 @@ class RoundTripTest(unittest.TestCase):
invocation_ticket = links.Ticket(
test_operation_id, 0, test_group, test_method,
links.Ticket.Subscription.FULL, test_constants.LONG_TIMEOUT, None, None,
- None, None, None, None, links.Ticket.Termination.COMPLETION)
+ None, None, None, None, links.Ticket.Termination.COMPLETION, None)
invocation_link.accept_ticket(invocation_ticket)
service_mate.block_until_tickets_satisfy(test_cases.terminated)
service_ticket = links.Ticket(
service_mate.tickets()[-1].operation_id, 0, None, None, None, None,
None, None, None, None, test_code, test_message,
- links.Ticket.Termination.COMPLETION)
+ links.Ticket.Termination.COMPLETION, None)
service_link.accept_ticket(service_ticket)
invocation_mate.block_until_tickets_satisfy(test_cases.terminated)
@@ -174,33 +174,34 @@ class RoundTripTest(unittest.TestCase):
invocation_ticket = links.Ticket(
test_operation_id, 0, test_group, test_method,
links.Ticket.Subscription.FULL, test_constants.LONG_TIMEOUT, None, None,
- None, None, None, None, None)
+ None, None, None, None, None, None)
invocation_link.accept_ticket(invocation_ticket)
requests = scenario.requests()
for request_index, request in enumerate(requests):
request_ticket = links.Ticket(
test_operation_id, 1 + request_index, None, None, None, None, 1, None,
- request, None, None, None, None)
+ request, None, None, None, None, None)
invocation_link.accept_ticket(request_ticket)
service_mate.block_until_tickets_satisfy(
test_cases.at_least_n_payloads_received_predicate(1 + request_index))
response_ticket = links.Ticket(
service_mate.tickets()[0].operation_id, request_index, None, None,
None, None, 1, None, scenario.response_for_request(request), None,
- None, None, None)
+ None, None, None, None)
service_link.accept_ticket(response_ticket)
invocation_mate.block_until_tickets_satisfy(
test_cases.at_least_n_payloads_received_predicate(1 + request_index))
request_count = len(requests)
invocation_completion_ticket = links.Ticket(
test_operation_id, request_count + 1, None, None, None, None, None,
- None, None, None, None, None, links.Ticket.Termination.COMPLETION)
+ None, None, None, None, None, links.Ticket.Termination.COMPLETION,
+ None)
invocation_link.accept_ticket(invocation_completion_ticket)
service_mate.block_until_tickets_satisfy(test_cases.terminated)
service_completion_ticket = links.Ticket(
service_mate.tickets()[0].operation_id, request_count, None, None, None,
None, None, None, None, None, test_code, test_message,
- links.Ticket.Termination.COMPLETION)
+ links.Ticket.Termination.COMPLETION, None)
service_link.accept_ticket(service_completion_ticket)
invocation_mate.block_until_tickets_satisfy(test_cases.terminated)
diff --git a/src/python/grpcio_test/grpc_test/beta/__init__.py b/src/python/grpcio_test/grpc_test/beta/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/beta/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/grpcio_test/grpc_test/beta/_connectivity_channel_test.py b/src/python/grpcio_test/grpc_test/beta/_connectivity_channel_test.py
new file mode 100644
index 0000000000..038464889d
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/beta/_connectivity_channel_test.py
@@ -0,0 +1,180 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Tests of grpc.beta._connectivity_channel."""
+
+import threading
+import time
+import unittest
+
+from grpc._adapter import _low
+from grpc._adapter import _types
+from grpc.beta import _connectivity_channel
+from grpc_test.framework.common import test_constants
+
+_MAPPING_FUNCTION = lambda integer: integer * 200 + 17
+_MAPPING = {
+ state: _MAPPING_FUNCTION(state) for state in _types.ConnectivityState}
+_IDLE, _CONNECTING, _READY, _TRANSIENT_FAILURE, _FATAL_FAILURE = map(
+ _MAPPING_FUNCTION, _types.ConnectivityState)
+
+
+def _drive_completion_queue(completion_queue):
+ while True:
+ event = completion_queue.next(time.time() + 24 * 60 * 60)
+ if event.type == _types.EventType.QUEUE_SHUTDOWN:
+ break
+
+
+class _Callback(object):
+
+ def __init__(self):
+ self._condition = threading.Condition()
+ self._connectivities = []
+
+ def update(self, connectivity):
+ with self._condition:
+ self._connectivities.append(connectivity)
+ self._condition.notify()
+
+ def connectivities(self):
+ with self._condition:
+ return tuple(self._connectivities)
+
+ def block_until_connectivities_satisfy(self, predicate):
+ with self._condition:
+ while True:
+ connectivities = tuple(self._connectivities)
+ if predicate(connectivities):
+ return connectivities
+ else:
+ self._condition.wait()
+
+
+class ChannelConnectivityTest(unittest.TestCase):
+
+ def test_lonely_channel_connectivity(self):
+ low_channel = _low.Channel('localhost:12345', ())
+ callback = _Callback()
+
+ connectivity_channel = _connectivity_channel.ConnectivityChannel(
+ low_channel, _MAPPING)
+ connectivity_channel.subscribe(callback.update, try_to_connect=False)
+ first_connectivities = callback.block_until_connectivities_satisfy(bool)
+ connectivity_channel.subscribe(callback.update, try_to_connect=True)
+ second_connectivities = callback.block_until_connectivities_satisfy(
+ lambda connectivities: 2 <= len(connectivities))
+ # Wait for a connection that will never happen.
+ time.sleep(test_constants.SHORT_TIMEOUT)
+ third_connectivities = callback.connectivities()
+ connectivity_channel.unsubscribe(callback.update)
+ fourth_connectivities = callback.connectivities()
+ connectivity_channel.unsubscribe(callback.update)
+ fifth_connectivities = callback.connectivities()
+
+ self.assertSequenceEqual((_IDLE,), first_connectivities)
+ self.assertNotIn(_READY, second_connectivities)
+ self.assertNotIn(_READY, third_connectivities)
+ self.assertNotIn(_READY, fourth_connectivities)
+ self.assertNotIn(_READY, fifth_connectivities)
+
+ def test_immediately_connectable_channel_connectivity(self):
+ server_completion_queue = _low.CompletionQueue()
+ server = _low.Server(server_completion_queue, [])
+ port = server.add_http2_port('[::]:0')
+ server.start()
+ server_completion_queue_thread = threading.Thread(
+ target=_drive_completion_queue, args=(server_completion_queue,))
+ server_completion_queue_thread.start()
+ low_channel = _low.Channel('localhost:%d' % port, ())
+ first_callback = _Callback()
+ second_callback = _Callback()
+
+ connectivity_channel = _connectivity_channel.ConnectivityChannel(
+ low_channel, _MAPPING)
+ connectivity_channel.subscribe(first_callback.update, try_to_connect=False)
+ first_connectivities = first_callback.block_until_connectivities_satisfy(
+ bool)
+ # Wait for a connection that will never happen because try_to_connect=True
+ # has not yet been passed.
+ time.sleep(test_constants.SHORT_TIMEOUT)
+ second_connectivities = first_callback.connectivities()
+ connectivity_channel.subscribe(second_callback.update, try_to_connect=True)
+ third_connectivities = first_callback.block_until_connectivities_satisfy(
+ lambda connectivities: 2 <= len(connectivities))
+ fourth_connectivities = second_callback.block_until_connectivities_satisfy(
+ bool)
+ # Wait for a connection that will happen (or may already have happened).
+ first_callback.block_until_connectivities_satisfy(
+ lambda connectivities: _READY in connectivities)
+ second_callback.block_until_connectivities_satisfy(
+ lambda connectivities: _READY in connectivities)
+ connectivity_channel.unsubscribe(first_callback.update)
+ connectivity_channel.unsubscribe(second_callback.update)
+
+ server.shutdown()
+ server_completion_queue.shutdown()
+ server_completion_queue_thread.join()
+
+ self.assertSequenceEqual((_IDLE,), first_connectivities)
+ self.assertSequenceEqual((_IDLE,), second_connectivities)
+ self.assertNotIn(_TRANSIENT_FAILURE, third_connectivities)
+ self.assertNotIn(_FATAL_FAILURE, third_connectivities)
+ self.assertNotIn(_TRANSIENT_FAILURE, fourth_connectivities)
+ self.assertNotIn(_FATAL_FAILURE, fourth_connectivities)
+
+ def test_reachable_then_unreachable_channel_connectivity(self):
+ server_completion_queue = _low.CompletionQueue()
+ server = _low.Server(server_completion_queue, [])
+ port = server.add_http2_port('[::]:0')
+ server.start()
+ server_completion_queue_thread = threading.Thread(
+ target=_drive_completion_queue, args=(server_completion_queue,))
+ server_completion_queue_thread.start()
+ low_channel = _low.Channel('localhost:%d' % port, ())
+ callback = _Callback()
+
+ connectivity_channel = _connectivity_channel.ConnectivityChannel(
+ low_channel, _MAPPING)
+ connectivity_channel.subscribe(callback.update, try_to_connect=True)
+ callback.block_until_connectivities_satisfy(
+ lambda connectivities: _READY in connectivities)
+ # Now take down the server and confirm that channel readiness is repudiated.
+ server.shutdown()
+ callback.block_until_connectivities_satisfy(
+ lambda connectivities: connectivities[-1] is not _READY)
+ connectivity_channel.unsubscribe(callback.update)
+
+ server.shutdown()
+ server_completion_queue.shutdown()
+ server_completion_queue_thread.join()
+
+
+if __name__ == '__main__':
+ unittest.main(verbosity=2)
diff --git a/src/python/grpcio_test/grpc_test/beta/_utilities_test.py b/src/python/grpcio_test/grpc_test/beta/_utilities_test.py
new file mode 100644
index 0000000000..998e74ccf4
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/beta/_utilities_test.py
@@ -0,0 +1,123 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Tests of grpc.beta.utilities."""
+
+import threading
+import time
+import unittest
+
+from grpc._adapter import _low
+from grpc._adapter import _types
+from grpc.beta import beta
+from grpc.beta import utilities
+from grpc.framework.foundation import future
+from grpc_test.framework.common import test_constants
+
+
+def _drive_completion_queue(completion_queue):
+ while True:
+ event = completion_queue.next(time.time() + 24 * 60 * 60)
+ if event.type == _types.EventType.QUEUE_SHUTDOWN:
+ break
+
+
+class _Callback(object):
+
+ def __init__(self):
+ self._condition = threading.Condition()
+ self._value = None
+
+ def accept_value(self, value):
+ with self._condition:
+ self._value = value
+ self._condition.notify_all()
+
+ def block_until_called(self):
+ with self._condition:
+ while self._value is None:
+ self._condition.wait()
+ return self._value
+
+
+class ChannelConnectivityTest(unittest.TestCase):
+
+ def test_lonely_channel_connectivity(self):
+ channel = beta.create_insecure_channel('localhost', 12345)
+ callback = _Callback()
+
+ ready_future = utilities.channel_ready_future(channel)
+ ready_future.add_done_callback(callback.accept_value)
+ with self.assertRaises(future.TimeoutError):
+ ready_future.result(test_constants.SHORT_TIMEOUT)
+ self.assertFalse(ready_future.cancelled())
+ self.assertFalse(ready_future.done())
+ self.assertTrue(ready_future.running())
+ ready_future.cancel()
+ value_passed_to_callback = callback.block_until_called()
+ self.assertIs(ready_future, value_passed_to_callback)
+ self.assertTrue(ready_future.cancelled())
+ self.assertTrue(ready_future.done())
+ self.assertFalse(ready_future.running())
+
+ def test_immediately_connectable_channel_connectivity(self):
+ server_completion_queue = _low.CompletionQueue()
+ server = _low.Server(server_completion_queue, [])
+ port = server.add_http2_port('[::]:0')
+ server.start()
+ server_completion_queue_thread = threading.Thread(
+ target=_drive_completion_queue, args=(server_completion_queue,))
+ server_completion_queue_thread.start()
+ channel = beta.create_insecure_channel('localhost', port)
+ callback = _Callback()
+
+ try:
+ ready_future = utilities.channel_ready_future(channel)
+ ready_future.add_done_callback(callback.accept_value)
+ self.assertIsNone(
+ ready_future.result(test_constants.SHORT_TIMEOUT))
+ value_passed_to_callback = callback.block_until_called()
+ self.assertIs(ready_future, value_passed_to_callback)
+ self.assertFalse(ready_future.cancelled())
+ self.assertTrue(ready_future.done())
+ self.assertFalse(ready_future.running())
+ # Cancellation after maturity has no effect.
+ ready_future.cancel()
+ self.assertFalse(ready_future.cancelled())
+ self.assertTrue(ready_future.done())
+ self.assertFalse(ready_future.running())
+ finally:
+ ready_future.cancel()
+ server.shutdown()
+ server_completion_queue.shutdown()
+ server_completion_queue_thread.join()
+
+
+if __name__ == '__main__':
+ unittest.main(verbosity=2)
diff --git a/src/python/grpcio_test/grpc_test/framework/_crust_over_core_face_interface_test.py b/src/python/grpcio_test/grpc_test/framework/_crust_over_core_face_interface_test.py
new file mode 100644
index 0000000000..30bb85f6c3
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/_crust_over_core_face_interface_test.py
@@ -0,0 +1,111 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Tests Face interface compliance of the crust-over-core stack."""
+
+import collections
+import unittest
+
+from grpc.framework.core import implementations as core_implementations
+from grpc.framework.crust import implementations as crust_implementations
+from grpc.framework.foundation import logging_pool
+from grpc.framework.interfaces.links import utilities
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.interfaces.face import test_cases
+from grpc_test.framework.interfaces.face import test_interfaces
+from grpc_test.framework.interfaces.links import test_utilities
+
+
+class _Implementation(test_interfaces.Implementation):
+
+ def instantiate(
+ self, methods, method_implementations, multi_method_implementation):
+ pool = logging_pool.pool(test_constants.POOL_SIZE)
+ servicer = crust_implementations.servicer(
+ method_implementations, multi_method_implementation, pool)
+
+ service_end_link = core_implementations.service_end_link(
+ servicer, test_constants.DEFAULT_TIMEOUT,
+ test_constants.MAXIMUM_TIMEOUT)
+ invocation_end_link = core_implementations.invocation_end_link()
+ invocation_end_link.join_link(service_end_link)
+ service_end_link.join_link(invocation_end_link)
+ service_end_link.start()
+ invocation_end_link.start()
+
+ generic_stub = crust_implementations.generic_stub(invocation_end_link, pool)
+ # TODO(nathaniel): Add a "groups" attribute to _digest.TestServiceDigest.
+ group = next(iter(methods))[0]
+ # TODO(nathaniel): Add a "cardinalities_by_group" attribute to
+ # _digest.TestServiceDigest.
+ cardinalities = {
+ method: method_object.cardinality()
+ for (group, method), method_object in methods.iteritems()}
+ dynamic_stub = crust_implementations.dynamic_stub(
+ invocation_end_link, group, cardinalities, pool)
+
+ return generic_stub, {group: dynamic_stub}, (
+ invocation_end_link, service_end_link, pool)
+
+ def destantiate(self, memo):
+ invocation_end_link, service_end_link, pool = memo
+ invocation_end_link.stop(0).wait()
+ service_end_link.stop(0).wait()
+ invocation_end_link.join_link(utilities.NULL_LINK)
+ service_end_link.join_link(utilities.NULL_LINK)
+ pool.shutdown(wait=True)
+
+ def invocation_metadata(self):
+ return object()
+
+ def initial_metadata(self):
+ return object()
+
+ def terminal_metadata(self):
+ return object()
+
+ def code(self):
+ return object()
+
+ def details(self):
+ return object()
+
+ def metadata_transmitted(self, original_metadata, transmitted_metadata):
+ return original_metadata is transmitted_metadata
+
+
+def load_tests(loader, tests, pattern):
+ return unittest.TestSuite(
+ tests=tuple(
+ loader.loadTestsFromTestCase(test_case_class)
+ for test_case_class in test_cases.test_cases(_Implementation())))
+
+
+if __name__ == '__main__':
+ unittest.main(verbosity=2)
diff --git a/src/python/grpcio_test/grpc_test/framework/common/test_control.py b/src/python/grpcio_test/grpc_test/framework/common/test_control.py
index 3960c4e649..8d6eba5c2c 100644
--- a/src/python/grpcio_test/grpc_test/framework/common/test_control.py
+++ b/src/python/grpcio_test/grpc_test/framework/common/test_control.py
@@ -34,6 +34,14 @@ import contextlib
import threading
+class Defect(Exception):
+ """Simulates a programming defect raised into in a system under test.
+
+ Use of a standard exception type is too easily misconstrued as an actual
+ defect in either the test infrastructure or the system under test.
+ """
+
+
class Control(object):
"""An object that accepts program control from a system under test.
@@ -62,7 +70,7 @@ class PauseFailControl(Control):
def control(self):
with self._condition:
if self._fail:
- raise ValueError()
+ raise Defect()
while self._paused:
self._condition.wait()
diff --git a/src/python/grpcio_test/grpc_test/framework/core/__init__.py b/src/python/grpcio_test/grpc_test/framework/core/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/core/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/grpcio_test/grpc_test/framework/core/_base_interface_test.py b/src/python/grpcio_test/grpc_test/framework/core/_base_interface_test.py
new file mode 100644
index 0000000000..8d72f131d5
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/core/_base_interface_test.py
@@ -0,0 +1,96 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Tests the RPC Framework Core's implementation of the Base interface."""
+
+import logging
+import random
+import time
+import unittest
+
+from grpc.framework.core import implementations
+from grpc.framework.interfaces.base import utilities
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.interfaces.base import test_cases
+from grpc_test.framework.interfaces.base import test_interfaces
+
+
+class _Implementation(test_interfaces.Implementation):
+
+ def __init__(self):
+ self._invocation_initial_metadata = object()
+ self._service_initial_metadata = object()
+ self._invocation_terminal_metadata = object()
+ self._service_terminal_metadata = object()
+
+ def instantiate(self, serializations, servicer):
+ invocation = implementations.invocation_end_link()
+ service = implementations.service_end_link(
+ servicer, test_constants.DEFAULT_TIMEOUT,
+ test_constants.MAXIMUM_TIMEOUT)
+ invocation.join_link(service)
+ service.join_link(invocation)
+ return invocation, service, None
+
+ def destantiate(self, memo):
+ pass
+
+ def invocation_initial_metadata(self):
+ return self._invocation_initial_metadata
+
+ def service_initial_metadata(self):
+ return self._service_initial_metadata
+
+ def invocation_completion(self):
+ return utilities.completion(self._invocation_terminal_metadata, None, None)
+
+ def service_completion(self):
+ return utilities.completion(self._service_terminal_metadata, None, None)
+
+ def metadata_transmitted(self, original_metadata, transmitted_metadata):
+ return transmitted_metadata is original_metadata
+
+ def completion_transmitted(self, original_completion, transmitted_completion):
+ return (
+ (original_completion.terminal_metadata is
+ transmitted_completion.terminal_metadata) and
+ original_completion.code is transmitted_completion.code and
+ original_completion.message is transmitted_completion.message
+ )
+
+
+def load_tests(loader, tests, pattern):
+ return unittest.TestSuite(
+ tests=tuple(
+ loader.loadTestsFromTestCase(test_case_class)
+ for test_case_class in test_cases.test_cases(_Implementation())))
+
+
+if __name__ == '__main__':
+ unittest.main(verbosity=2)
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/base/test_cases.py b/src/python/grpcio_test/grpc_test/framework/interfaces/base/test_cases.py
index dd332fe5dd..87332cf612 100644
--- a/src/python/grpcio_test/grpc_test/framework/interfaces/base/test_cases.py
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/base/test_cases.py
@@ -134,7 +134,7 @@ class _Servicer(base.Servicer):
if group != self._group or method != self._method:
controller.fail(
'%s != %s or %s != %s' % (group, self._group, method, self._method))
- raise base.NoSuchMethodError()
+ raise base.NoSuchMethodError(None, None)
else:
operator = _Operator(
controller, controller.on_service_advance, self._pool,
@@ -211,8 +211,10 @@ class _OperationTest(unittest.TestCase):
elif instruction.kind is _control.Instruction.Kind.CONCLUDE:
break
- invocation_end.stop_gracefully()
- service_end.stop_gracefully()
+ invocation_stop_event = invocation_end.stop(0)
+ service_stop_event = service_end.stop(0)
+ invocation_stop_event.wait()
+ service_stop_event.wait()
invocation_stats = invocation_end.operation_stats()
service_stats = service_end.operation_stats()
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/_3069_test_constant.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_3069_test_constant.py
new file mode 100644
index 0000000000..363d9ce8f1
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_3069_test_constant.py
@@ -0,0 +1,37 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""A test constant working around issue 3069."""
+
+# test_constants is referenced from specification in this module.
+from grpc_test.framework.common import test_constants # pylint: disable=unused-import
+
+# TODO(issue 3069): Replace uses of this constant with
+# test_constants.SHORT_TIMEOUT.
+REALLY_SHORT_TIMEOUT = 0.1
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/__init__.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/__init__.py
new file mode 100644
index 0000000000..7086519106
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/__init__.py
@@ -0,0 +1,30 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/_blocking_invocation_inline_service.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_blocking_invocation_inline_service.py
new file mode 100644
index 0000000000..8804f3f223
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_blocking_invocation_inline_service.py
@@ -0,0 +1,251 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Test code for the Face layer of RPC Framework."""
+
+import abc
+import unittest
+
+# test_interfaces is referenced from specification in this module.
+from grpc.framework.interfaces.face import face
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.common import test_control
+from grpc_test.framework.common import test_coverage
+from grpc_test.framework.interfaces.face import _3069_test_constant
+from grpc_test.framework.interfaces.face import _digest
+from grpc_test.framework.interfaces.face import _stock_service
+from grpc_test.framework.interfaces.face import test_interfaces # pylint: disable=unused-import
+
+
+class TestCase(test_coverage.Coverage, unittest.TestCase):
+ """A test of the Face layer of RPC Framework.
+
+ Concrete subclasses must have an "implementation" attribute of type
+ test_interfaces.Implementation and an "invoker_constructor" attribute of type
+ _invocation.InvokerConstructor.
+ """
+ __metaclass__ = abc.ABCMeta
+
+ NAME = 'BlockingInvocationInlineServiceTest'
+
+ def setUp(self):
+ """See unittest.TestCase.setUp for full specification.
+
+ Overriding implementations must call this implementation.
+ """
+ self._control = test_control.PauseFailControl()
+ self._digest = _digest.digest(
+ _stock_service.STOCK_TEST_SERVICE, self._control, None)
+
+ generic_stub, dynamic_stubs, self._memo = self.implementation.instantiate(
+ self._digest.methods, self._digest.inline_method_implementations, None)
+ self._invoker = self.invoker_constructor.construct_invoker(
+ generic_stub, dynamic_stubs, self._digest.methods)
+
+ def tearDown(self):
+ """See unittest.TestCase.tearDown for full specification.
+
+ Overriding implementations must call this implementation.
+ """
+ self.implementation.destantiate(self._memo)
+
+ def testSuccessfulUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ response = self._invoker.blocking(group, method)(
+ request, test_constants.LONG_TIMEOUT)
+
+ test_messages.verify(request, response, self)
+
+ def testSuccessfulUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ response_iterator = self._invoker.blocking(group, method)(
+ request, test_constants.LONG_TIMEOUT)
+ responses = list(response_iterator)
+
+ test_messages.verify(request, responses, self)
+
+ def testSuccessfulStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ response = self._invoker.blocking(group, method)(
+ iter(requests), test_constants.LONG_TIMEOUT)
+
+ test_messages.verify(requests, response, self)
+
+ def testSuccessfulStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ response_iterator = self._invoker.blocking(group, method)(
+ iter(requests), test_constants.LONG_TIMEOUT)
+ responses = list(response_iterator)
+
+ test_messages.verify(requests, responses, self)
+
+ def testSequentialInvocations(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ first_request = test_messages.request()
+ second_request = test_messages.request()
+
+ first_response = self._invoker.blocking(group, method)(
+ first_request, test_constants.LONG_TIMEOUT)
+
+ test_messages.verify(first_request, first_response, self)
+
+ second_response = self._invoker.blocking(group, method)(
+ second_request, test_constants.LONG_TIMEOUT)
+
+ test_messages.verify(second_request, second_response, self)
+
+ @unittest.skip('Parallel invocations impossible with blocking control flow!')
+ def testParallelInvocations(self):
+ raise NotImplementedError()
+
+ @unittest.skip('Parallel invocations impossible with blocking control flow!')
+ def testWaitingForSomeButNotAllParallelInvocations(self):
+ raise NotImplementedError()
+
+ @unittest.skip('Cancellation impossible with blocking control flow!')
+ def testCancelledUnaryRequestUnaryResponse(self):
+ raise NotImplementedError()
+
+ @unittest.skip('Cancellation impossible with blocking control flow!')
+ def testCancelledUnaryRequestStreamResponse(self):
+ raise NotImplementedError()
+
+ @unittest.skip('Cancellation impossible with blocking control flow!')
+ def testCancelledStreamRequestUnaryResponse(self):
+ raise NotImplementedError()
+
+ @unittest.skip('Cancellation impossible with blocking control flow!')
+ def testCancelledStreamRequestStreamResponse(self):
+ raise NotImplementedError()
+
+ def testExpiredUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ with self._control.pause(), self.assertRaises(
+ face.ExpirationError):
+ self._invoker.blocking(group, method)(
+ request, _3069_test_constant.REALLY_SHORT_TIMEOUT)
+
+ def testExpiredUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ with self._control.pause(), self.assertRaises(
+ face.ExpirationError):
+ response_iterator = self._invoker.blocking(group, method)(
+ request, _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ list(response_iterator)
+
+ def testExpiredStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ with self._control.pause(), self.assertRaises(
+ face.ExpirationError):
+ self._invoker.blocking(group, method)(
+ iter(requests), _3069_test_constant.REALLY_SHORT_TIMEOUT)
+
+ def testExpiredStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ with self._control.pause(), self.assertRaises(
+ face.ExpirationError):
+ response_iterator = self._invoker.blocking(group, method)(
+ iter(requests), _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ list(response_iterator)
+
+ def testFailedUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ with self._control.fail(), self.assertRaises(face.RemoteError):
+ self._invoker.blocking(group, method)(
+ request, test_constants.LONG_TIMEOUT)
+
+ def testFailedUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ with self._control.fail(), self.assertRaises(face.RemoteError):
+ response_iterator = self._invoker.blocking(group, method)(
+ request, test_constants.LONG_TIMEOUT)
+ list(response_iterator)
+
+ def testFailedStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ with self._control.fail(), self.assertRaises(face.RemoteError):
+ self._invoker.blocking(group, method)(
+ iter(requests), test_constants.LONG_TIMEOUT)
+
+ def testFailedStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ with self._control.fail(), self.assertRaises(face.RemoteError):
+ response_iterator = self._invoker.blocking(group, method)(
+ iter(requests), test_constants.LONG_TIMEOUT)
+ list(response_iterator)
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/_digest.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_digest.py
new file mode 100644
index 0000000000..da56ed7b27
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_digest.py
@@ -0,0 +1,444 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Code for making a service.TestService more amenable to use in tests."""
+
+import collections
+import threading
+
+# test_control, _service, and test_interfaces are referenced from specification
+# in this module.
+from grpc.framework.common import cardinality
+from grpc.framework.common import style
+from grpc.framework.foundation import stream
+from grpc.framework.foundation import stream_util
+from grpc.framework.interfaces.face import face
+from grpc_test.framework.common import test_control # pylint: disable=unused-import
+from grpc_test.framework.interfaces.face import _service # pylint: disable=unused-import
+from grpc_test.framework.interfaces.face import test_interfaces # pylint: disable=unused-import
+
+_IDENTITY = lambda x: x
+
+
+class TestServiceDigest(
+ collections.namedtuple(
+ 'TestServiceDigest',
+ ('methods',
+ 'inline_method_implementations',
+ 'event_method_implementations',
+ 'multi_method_implementation',
+ 'unary_unary_messages_sequences',
+ 'unary_stream_messages_sequences',
+ 'stream_unary_messages_sequences',
+ 'stream_stream_messages_sequences',))):
+ """A transformation of a service.TestService.
+
+ Attributes:
+ methods: A dict from method group-name pair to test_interfaces.Method object
+ describing the RPC methods that may be called during the test.
+ inline_method_implementations: A dict from method group-name pair to
+ face.MethodImplementation object to be used in tests of in-line calls to
+ behaviors under test.
+ event_method_implementations: A dict from method group-name pair to
+ face.MethodImplementation object to be used in tests of event-driven calls
+ to behaviors under test.
+ multi_method_implementation: A face.MultiMethodImplementation to be used in
+ tests of generic calls to behaviors under test.
+ unary_unary_messages_sequences: A dict from method group-name pair to
+ sequence of service.UnaryUnaryTestMessages objects to be used to test the
+ identified method.
+ unary_stream_messages_sequences: A dict from method group-name pair to
+ sequence of service.UnaryStreamTestMessages objects to be used to test the
+ identified method.
+ stream_unary_messages_sequences: A dict from method group-name pair to
+ sequence of service.StreamUnaryTestMessages objects to be used to test the
+ identified method.
+ stream_stream_messages_sequences: A dict from method group-name pair to
+ sequence of service.StreamStreamTestMessages objects to be used to test
+ the identified method.
+ """
+
+
+class _BufferingConsumer(stream.Consumer):
+ """A trivial Consumer that dumps what it consumes in a user-mutable buffer."""
+
+ def __init__(self):
+ self.consumed = []
+ self.terminated = False
+
+ def consume(self, value):
+ self.consumed.append(value)
+
+ def terminate(self):
+ self.terminated = True
+
+ def consume_and_terminate(self, value):
+ self.consumed.append(value)
+ self.terminated = True
+
+
+class _InlineUnaryUnaryMethod(face.MethodImplementation):
+
+ def __init__(self, unary_unary_test_method, control):
+ self._test_method = unary_unary_test_method
+ self._control = control
+
+ self.cardinality = cardinality.Cardinality.UNARY_UNARY
+ self.style = style.Service.INLINE
+
+ def unary_unary_inline(self, request, context):
+ response_list = []
+ self._test_method.service(
+ request, response_list.append, context, self._control)
+ return response_list.pop(0)
+
+
+class _EventUnaryUnaryMethod(face.MethodImplementation):
+
+ def __init__(self, unary_unary_test_method, control, pool):
+ self._test_method = unary_unary_test_method
+ self._control = control
+ self._pool = pool
+
+ self.cardinality = cardinality.Cardinality.UNARY_UNARY
+ self.style = style.Service.EVENT
+
+ def unary_unary_event(self, request, response_callback, context):
+ if self._pool is None:
+ self._test_method.service(
+ request, response_callback, context, self._control)
+ else:
+ self._pool.submit(
+ self._test_method.service, request, response_callback, context,
+ self._control)
+
+
+class _InlineUnaryStreamMethod(face.MethodImplementation):
+
+ def __init__(self, unary_stream_test_method, control):
+ self._test_method = unary_stream_test_method
+ self._control = control
+
+ self.cardinality = cardinality.Cardinality.UNARY_STREAM
+ self.style = style.Service.INLINE
+
+ def unary_stream_inline(self, request, context):
+ response_consumer = _BufferingConsumer()
+ self._test_method.service(
+ request, response_consumer, context, self._control)
+ for response in response_consumer.consumed:
+ yield response
+
+
+class _EventUnaryStreamMethod(face.MethodImplementation):
+
+ def __init__(self, unary_stream_test_method, control, pool):
+ self._test_method = unary_stream_test_method
+ self._control = control
+ self._pool = pool
+
+ self.cardinality = cardinality.Cardinality.UNARY_STREAM
+ self.style = style.Service.EVENT
+
+ def unary_stream_event(self, request, response_consumer, context):
+ if self._pool is None:
+ self._test_method.service(
+ request, response_consumer, context, self._control)
+ else:
+ self._pool.submit(
+ self._test_method.service, request, response_consumer, context,
+ self._control)
+
+
+class _InlineStreamUnaryMethod(face.MethodImplementation):
+
+ def __init__(self, stream_unary_test_method, control):
+ self._test_method = stream_unary_test_method
+ self._control = control
+
+ self.cardinality = cardinality.Cardinality.STREAM_UNARY
+ self.style = style.Service.INLINE
+
+ def stream_unary_inline(self, request_iterator, context):
+ response_list = []
+ request_consumer = self._test_method.service(
+ response_list.append, context, self._control)
+ for request in request_iterator:
+ request_consumer.consume(request)
+ request_consumer.terminate()
+ return response_list.pop(0)
+
+
+class _EventStreamUnaryMethod(face.MethodImplementation):
+
+ def __init__(self, stream_unary_test_method, control, pool):
+ self._test_method = stream_unary_test_method
+ self._control = control
+ self._pool = pool
+
+ self.cardinality = cardinality.Cardinality.STREAM_UNARY
+ self.style = style.Service.EVENT
+
+ def stream_unary_event(self, response_callback, context):
+ request_consumer = self._test_method.service(
+ response_callback, context, self._control)
+ if self._pool is None:
+ return request_consumer
+ else:
+ return stream_util.ThreadSwitchingConsumer(request_consumer, self._pool)
+
+
+class _InlineStreamStreamMethod(face.MethodImplementation):
+
+ def __init__(self, stream_stream_test_method, control):
+ self._test_method = stream_stream_test_method
+ self._control = control
+
+ self.cardinality = cardinality.Cardinality.STREAM_STREAM
+ self.style = style.Service.INLINE
+
+ def stream_stream_inline(self, request_iterator, context):
+ response_consumer = _BufferingConsumer()
+ request_consumer = self._test_method.service(
+ response_consumer, context, self._control)
+
+ for request in request_iterator:
+ request_consumer.consume(request)
+ while response_consumer.consumed:
+ yield response_consumer.consumed.pop(0)
+ response_consumer.terminate()
+
+
+class _EventStreamStreamMethod(face.MethodImplementation):
+
+ def __init__(self, stream_stream_test_method, control, pool):
+ self._test_method = stream_stream_test_method
+ self._control = control
+ self._pool = pool
+
+ self.cardinality = cardinality.Cardinality.STREAM_STREAM
+ self.style = style.Service.EVENT
+
+ def stream_stream_event(self, response_consumer, context):
+ request_consumer = self._test_method.service(
+ response_consumer, context, self._control)
+ if self._pool is None:
+ return request_consumer
+ else:
+ return stream_util.ThreadSwitchingConsumer(request_consumer, self._pool)
+
+
+class _UnaryConsumer(stream.Consumer):
+ """A Consumer that only allows consumption of exactly one value."""
+
+ def __init__(self, action):
+ self._lock = threading.Lock()
+ self._action = action
+ self._consumed = False
+ self._terminated = False
+
+ def consume(self, value):
+ with self._lock:
+ if self._consumed:
+ raise ValueError('Unary consumer already consumed!')
+ elif self._terminated:
+ raise ValueError('Unary consumer already terminated!')
+ else:
+ self._consumed = True
+
+ self._action(value)
+
+ def terminate(self):
+ with self._lock:
+ if not self._consumed:
+ raise ValueError('Unary consumer hasn\'t yet consumed!')
+ elif self._terminated:
+ raise ValueError('Unary consumer already terminated!')
+ else:
+ self._terminated = True
+
+ def consume_and_terminate(self, value):
+ with self._lock:
+ if self._consumed:
+ raise ValueError('Unary consumer already consumed!')
+ elif self._terminated:
+ raise ValueError('Unary consumer already terminated!')
+ else:
+ self._consumed = True
+ self._terminated = True
+
+ self._action(value)
+
+
+class _UnaryUnaryAdaptation(object):
+
+ def __init__(self, unary_unary_test_method):
+ self._method = unary_unary_test_method
+
+ def service(self, response_consumer, context, control):
+ def action(request):
+ self._method.service(
+ request, response_consumer.consume_and_terminate, context, control)
+ return _UnaryConsumer(action)
+
+
+class _UnaryStreamAdaptation(object):
+
+ def __init__(self, unary_stream_test_method):
+ self._method = unary_stream_test_method
+
+ def service(self, response_consumer, context, control):
+ def action(request):
+ self._method.service(request, response_consumer, context, control)
+ return _UnaryConsumer(action)
+
+
+class _StreamUnaryAdaptation(object):
+
+ def __init__(self, stream_unary_test_method):
+ self._method = stream_unary_test_method
+
+ def service(self, response_consumer, context, control):
+ return self._method.service(
+ response_consumer.consume_and_terminate, context, control)
+
+
+class _MultiMethodImplementation(face.MultiMethodImplementation):
+
+ def __init__(self, methods, control, pool):
+ self._methods = methods
+ self._control = control
+ self._pool = pool
+
+ def service(self, group, name, response_consumer, context):
+ method = self._methods.get(group, name, None)
+ if method is None:
+ raise face.NoSuchMethodError(group, name)
+ elif self._pool is None:
+ return method(response_consumer, context, self._control)
+ else:
+ request_consumer = method(response_consumer, context, self._control)
+ return stream_util.ThreadSwitchingConsumer(request_consumer, self._pool)
+
+
+class _Assembly(
+ collections.namedtuple(
+ '_Assembly',
+ ['methods', 'inlines', 'events', 'adaptations', 'messages'])):
+ """An intermediate structure created when creating a TestServiceDigest."""
+
+
+def _assemble(
+ scenarios, identifiers, inline_method_constructor, event_method_constructor,
+ adapter, control, pool):
+ """Creates an _Assembly from the given scenarios."""
+ methods = {}
+ inlines = {}
+ events = {}
+ adaptations = {}
+ messages = {}
+ for identifier, scenario in scenarios.iteritems():
+ if identifier in identifiers:
+ raise ValueError('Repeated identifier "(%s, %s)"!' % identifier)
+
+ test_method = scenario[0]
+ inline_method = inline_method_constructor(test_method, control)
+ event_method = event_method_constructor(test_method, control, pool)
+ adaptation = adapter(test_method)
+
+ methods[identifier] = test_method
+ inlines[identifier] = inline_method
+ events[identifier] = event_method
+ adaptations[identifier] = adaptation
+ messages[identifier] = scenario[1]
+
+ return _Assembly(methods, inlines, events, adaptations, messages)
+
+
+def digest(service, control, pool):
+ """Creates a TestServiceDigest from a TestService.
+
+ Args:
+ service: A _service.TestService.
+ control: A test_control.Control.
+ pool: If RPC methods should be serviced in a separate thread, a thread pool.
+ None if RPC methods should be serviced in the thread belonging to the
+ run-time that calls for their service.
+
+ Returns:
+ A TestServiceDigest synthesized from the given service.TestService.
+ """
+ identifiers = set()
+
+ unary_unary = _assemble(
+ service.unary_unary_scenarios(), identifiers, _InlineUnaryUnaryMethod,
+ _EventUnaryUnaryMethod, _UnaryUnaryAdaptation, control, pool)
+ identifiers.update(unary_unary.inlines)
+
+ unary_stream = _assemble(
+ service.unary_stream_scenarios(), identifiers, _InlineUnaryStreamMethod,
+ _EventUnaryStreamMethod, _UnaryStreamAdaptation, control, pool)
+ identifiers.update(unary_stream.inlines)
+
+ stream_unary = _assemble(
+ service.stream_unary_scenarios(), identifiers, _InlineStreamUnaryMethod,
+ _EventStreamUnaryMethod, _StreamUnaryAdaptation, control, pool)
+ identifiers.update(stream_unary.inlines)
+
+ stream_stream = _assemble(
+ service.stream_stream_scenarios(), identifiers, _InlineStreamStreamMethod,
+ _EventStreamStreamMethod, _IDENTITY, control, pool)
+ identifiers.update(stream_stream.inlines)
+
+ methods = dict(unary_unary.methods)
+ methods.update(unary_stream.methods)
+ methods.update(stream_unary.methods)
+ methods.update(stream_stream.methods)
+ adaptations = dict(unary_unary.adaptations)
+ adaptations.update(unary_stream.adaptations)
+ adaptations.update(stream_unary.adaptations)
+ adaptations.update(stream_stream.adaptations)
+ inlines = dict(unary_unary.inlines)
+ inlines.update(unary_stream.inlines)
+ inlines.update(stream_unary.inlines)
+ inlines.update(stream_stream.inlines)
+ events = dict(unary_unary.events)
+ events.update(unary_stream.events)
+ events.update(stream_unary.events)
+ events.update(stream_stream.events)
+
+ return TestServiceDigest(
+ methods,
+ inlines,
+ events,
+ _MultiMethodImplementation(adaptations, control, pool),
+ unary_unary.messages,
+ unary_stream.messages,
+ stream_unary.messages,
+ stream_stream.messages)
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/_event_invocation_synchronous_event_service.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_event_invocation_synchronous_event_service.py
new file mode 100644
index 0000000000..5a78b4bed2
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_event_invocation_synchronous_event_service.py
@@ -0,0 +1,380 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Test code for the Face layer of RPC Framework."""
+
+import abc
+import unittest
+
+# test_interfaces is referenced from specification in this module.
+from grpc.framework.interfaces.face import face
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.common import test_control
+from grpc_test.framework.common import test_coverage
+from grpc_test.framework.interfaces.face import _3069_test_constant
+from grpc_test.framework.interfaces.face import _digest
+from grpc_test.framework.interfaces.face import _receiver
+from grpc_test.framework.interfaces.face import _stock_service
+from grpc_test.framework.interfaces.face import test_interfaces # pylint: disable=unused-import
+
+
+class TestCase(test_coverage.Coverage, unittest.TestCase):
+ """A test of the Face layer of RPC Framework.
+
+ Concrete subclasses must have an "implementation" attribute of type
+ test_interfaces.Implementation and an "invoker_constructor" attribute of type
+ _invocation.InvokerConstructor.
+ """
+ __metaclass__ = abc.ABCMeta
+
+ NAME = 'EventInvocationSynchronousEventServiceTest'
+
+ def setUp(self):
+ """See unittest.TestCase.setUp for full specification.
+
+ Overriding implementations must call this implementation.
+ """
+ self._control = test_control.PauseFailControl()
+ self._digest = _digest.digest(
+ _stock_service.STOCK_TEST_SERVICE, self._control, None)
+
+ generic_stub, dynamic_stubs, self._memo = self.implementation.instantiate(
+ self._digest.methods, self._digest.event_method_implementations, None)
+ self._invoker = self.invoker_constructor.construct_invoker(
+ generic_stub, dynamic_stubs, self._digest.methods)
+
+ def tearDown(self):
+ """See unittest.TestCase.tearDown for full specification.
+
+ Overriding implementations must call this implementation.
+ """
+ self.implementation.destantiate(self._memo)
+
+ def testSuccessfulUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+ receiver = _receiver.Receiver()
+
+ self._invoker.event(group, method)(
+ request, receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ receiver.block_until_terminated()
+ response = receiver.unary_response()
+
+ test_messages.verify(request, response, self)
+
+ def testSuccessfulUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+ receiver = _receiver.Receiver()
+
+ self._invoker.event(group, method)(
+ request, receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ receiver.block_until_terminated()
+ responses = receiver.stream_responses()
+
+ test_messages.verify(request, responses, self)
+
+ def testSuccessfulStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+ receiver = _receiver.Receiver()
+
+ call_consumer = self._invoker.event(group, method)(
+ receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ for request in requests:
+ call_consumer.consume(request)
+ call_consumer.terminate()
+ receiver.block_until_terminated()
+ response = receiver.unary_response()
+
+ test_messages.verify(requests, response, self)
+
+ def testSuccessfulStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+ receiver = _receiver.Receiver()
+
+ call_consumer = self._invoker.event(group, method)(
+ receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ for request in requests:
+ call_consumer.consume(request)
+ call_consumer.terminate()
+ receiver.block_until_terminated()
+ responses = receiver.stream_responses()
+
+ test_messages.verify(requests, responses, self)
+
+ def testSequentialInvocations(self):
+ # pylint: disable=cell-var-from-loop
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ first_request = test_messages.request()
+ second_request = test_messages.request()
+ second_receiver = _receiver.Receiver()
+
+ def make_second_invocation():
+ self._invoker.event(group, method)(
+ second_request, second_receiver, second_receiver.abort,
+ test_constants.LONG_TIMEOUT)
+
+ class FirstReceiver(_receiver.Receiver):
+
+ def complete(self, terminal_metadata, code, details):
+ super(FirstReceiver, self).complete(
+ terminal_metadata, code, details)
+ make_second_invocation()
+
+ first_receiver = FirstReceiver()
+
+ self._invoker.event(group, method)(
+ first_request, first_receiver, first_receiver.abort,
+ test_constants.LONG_TIMEOUT)
+ second_receiver.block_until_terminated()
+
+ first_response = first_receiver.unary_response()
+ second_response = second_receiver.unary_response()
+ test_messages.verify(first_request, first_response, self)
+ test_messages.verify(second_request, second_response, self)
+
+ def testParallelInvocations(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ first_request = test_messages.request()
+ first_receiver = _receiver.Receiver()
+ second_request = test_messages.request()
+ second_receiver = _receiver.Receiver()
+
+ self._invoker.event(group, method)(
+ first_request, first_receiver, first_receiver.abort,
+ test_constants.LONG_TIMEOUT)
+ self._invoker.event(group, method)(
+ second_request, second_receiver, second_receiver.abort,
+ test_constants.LONG_TIMEOUT)
+ first_receiver.block_until_terminated()
+ second_receiver.block_until_terminated()
+
+ first_response = first_receiver.unary_response()
+ second_response = second_receiver.unary_response()
+ test_messages.verify(first_request, first_response, self)
+ test_messages.verify(second_request, second_response, self)
+
+ @unittest.skip('TODO(nathaniel): implement.')
+ def testWaitingForSomeButNotAllParallelInvocations(self):
+ raise NotImplementedError()
+
+ def testCancelledUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+ receiver = _receiver.Receiver()
+
+ with self._control.pause():
+ call = self._invoker.event(group, method)(
+ request, receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ call.cancel()
+ receiver.block_until_terminated()
+
+ self.assertIs(face.Abortion.Kind.CANCELLED, receiver.abortion().kind)
+
+ def testCancelledUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+ receiver = _receiver.Receiver()
+
+ call = self._invoker.event(group, method)(
+ request, receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ call.cancel()
+ receiver.block_until_terminated()
+
+ self.assertIs(face.Abortion.Kind.CANCELLED, receiver.abortion().kind)
+
+ def testCancelledStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+ receiver = _receiver.Receiver()
+
+ call_consumer = self._invoker.event(group, method)(
+ receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ for request in requests:
+ call_consumer.consume(request)
+ call_consumer.cancel()
+ receiver.block_until_terminated()
+
+ self.assertIs(face.Abortion.Kind.CANCELLED, receiver.abortion().kind)
+
+ def testCancelledStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for unused_test_messages in test_messages_sequence:
+ receiver = _receiver.Receiver()
+
+ call_consumer = self._invoker.event(group, method)(
+ receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ call_consumer.cancel()
+ receiver.block_until_terminated()
+
+ self.assertIs(face.Abortion.Kind.CANCELLED, receiver.abortion().kind)
+
+ def testExpiredUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+ receiver = _receiver.Receiver()
+
+ with self._control.pause():
+ self._invoker.event(group, method)(
+ request, receiver, receiver.abort,
+ _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ receiver.block_until_terminated()
+
+ self.assertIs(face.Abortion.Kind.EXPIRED, receiver.abortion().kind)
+
+ def testExpiredUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+ receiver = _receiver.Receiver()
+
+ with self._control.pause():
+ self._invoker.event(group, method)(
+ request, receiver, receiver.abort,
+ _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ receiver.block_until_terminated()
+
+ self.assertIs(face.Abortion.Kind.EXPIRED, receiver.abortion().kind)
+
+ def testExpiredStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for unused_test_messages in test_messages_sequence:
+ receiver = _receiver.Receiver()
+
+ self._invoker.event(group, method)(
+ receiver, receiver.abort, _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ receiver.block_until_terminated()
+
+ self.assertIs(face.Abortion.Kind.EXPIRED, receiver.abortion().kind)
+
+ def testExpiredStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+ receiver = _receiver.Receiver()
+
+ call_consumer = self._invoker.event(group, method)(
+ receiver, receiver.abort, _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ for request in requests:
+ call_consumer.consume(request)
+ receiver.block_until_terminated()
+
+ self.assertIs(face.Abortion.Kind.EXPIRED, receiver.abortion().kind)
+
+ def testFailedUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+ receiver = _receiver.Receiver()
+
+ with self._control.fail():
+ self._invoker.event(group, method)(
+ request, receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ receiver.block_until_terminated()
+
+ self.assertIs(
+ face.Abortion.Kind.REMOTE_FAILURE, receiver.abortion().kind)
+
+ def testFailedUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+ receiver = _receiver.Receiver()
+
+ with self._control.fail():
+ self._invoker.event(group, method)(
+ request, receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ receiver.block_until_terminated()
+
+ self.assertIs(
+ face.Abortion.Kind.REMOTE_FAILURE, receiver.abortion().kind)
+
+ def testFailedStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+ receiver = _receiver.Receiver()
+
+ with self._control.fail():
+ call_consumer = self._invoker.event(group, method)(
+ receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ for request in requests:
+ call_consumer.consume(request)
+ call_consumer.terminate()
+ receiver.block_until_terminated()
+
+ self.assertIs(
+ face.Abortion.Kind.REMOTE_FAILURE, receiver.abortion().kind)
+
+ def testFailedStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+ receiver = _receiver.Receiver()
+
+ with self._control.fail():
+ call_consumer = self._invoker.event(group, method)(
+ receiver, receiver.abort, test_constants.LONG_TIMEOUT)
+ for request in requests:
+ call_consumer.consume(request)
+ call_consumer.terminate()
+ receiver.block_until_terminated()
+
+ self.assertIs(
+ face.Abortion.Kind.REMOTE_FAILURE, receiver.abortion().kind)
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/_future_invocation_asynchronous_event_service.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_future_invocation_asynchronous_event_service.py
new file mode 100644
index 0000000000..d1107e1576
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_future_invocation_asynchronous_event_service.py
@@ -0,0 +1,379 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Test code for the Face layer of RPC Framework."""
+
+import abc
+import contextlib
+import threading
+import unittest
+
+# test_interfaces is referenced from specification in this module.
+from grpc.framework.foundation import logging_pool
+from grpc.framework.interfaces.face import face
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.common import test_control
+from grpc_test.framework.common import test_coverage
+from grpc_test.framework.interfaces.face import _3069_test_constant
+from grpc_test.framework.interfaces.face import _digest
+from grpc_test.framework.interfaces.face import _stock_service
+from grpc_test.framework.interfaces.face import test_interfaces # pylint: disable=unused-import
+
+
+class _PauseableIterator(object):
+
+ def __init__(self, upstream):
+ self._upstream = upstream
+ self._condition = threading.Condition()
+ self._paused = False
+
+ @contextlib.contextmanager
+ def pause(self):
+ with self._condition:
+ self._paused = True
+ yield
+ with self._condition:
+ self._paused = False
+ self._condition.notify_all()
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ with self._condition:
+ while self._paused:
+ self._condition.wait()
+ return next(self._upstream)
+
+
+class TestCase(test_coverage.Coverage, unittest.TestCase):
+ """A test of the Face layer of RPC Framework.
+
+ Concrete subclasses must have an "implementation" attribute of type
+ test_interfaces.Implementation and an "invoker_constructor" attribute of type
+ _invocation.InvokerConstructor.
+ """
+ __metaclass__ = abc.ABCMeta
+
+ NAME = 'FutureInvocationAsynchronousEventServiceTest'
+
+ def setUp(self):
+ """See unittest.TestCase.setUp for full specification.
+
+ Overriding implementations must call this implementation.
+ """
+ self._control = test_control.PauseFailControl()
+ self._digest_pool = logging_pool.pool(test_constants.POOL_SIZE)
+ self._digest = _digest.digest(
+ _stock_service.STOCK_TEST_SERVICE, self._control, self._digest_pool)
+
+ generic_stub, dynamic_stubs, self._memo = self.implementation.instantiate(
+ self._digest.methods, self._digest.event_method_implementations, None)
+ self._invoker = self.invoker_constructor.construct_invoker(
+ generic_stub, dynamic_stubs, self._digest.methods)
+
+ def tearDown(self):
+ """See unittest.TestCase.tearDown for full specification.
+
+ Overriding implementations must call this implementation.
+ """
+ self.implementation.destantiate(self._memo)
+ self._digest_pool.shutdown(wait=True)
+
+ def testSuccessfulUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ response_future = self._invoker.future(group, method)(
+ request, test_constants.LONG_TIMEOUT)
+ response = response_future.result()
+
+ test_messages.verify(request, response, self)
+
+ def testSuccessfulUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ response_iterator = self._invoker.future(group, method)(
+ request, test_constants.LONG_TIMEOUT)
+ responses = list(response_iterator)
+
+ test_messages.verify(request, responses, self)
+
+ def testSuccessfulStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+ request_iterator = _PauseableIterator(iter(requests))
+
+ # Use of a paused iterator of requests allows us to test that control is
+ # returned to calling code before the iterator yields any requests.
+ with request_iterator.pause():
+ response_future = self._invoker.future(group, method)(
+ request_iterator, test_constants.LONG_TIMEOUT)
+ response = response_future.result()
+
+ test_messages.verify(requests, response, self)
+
+ def testSuccessfulStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+ request_iterator = _PauseableIterator(iter(requests))
+
+ # Use of a paused iterator of requests allows us to test that control is
+ # returned to calling code before the iterator yields any requests.
+ with request_iterator.pause():
+ response_iterator = self._invoker.future(group, method)(
+ request_iterator, test_constants.LONG_TIMEOUT)
+ responses = list(response_iterator)
+
+ test_messages.verify(requests, responses, self)
+
+ def testSequentialInvocations(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ first_request = test_messages.request()
+ second_request = test_messages.request()
+
+ first_response_future = self._invoker.future(group, method)(
+ first_request, test_constants.LONG_TIMEOUT)
+ first_response = first_response_future.result()
+
+ test_messages.verify(first_request, first_response, self)
+
+ second_response_future = self._invoker.future(group, method)(
+ second_request, test_constants.LONG_TIMEOUT)
+ second_response = second_response_future.result()
+
+ test_messages.verify(second_request, second_response, self)
+
+ def testParallelInvocations(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ first_request = test_messages.request()
+ second_request = test_messages.request()
+
+ first_response_future = self._invoker.future(group, method)(
+ first_request, test_constants.LONG_TIMEOUT)
+ second_response_future = self._invoker.future(group, method)(
+ second_request, test_constants.LONG_TIMEOUT)
+ first_response = first_response_future.result()
+ second_response = second_response_future.result()
+
+ test_messages.verify(first_request, first_response, self)
+ test_messages.verify(second_request, second_response, self)
+
+ @unittest.skip('TODO(nathaniel): implement.')
+ def testWaitingForSomeButNotAllParallelInvocations(self):
+ raise NotImplementedError()
+
+ def testCancelledUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ with self._control.pause():
+ response_future = self._invoker.future(group, method)(
+ request, test_constants.LONG_TIMEOUT)
+ cancel_method_return_value = response_future.cancel()
+
+ self.assertFalse(cancel_method_return_value)
+ self.assertTrue(response_future.cancelled())
+
+ def testCancelledUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ with self._control.pause():
+ response_iterator = self._invoker.future(group, method)(
+ request, test_constants.LONG_TIMEOUT)
+ response_iterator.cancel()
+
+ with self.assertRaises(face.CancellationError):
+ next(response_iterator)
+
+ def testCancelledStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ with self._control.pause():
+ response_future = self._invoker.future(group, method)(
+ iter(requests), test_constants.LONG_TIMEOUT)
+ cancel_method_return_value = response_future.cancel()
+
+ self.assertFalse(cancel_method_return_value)
+ self.assertTrue(response_future.cancelled())
+
+ def testCancelledStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ with self._control.pause():
+ response_iterator = self._invoker.future(group, method)(
+ iter(requests), test_constants.LONG_TIMEOUT)
+ response_iterator.cancel()
+
+ with self.assertRaises(face.CancellationError):
+ next(response_iterator)
+
+ def testExpiredUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ with self._control.pause():
+ response_future = self._invoker.future(
+ group, method)(request, _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ self.assertIsInstance(
+ response_future.exception(), face.ExpirationError)
+ with self.assertRaises(face.ExpirationError):
+ response_future.result()
+
+ def testExpiredUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ with self._control.pause():
+ response_iterator = self._invoker.future(group, method)(
+ request, _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ with self.assertRaises(face.ExpirationError):
+ list(response_iterator)
+
+ def testExpiredStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ with self._control.pause():
+ response_future = self._invoker.future(group, method)(
+ iter(requests), _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ self.assertIsInstance(
+ response_future.exception(), face.ExpirationError)
+ with self.assertRaises(face.ExpirationError):
+ response_future.result()
+
+ def testExpiredStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ with self._control.pause():
+ response_iterator = self._invoker.future(group, method)(
+ iter(requests), _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ with self.assertRaises(face.ExpirationError):
+ list(response_iterator)
+
+ def testFailedUnaryRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ with self._control.fail():
+ response_future = self._invoker.future(group, method)(
+ request, _3069_test_constant.REALLY_SHORT_TIMEOUT)
+
+ # Because the servicer fails outside of the thread from which the
+ # servicer-side runtime called into it its failure is
+ # indistinguishable from simply not having called its
+ # response_callback before the expiration of the RPC.
+ self.assertIsInstance(
+ response_future.exception(), face.ExpirationError)
+ with self.assertRaises(face.ExpirationError):
+ response_future.result()
+
+ def testFailedUnaryRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.unary_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ request = test_messages.request()
+
+ # Because the servicer fails outside of the thread from which the
+ # servicer-side runtime called into it its failure is indistinguishable
+ # from simply not having called its response_consumer before the
+ # expiration of the RPC.
+ with self._control.fail(), self.assertRaises(face.ExpirationError):
+ response_iterator = self._invoker.future(group, method)(
+ request, _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ list(response_iterator)
+
+ def testFailedStreamRequestUnaryResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_unary_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ with self._control.fail():
+ response_future = self._invoker.future(group, method)(
+ iter(requests), _3069_test_constant.REALLY_SHORT_TIMEOUT)
+
+ # Because the servicer fails outside of the thread from which the
+ # servicer-side runtime called into it its failure is
+ # indistinguishable from simply not having called its
+ # response_callback before the expiration of the RPC.
+ self.assertIsInstance(
+ response_future.exception(), face.ExpirationError)
+ with self.assertRaises(face.ExpirationError):
+ response_future.result()
+
+ def testFailedStreamRequestStreamResponse(self):
+ for (group, method), test_messages_sequence in (
+ self._digest.stream_stream_messages_sequences.iteritems()):
+ for test_messages in test_messages_sequence:
+ requests = test_messages.requests()
+
+ # Because the servicer fails outside of the thread from which the
+ # servicer-side runtime called into it its failure is indistinguishable
+ # from simply not having called its response_consumer before the
+ # expiration of the RPC.
+ with self._control.fail(), self.assertRaises(face.ExpirationError):
+ response_iterator = self._invoker.future(group, method)(
+ iter(requests), _3069_test_constant.REALLY_SHORT_TIMEOUT)
+ list(response_iterator)
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/_invocation.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_invocation.py
new file mode 100644
index 0000000000..448e845a08
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_invocation.py
@@ -0,0 +1,213 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Coverage across the Face layer's generic-to-dynamic range for invocation."""
+
+import abc
+
+from grpc.framework.common import cardinality
+
+_CARDINALITY_TO_GENERIC_BLOCKING_BEHAVIOR = {
+ cardinality.Cardinality.UNARY_UNARY: 'blocking_unary_unary',
+ cardinality.Cardinality.UNARY_STREAM: 'inline_unary_stream',
+ cardinality.Cardinality.STREAM_UNARY: 'blocking_stream_unary',
+ cardinality.Cardinality.STREAM_STREAM: 'inline_stream_stream',
+}
+
+_CARDINALITY_TO_GENERIC_FUTURE_BEHAVIOR = {
+ cardinality.Cardinality.UNARY_UNARY: 'future_unary_unary',
+ cardinality.Cardinality.UNARY_STREAM: 'inline_unary_stream',
+ cardinality.Cardinality.STREAM_UNARY: 'future_stream_unary',
+ cardinality.Cardinality.STREAM_STREAM: 'inline_stream_stream',
+}
+
+_CARDINALITY_TO_GENERIC_EVENT_BEHAVIOR = {
+ cardinality.Cardinality.UNARY_UNARY: 'event_unary_unary',
+ cardinality.Cardinality.UNARY_STREAM: 'event_unary_stream',
+ cardinality.Cardinality.STREAM_UNARY: 'event_stream_unary',
+ cardinality.Cardinality.STREAM_STREAM: 'event_stream_stream',
+}
+
+_CARDINALITY_TO_MULTI_CALLABLE_ATTRIBUTE = {
+ cardinality.Cardinality.UNARY_UNARY: 'unary_unary',
+ cardinality.Cardinality.UNARY_STREAM: 'unary_stream',
+ cardinality.Cardinality.STREAM_UNARY: 'stream_unary',
+ cardinality.Cardinality.STREAM_STREAM: 'stream_stream',
+}
+
+
+class Invoker(object):
+ """A type used to invoke test RPCs."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def blocking(self, group, name):
+ """Invokes an RPC with blocking control flow."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def future(self, group, name):
+ """Invokes an RPC with future control flow."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def event(self, group, name):
+ """Invokes an RPC with event control flow."""
+ raise NotImplementedError()
+
+
+class InvokerConstructor(object):
+ """A type used to create Invokers."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def name(self):
+ """Specifies the name of the Invoker constructed by this object."""
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def construct_invoker(self, generic_stub, dynamic_stubs, methods):
+ """Constructs an Invoker for the given stubs and methods."""
+ raise NotImplementedError()
+
+
+class _GenericInvoker(Invoker):
+
+ def __init__(self, generic_stub, methods):
+ self._stub = generic_stub
+ self._methods = methods
+
+ def _behavior(self, group, name, cardinality_to_generic_method):
+ method_cardinality = self._methods[group, name].cardinality()
+ behavior = getattr(
+ self._stub, cardinality_to_generic_method[method_cardinality])
+ return lambda *args, **kwargs: behavior(group, name, *args, **kwargs)
+
+ def blocking(self, group, name):
+ return self._behavior(
+ group, name, _CARDINALITY_TO_GENERIC_BLOCKING_BEHAVIOR)
+
+ def future(self, group, name):
+ return self._behavior(group, name, _CARDINALITY_TO_GENERIC_FUTURE_BEHAVIOR)
+
+ def event(self, group, name):
+ return self._behavior(group, name, _CARDINALITY_TO_GENERIC_EVENT_BEHAVIOR)
+
+
+class _GenericInvokerConstructor(InvokerConstructor):
+
+ def name(self):
+ return 'GenericInvoker'
+
+ def construct_invoker(self, generic_stub, dynamic_stub, methods):
+ return _GenericInvoker(generic_stub, methods)
+
+
+class _MultiCallableInvoker(Invoker):
+
+ def __init__(self, generic_stub, methods):
+ self._stub = generic_stub
+ self._methods = methods
+
+ def _multi_callable(self, group, name):
+ method_cardinality = self._methods[group, name].cardinality()
+ behavior = getattr(
+ self._stub,
+ _CARDINALITY_TO_MULTI_CALLABLE_ATTRIBUTE[method_cardinality])
+ return behavior(group, name)
+
+ def blocking(self, group, name):
+ return self._multi_callable(group, name)
+
+ def future(self, group, name):
+ method_cardinality = self._methods[group, name].cardinality()
+ behavior = getattr(
+ self._stub,
+ _CARDINALITY_TO_MULTI_CALLABLE_ATTRIBUTE[method_cardinality])
+ if method_cardinality in (
+ cardinality.Cardinality.UNARY_UNARY,
+ cardinality.Cardinality.STREAM_UNARY):
+ return behavior(group, name).future
+ else:
+ return behavior(group, name)
+
+ def event(self, group, name):
+ return self._multi_callable(group, name).event
+
+
+class _MultiCallableInvokerConstructor(InvokerConstructor):
+
+ def name(self):
+ return 'MultiCallableInvoker'
+
+ def construct_invoker(self, generic_stub, dynamic_stub, methods):
+ return _MultiCallableInvoker(generic_stub, methods)
+
+
+class _DynamicInvoker(Invoker):
+
+ def __init__(self, dynamic_stubs, methods):
+ self._stubs = dynamic_stubs
+ self._methods = methods
+
+ def blocking(self, group, name):
+ return getattr(self._stubs[group], name)
+
+ def future(self, group, name):
+ if self._methods[group, name].cardinality() in (
+ cardinality.Cardinality.UNARY_UNARY,
+ cardinality.Cardinality.STREAM_UNARY):
+ return getattr(self._stubs[group], name).future
+ else:
+ return getattr(self._stubs[group], name)
+
+ def event(self, group, name):
+ return getattr(self._stubs[group], name).event
+
+
+class _DynamicInvokerConstructor(InvokerConstructor):
+
+ def name(self):
+ return 'DynamicInvoker'
+
+ def construct_invoker(self, generic_stub, dynamic_stubs, methods):
+ return _DynamicInvoker(dynamic_stubs, methods)
+
+
+def invoker_constructors():
+ """Creates a sequence of InvokerConstructors to use in tests of RPCs.
+
+ Returns:
+ A sequence of InvokerConstructors.
+ """
+ return (
+ _GenericInvokerConstructor(),
+ _MultiCallableInvokerConstructor(),
+ _DynamicInvokerConstructor(),
+ )
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/_receiver.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_receiver.py
new file mode 100644
index 0000000000..2e444ff09d
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_receiver.py
@@ -0,0 +1,95 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""A utility useful in tests of asynchronous, event-driven interfaces."""
+
+import threading
+
+from grpc.framework.interfaces.face import face
+
+
+class Receiver(face.ResponseReceiver):
+ """A utility object useful in tests of asynchronous code."""
+
+ def __init__(self):
+ self._condition = threading.Condition()
+ self._initial_metadata = None
+ self._responses = []
+ self._terminal_metadata = None
+ self._code = None
+ self._details = None
+ self._completed = False
+ self._abortion = None
+
+ def abort(self, abortion):
+ with self._condition:
+ self._abortion = abortion
+ self._condition.notify_all()
+
+ def initial_metadata(self, initial_metadata):
+ with self._condition:
+ self._initial_metadata = initial_metadata
+
+ def response(self, response):
+ with self._condition:
+ self._responses.append(response)
+
+ def complete(self, terminal_metadata, code, details):
+ with self._condition:
+ self._terminal_metadata = terminal_metadata
+ self._code = code
+ self._details = details
+ self._completed = True
+ self._condition.notify_all()
+
+ def block_until_terminated(self):
+ with self._condition:
+ while self._abortion is None and not self._completed:
+ self._condition.wait()
+
+ def unary_response(self):
+ with self._condition:
+ if self._abortion is not None:
+ raise AssertionError('Aborted with abortion "%s"!' % self._abortion)
+ elif len(self._responses) != 1:
+ raise AssertionError(
+ '%d responses received, not exactly one!', len(self._responses))
+ else:
+ return self._responses[0]
+
+ def stream_responses(self):
+ with self._condition:
+ if self._abortion is None:
+ return list(self._responses)
+ else:
+ raise AssertionError('Aborted with abortion "%s"!' % self._abortion)
+
+ def abortion(self):
+ with self._condition:
+ return self._abortion
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/_service.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_service.py
new file mode 100644
index 0000000000..e25b8a038c
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_service.py
@@ -0,0 +1,332 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Private interfaces implemented by data sets used in Face-layer tests."""
+
+import abc
+
+# face is referenced from specification in this module.
+from grpc.framework.interfaces.face import face # pylint: disable=unused-import
+from grpc_test.framework.interfaces.face import test_interfaces
+
+
+class UnaryUnaryTestMethodImplementation(test_interfaces.Method):
+ """A controllable implementation of a unary-unary method."""
+
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def service(self, request, response_callback, context, control):
+ """Services an RPC that accepts one message and produces one message.
+
+ Args:
+ request: The single request message for the RPC.
+ response_callback: A callback to be called to accept the response message
+ of the RPC.
+ context: An face.ServicerContext object.
+ control: A test_control.Control to control execution of this method.
+
+ Raises:
+ abandonment.Abandoned: May or may not be raised when the RPC has been
+ aborted.
+ """
+ raise NotImplementedError()
+
+
+class UnaryUnaryTestMessages(object):
+ """A type for unary-request-unary-response message pairings."""
+
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def request(self):
+ """Affords a request message.
+
+ Implementations of this method should return a different message with each
+ call so that multiple test executions of the test method may be made with
+ different inputs.
+
+ Returns:
+ A request message.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def verify(self, request, response, test_case):
+ """Verifies that the computed response matches the given request.
+
+ Args:
+ request: A request message.
+ response: A response message.
+ test_case: A unittest.TestCase object affording useful assertion methods.
+
+ Raises:
+ AssertionError: If the request and response do not match, indicating that
+ there was some problem executing the RPC under test.
+ """
+ raise NotImplementedError()
+
+
+class UnaryStreamTestMethodImplementation(test_interfaces.Method):
+ """A controllable implementation of a unary-stream method."""
+
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def service(self, request, response_consumer, context, control):
+ """Services an RPC that takes one message and produces a stream of messages.
+
+ Args:
+ request: The single request message for the RPC.
+ response_consumer: A stream.Consumer to be called to accept the response
+ messages of the RPC.
+ context: A face.ServicerContext object.
+ control: A test_control.Control to control execution of this method.
+
+ Raises:
+ abandonment.Abandoned: May or may not be raised when the RPC has been
+ aborted.
+ """
+ raise NotImplementedError()
+
+
+class UnaryStreamTestMessages(object):
+ """A type for unary-request-stream-response message pairings."""
+
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def request(self):
+ """Affords a request message.
+
+ Implementations of this method should return a different message with each
+ call so that multiple test executions of the test method may be made with
+ different inputs.
+
+ Returns:
+ A request message.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def verify(self, request, responses, test_case):
+ """Verifies that the computed responses match the given request.
+
+ Args:
+ request: A request message.
+ responses: A sequence of response messages.
+ test_case: A unittest.TestCase object affording useful assertion methods.
+
+ Raises:
+ AssertionError: If the request and responses do not match, indicating that
+ there was some problem executing the RPC under test.
+ """
+ raise NotImplementedError()
+
+
+class StreamUnaryTestMethodImplementation(test_interfaces.Method):
+ """A controllable implementation of a stream-unary method."""
+
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def service(self, response_callback, context, control):
+ """Services an RPC that takes a stream of messages and produces one message.
+
+ Args:
+ response_callback: A callback to be called to accept the response message
+ of the RPC.
+ context: A face.ServicerContext object.
+ control: A test_control.Control to control execution of this method.
+
+ Returns:
+ A stream.Consumer with which to accept the request messages of the RPC.
+ The consumer returned from this method may or may not be invoked to
+ completion: in the case of RPC abortion, RPC Framework will simply stop
+ passing messages to this object. Implementations must not assume that
+ this object will be called to completion of the request stream or even
+ called at all.
+
+ Raises:
+ abandonment.Abandoned: May or may not be raised when the RPC has been
+ aborted.
+ """
+ raise NotImplementedError()
+
+
+class StreamUnaryTestMessages(object):
+ """A type for stream-request-unary-response message pairings."""
+
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def requests(self):
+ """Affords a sequence of request messages.
+
+ Implementations of this method should return a different sequences with each
+ call so that multiple test executions of the test method may be made with
+ different inputs.
+
+ Returns:
+ A sequence of request messages.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def verify(self, requests, response, test_case):
+ """Verifies that the computed response matches the given requests.
+
+ Args:
+ requests: A sequence of request messages.
+ response: A response message.
+ test_case: A unittest.TestCase object affording useful assertion methods.
+
+ Raises:
+ AssertionError: If the requests and response do not match, indicating that
+ there was some problem executing the RPC under test.
+ """
+ raise NotImplementedError()
+
+
+class StreamStreamTestMethodImplementation(test_interfaces.Method):
+ """A controllable implementation of a stream-stream method."""
+
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def service(self, response_consumer, context, control):
+ """Services an RPC that accepts and produces streams of messages.
+
+ Args:
+ response_consumer: A stream.Consumer to be called to accept the response
+ messages of the RPC.
+ context: A face.ServicerContext object.
+ control: A test_control.Control to control execution of this method.
+
+ Returns:
+ A stream.Consumer with which to accept the request messages of the RPC.
+ The consumer returned from this method may or may not be invoked to
+ completion: in the case of RPC abortion, RPC Framework will simply stop
+ passing messages to this object. Implementations must not assume that
+ this object will be called to completion of the request stream or even
+ called at all.
+
+ Raises:
+ abandonment.Abandoned: May or may not be raised when the RPC has been
+ aborted.
+ """
+ raise NotImplementedError()
+
+
+class StreamStreamTestMessages(object):
+ """A type for stream-request-stream-response message pairings."""
+
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def requests(self):
+ """Affords a sequence of request messages.
+
+ Implementations of this method should return a different sequences with each
+ call so that multiple test executions of the test method may be made with
+ different inputs.
+
+ Returns:
+ A sequence of request messages.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def verify(self, requests, responses, test_case):
+ """Verifies that the computed response matches the given requests.
+
+ Args:
+ requests: A sequence of request messages.
+ responses: A sequence of response messages.
+ test_case: A unittest.TestCase object affording useful assertion methods.
+
+ Raises:
+ AssertionError: If the requests and responses do not match, indicating
+ that there was some problem executing the RPC under test.
+ """
+ raise NotImplementedError()
+
+
+class TestService(object):
+ """A specification of implemented methods to use in tests."""
+
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def unary_unary_scenarios(self):
+ """Affords unary-request-unary-response test methods and their messages.
+
+ Returns:
+ A dict from method group-name pair to implementation/messages pair. The
+ first element of the pair is a UnaryUnaryTestMethodImplementation object
+ and the second element is a sequence of UnaryUnaryTestMethodMessages
+ objects.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def unary_stream_scenarios(self):
+ """Affords unary-request-stream-response test methods and their messages.
+
+ Returns:
+ A dict from method group-name pair to implementation/messages pair. The
+ first element of the pair is a UnaryStreamTestMethodImplementation
+ object and the second element is a sequence of
+ UnaryStreamTestMethodMessages objects.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def stream_unary_scenarios(self):
+ """Affords stream-request-unary-response test methods and their messages.
+
+ Returns:
+ A dict from method group-name pair to implementation/messages pair. The
+ first element of the pair is a StreamUnaryTestMethodImplementation
+ object and the second element is a sequence of
+ StreamUnaryTestMethodMessages objects.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def stream_stream_scenarios(self):
+ """Affords stream-request-stream-response test methods and their messages.
+
+ Returns:
+ A dict from method group-name pair to implementation/messages pair. The
+ first element of the pair is a StreamStreamTestMethodImplementation
+ object and the second element is a sequence of
+ StreamStreamTestMethodMessages objects.
+ """
+ raise NotImplementedError()
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/_stock_service.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_stock_service.py
new file mode 100644
index 0000000000..808e2c4e36
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/_stock_service.py
@@ -0,0 +1,396 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Examples of Python implementations of the stock.proto Stock service."""
+
+from grpc.framework.common import cardinality
+from grpc.framework.foundation import abandonment
+from grpc.framework.foundation import stream
+from grpc_test.framework.common import test_constants
+from grpc_test.framework.interfaces.face import _service
+from grpc_test._junkdrawer import stock_pb2
+
+_STOCK_GROUP_NAME = 'Stock'
+_SYMBOL_FORMAT = 'test symbol:%03d'
+
+# A test-appropriate security-pricing function. :-P
+_price = lambda symbol_name: float(hash(symbol_name) % 4096)
+
+
+def _get_last_trade_price(stock_request, stock_reply_callback, control, active):
+ """A unary-request, unary-response test method."""
+ control.control()
+ if active():
+ stock_reply_callback(
+ stock_pb2.StockReply(
+ symbol=stock_request.symbol, price=_price(stock_request.symbol)))
+ else:
+ raise abandonment.Abandoned()
+
+
+def _get_last_trade_price_multiple(stock_reply_consumer, control, active):
+ """A stream-request, stream-response test method."""
+ def stock_reply_for_stock_request(stock_request):
+ control.control()
+ if active():
+ return stock_pb2.StockReply(
+ symbol=stock_request.symbol, price=_price(stock_request.symbol))
+ else:
+ raise abandonment.Abandoned()
+
+ class StockRequestConsumer(stream.Consumer):
+
+ def consume(self, stock_request):
+ stock_reply_consumer.consume(stock_reply_for_stock_request(stock_request))
+
+ def terminate(self):
+ control.control()
+ stock_reply_consumer.terminate()
+
+ def consume_and_terminate(self, stock_request):
+ stock_reply_consumer.consume_and_terminate(
+ stock_reply_for_stock_request(stock_request))
+
+ return StockRequestConsumer()
+
+
+def _watch_future_trades(stock_request, stock_reply_consumer, control, active):
+ """A unary-request, stream-response test method."""
+ base_price = _price(stock_request.symbol)
+ for index in range(stock_request.num_trades_to_watch):
+ control.control()
+ if active():
+ stock_reply_consumer.consume(
+ stock_pb2.StockReply(
+ symbol=stock_request.symbol, price=base_price + index))
+ else:
+ raise abandonment.Abandoned()
+ stock_reply_consumer.terminate()
+
+
+def _get_highest_trade_price(stock_reply_callback, control, active):
+ """A stream-request, unary-response test method."""
+
+ class StockRequestConsumer(stream.Consumer):
+ """Keeps an ongoing record of the most valuable symbol yet consumed."""
+
+ def __init__(self):
+ self._symbol = None
+ self._price = None
+
+ def consume(self, stock_request):
+ control.control()
+ if active():
+ if self._price is None:
+ self._symbol = stock_request.symbol
+ self._price = _price(stock_request.symbol)
+ else:
+ candidate_price = _price(stock_request.symbol)
+ if self._price < candidate_price:
+ self._symbol = stock_request.symbol
+ self._price = candidate_price
+
+ def terminate(self):
+ control.control()
+ if active():
+ if self._symbol is None:
+ raise ValueError()
+ else:
+ stock_reply_callback(
+ stock_pb2.StockReply(symbol=self._symbol, price=self._price))
+ self._symbol = None
+ self._price = None
+
+ def consume_and_terminate(self, stock_request):
+ control.control()
+ if active():
+ if self._price is None:
+ stock_reply_callback(
+ stock_pb2.StockReply(
+ symbol=stock_request.symbol,
+ price=_price(stock_request.symbol)))
+ else:
+ candidate_price = _price(stock_request.symbol)
+ if self._price < candidate_price:
+ stock_reply_callback(
+ stock_pb2.StockReply(
+ symbol=stock_request.symbol, price=candidate_price))
+ else:
+ stock_reply_callback(
+ stock_pb2.StockReply(
+ symbol=self._symbol, price=self._price))
+
+ self._symbol = None
+ self._price = None
+
+ return StockRequestConsumer()
+
+
+class GetLastTradePrice(_service.UnaryUnaryTestMethodImplementation):
+ """GetLastTradePrice for use in tests."""
+
+ def group(self):
+ return _STOCK_GROUP_NAME
+
+ def name(self):
+ return 'GetLastTradePrice'
+
+ def cardinality(self):
+ return cardinality.Cardinality.UNARY_UNARY
+
+ def request_class(self):
+ return stock_pb2.StockRequest
+
+ def response_class(self):
+ return stock_pb2.StockReply
+
+ def serialize_request(self, request):
+ return request.SerializeToString()
+
+ def deserialize_request(self, serialized_request):
+ return stock_pb2.StockRequest.FromString(serialized_request)
+
+ def serialize_response(self, response):
+ return response.SerializeToString()
+
+ def deserialize_response(self, serialized_response):
+ return stock_pb2.StockReply.FromString(serialized_response)
+
+ def service(self, request, response_callback, context, control):
+ _get_last_trade_price(
+ request, response_callback, control, context.is_active)
+
+
+class GetLastTradePriceMessages(_service.UnaryUnaryTestMessages):
+
+ def __init__(self):
+ self._index = 0
+
+ def request(self):
+ symbol = _SYMBOL_FORMAT % self._index
+ self._index += 1
+ return stock_pb2.StockRequest(symbol=symbol)
+
+ def verify(self, request, response, test_case):
+ test_case.assertEqual(request.symbol, response.symbol)
+ test_case.assertEqual(_price(request.symbol), response.price)
+
+
+class GetLastTradePriceMultiple(_service.StreamStreamTestMethodImplementation):
+ """GetLastTradePriceMultiple for use in tests."""
+
+ def group(self):
+ return _STOCK_GROUP_NAME
+
+ def name(self):
+ return 'GetLastTradePriceMultiple'
+
+ def cardinality(self):
+ return cardinality.Cardinality.STREAM_STREAM
+
+ def request_class(self):
+ return stock_pb2.StockRequest
+
+ def response_class(self):
+ return stock_pb2.StockReply
+
+ def serialize_request(self, request):
+ return request.SerializeToString()
+
+ def deserialize_request(self, serialized_request):
+ return stock_pb2.StockRequest.FromString(serialized_request)
+
+ def serialize_response(self, response):
+ return response.SerializeToString()
+
+ def deserialize_response(self, serialized_response):
+ return stock_pb2.StockReply.FromString(serialized_response)
+
+ def service(self, response_consumer, context, control):
+ return _get_last_trade_price_multiple(
+ response_consumer, control, context.is_active)
+
+
+class GetLastTradePriceMultipleMessages(_service.StreamStreamTestMessages):
+ """Pairs of message streams for use with GetLastTradePriceMultiple."""
+
+ def __init__(self):
+ self._index = 0
+
+ def requests(self):
+ base_index = self._index
+ self._index += 1
+ return [
+ stock_pb2.StockRequest(symbol=_SYMBOL_FORMAT % (base_index + index))
+ for index in range(test_constants.STREAM_LENGTH)]
+
+ def verify(self, requests, responses, test_case):
+ test_case.assertEqual(len(requests), len(responses))
+ for stock_request, stock_reply in zip(requests, responses):
+ test_case.assertEqual(stock_request.symbol, stock_reply.symbol)
+ test_case.assertEqual(_price(stock_request.symbol), stock_reply.price)
+
+
+class WatchFutureTrades(_service.UnaryStreamTestMethodImplementation):
+ """WatchFutureTrades for use in tests."""
+
+ def group(self):
+ return _STOCK_GROUP_NAME
+
+ def name(self):
+ return 'WatchFutureTrades'
+
+ def cardinality(self):
+ return cardinality.Cardinality.UNARY_STREAM
+
+ def request_class(self):
+ return stock_pb2.StockRequest
+
+ def response_class(self):
+ return stock_pb2.StockReply
+
+ def serialize_request(self, request):
+ return request.SerializeToString()
+
+ def deserialize_request(self, serialized_request):
+ return stock_pb2.StockRequest.FromString(serialized_request)
+
+ def serialize_response(self, response):
+ return response.SerializeToString()
+
+ def deserialize_response(self, serialized_response):
+ return stock_pb2.StockReply.FromString(serialized_response)
+
+ def service(self, request, response_consumer, context, control):
+ _watch_future_trades(request, response_consumer, control, context.is_active)
+
+
+class WatchFutureTradesMessages(_service.UnaryStreamTestMessages):
+ """Pairs of a single request message and a sequence of response messages."""
+
+ def __init__(self):
+ self._index = 0
+
+ def request(self):
+ symbol = _SYMBOL_FORMAT % self._index
+ self._index += 1
+ return stock_pb2.StockRequest(
+ symbol=symbol, num_trades_to_watch=test_constants.STREAM_LENGTH)
+
+ def verify(self, request, responses, test_case):
+ test_case.assertEqual(test_constants.STREAM_LENGTH, len(responses))
+ base_price = _price(request.symbol)
+ for index, response in enumerate(responses):
+ test_case.assertEqual(base_price + index, response.price)
+
+
+class GetHighestTradePrice(_service.StreamUnaryTestMethodImplementation):
+ """GetHighestTradePrice for use in tests."""
+
+ def group(self):
+ return _STOCK_GROUP_NAME
+
+ def name(self):
+ return 'GetHighestTradePrice'
+
+ def cardinality(self):
+ return cardinality.Cardinality.STREAM_UNARY
+
+ def request_class(self):
+ return stock_pb2.StockRequest
+
+ def response_class(self):
+ return stock_pb2.StockReply
+
+ def serialize_request(self, request):
+ return request.SerializeToString()
+
+ def deserialize_request(self, serialized_request):
+ return stock_pb2.StockRequest.FromString(serialized_request)
+
+ def serialize_response(self, response):
+ return response.SerializeToString()
+
+ def deserialize_response(self, serialized_response):
+ return stock_pb2.StockReply.FromString(serialized_response)
+
+ def service(self, response_callback, context, control):
+ return _get_highest_trade_price(
+ response_callback, control, context.is_active)
+
+
+class GetHighestTradePriceMessages(_service.StreamUnaryTestMessages):
+
+ def requests(self):
+ return [
+ stock_pb2.StockRequest(symbol=_SYMBOL_FORMAT % index)
+ for index in range(test_constants.STREAM_LENGTH)]
+
+ def verify(self, requests, response, test_case):
+ price = None
+ symbol = None
+ for stock_request in requests:
+ current_symbol = stock_request.symbol
+ current_price = _price(current_symbol)
+ if price is None or price < current_price:
+ price = current_price
+ symbol = current_symbol
+ test_case.assertEqual(price, response.price)
+ test_case.assertEqual(symbol, response.symbol)
+
+
+class StockTestService(_service.TestService):
+ """A corpus of test data with one method of each RPC cardinality."""
+
+ def unary_unary_scenarios(self):
+ return {
+ (_STOCK_GROUP_NAME, 'GetLastTradePrice'): (
+ GetLastTradePrice(), [GetLastTradePriceMessages()]),
+ }
+
+ def unary_stream_scenarios(self):
+ return {
+ (_STOCK_GROUP_NAME, 'WatchFutureTrades'): (
+ WatchFutureTrades(), [WatchFutureTradesMessages()]),
+ }
+
+ def stream_unary_scenarios(self):
+ return {
+ (_STOCK_GROUP_NAME, 'GetHighestTradePrice'): (
+ GetHighestTradePrice(), [GetHighestTradePriceMessages()])
+ }
+
+ def stream_stream_scenarios(self):
+ return {
+ (_STOCK_GROUP_NAME, 'GetLastTradePriceMultiple'): (
+ GetLastTradePriceMultiple(), [GetLastTradePriceMultipleMessages()]),
+ }
+
+
+STOCK_TEST_SERVICE = StockTestService()
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/test_cases.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/test_cases.py
new file mode 100644
index 0000000000..ca623662f7
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/test_cases.py
@@ -0,0 +1,67 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Tools for creating tests of implementations of the Face layer."""
+
+# unittest is referenced from specification in this module.
+import unittest # pylint: disable=unused-import
+
+# test_interfaces is referenced from specification in this module.
+from grpc_test.framework.interfaces.face import _blocking_invocation_inline_service
+from grpc_test.framework.interfaces.face import _event_invocation_synchronous_event_service
+from grpc_test.framework.interfaces.face import _future_invocation_asynchronous_event_service
+from grpc_test.framework.interfaces.face import _invocation
+from grpc_test.framework.interfaces.face import test_interfaces # pylint: disable=unused-import
+
+_TEST_CASE_SUPERCLASSES = (
+ _blocking_invocation_inline_service.TestCase,
+ _event_invocation_synchronous_event_service.TestCase,
+ _future_invocation_asynchronous_event_service.TestCase,
+)
+
+
+def test_cases(implementation):
+ """Creates unittest.TestCase classes for a given Face layer implementation.
+
+ Args:
+ implementation: A test_interfaces.Implementation specifying creation and
+ destruction of a given Face layer implementation.
+
+ Returns:
+ A sequence of subclasses of unittest.TestCase defining tests of the
+ specified Face layer implementation.
+ """
+ test_case_classes = []
+ for invoker_constructor in _invocation.invoker_constructors():
+ for super_class in _TEST_CASE_SUPERCLASSES:
+ test_case_classes.append(
+ type(invoker_constructor.name() + super_class.NAME, (super_class,),
+ {'implementation': implementation,
+ 'invoker_constructor': invoker_constructor}))
+ return test_case_classes
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/face/test_interfaces.py b/src/python/grpcio_test/grpc_test/framework/interfaces/face/test_interfaces.py
new file mode 100644
index 0000000000..b2b5c10fa6
--- /dev/null
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/face/test_interfaces.py
@@ -0,0 +1,229 @@
+# Copyright 2015, Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Interfaces used in tests of implementations of the Face layer."""
+
+import abc
+
+from grpc.framework.common import cardinality # pylint: disable=unused-import
+from grpc.framework.interfaces.face import face # pylint: disable=unused-import
+
+
+class Method(object):
+ """Specifies a method to be used in tests."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def group(self):
+ """Identify the group of the method.
+
+ Returns:
+ The group of the method.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def name(self):
+ """Identify the name of the method.
+
+ Returns:
+ The name of the method.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def cardinality(self):
+ """Identify the cardinality of the method.
+
+ Returns:
+ A cardinality.Cardinality value describing the streaming semantics of the
+ method.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def request_class(self):
+ """Identify the class used for the method's request objects.
+
+ Returns:
+ The class object of the class to which the method's request objects
+ belong.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def response_class(self):
+ """Identify the class used for the method's response objects.
+
+ Returns:
+ The class object of the class to which the method's response objects
+ belong.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def serialize_request(self, request):
+ """Serialize the given request object.
+
+ Args:
+ request: A request object appropriate for this method.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def deserialize_request(self, serialized_request):
+ """Synthesize a request object from a given bytestring.
+
+ Args:
+ serialized_request: A bytestring deserializable into a request object
+ appropriate for this method.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def serialize_response(self, response):
+ """Serialize the given response object.
+
+ Args:
+ response: A response object appropriate for this method.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def deserialize_response(self, serialized_response):
+ """Synthesize a response object from a given bytestring.
+
+ Args:
+ serialized_response: A bytestring deserializable into a response object
+ appropriate for this method.
+ """
+ raise NotImplementedError()
+
+
+class Implementation(object):
+ """Specifies an implementation of the Face layer."""
+ __metaclass__ = abc.ABCMeta
+
+ @abc.abstractmethod
+ def instantiate(
+ self, methods, method_implementations,
+ multi_method_implementation):
+ """Instantiates the Face layer implementation to be used in a test.
+
+ Args:
+ methods: A sequence of Method objects describing the methods available to
+ be called during the test.
+ method_implementations: A dictionary from group-name pair to
+ face.MethodImplementation object specifying implementation of a method.
+ multi_method_implementation: A face.MultiMethodImplementation or None.
+
+ Returns:
+ A sequence of length three the first element of which is a
+ face.GenericStub, the second element of which is dictionary from groups
+ to face.DynamicStubs affording invocation of the group's methods, and
+ the third element of which is an arbitrary memo object to be kept and
+ passed to destantiate at the conclusion of the test. The returned stubs
+ must be backed by the provided implementations.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def destantiate(self, memo):
+ """Destroys the Face layer implementation under test.
+
+ Args:
+ memo: The object from the third position of the return value of a call to
+ instantiate.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def invocation_metadata(self):
+ """Provides the metadata to be used when invoking a test RPC.
+
+ Returns:
+ An object to use as the supplied-at-invocation-time metadata in a test
+ RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def initial_metadata(self):
+ """Provides the metadata for use as a test RPC's first servicer metadata.
+
+ Returns:
+ An object to use as the from-the-servicer-before-responses metadata in a
+ test RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def terminal_metadata(self):
+ """Provides the metadata for use as a test RPC's second servicer metadata.
+
+ Returns:
+ An object to use as the from-the-servicer-after-all-responses metadata in
+ a test RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def code(self):
+ """Provides the value for use as a test RPC's code.
+
+ Returns:
+ An object to use as the from-the-servicer code in a test RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def details(self):
+ """Provides the value for use as a test RPC's details.
+
+ Returns:
+ An object to use as the from-the-servicer details in a test RPC.
+ """
+ raise NotImplementedError()
+
+ @abc.abstractmethod
+ def metadata_transmitted(self, original_metadata, transmitted_metadata):
+ """Identifies whether or not metadata was properly transmitted.
+
+ Args:
+ original_metadata: A metadata value passed to the Face interface
+ implementation under test.
+ transmitted_metadata: The same metadata value after having been
+ transmitted via an RPC performed by the Face interface implementation
+ under test.
+
+ Returns:
+ Whether or not the metadata was properly transmitted by the Face interface
+ implementation under test.
+ """
+ raise NotImplementedError()
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_cases.py b/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_cases.py
index 1e575d1a9e..ecf49d9cdb 100644
--- a/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_cases.py
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_cases.py
@@ -300,7 +300,7 @@ class TransmissionTest(object):
invocation_operation_id, 0, _TRANSMISSION_GROUP, _TRANSMISSION_METHOD,
links.Ticket.Subscription.FULL, timeout, 0, invocation_initial_metadata,
invocation_payload, invocation_terminal_metadata, invocation_code,
- invocation_message, links.Ticket.Termination.COMPLETION)
+ invocation_message, links.Ticket.Termination.COMPLETION, None)
self._invocation_link.accept_ticket(original_invocation_ticket)
self._service_mate.block_until_tickets_satisfy(
@@ -317,7 +317,7 @@ class TransmissionTest(object):
service_operation_id, 0, None, None, links.Ticket.Subscription.FULL,
timeout, 0, service_initial_metadata, service_payload,
service_terminal_metadata, service_code, service_message,
- links.Ticket.Termination.COMPLETION)
+ links.Ticket.Termination.COMPLETION, None)
self._service_link.accept_ticket(original_service_ticket)
self._invocation_mate.block_until_tickets_satisfy(terminated)
self._assert_is_valid_service_sequence(
diff --git a/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_utilities.py b/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_utilities.py
index 6c2e3346aa..39c7f2fc63 100644
--- a/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_utilities.py
+++ b/src/python/grpcio_test/grpc_test/framework/interfaces/links/test_utilities.py
@@ -29,9 +29,42 @@
"""State and behavior appropriate for use in tests."""
+import logging
import threading
+import time
from grpc.framework.interfaces.links import links
+from grpc.framework.interfaces.links import utilities
+
+# A more-or-less arbitrary limit on the length of raw data values to be logged.
+_UNCOMFORTABLY_LONG = 48
+
+
+def _safe_for_log_ticket(ticket):
+ """Creates a safe-for-printing-to-the-log ticket for a given ticket.
+
+ Args:
+ ticket: Any links.Ticket.
+
+ Returns:
+ A links.Ticket that is as much as can be equal to the given ticket but
+ possibly features values like the string "<payload of length 972321>" in
+ place of the actual values of the given ticket.
+ """
+ if isinstance(ticket.payload, (basestring,)):
+ payload_length = len(ticket.payload)
+ else:
+ payload_length = -1
+ if payload_length < _UNCOMFORTABLY_LONG:
+ return ticket
+ else:
+ return links.Ticket(
+ ticket.operation_id, ticket.sequence_number,
+ ticket.group, ticket.method, ticket.subscription, ticket.timeout,
+ ticket.allowance, ticket.initial_metadata,
+ '<payload of length {}>'.format(payload_length),
+ ticket.terminal_metadata, ticket.code, ticket.message,
+ ticket.termination, None)
class RecordingLink(links.Link):
@@ -64,3 +97,71 @@ class RecordingLink(links.Link):
"""Returns a copy of the list of all tickets received by this Link."""
with self._condition:
return tuple(self._tickets)
+
+
+class _Pipe(object):
+ """A conduit that logs all tickets passed through it."""
+
+ def __init__(self, name):
+ self._lock = threading.Lock()
+ self._name = name
+ self._left_mate = utilities.NULL_LINK
+ self._right_mate = utilities.NULL_LINK
+
+ def accept_left_to_right_ticket(self, ticket):
+ with self._lock:
+ logging.warning(
+ '%s: moving left to right through %s: %s', time.time(), self._name,
+ _safe_for_log_ticket(ticket))
+ try:
+ self._right_mate.accept_ticket(ticket)
+ except Exception as e: # pylint: disable=broad-except
+ logging.exception(e)
+
+ def accept_right_to_left_ticket(self, ticket):
+ with self._lock:
+ logging.warning(
+ '%s: moving right to left through %s: %s', time.time(), self._name,
+ _safe_for_log_ticket(ticket))
+ try:
+ self._left_mate.accept_ticket(ticket)
+ except Exception as e: # pylint: disable=broad-except
+ logging.exception(e)
+
+ def join_left_mate(self, left_mate):
+ with self._lock:
+ self._left_mate = utilities.NULL_LINK if left_mate is None else left_mate
+
+ def join_right_mate(self, right_mate):
+ with self._lock:
+ self._right_mate = (
+ utilities.NULL_LINK if right_mate is None else right_mate)
+
+
+class _Facade(links.Link):
+
+ def __init__(self, accept, join):
+ self._accept = accept
+ self._join = join
+
+ def accept_ticket(self, ticket):
+ self._accept(ticket)
+
+ def join_link(self, link):
+ self._join(link)
+
+
+def logging_links(name):
+ """Creates a conduit that logs all tickets passed through it.
+
+ Args:
+ name: A name to use for the conduit to identify itself in logging output.
+
+ Returns:
+ Two links.Links, the first of which is the "left" side of the conduit
+ and the second of which is the "right" side of the conduit.
+ """
+ pipe = _Pipe(name)
+ left_facade = _Facade(pipe.accept_left_to_right_ticket, pipe.join_left_mate)
+ right_facade = _Facade(pipe.accept_right_to_left_ticket, pipe.join_right_mate)
+ return left_facade, right_facade
diff --git a/src/python/grpcio_test/setup.py b/src/python/grpcio_test/setup.py
index a6203cae2d..898ea204ac 100644
--- a/src/python/grpcio_test/setup.py
+++ b/src/python/grpcio_test/setup.py
@@ -61,6 +61,7 @@ _SETUP_REQUIRES = (
'pytest>=2.6',
'pytest-cov>=2.0',
'pytest-xdist>=1.11',
+ 'pytest-timeout>=0.5',
)
_INSTALL_REQUIRES = (
diff --git a/src/ruby/ext/grpc/rb_channel.c b/src/ruby/ext/grpc/rb_channel.c
index 6491aa4fb4..90afdc3fe1 100644
--- a/src/ruby/ext/grpc/rb_channel.c
+++ b/src/ruby/ext/grpc/rb_channel.c
@@ -150,7 +150,7 @@ static VALUE grpc_rb_channel_init(int argc, VALUE *argv, VALUE self) {
ch = grpc_insecure_channel_create(target_chars, &args, NULL);
} else {
creds = grpc_rb_get_wrapped_credentials(credentials);
- ch = grpc_secure_channel_create(creds, target_chars, &args);
+ ch = grpc_secure_channel_create(creds, target_chars, &args, NULL);
}
if (args.args != NULL) {
xfree(args.args); /* Allocated by grpc_rb_hash_convert_to_channel_args */
diff --git a/src/ruby/ext/grpc/rb_credentials.c b/src/ruby/ext/grpc/rb_credentials.c
index a9dcdbce9f..ac3804df6f 100644
--- a/src/ruby/ext/grpc/rb_credentials.c
+++ b/src/ruby/ext/grpc/rb_credentials.c
@@ -154,7 +154,7 @@ static VALUE grpc_rb_default_credentials_create(VALUE cls) {
Creates the default credential instances. */
static VALUE grpc_rb_compute_engine_credentials_create(VALUE cls) {
grpc_rb_credentials *wrapper = ALLOC(grpc_rb_credentials);
- wrapper->wrapped = grpc_compute_engine_credentials_create();
+ wrapper->wrapped = grpc_compute_engine_credentials_create(NULL);
if (wrapper->wrapped == NULL) {
rb_raise(rb_eRuntimeError,
"could not create composite engine credentials, not sure why");
@@ -181,8 +181,8 @@ static VALUE grpc_rb_composite_credentials_create(VALUE self, VALUE other) {
TypedData_Get_Struct(other, grpc_rb_credentials,
&grpc_rb_credentials_data_type, other_wrapper);
wrapper = ALLOC(grpc_rb_credentials);
- wrapper->wrapped = grpc_composite_credentials_create(self_wrapper->wrapped,
- other_wrapper->wrapped);
+ wrapper->wrapped = grpc_composite_credentials_create(
+ self_wrapper->wrapped, other_wrapper->wrapped, NULL);
if (wrapper->wrapped == NULL) {
rb_raise(rb_eRuntimeError,
"could not create composite credentials, not sure why");
@@ -234,12 +234,13 @@ static VALUE grpc_rb_credentials_init(int argc, VALUE *argv, VALUE self) {
return Qnil;
}
if (pem_private_key == Qnil && pem_cert_chain == Qnil) {
- creds = grpc_ssl_credentials_create(RSTRING_PTR(pem_root_certs), NULL);
+ creds =
+ grpc_ssl_credentials_create(RSTRING_PTR(pem_root_certs), NULL, NULL);
} else {
key_cert_pair.private_key = RSTRING_PTR(pem_private_key);
key_cert_pair.cert_chain = RSTRING_PTR(pem_cert_chain);
creds = grpc_ssl_credentials_create(RSTRING_PTR(pem_root_certs),
- &key_cert_pair);
+ &key_cert_pair, NULL);
}
if (creds == NULL) {
rb_raise(rb_eRuntimeError, "could not create a credentials, not sure why");
diff --git a/src/ruby/ext/grpc/rb_server_credentials.c b/src/ruby/ext/grpc/rb_server_credentials.c
index 62c211d769..6af4c86c45 100644
--- a/src/ruby/ext/grpc/rb_server_credentials.c
+++ b/src/ruby/ext/grpc/rb_server_credentials.c
@@ -178,10 +178,11 @@ static VALUE grpc_rb_server_credentials_init(VALUE self, VALUE pem_root_certs,
key_cert_pair.cert_chain = RSTRING_PTR(pem_cert_chain);
/* TODO Add a force_client_auth parameter and pass it here. */
if (pem_root_certs == Qnil) {
- creds = grpc_ssl_server_credentials_create(NULL, &key_cert_pair, 1, 0);
+ creds =
+ grpc_ssl_server_credentials_create(NULL, &key_cert_pair, 1, 0, NULL);
} else {
creds = grpc_ssl_server_credentials_create(RSTRING_PTR(pem_root_certs),
- &key_cert_pair, 1, 0);
+ &key_cert_pair, 1, 0, NULL);
}
if (creds == NULL) {
rb_raise(rb_eRuntimeError, "could not create a credentials, not sure why");
diff --git a/templates/Makefile.template b/templates/Makefile.template
index 1b898efbdd..797f0ab57f 100644
--- a/templates/Makefile.template
+++ b/templates/Makefile.template
@@ -313,11 +313,7 @@ LIBS = m z pthread
LDFLAGS += -pthread
endif
-ifneq ($(wildcard /usr/src/gtest/src/gtest-all.cc),)
-GTEST_LIB = /usr/src/gtest/src/gtest-all.cc -I/usr/src/gtest
-else
-GTEST_LIB = -lgtest
-endif
+GTEST_LIB = -Ithird_party/googletest/include -Ithird_party/googletest third_party/googletest/src/gtest-all.cc
GTEST_LIB += -lgflags
ifeq ($(V),1)
E = @:
@@ -637,6 +633,8 @@ PROTOBUF_PKG_CONFIG = false
PC_REQUIRES_GRPCXX =
PC_LIBS_GRPCXX =
+CPPFLAGS := -Ithird_party/googletest/include $(CPPFLAGS)
+
ifeq ($(HAS_SYSTEM_PROTOBUF),true)
ifeq ($(HAS_PKG_CONFIG),true)
PROTOBUF_PKG_CONFIG = true
@@ -861,8 +859,8 @@ else
$(Q)(cd third_party/openssl ; CC="$(CC) $(PIC_CPPFLAGS) -fvisibility=hidden $(CPPFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_$(CONFIG)) $(OPENSSL_CFLAGS_EXTRA)" ./config no-asm $(OPENSSL_CONFIG_$(CONFIG)))
endif
endif
- $(Q)$(MAKE) -C third_party/openssl clean
- $(Q)(unset CPPFLAGS; $(MAKE) -C third_party/openssl build_crypto build_ssl)
+ $(Q)$(MAKE) -j 1 -C third_party/openssl clean
+ $(Q)(unset CPPFLAGS; $(MAKE) -j 1 -C third_party/openssl build_crypto build_ssl)
$(Q)mkdir -p $(LIBDIR)/$(CONFIG)/openssl
$(Q)cp third_party/openssl/libssl.a third_party/openssl/libcrypto.a $(LIBDIR)/$(CONFIG)/openssl
diff --git a/templates/vsprojects/vcxproj_defs.include b/templates/vsprojects/vcxproj_defs.include
index 507c9a5204..b1ed89897f 100644
--- a/templates/vsprojects/vcxproj_defs.include
+++ b/templates/vsprojects/vcxproj_defs.include
@@ -23,7 +23,7 @@
props.extend(['cpptest'])
if configuration_type == 'Application':
if target.build == 'protoc':
- props.extend(['protoc'])
+ props.extend(['protoc', 'protobuf'])
else:
props.extend(['winsock', 'protobuf', 'zlib', 'openssl'])
else:
diff --git a/test/core/channel/channel_args_test.c b/test/core/channel/channel_args_test.c
new file mode 100644
index 0000000000..87f006acde
--- /dev/null
+++ b/test/core/channel/channel_args_test.c
@@ -0,0 +1,141 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <string.h>
+
+#include <grpc/support/log.h>
+#include <grpc/support/useful.h>
+
+#include "src/core/channel/channel_args.h"
+
+#include "test/core/util/test_config.h"
+
+static void test_create(void) {
+ grpc_arg arg_int;
+ grpc_arg arg_string;
+ grpc_arg to_add[2];
+ grpc_channel_args *ch_args;
+
+ arg_int.key = "int_arg";
+ arg_int.type = GRPC_ARG_INTEGER;
+ arg_int.value.integer = 123;
+
+ arg_string.key = "str key";
+ arg_string.type = GRPC_ARG_STRING;
+ arg_string.value.string = "str value";
+
+ to_add[0] = arg_int;
+ to_add[1] = arg_string;
+ ch_args = grpc_channel_args_copy_and_add(NULL, to_add, 2);
+
+ GPR_ASSERT(ch_args->num_args == 2);
+ GPR_ASSERT(strcmp(ch_args->args[0].key, arg_int.key) == 0);
+ GPR_ASSERT(ch_args->args[0].type == arg_int.type);
+ GPR_ASSERT(ch_args->args[0].value.integer == arg_int.value.integer);
+
+ GPR_ASSERT(strcmp(ch_args->args[1].key, arg_string.key) == 0);
+ GPR_ASSERT(ch_args->args[1].type == arg_string.type);
+ GPR_ASSERT(strcmp(ch_args->args[1].value.string, arg_string.value.string) ==
+ 0);
+
+ grpc_channel_args_destroy(ch_args);
+}
+
+static void test_set_compression_algorithm(void) {
+ grpc_channel_args *ch_args;
+
+ ch_args =
+ grpc_channel_args_set_compression_algorithm(NULL, GRPC_COMPRESS_GZIP);
+ GPR_ASSERT(ch_args->num_args == 1);
+ GPR_ASSERT(strcmp(ch_args->args[0].key, GRPC_COMPRESSION_ALGORITHM_ARG) == 0);
+ GPR_ASSERT(ch_args->args[0].type == GRPC_ARG_INTEGER);
+
+ grpc_channel_args_destroy(ch_args);
+}
+
+static void test_compression_algorithm_states(void) {
+ grpc_channel_args *ch_args, *ch_args_wo_gzip, *ch_args_wo_gzip_deflate;
+ int states_bitset;
+ size_t i;
+
+ ch_args = grpc_channel_args_copy_and_add(NULL, NULL, 0);
+ /* by default, all enabled */
+ states_bitset = grpc_channel_args_compression_algorithm_get_states(ch_args);
+
+ for (i = 0; i < GRPC_COMPRESS_ALGORITHMS_COUNT; i++) {
+ GPR_ASSERT(GPR_BITGET(states_bitset, i));
+ }
+
+ /* disable gzip and deflate */
+ ch_args_wo_gzip = grpc_channel_args_compression_algorithm_set_state(
+ &ch_args, GRPC_COMPRESS_GZIP, 0);
+ GPR_ASSERT(ch_args == ch_args_wo_gzip);
+ ch_args_wo_gzip_deflate = grpc_channel_args_compression_algorithm_set_state(
+ &ch_args_wo_gzip, GRPC_COMPRESS_DEFLATE, 0);
+ GPR_ASSERT(ch_args_wo_gzip == ch_args_wo_gzip_deflate);
+
+ states_bitset = grpc_channel_args_compression_algorithm_get_states(
+ ch_args_wo_gzip_deflate);
+ for (i = 0; i < GRPC_COMPRESS_ALGORITHMS_COUNT; i++) {
+ if (i == GRPC_COMPRESS_GZIP || i == GRPC_COMPRESS_DEFLATE) {
+ GPR_ASSERT(GPR_BITGET(states_bitset, i) == 0);
+ } else {
+ GPR_ASSERT(GPR_BITGET(states_bitset, i) != 0);
+ }
+ }
+
+ /* re-enabled gzip only */
+ ch_args_wo_gzip = grpc_channel_args_compression_algorithm_set_state(
+ &ch_args_wo_gzip_deflate, GRPC_COMPRESS_GZIP, 1);
+ GPR_ASSERT(ch_args_wo_gzip == ch_args_wo_gzip_deflate);
+
+ states_bitset =
+ grpc_channel_args_compression_algorithm_get_states(ch_args_wo_gzip);
+ for (i = 0; i < GRPC_COMPRESS_ALGORITHMS_COUNT; i++) {
+ if (i == GRPC_COMPRESS_DEFLATE) {
+ GPR_ASSERT(GPR_BITGET(states_bitset, i) == 0);
+ } else {
+ GPR_ASSERT(GPR_BITGET(states_bitset, i) != 0);
+ }
+ }
+
+ grpc_channel_args_destroy(ch_args);
+}
+
+int main(int argc, char **argv) {
+ grpc_test_init(argc, argv);
+ test_create();
+ test_set_compression_algorithm();
+ test_compression_algorithm_states();
+ return 0;
+}
diff --git a/test/core/end2end/dualstack_socket_test.c b/test/core/end2end/dualstack_socket_test.c
index 1f64062bf7..fcc12952bf 100644
--- a/test/core/end2end/dualstack_socket_test.c
+++ b/test/core/end2end/dualstack_socket_test.c
@@ -32,12 +32,16 @@
*/
#include <string.h>
-#include "src/core/iomgr/socket_utils_posix.h"
+
#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
#include <grpc/support/host_port.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
+
+#include "src/core/support/string.h"
+#include "src/core/iomgr/socket_utils_posix.h"
+
#include "test/core/end2end/cq_verifier.h"
#include "test/core/util/port.h"
#include "test/core/util/test_config.h"
@@ -57,6 +61,7 @@ static void drain_cq(grpc_completion_queue *cq) {
} while (ev.type != GRPC_QUEUE_SHUTDOWN);
}
+static void do_nothing(void *ignored) {}
void test_connect(const char *server_host, const char *client_host, int port,
int expect_ok) {
char *client_hostport;
@@ -109,8 +114,30 @@ void test_connect(const char *server_host, const char *client_host, int port,
/* Create client. */
if (client_host[0] == 'i') {
- /* for ipv4:/ipv6: addresses, just concatenate the port */
- gpr_asprintf(&client_hostport, "%s:%d", client_host, port);
+ /* for ipv4:/ipv6: addresses, concatenate the port to each of the parts */
+ size_t i;
+ gpr_slice uri_slice;
+ gpr_slice_buffer uri_parts;
+ char **hosts_with_port;
+
+ uri_slice =
+ gpr_slice_new((char *)client_host, strlen(client_host), do_nothing);
+ gpr_slice_buffer_init(&uri_parts);
+ gpr_slice_split(uri_slice, ",", &uri_parts);
+ hosts_with_port = gpr_malloc(sizeof(char*) * uri_parts.count);
+ for (i = 0; i < uri_parts.count; i++) {
+ char *uri_part_str = gpr_dump_slice(uri_parts.slices[i], GPR_DUMP_ASCII);
+ gpr_asprintf(&hosts_with_port[i], "%s:%d", uri_part_str, port);
+ gpr_free(uri_part_str);
+ }
+ client_hostport = gpr_strjoin_sep((const char **)hosts_with_port,
+ uri_parts.count, ",", NULL);
+ for (i = 0; i < uri_parts.count; i++) {
+ gpr_free(hosts_with_port[i]);
+ }
+ gpr_free(hosts_with_port);
+ gpr_slice_buffer_destroy(&uri_parts);
+ gpr_slice_unref(uri_slice);
} else {
gpr_join_host_port(&client_hostport, client_host, port);
}
@@ -260,7 +287,8 @@ int main(int argc, char **argv) {
test_connect("0.0.0.0", "127.0.0.1", 0, 1);
test_connect("0.0.0.0", "::ffff:127.0.0.1", 0, 1);
test_connect("0.0.0.0", "ipv4:127.0.0.1", 0, 1);
- test_connect("0.0.0.0", "ipv6:[::ffff:127.0.0.1]", 0, 1);
+ test_connect("0.0.0.0", "ipv4:127.0.0.1,127.0.0.2,127.0.0.3", 0, 1);
+ test_connect("0.0.0.0", "ipv6:[::ffff:127.0.0.1],[::ffff:127.0.0.2]", 0, 1);
test_connect("0.0.0.0", "localhost", 0, 1);
if (do_ipv6) {
test_connect("::", "::1", 0, 1);
diff --git a/test/core/end2end/fixtures/chttp2_fake_security.c b/test/core/end2end/fixtures/chttp2_fake_security.c
index 27531ecbc3..b4a248fb52 100644
--- a/test/core/end2end/fixtures/chttp2_fake_security.c
+++ b/test/core/end2end/fixtures/chttp2_fake_security.c
@@ -70,14 +70,15 @@ static void process_auth_failure(void *state, grpc_auth_context *ctx,
grpc_process_auth_metadata_done_cb cb,
void *user_data) {
GPR_ASSERT(state == NULL);
- cb(user_data, NULL, 0, 0);
+ cb(user_data, NULL, 0, NULL, 0, GRPC_STATUS_UNAUTHENTICATED, NULL);
}
static void chttp2_init_client_secure_fullstack(grpc_end2end_test_fixture *f,
grpc_channel_args *client_args,
grpc_credentials *creds) {
fullstack_secure_fixture_data *ffd = f->fixture_data;
- f->client = grpc_secure_channel_create(creds, ffd->localaddr, client_args);
+ f->client =
+ grpc_secure_channel_create(creds, ffd->localaddr, client_args, NULL);
GPR_ASSERT(f->client != NULL);
grpc_credentials_release(creds);
}
diff --git a/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c b/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c
index 491a293764..201d202dff 100644
--- a/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c
+++ b/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack.c
@@ -73,14 +73,15 @@ static void process_auth_failure(void *state, grpc_auth_context *ctx,
grpc_process_auth_metadata_done_cb cb,
void *user_data) {
GPR_ASSERT(state == NULL);
- cb(user_data, NULL, 0, 0);
+ cb(user_data, NULL, 0, NULL, 0, GRPC_STATUS_UNAUTHENTICATED, NULL);
}
static void chttp2_init_client_secure_fullstack(grpc_end2end_test_fixture *f,
grpc_channel_args *client_args,
grpc_credentials *creds) {
fullstack_secure_fixture_data *ffd = f->fixture_data;
- f->client = grpc_secure_channel_create(creds, ffd->localaddr, client_args);
+ f->client =
+ grpc_secure_channel_create(creds, ffd->localaddr, client_args, NULL);
GPR_ASSERT(f->client != NULL);
grpc_credentials_release(creds);
}
@@ -108,7 +109,7 @@ void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture *f) {
static void chttp2_init_client_simple_ssl_secure_fullstack(
grpc_end2end_test_fixture *f, grpc_channel_args *client_args) {
- grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL);
+ grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL, NULL);
grpc_arg ssl_name_override = {GRPC_ARG_STRING,
GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
{"foo.test.google.fr"}};
@@ -135,7 +136,7 @@ static void chttp2_init_server_simple_ssl_secure_fullstack(
grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key,
test_server1_cert};
grpc_server_credentials *ssl_creds =
- grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1, 0);
+ grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1, 0, NULL);
if (fail_server_auth_check(server_args)) {
grpc_auth_metadata_processor processor = {process_auth_failure, NULL};
grpc_server_credentials_set_auth_metadata_processor(ssl_creds, processor);
diff --git a/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_poll.c b/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_poll.c
index f2736cc92f..e7375f15e6 100644
--- a/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_poll.c
+++ b/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_poll.c
@@ -73,14 +73,15 @@ static void process_auth_failure(void *state, grpc_auth_context *ctx,
grpc_process_auth_metadata_done_cb cb,
void *user_data) {
GPR_ASSERT(state == NULL);
- cb(user_data, NULL, 0, 0);
+ cb(user_data, NULL, 0, NULL, 0, GRPC_STATUS_UNAUTHENTICATED, NULL);
}
static void chttp2_init_client_secure_fullstack(grpc_end2end_test_fixture *f,
grpc_channel_args *client_args,
grpc_credentials *creds) {
fullstack_secure_fixture_data *ffd = f->fixture_data;
- f->client = grpc_secure_channel_create(creds, ffd->localaddr, client_args);
+ f->client =
+ grpc_secure_channel_create(creds, ffd->localaddr, client_args, NULL);
GPR_ASSERT(f->client != NULL);
grpc_credentials_release(creds);
}
@@ -108,7 +109,7 @@ void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture *f) {
static void chttp2_init_client_simple_ssl_secure_fullstack(
grpc_end2end_test_fixture *f, grpc_channel_args *client_args) {
- grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL);
+ grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL, NULL);
grpc_arg ssl_name_override = {GRPC_ARG_STRING,
GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
{"foo.test.google.fr"}};
@@ -135,7 +136,7 @@ static void chttp2_init_server_simple_ssl_secure_fullstack(
grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key,
test_server1_cert};
grpc_server_credentials *ssl_creds =
- grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1, 0);
+ grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1, 0, NULL);
if (fail_server_auth_check(server_args)) {
grpc_auth_metadata_processor processor = {process_auth_failure, NULL};
grpc_server_credentials_set_auth_metadata_processor(ssl_creds, processor);
diff --git a/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_proxy.c b/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_proxy.c
index cc0b9dbbdd..be0dda25a6 100644
--- a/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_proxy.c
+++ b/test/core/end2end/fixtures/chttp2_simple_ssl_fullstack_with_proxy.c
@@ -58,7 +58,7 @@ static grpc_server *create_proxy_server(const char *port) {
grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key,
test_server1_cert};
grpc_server_credentials *ssl_creds =
- grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1, 0);
+ grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1, 0, NULL);
GPR_ASSERT(grpc_server_add_secure_http2_port(s, port, ssl_creds));
grpc_server_credentials_release(ssl_creds);
return s;
@@ -66,14 +66,14 @@ static grpc_server *create_proxy_server(const char *port) {
static grpc_channel *create_proxy_client(const char *target) {
grpc_channel *channel;
- grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL);
+ grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL, NULL);
grpc_arg ssl_name_override = {GRPC_ARG_STRING,
GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
{"foo.test.google.fr"}};
grpc_channel_args client_args;
client_args.num_args = 1;
client_args.args = &ssl_name_override;
- channel = grpc_secure_channel_create(ssl_creds, target, &client_args);
+ channel = grpc_secure_channel_create(ssl_creds, target, &client_args, NULL);
grpc_credentials_release(ssl_creds);
return channel;
}
@@ -101,7 +101,7 @@ static void process_auth_failure(void *state, grpc_auth_context *ctx,
grpc_process_auth_metadata_done_cb cb,
void *user_data) {
GPR_ASSERT(state == NULL);
- cb(user_data, NULL, 0, 0);
+ cb(user_data, NULL, 0, NULL, 0, GRPC_STATUS_UNAUTHENTICATED, NULL);
}
static void chttp2_init_client_secure_fullstack(grpc_end2end_test_fixture *f,
@@ -109,7 +109,8 @@ static void chttp2_init_client_secure_fullstack(grpc_end2end_test_fixture *f,
grpc_credentials *creds) {
fullstack_secure_fixture_data *ffd = f->fixture_data;
f->client = grpc_secure_channel_create(
- creds, grpc_end2end_proxy_get_client_target(ffd->proxy), client_args);
+ creds, grpc_end2end_proxy_get_client_target(ffd->proxy), client_args,
+ NULL);
GPR_ASSERT(f->client != NULL);
grpc_credentials_release(creds);
}
@@ -137,7 +138,7 @@ void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture *f) {
static void chttp2_init_client_simple_ssl_secure_fullstack(
grpc_end2end_test_fixture *f, grpc_channel_args *client_args) {
- grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL);
+ grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL, NULL);
grpc_arg ssl_name_override = {GRPC_ARG_STRING,
GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
{"foo.test.google.fr"}};
@@ -164,7 +165,7 @@ static void chttp2_init_server_simple_ssl_secure_fullstack(
grpc_ssl_pem_key_cert_pair pem_cert_key_pair = {test_server1_key,
test_server1_cert};
grpc_server_credentials *ssl_creds =
- grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1, 0);
+ grpc_ssl_server_credentials_create(NULL, &pem_cert_key_pair, 1, 0, NULL);
if (fail_server_auth_check(server_args)) {
grpc_auth_metadata_processor processor = {process_auth_failure, NULL};
grpc_server_credentials_set_auth_metadata_processor(ssl_creds, processor);
diff --git a/test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c b/test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c
index d82e623f22..9a545b1e3d 100644
--- a/test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c
+++ b/test/core/end2end/fixtures/chttp2_simple_ssl_with_oauth2_fullstack.c
@@ -79,7 +79,7 @@ static void process_oauth2_success(void *state, grpc_auth_context *ctx,
client_identity);
GPR_ASSERT(grpc_auth_context_set_peer_identity_property_name(
ctx, client_identity_property_name) == 1);
- cb(user_data, oauth2, 1, 1);
+ cb(user_data, oauth2, 1, NULL, 0, GRPC_STATUS_OK, NULL);
}
static void process_oauth2_failure(void *state, grpc_auth_context *ctx,
@@ -90,7 +90,7 @@ static void process_oauth2_failure(void *state, grpc_auth_context *ctx,
find_metadata(md, md_count, "Authorization", oauth2_md);
GPR_ASSERT(state == NULL);
GPR_ASSERT(oauth2 != NULL);
- cb(user_data, oauth2, 1, 0);
+ cb(user_data, oauth2, 1, NULL, 0, GRPC_STATUS_UNAUTHENTICATED, NULL);
}
static grpc_end2end_test_fixture chttp2_create_fixture_secure_fullstack(
@@ -113,7 +113,8 @@ static void chttp2_init_client_secure_fullstack(grpc_end2end_test_fixture *f,
grpc_channel_args *client_args,
grpc_credentials *creds) {
fullstack_secure_fixture_data *ffd = f->fixture_data;
- f->client = grpc_secure_channel_create(creds, ffd->localaddr, client_args);
+ f->client =
+ grpc_secure_channel_create(creds, ffd->localaddr, client_args, NULL);
GPR_ASSERT(f->client != NULL);
grpc_credentials_release(creds);
}
@@ -142,11 +143,11 @@ void chttp2_tear_down_secure_fullstack(grpc_end2end_test_fixture *f) {
static void chttp2_init_client_simple_ssl_with_oauth2_secure_fullstack(
grpc_end2end_test_fixture *f, grpc_channel_args *client_args) {
grpc_credentials *ssl_creds =
- grpc_ssl_credentials_create(test_root_cert, NULL);
+ grpc_ssl_credentials_create(test_root_cert, NULL, NULL);
grpc_credentials *oauth2_creds =
grpc_md_only_test_credentials_create("Authorization", oauth2_md, 1);
grpc_credentials *ssl_oauth2_creds =
- grpc_composite_credentials_create(ssl_creds, oauth2_creds);
+ grpc_composite_credentials_create(ssl_creds, oauth2_creds, NULL);
grpc_arg ssl_name_override = {GRPC_ARG_STRING,
GRPC_SSL_TARGET_NAME_OVERRIDE_ARG,
{"foo.test.google.fr"}};
@@ -175,7 +176,7 @@ static void chttp2_init_server_simple_ssl_secure_fullstack(
grpc_ssl_pem_key_cert_pair pem_key_cert_pair = {test_server1_key,
test_server1_cert};
grpc_server_credentials *ssl_creds =
- grpc_ssl_server_credentials_create(NULL, &pem_key_cert_pair, 1, 0);
+ grpc_ssl_server_credentials_create(NULL, &pem_key_cert_pair, 1, 0, NULL);
grpc_auth_metadata_processor processor;
processor.state = NULL;
if (fail_server_auth_check(server_args)) {
diff --git a/test/core/end2end/tests/default_host.c b/test/core/end2end/tests/default_host.c
index 97c19db331..57f65b834b 100644
--- a/test/core/end2end/tests/default_host.c
+++ b/test/core/end2end/tests/default_host.c
@@ -201,7 +201,7 @@ static void simple_request_body(grpc_end2end_test_fixture f) {
GPR_ASSERT(status == GRPC_STATUS_UNIMPLEMENTED);
GPR_ASSERT(0 == strcmp(details, "xyz"));
GPR_ASSERT(0 == strcmp(call_details.method, "/foo"));
- GPR_ASSERT(0 == strcmp(call_details.host, "localhost"));
+ GPR_ASSERT(0 == strncmp(call_details.host, "localhost", 9));
GPR_ASSERT(was_cancelled == 1);
gpr_free(details);
diff --git a/test/core/end2end/tests/request_response_with_payload_and_call_creds.c b/test/core/end2end/tests/request_response_with_payload_and_call_creds.c
index d862274fe3..48dd0aa2ce 100644
--- a/test/core/end2end/tests/request_response_with_payload_and_call_creds.c
+++ b/test/core/end2end/tests/request_response_with_payload_and_call_creds.c
@@ -190,7 +190,7 @@ static void request_response_with_payload_and_call_creds(
c = grpc_channel_create_call(f.client, NULL, GRPC_PROPAGATE_DEFAULTS, f.cq,
"/foo", "foo.test.google.fr", deadline, NULL);
GPR_ASSERT(c);
- creds = grpc_iam_credentials_create(iam_token, iam_selector);
+ creds = grpc_iam_credentials_create(iam_token, iam_selector, NULL);
GPR_ASSERT(creds != NULL);
GPR_ASSERT(grpc_call_set_credentials(c, creds) == GRPC_CALL_OK);
switch (mode) {
@@ -199,7 +199,7 @@ static void request_response_with_payload_and_call_creds(
case OVERRIDE:
grpc_credentials_release(creds);
creds = grpc_iam_credentials_create(overridden_iam_token,
- overridden_iam_selector);
+ overridden_iam_selector, NULL);
GPR_ASSERT(creds != NULL);
GPR_ASSERT(grpc_call_set_credentials(c, creds) == GRPC_CALL_OK);
break;
@@ -421,7 +421,7 @@ static void test_request_with_server_rejecting_client_creds(
"/foo", "foo.test.google.fr", deadline, NULL);
GPR_ASSERT(c);
- creds = grpc_iam_credentials_create(iam_token, iam_selector);
+ creds = grpc_iam_credentials_create(iam_token, iam_selector, NULL);
GPR_ASSERT(creds != NULL);
GPR_ASSERT(grpc_call_set_credentials(c, creds) == GRPC_CALL_OK);
grpc_credentials_release(creds);
diff --git a/test/core/fling/server.c b/test/core/fling/server.c
index 010217939d..0430ff9ab7 100644
--- a/test/core/fling/server.c
+++ b/test/core/fling/server.c
@@ -215,8 +215,8 @@ int main(int argc, char **argv) {
if (secure) {
grpc_ssl_pem_key_cert_pair pem_key_cert_pair = {test_server1_key,
test_server1_cert};
- grpc_server_credentials *ssl_creds =
- grpc_ssl_server_credentials_create(NULL, &pem_key_cert_pair, 1, 0);
+ grpc_server_credentials *ssl_creds = grpc_ssl_server_credentials_create(
+ NULL, &pem_key_cert_pair, 1, 0, NULL);
server = grpc_server_create(NULL, NULL);
GPR_ASSERT(grpc_server_add_secure_http2_port(server, addr, ssl_creds));
grpc_server_credentials_release(ssl_creds);
diff --git a/test/core/httpcli/httpcli_test.c b/test/core/httpcli/httpcli_test.c
index 8dddfbee98..42b2661c0a 100644
--- a/test/core/httpcli/httpcli_test.c
+++ b/test/core/httpcli/httpcli_test.c
@@ -88,7 +88,8 @@ static void test_get(int use_ssl, int port) {
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
while (!g_done) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, n_seconds_time(20));
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ n_seconds_time(20));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
gpr_free(host);
@@ -114,7 +115,8 @@ static void test_post(int use_ssl, int port) {
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
while (!g_done) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, n_seconds_time(20));
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ n_seconds_time(20));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
gpr_free(host);
diff --git a/test/core/iomgr/endpoint_tests.c b/test/core/iomgr/endpoint_tests.c
index 8186c96da1..6ef8e9ca3b 100644
--- a/test/core/iomgr/endpoint_tests.c
+++ b/test/core/iomgr/endpoint_tests.c
@@ -256,7 +256,8 @@ static void read_and_write_test(grpc_endpoint_test_config config,
while (!state.read_done || !state.write_done) {
grpc_pollset_worker worker;
GPR_ASSERT(gpr_time_cmp(gpr_now(GPR_CLOCK_MONOTONIC), deadline) < 0);
- grpc_pollset_work(g_pollset, &worker, deadline);
+ grpc_pollset_work(g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ deadline);
}
gpr_mu_unlock(GRPC_POLLSET_MU(g_pollset));
@@ -353,7 +354,8 @@ static void shutdown_during_write_test(grpc_endpoint_test_config config,
while (!write_st.done) {
grpc_pollset_worker worker;
GPR_ASSERT(gpr_time_cmp(gpr_now(deadline.clock_type), deadline) < 0);
- grpc_pollset_work(g_pollset, &worker, deadline);
+ grpc_pollset_work(g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ deadline);
}
gpr_mu_unlock(GRPC_POLLSET_MU(g_pollset));
grpc_endpoint_destroy(write_st.ep);
@@ -361,7 +363,8 @@ static void shutdown_during_write_test(grpc_endpoint_test_config config,
while (!read_st.done) {
grpc_pollset_worker worker;
GPR_ASSERT(gpr_time_cmp(gpr_now(deadline.clock_type), deadline) < 0);
- grpc_pollset_work(g_pollset, &worker, deadline);
+ grpc_pollset_work(g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ deadline);
}
gpr_mu_unlock(GRPC_POLLSET_MU(g_pollset));
gpr_free(slices);
diff --git a/test/core/iomgr/fd_posix_test.c b/test/core/iomgr/fd_posix_test.c
index adcbcafdbb..8bba87d61f 100644
--- a/test/core/iomgr/fd_posix_test.c
+++ b/test/core/iomgr/fd_posix_test.c
@@ -250,7 +250,8 @@ static void server_wait_and_shutdown(server *sv) {
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
while (!sv->done) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, gpr_inf_future(GPR_CLOCK_MONOTONIC));
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ gpr_inf_future(GPR_CLOCK_MONOTONIC));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
}
@@ -358,7 +359,8 @@ static void client_wait_and_shutdown(client *cl) {
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
while (!cl->done) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, gpr_inf_future(GPR_CLOCK_MONOTONIC));
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ gpr_inf_future(GPR_CLOCK_MONOTONIC));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
}
@@ -448,7 +450,8 @@ static void test_grpc_fd_change(void) {
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
while (a.cb_that_ran == NULL) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, gpr_inf_future(GPR_CLOCK_MONOTONIC));
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ gpr_inf_future(GPR_CLOCK_MONOTONIC));
}
GPR_ASSERT(a.cb_that_ran == first_read_callback);
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
@@ -467,7 +470,8 @@ static void test_grpc_fd_change(void) {
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
while (b.cb_that_ran == NULL) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, gpr_inf_future(GPR_CLOCK_MONOTONIC));
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ gpr_inf_future(GPR_CLOCK_MONOTONIC));
}
/* Except now we verify that second_read_callback ran instead */
GPR_ASSERT(b.cb_that_ran == second_read_callback);
diff --git a/test/core/iomgr/tcp_client_posix_test.c b/test/core/iomgr/tcp_client_posix_test.c
index 07bbe1f402..f0e2de24d9 100644
--- a/test/core/iomgr/tcp_client_posix_test.c
+++ b/test/core/iomgr/tcp_client_posix_test.c
@@ -39,10 +39,12 @@
#include <sys/socket.h>
#include <unistd.h>
-#include "src/core/iomgr/iomgr.h"
-#include "src/core/iomgr/socket_utils_posix.h"
+#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include <grpc/support/time.h>
+
+#include "src/core/iomgr/iomgr.h"
+#include "src/core/iomgr/socket_utils_posix.h"
#include "test/core/util/test_config.h"
static grpc_pollset_set g_pollset_set;
@@ -112,7 +114,8 @@ void test_succeeds(void) {
while (g_connections_complete == connections_complete_before) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5));
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ GRPC_TIMEOUT_SECONDS_TO_DEADLINE(5));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
@@ -142,7 +145,8 @@ void test_fails(void) {
/* wait for the connection callback to finish */
while (g_connections_complete == connections_complete_before) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, test_deadline());
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ test_deadline());
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
@@ -196,22 +200,28 @@ void test_times_out(void) {
/* Make sure the event doesn't trigger early */
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
- while (gpr_time_cmp(gpr_time_add(connect_deadline,
- gpr_time_from_seconds(2, GPR_TIMESPAN)),
- gpr_now(connect_deadline.clock_type)) > 0) {
- int is_after_deadline =
- gpr_time_cmp(connect_deadline, gpr_now(GPR_CLOCK_MONOTONIC)) <= 0;
+ for (;;) {
grpc_pollset_worker worker;
+ gpr_timespec now = gpr_now(connect_deadline.clock_type);
+ gpr_timespec continue_verifying_time = gpr_time_from_seconds(2, GPR_TIMESPAN);
+ gpr_timespec grace_time = gpr_time_from_seconds(1, GPR_TIMESPAN);
+ gpr_timespec finish_time = gpr_time_add(connect_deadline, continue_verifying_time);
+ gpr_timespec restart_verifying_time = gpr_time_add(connect_deadline, grace_time);
+ int is_after_deadline = gpr_time_cmp(now, connect_deadline) > 0;
+ if (gpr_time_cmp(now, finish_time) > 0) {
+ break;
+ }
+ gpr_log(GPR_DEBUG, "now=%d.%09d connect_deadline=%d.%09d",
+ now.tv_sec, now.tv_nsec, connect_deadline.tv_sec, connect_deadline.tv_nsec);
if (is_after_deadline &&
- gpr_time_cmp(gpr_time_add(connect_deadline,
- gpr_time_from_seconds(1, GPR_TIMESPAN)),
- gpr_now(GPR_CLOCK_MONOTONIC)) > 0) {
+ gpr_time_cmp(now, restart_verifying_time) <= 0) {
/* allow some slack before insisting that things be done */
} else {
GPR_ASSERT(g_connections_complete ==
connections_complete_before + is_after_deadline);
}
- grpc_pollset_work(&g_pollset, &worker, GRPC_TIMEOUT_MILLIS_TO_DEADLINE(10));
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ GRPC_TIMEOUT_MILLIS_TO_DEADLINE(10));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
@@ -225,7 +235,7 @@ static void destroy_pollset(void *p) { grpc_pollset_destroy(p); }
int main(int argc, char **argv) {
grpc_test_init(argc, argv);
- grpc_iomgr_init();
+ grpc_init();
grpc_pollset_set_init(&g_pollset_set);
grpc_pollset_init(&g_pollset);
grpc_pollset_set_add_pollset(&g_pollset_set, &g_pollset);
@@ -235,6 +245,6 @@ int main(int argc, char **argv) {
test_times_out();
grpc_pollset_set_destroy(&g_pollset_set);
grpc_pollset_shutdown(&g_pollset, destroy_pollset, &g_pollset);
- grpc_iomgr_shutdown();
+ grpc_shutdown();
return 0;
}
diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c
index 17a85ceaec..6ad832231f 100644
--- a/test/core/iomgr/tcp_posix_test.c
+++ b/test/core/iomgr/tcp_posix_test.c
@@ -187,7 +187,8 @@ static void read_test(ssize_t num_bytes, ssize_t slice_size) {
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
while (state.read_bytes < state.target_read_bytes) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, deadline);
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ deadline);
}
GPR_ASSERT(state.read_bytes == state.target_read_bytes);
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
@@ -224,7 +225,8 @@ static void large_read_test(ssize_t slice_size) {
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
while (state.read_bytes < state.target_read_bytes) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, deadline);
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ deadline);
}
GPR_ASSERT(state.read_bytes == state.target_read_bytes);
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
@@ -285,7 +287,8 @@ void drain_socket_blocking(int fd, size_t num_bytes, size_t read_size) {
for (;;) {
grpc_pollset_worker worker;
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
- grpc_pollset_work(&g_pollset, &worker, GRPC_TIMEOUT_MILLIS_TO_DEADLINE(10));
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ GRPC_TIMEOUT_MILLIS_TO_DEADLINE(10));
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
do {
bytes_read =
@@ -365,7 +368,8 @@ static void write_test(ssize_t num_bytes, ssize_t slice_size) {
if (state.write_done) {
break;
}
- grpc_pollset_work(&g_pollset, &worker, deadline);
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ deadline);
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
}
@@ -422,7 +426,8 @@ static void write_error_test(ssize_t num_bytes, ssize_t slice_size) {
if (state.write_done) {
break;
}
- grpc_pollset_work(&g_pollset, &worker, deadline);
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ deadline);
}
gpr_mu_unlock(GRPC_POLLSET_MU(&g_pollset));
break;
diff --git a/test/core/iomgr/tcp_server_posix_test.c b/test/core/iomgr/tcp_server_posix_test.c
index b82d7c08b1..29a20cba8e 100644
--- a/test/core/iomgr/tcp_server_posix_test.c
+++ b/test/core/iomgr/tcp_server_posix_test.c
@@ -137,7 +137,8 @@ static void test_connect(int n) {
while (g_nconnects == nconnects_before &&
gpr_time_cmp(deadline, gpr_now(deadline.clock_type)) > 0) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, deadline);
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ deadline);
}
gpr_log(GPR_DEBUG, "wait done");
diff --git a/test/core/iomgr/udp_server_test.c b/test/core/iomgr/udp_server_test.c
index 5a5f99fb94..c91752b937 100644
--- a/test/core/iomgr/udp_server_test.c
+++ b/test/core/iomgr/udp_server_test.c
@@ -135,7 +135,7 @@ static void test_receive(int number_of_clients) {
gpr_mu_lock(GRPC_POLLSET_MU(&g_pollset));
for (i = 0; i < number_of_clients; i++) {
- deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(4000);
+ deadline = GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10);
number_of_reads_before = g_number_of_reads;
/* Create a socket, send a packet to the UDP server. */
@@ -146,7 +146,8 @@ static void test_receive(int number_of_clients) {
while (g_number_of_reads == number_of_reads_before &&
gpr_time_cmp(deadline, gpr_now(deadline.clock_type)) > 0) {
grpc_pollset_worker worker;
- grpc_pollset_work(&g_pollset, &worker, deadline);
+ grpc_pollset_work(&g_pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ deadline);
}
GPR_ASSERT(g_number_of_reads == number_of_reads_before + 1);
close(clifd);
diff --git a/test/core/security/credentials_test.c b/test/core/security/credentials_test.c
index e4a8144eaf..880fc5da1e 100644
--- a/test/core/security/credentials_test.c
+++ b/test/core/security/credentials_test.c
@@ -329,7 +329,7 @@ static void check_iam_metadata(void *user_data, grpc_credentials_md *md_elems,
static void test_iam_creds(void) {
grpc_credentials *creds = grpc_iam_credentials_create(
- test_iam_authorization_token, test_iam_authority_selector);
+ test_iam_authorization_token, test_iam_authority_selector, NULL);
GPR_ASSERT(grpc_credentials_has_request_metadata(creds));
GPR_ASSERT(grpc_credentials_has_request_metadata_only(creds));
grpc_credentials_get_request_metadata(creds, NULL, test_service_url,
@@ -349,7 +349,7 @@ static void check_access_token_metadata(void *user_data,
}
static void test_access_token_creds(void) {
- grpc_credentials *creds = grpc_access_token_credentials_create("blah");
+ grpc_credentials *creds = grpc_access_token_credentials_create("blah", NULL);
GPR_ASSERT(grpc_credentials_has_request_metadata(creds));
GPR_ASSERT(grpc_credentials_has_request_metadata_only(creds));
GPR_ASSERT(strcmp(creds->type, GRPC_CREDENTIALS_TYPE_OAUTH2) == 0);
@@ -371,12 +371,12 @@ static void check_ssl_oauth2_composite_metadata(
static void test_ssl_oauth2_composite_creds(void) {
grpc_credentials *ssl_creds =
- grpc_ssl_credentials_create(test_root_cert, NULL);
+ grpc_ssl_credentials_create(test_root_cert, NULL, NULL);
const grpc_credentials_array *creds_array;
grpc_credentials *oauth2_creds = grpc_md_only_test_credentials_create(
"Authorization", test_oauth2_bearer_token, 0);
grpc_credentials *composite_creds =
- grpc_composite_credentials_create(ssl_creds, oauth2_creds);
+ grpc_composite_credentials_create(ssl_creds, oauth2_creds, NULL);
grpc_credentials_unref(ssl_creds);
grpc_credentials_unref(oauth2_creds);
GPR_ASSERT(strcmp(composite_creds->type, GRPC_CREDENTIALS_TYPE_COMPOSITE) ==
@@ -395,13 +395,13 @@ static void test_ssl_oauth2_composite_creds(void) {
}
void test_ssl_fake_transport_security_composite_creds_failure(void) {
- grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL);
+ grpc_credentials *ssl_creds = grpc_ssl_credentials_create(NULL, NULL, NULL);
grpc_credentials *fake_transport_security_creds =
grpc_fake_transport_security_credentials_create();
/* 2 connector credentials: should not work. */
GPR_ASSERT(grpc_composite_credentials_create(
- ssl_creds, fake_transport_security_creds) == NULL);
+ ssl_creds, fake_transport_security_creds, NULL) == NULL);
grpc_credentials_unref(ssl_creds);
grpc_credentials_unref(fake_transport_security_creds);
}
@@ -422,16 +422,16 @@ static void check_ssl_oauth2_iam_composite_metadata(
static void test_ssl_oauth2_iam_composite_creds(void) {
grpc_credentials *ssl_creds =
- grpc_ssl_credentials_create(test_root_cert, NULL);
+ grpc_ssl_credentials_create(test_root_cert, NULL, NULL);
const grpc_credentials_array *creds_array;
grpc_credentials *oauth2_creds = grpc_md_only_test_credentials_create(
"Authorization", test_oauth2_bearer_token, 0);
grpc_credentials *aux_creds =
- grpc_composite_credentials_create(ssl_creds, oauth2_creds);
+ grpc_composite_credentials_create(ssl_creds, oauth2_creds, NULL);
grpc_credentials *iam_creds = grpc_iam_credentials_create(
- test_iam_authorization_token, test_iam_authority_selector);
+ test_iam_authorization_token, test_iam_authority_selector, NULL);
grpc_credentials *composite_creds =
- grpc_composite_credentials_create(aux_creds, iam_creds);
+ grpc_composite_credentials_create(aux_creds, iam_creds, NULL);
grpc_credentials_unref(ssl_creds);
grpc_credentials_unref(oauth2_creds);
grpc_credentials_unref(aux_creds);
@@ -524,7 +524,7 @@ static int httpcli_get_should_not_be_called(
static void test_compute_engine_creds_success(void) {
grpc_credentials *compute_engine_creds =
- grpc_compute_engine_credentials_create();
+ grpc_compute_engine_credentials_create(NULL);
GPR_ASSERT(grpc_credentials_has_request_metadata(compute_engine_creds));
GPR_ASSERT(grpc_credentials_has_request_metadata_only(compute_engine_creds));
@@ -548,7 +548,7 @@ static void test_compute_engine_creds_success(void) {
static void test_compute_engine_creds_failure(void) {
grpc_credentials *compute_engine_creds =
- grpc_compute_engine_credentials_create();
+ grpc_compute_engine_credentials_create(NULL);
grpc_httpcli_set_override(compute_engine_httpcli_get_failure_override,
httpcli_post_should_not_be_called);
GPR_ASSERT(grpc_credentials_has_request_metadata(compute_engine_creds));
@@ -605,7 +605,7 @@ static int refresh_token_httpcli_post_failure(
static void test_refresh_token_creds_success(void) {
grpc_credentials *refresh_token_creds =
- grpc_refresh_token_credentials_create(test_refresh_token_str);
+ grpc_refresh_token_credentials_create(test_refresh_token_str, NULL);
GPR_ASSERT(grpc_credentials_has_request_metadata(refresh_token_creds));
GPR_ASSERT(grpc_credentials_has_request_metadata_only(refresh_token_creds));
@@ -629,7 +629,7 @@ static void test_refresh_token_creds_success(void) {
static void test_refresh_token_creds_failure(void) {
grpc_credentials *refresh_token_creds =
- grpc_refresh_token_credentials_create(test_refresh_token_str);
+ grpc_refresh_token_credentials_create(test_refresh_token_str, NULL);
grpc_httpcli_set_override(httpcli_get_should_not_be_called,
refresh_token_httpcli_post_failure);
GPR_ASSERT(grpc_credentials_has_request_metadata(refresh_token_creds));
@@ -731,7 +731,7 @@ static void test_service_account_creds_success(void) {
char *json_key_string = test_json_key_str();
grpc_credentials *service_account_creds =
grpc_service_account_credentials_create(json_key_string, test_scope,
- grpc_max_auth_token_lifetime);
+ grpc_max_auth_token_lifetime, NULL);
GPR_ASSERT(grpc_credentials_has_request_metadata(service_account_creds));
GPR_ASSERT(grpc_credentials_has_request_metadata_only(service_account_creds));
@@ -761,8 +761,8 @@ static void test_service_account_creds_success(void) {
static void test_service_account_creds_http_failure(void) {
char *json_key_string = test_json_key_str();
grpc_credentials *service_account_creds =
- grpc_service_account_credentials_create(json_key_string, test_scope,
- grpc_max_auth_token_lifetime);
+ grpc_service_account_credentials_create(
+ json_key_string, test_scope, grpc_max_auth_token_lifetime, NULL);
GPR_ASSERT(grpc_credentials_has_request_metadata(service_account_creds));
GPR_ASSERT(grpc_credentials_has_request_metadata_only(service_account_creds));
@@ -781,8 +781,8 @@ static void test_service_account_creds_http_failure(void) {
static void test_service_account_creds_signing_failure(void) {
char *json_key_string = test_json_key_str();
grpc_credentials *service_account_creds =
- grpc_service_account_credentials_create(json_key_string, test_scope,
- grpc_max_auth_token_lifetime);
+ grpc_service_account_credentials_create(
+ json_key_string, test_scope, grpc_max_auth_token_lifetime, NULL);
GPR_ASSERT(grpc_credentials_has_request_metadata(service_account_creds));
GPR_ASSERT(grpc_credentials_has_request_metadata_only(service_account_creds));
@@ -828,7 +828,7 @@ static void test_jwt_creds_success(void) {
char *json_key_string = test_json_key_str();
grpc_credentials *jwt_creds =
grpc_service_account_jwt_access_credentials_create(
- json_key_string, grpc_max_auth_token_lifetime);
+ json_key_string, grpc_max_auth_token_lifetime, NULL);
GPR_ASSERT(grpc_credentials_has_request_metadata(jwt_creds));
GPR_ASSERT(grpc_credentials_has_request_metadata_only(jwt_creds));
@@ -861,7 +861,7 @@ static void test_jwt_creds_signing_failure(void) {
char *json_key_string = test_json_key_str();
grpc_credentials *jwt_creds =
grpc_service_account_jwt_access_credentials_create(
- json_key_string, grpc_max_auth_token_lifetime);
+ json_key_string, grpc_max_auth_token_lifetime, NULL);
GPR_ASSERT(grpc_credentials_has_request_metadata(jwt_creds));
GPR_ASSERT(grpc_credentials_has_request_metadata_only(jwt_creds));
diff --git a/test/core/security/fetch_oauth2.c b/test/core/security/fetch_oauth2.c
index 64c4dde5d9..7354a9f8f7 100644
--- a/test/core/security/fetch_oauth2.c
+++ b/test/core/security/fetch_oauth2.c
@@ -56,7 +56,7 @@ static grpc_credentials *create_service_account_creds(
}
return grpc_service_account_credentials_create(
(const char *)GPR_SLICE_START_PTR(json_key), scope,
- grpc_max_auth_token_lifetime);
+ grpc_max_auth_token_lifetime, NULL);
}
static grpc_credentials *create_refresh_token_creds(
@@ -69,7 +69,7 @@ static grpc_credentials *create_refresh_token_creds(
exit(1);
}
return grpc_refresh_token_credentials_create(
- (const char *)GPR_SLICE_START_PTR(refresh_token));
+ (const char *)GPR_SLICE_START_PTR(refresh_token), NULL);
}
int main(int argc, char **argv) {
@@ -112,7 +112,7 @@ int main(int argc, char **argv) {
"Ignoring json key and scope to get a token from the GCE "
"metadata server.");
}
- creds = grpc_compute_engine_credentials_create();
+ creds = grpc_compute_engine_credentials_create(NULL);
if (creds == NULL) {
gpr_log(GPR_ERROR, "Could not create gce credentials.");
exit(1);
diff --git a/test/core/security/oauth2_utils.c b/test/core/security/oauth2_utils.c
index 990855ac6a..7df6fade6b 100644
--- a/test/core/security/oauth2_utils.c
+++ b/test/core/security/oauth2_utils.c
@@ -85,7 +85,7 @@ char *grpc_test_fetch_oauth2_token_with_credentials(grpc_credentials *creds) {
gpr_mu_lock(GRPC_POLLSET_MU(&request.pollset));
while (!request.is_done) {
grpc_pollset_worker worker;
- grpc_pollset_work(&request.pollset, &worker,
+ grpc_pollset_work(&request.pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
gpr_inf_future(GPR_CLOCK_MONOTONIC));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&request.pollset));
diff --git a/test/core/security/print_google_default_creds_token.c b/test/core/security/print_google_default_creds_token.c
index b4323ab200..753221cada 100644
--- a/test/core/security/print_google_default_creds_token.c
+++ b/test/core/security/print_google_default_creds_token.c
@@ -96,8 +96,8 @@ int main(int argc, char **argv) {
gpr_mu_lock(GRPC_POLLSET_MU(&sync.pollset));
while (!sync.is_done) {
grpc_pollset_worker worker;
- grpc_pollset_work(&sync.pollset, &worker,
- gpr_inf_future(GPR_CLOCK_REALTIME));
+ grpc_pollset_work(&sync.pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ gpr_inf_future(GPR_CLOCK_MONOTONIC));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&sync.pollset));
diff --git a/test/core/security/verify_jwt.c b/test/core/security/verify_jwt.c
index 5ebde5fbb4..f4432667ee 100644
--- a/test/core/security/verify_jwt.c
+++ b/test/core/security/verify_jwt.c
@@ -111,7 +111,7 @@ int main(int argc, char **argv) {
gpr_mu_lock(GRPC_POLLSET_MU(&sync.pollset));
while (!sync.is_done) {
grpc_pollset_worker worker;
- grpc_pollset_work(&sync.pollset, &worker,
+ grpc_pollset_work(&sync.pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
gpr_inf_future(GPR_CLOCK_MONOTONIC));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&sync.pollset));
diff --git a/test/core/util/port_posix.c b/test/core/util/port_posix.c
index cec0eebd33..836e62a541 100644
--- a/test/core/util/port_posix.c
+++ b/test/core/util/port_posix.c
@@ -178,7 +178,7 @@ static int pick_port_using_server(char *server) {
gpr_mu_lock(GRPC_POLLSET_MU(&pr.pollset));
while (pr.port == -1) {
grpc_pollset_worker worker;
- grpc_pollset_work(&pr.pollset, &worker,
+ grpc_pollset_work(&pr.pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
GRPC_TIMEOUT_SECONDS_TO_DEADLINE(1));
}
gpr_mu_unlock(GRPC_POLLSET_MU(&pr.pollset));
diff --git a/test/core/util/reconnect_server.c b/test/core/util/reconnect_server.c
index 2a2113338b..a06cb50b3a 100644
--- a/test/core/util/reconnect_server.c
+++ b/test/core/util/reconnect_server.c
@@ -134,7 +134,8 @@ void reconnect_server_poll(reconnect_server *server, int seconds) {
gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC),
gpr_time_from_seconds(seconds, GPR_TIMESPAN));
gpr_mu_lock(GRPC_POLLSET_MU(&server->pollset));
- grpc_pollset_work(&server->pollset, &worker, deadline);
+ grpc_pollset_work(&server->pollset, &worker, gpr_now(GPR_CLOCK_MONOTONIC),
+ deadline);
gpr_mu_unlock(GRPC_POLLSET_MU(&server->pollset));
}
diff --git a/test/core/util/test_config.h b/test/core/util/test_config.h
index b2cc40bb47..ccef8620c1 100644
--- a/test/core/util/test_config.h
+++ b/test/core/util/test_config.h
@@ -56,7 +56,7 @@ extern double g_fixture_slowdown_factor;
#define GRPC_TIMEOUT_SECONDS_TO_DEADLINE(x) \
gpr_time_add(gpr_now(GPR_CLOCK_MONOTONIC), \
- gpr_time_from_micros(GRPC_TEST_SLOWDOWN_FACTOR * 1e6 * (x), \
+ gpr_time_from_millis(GRPC_TEST_SLOWDOWN_FACTOR * 1e3 * (x), \
GPR_TIMESPAN))
#define GRPC_TIMEOUT_MILLIS_TO_DEADLINE(x) \
diff --git a/test/cpp/client/channel_arguments_test.cc b/test/cpp/client/channel_arguments_test.cc
index 01c56cb795..3d75e7b0e6 100644
--- a/test/cpp/client/channel_arguments_test.cc
+++ b/test/cpp/client/channel_arguments_test.cc
@@ -31,7 +31,7 @@
*
*/
-#include <grpc++/channel_arguments.h>
+#include <grpc++/support/channel_arguments.h>
#include <grpc/grpc.h>
#include <gtest/gtest.h>
diff --git a/test/cpp/common/auth_property_iterator_test.cc b/test/cpp/common/auth_property_iterator_test.cc
index bf17842a84..e6226d6a09 100644
--- a/test/cpp/common/auth_property_iterator_test.cc
+++ b/test/cpp/common/auth_property_iterator_test.cc
@@ -32,14 +32,17 @@
*/
#include <grpc/grpc_security.h>
-#include <grpc++/auth_context.h>
+#include <grpc++/support/auth_context.h>
#include <gtest/gtest.h>
#include "src/cpp/common/secure_auth_context.h"
+#include "test/cpp/util/string_ref_helper.h"
extern "C" {
#include "src/core/security/security_context.h"
}
+using ::grpc::testing::ToString;
+
namespace grpc {
namespace {
@@ -84,12 +87,12 @@ TEST_F(AuthPropertyIteratorTest, GeneralTest) {
AuthProperty p1 = *iter;
iter++;
AuthProperty p2 = *iter;
- EXPECT_EQ("name", p0.first);
- EXPECT_EQ("chapi", p0.second);
- EXPECT_EQ("name", p1.first);
- EXPECT_EQ("chapo", p1.second);
- EXPECT_EQ("foo", p2.first);
- EXPECT_EQ("bar", p2.second);
+ EXPECT_EQ("name", ToString(p0.first));
+ EXPECT_EQ("chapi", ToString(p0.second));
+ EXPECT_EQ("name", ToString(p1.first));
+ EXPECT_EQ("chapo", ToString(p1.second));
+ EXPECT_EQ("foo", ToString(p2.first));
+ EXPECT_EQ("bar", ToString(p2.second));
++iter;
EXPECT_EQ(empty_iter, iter);
}
diff --git a/test/cpp/common/secure_auth_context_test.cc b/test/cpp/common/secure_auth_context_test.cc
index e0376c9cc7..25538c1853 100644
--- a/test/cpp/common/secure_auth_context_test.cc
+++ b/test/cpp/common/secure_auth_context_test.cc
@@ -32,14 +32,17 @@
*/
#include <grpc/grpc_security.h>
-#include <grpc++/auth_context.h>
+#include <grpc++/support/auth_context.h>
#include <gtest/gtest.h>
#include "src/cpp/common/secure_auth_context.h"
+#include "test/cpp/util/string_ref_helper.h"
extern "C" {
#include "src/core/security/security_context.h"
}
+using grpc::testing::ToString;
+
namespace grpc {
namespace {
@@ -63,14 +66,14 @@ TEST_F(SecureAuthContextTest, Properties) {
EXPECT_EQ(1, grpc_auth_context_set_peer_identity_property_name(ctx, "name"));
SecureAuthContext context(ctx);
- std::vector<grpc::string> peer_identity = context.GetPeerIdentity();
+ std::vector<grpc::string_ref> peer_identity = context.GetPeerIdentity();
EXPECT_EQ(2u, peer_identity.size());
- EXPECT_EQ("chapi", peer_identity[0]);
- EXPECT_EQ("chapo", peer_identity[1]);
+ EXPECT_EQ("chapi", ToString(peer_identity[0]));
+ EXPECT_EQ("chapo", ToString(peer_identity[1]));
EXPECT_EQ("name", context.GetPeerIdentityPropertyName());
- std::vector<grpc::string> bar = context.FindPropertyValues("foo");
+ std::vector<grpc::string_ref> bar = context.FindPropertyValues("foo");
EXPECT_EQ(1u, bar.size());
- EXPECT_EQ("bar", bar[0]);
+ EXPECT_EQ("bar", ToString(bar[0]));
}
TEST_F(SecureAuthContextTest, Iterators) {
@@ -88,12 +91,12 @@ TEST_F(SecureAuthContextTest, Iterators) {
AuthProperty p1 = *iter;
iter++;
AuthProperty p2 = *iter;
- EXPECT_EQ("name", p0.first);
- EXPECT_EQ("chapi", p0.second);
- EXPECT_EQ("name", p1.first);
- EXPECT_EQ("chapo", p1.second);
- EXPECT_EQ("foo", p2.first);
- EXPECT_EQ("bar", p2.second);
+ EXPECT_EQ("name", ToString(p0.first));
+ EXPECT_EQ("chapi", ToString(p0.second));
+ EXPECT_EQ("name", ToString(p1.first));
+ EXPECT_EQ("chapo", ToString(p1.second));
+ EXPECT_EQ("foo", ToString(p2.first));
+ EXPECT_EQ("bar", ToString(p2.second));
++iter;
EXPECT_EQ(context.end(), iter);
}
diff --git a/test/cpp/end2end/async_end2end_test.cc b/test/cpp/end2end/async_end2end_test.cc
index a30c841216..bbcac9ba34 100644
--- a/test/cpp/end2end/async_end2end_test.cc
+++ b/test/cpp/end2end/async_end2end_test.cc
@@ -33,13 +33,10 @@
#include <memory>
-#include "test/core/util/port.h"
-#include "test/core/util/test_config.h"
-#include "test/cpp/util/echo_duplicate.grpc.pb.h"
-#include "test/cpp/util/echo.grpc.pb.h"
-#include <grpc++/async_unary_call.h>
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc/grpc.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/time.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
@@ -47,14 +44,17 @@
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
-#include <grpc++/time.h>
#include <gtest/gtest.h>
-#include <grpc/grpc.h>
-#include <grpc/support/thd.h>
-#include <grpc/support/time.h>
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+#include "test/cpp/util/echo_duplicate.grpc.pb.h"
+#include "test/cpp/util/echo.grpc.pb.h"
+#include "test/cpp/util/string_ref_helper.h"
+
+#ifdef GPR_POSIX_SOCKET
+#include "src/core/iomgr/pollset_posix.h"
+#endif
using grpc::cpp::test::util::EchoRequest;
using grpc::cpp::test::util::EchoResponse;
@@ -67,8 +67,41 @@ namespace {
void* tag(int i) { return (void*)(gpr_intptr)i; }
-class Verifier {
+#ifdef GPR_POSIX_SOCKET
+static int assert_non_blocking_poll(struct pollfd* pfds, nfds_t nfds,
+ int timeout) {
+ GPR_ASSERT(timeout == 0);
+ return poll(pfds, nfds, timeout);
+}
+
+class PollOverride {
public:
+ PollOverride(grpc_poll_function_type f) {
+ prev_ = grpc_poll_function;
+ grpc_poll_function = f;
+ }
+
+ ~PollOverride() { grpc_poll_function = prev_; }
+
+ private:
+ grpc_poll_function_type prev_;
+};
+
+class PollingCheckRegion : public PollOverride {
+ public:
+ explicit PollingCheckRegion(bool allow_blocking)
+ : PollOverride(allow_blocking ? poll : assert_non_blocking_poll) {}
+};
+#else
+class PollingCheckRegion {
+ public:
+ explicit PollingCheckRegion(bool allow_blocking) {}
+};
+#endif
+
+class Verifier : public PollingCheckRegion {
+ public:
+ explicit Verifier(bool spin) : PollingCheckRegion(!spin), spin_(spin) {}
Verifier& Expect(int i, bool expect_ok) {
expectations_[tag(i)] = expect_ok;
return *this;
@@ -78,7 +111,17 @@ class Verifier {
while (!expectations_.empty()) {
bool ok;
void* got_tag;
- EXPECT_TRUE(cq->Next(&got_tag, &ok));
+ if (spin_) {
+ for (;;) {
+ auto r = cq->AsyncNext(&got_tag, &ok, gpr_time_0(GPR_CLOCK_REALTIME));
+ if (r == CompletionQueue::TIMEOUT) continue;
+ if (r == CompletionQueue::GOT_EVENT) break;
+ gpr_log(GPR_ERROR, "unexpected result from AsyncNext");
+ abort();
+ }
+ } else {
+ EXPECT_TRUE(cq->Next(&got_tag, &ok));
+ }
auto it = expectations_.find(got_tag);
EXPECT_TRUE(it != expectations_.end());
EXPECT_EQ(it->second, ok);
@@ -90,14 +133,34 @@ class Verifier {
if (expectations_.empty()) {
bool ok;
void* got_tag;
- EXPECT_EQ(cq->AsyncNext(&got_tag, &ok, deadline),
- CompletionQueue::TIMEOUT);
+ if (spin_) {
+ while (std::chrono::system_clock::now() < deadline) {
+ EXPECT_EQ(
+ cq->AsyncNext(&got_tag, &ok, gpr_time_0(GPR_CLOCK_REALTIME)),
+ CompletionQueue::TIMEOUT);
+ }
+ } else {
+ EXPECT_EQ(cq->AsyncNext(&got_tag, &ok, deadline),
+ CompletionQueue::TIMEOUT);
+ }
} else {
while (!expectations_.empty()) {
bool ok;
void* got_tag;
- EXPECT_EQ(cq->AsyncNext(&got_tag, &ok, deadline),
- CompletionQueue::GOT_EVENT);
+ if (spin_) {
+ for (;;) {
+ GPR_ASSERT(std::chrono::system_clock::now() < deadline);
+ auto r =
+ cq->AsyncNext(&got_tag, &ok, gpr_time_0(GPR_CLOCK_REALTIME));
+ if (r == CompletionQueue::TIMEOUT) continue;
+ if (r == CompletionQueue::GOT_EVENT) break;
+ gpr_log(GPR_ERROR, "unexpected result from AsyncNext");
+ abort();
+ }
+ } else {
+ EXPECT_EQ(cq->AsyncNext(&got_tag, &ok, deadline),
+ CompletionQueue::GOT_EVENT);
+ }
auto it = expectations_.find(got_tag);
EXPECT_TRUE(it != expectations_.end());
EXPECT_EQ(it->second, ok);
@@ -108,9 +171,10 @@ class Verifier {
private:
std::map<void*, bool> expectations_;
+ bool spin_;
};
-class AsyncEnd2endTest : public ::testing::Test {
+class AsyncEnd2endTest : public ::testing::TestWithParam<bool> {
protected:
AsyncEnd2endTest() {}
@@ -136,8 +200,8 @@ class AsyncEnd2endTest : public ::testing::Test {
}
void ResetStub() {
- std::shared_ptr<ChannelInterface> channel = CreateChannel(
- server_address_.str(), InsecureCredentials(), ChannelArguments());
+ std::shared_ptr<Channel> channel =
+ CreateChannel(server_address_.str(), InsecureCredentials());
stub_ = std::move(grpc::cpp::test::util::TestService::NewStub(channel));
}
@@ -160,15 +224,15 @@ class AsyncEnd2endTest : public ::testing::Test {
service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(),
cq_.get(), tag(2));
- Verifier().Expect(2, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(2, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
send_response.set_message(recv_request.message());
response_writer.Finish(send_response, Status::OK, tag(3));
- Verifier().Expect(3, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(3, true).Verify(cq_.get());
response_reader->Finish(&recv_response, &recv_status, tag(4));
- Verifier().Expect(4, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, true).Verify(cq_.get());
EXPECT_EQ(send_response.message(), recv_response.message());
EXPECT_TRUE(recv_status.ok());
@@ -182,18 +246,18 @@ class AsyncEnd2endTest : public ::testing::Test {
std::ostringstream server_address_;
};
-TEST_F(AsyncEnd2endTest, SimpleRpc) {
+TEST_P(AsyncEnd2endTest, SimpleRpc) {
ResetStub();
SendRpc(1);
}
-TEST_F(AsyncEnd2endTest, SequentialRpcs) {
+TEST_P(AsyncEnd2endTest, SequentialRpcs) {
ResetStub();
SendRpc(10);
}
// Test a simple RPC using the async version of Next
-TEST_F(AsyncEnd2endTest, AsyncNextRpc) {
+TEST_P(AsyncEnd2endTest, AsyncNextRpc) {
ResetStub();
EchoRequest send_request;
@@ -214,30 +278,32 @@ TEST_F(AsyncEnd2endTest, AsyncNextRpc) {
std::chrono::system_clock::now());
std::chrono::system_clock::time_point time_limit(
std::chrono::system_clock::now() + std::chrono::seconds(10));
- Verifier().Verify(cq_.get(), time_now);
- Verifier().Verify(cq_.get(), time_now);
+ Verifier(GetParam()).Verify(cq_.get(), time_now);
+ Verifier(GetParam()).Verify(cq_.get(), time_now);
service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(),
cq_.get(), tag(2));
- Verifier().Expect(2, true).Verify(cq_.get(), time_limit);
+ Verifier(GetParam()).Expect(2, true).Verify(cq_.get(), time_limit);
EXPECT_EQ(send_request.message(), recv_request.message());
send_response.set_message(recv_request.message());
response_writer.Finish(send_response, Status::OK, tag(3));
- Verifier().Expect(3, true).Verify(
- cq_.get(), std::chrono::system_clock::time_point::max());
+ Verifier(GetParam())
+ .Expect(3, true)
+ .Verify(cq_.get(), std::chrono::system_clock::time_point::max());
response_reader->Finish(&recv_response, &recv_status, tag(4));
- Verifier().Expect(4, true).Verify(
- cq_.get(), std::chrono::system_clock::time_point::max());
+ Verifier(GetParam())
+ .Expect(4, true)
+ .Verify(cq_.get(), std::chrono::system_clock::time_point::max());
EXPECT_EQ(send_response.message(), recv_response.message());
EXPECT_TRUE(recv_status.ok());
}
// Two pings and a final pong.
-TEST_F(AsyncEnd2endTest, SimpleClientStreaming) {
+TEST_P(AsyncEnd2endTest, SimpleClientStreaming) {
ResetStub();
EchoRequest send_request;
@@ -256,41 +322,41 @@ TEST_F(AsyncEnd2endTest, SimpleClientStreaming) {
service_.RequestRequestStream(&srv_ctx, &srv_stream, cq_.get(), cq_.get(),
tag(2));
- Verifier().Expect(2, true).Expect(1, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(2, true).Expect(1, true).Verify(cq_.get());
cli_stream->Write(send_request, tag(3));
- Verifier().Expect(3, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(3, true).Verify(cq_.get());
srv_stream.Read(&recv_request, tag(4));
- Verifier().Expect(4, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
cli_stream->Write(send_request, tag(5));
- Verifier().Expect(5, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(5, true).Verify(cq_.get());
srv_stream.Read(&recv_request, tag(6));
- Verifier().Expect(6, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(6, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
cli_stream->WritesDone(tag(7));
- Verifier().Expect(7, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(7, true).Verify(cq_.get());
srv_stream.Read(&recv_request, tag(8));
- Verifier().Expect(8, false).Verify(cq_.get());
+ Verifier(GetParam()).Expect(8, false).Verify(cq_.get());
send_response.set_message(recv_request.message());
srv_stream.Finish(send_response, Status::OK, tag(9));
- Verifier().Expect(9, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(9, true).Verify(cq_.get());
cli_stream->Finish(&recv_status, tag(10));
- Verifier().Expect(10, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(10, true).Verify(cq_.get());
EXPECT_EQ(send_response.message(), recv_response.message());
EXPECT_TRUE(recv_status.ok());
}
// One ping, two pongs.
-TEST_F(AsyncEnd2endTest, SimpleServerStreaming) {
+TEST_P(AsyncEnd2endTest, SimpleServerStreaming) {
ResetStub();
EchoRequest send_request;
@@ -309,38 +375,38 @@ TEST_F(AsyncEnd2endTest, SimpleServerStreaming) {
service_.RequestResponseStream(&srv_ctx, &recv_request, &srv_stream,
cq_.get(), cq_.get(), tag(2));
- Verifier().Expect(1, true).Expect(2, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(1, true).Expect(2, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
send_response.set_message(recv_request.message());
srv_stream.Write(send_response, tag(3));
- Verifier().Expect(3, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(3, true).Verify(cq_.get());
cli_stream->Read(&recv_response, tag(4));
- Verifier().Expect(4, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, true).Verify(cq_.get());
EXPECT_EQ(send_response.message(), recv_response.message());
srv_stream.Write(send_response, tag(5));
- Verifier().Expect(5, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(5, true).Verify(cq_.get());
cli_stream->Read(&recv_response, tag(6));
- Verifier().Expect(6, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(6, true).Verify(cq_.get());
EXPECT_EQ(send_response.message(), recv_response.message());
srv_stream.Finish(Status::OK, tag(7));
- Verifier().Expect(7, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(7, true).Verify(cq_.get());
cli_stream->Read(&recv_response, tag(8));
- Verifier().Expect(8, false).Verify(cq_.get());
+ Verifier(GetParam()).Expect(8, false).Verify(cq_.get());
cli_stream->Finish(&recv_status, tag(9));
- Verifier().Expect(9, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(9, true).Verify(cq_.get());
EXPECT_TRUE(recv_status.ok());
}
// One ping, one pong.
-TEST_F(AsyncEnd2endTest, SimpleBidiStreaming) {
+TEST_P(AsyncEnd2endTest, SimpleBidiStreaming) {
ResetStub();
EchoRequest send_request;
@@ -359,40 +425,40 @@ TEST_F(AsyncEnd2endTest, SimpleBidiStreaming) {
service_.RequestBidiStream(&srv_ctx, &srv_stream, cq_.get(), cq_.get(),
tag(2));
- Verifier().Expect(1, true).Expect(2, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(1, true).Expect(2, true).Verify(cq_.get());
cli_stream->Write(send_request, tag(3));
- Verifier().Expect(3, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(3, true).Verify(cq_.get());
srv_stream.Read(&recv_request, tag(4));
- Verifier().Expect(4, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
send_response.set_message(recv_request.message());
srv_stream.Write(send_response, tag(5));
- Verifier().Expect(5, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(5, true).Verify(cq_.get());
cli_stream->Read(&recv_response, tag(6));
- Verifier().Expect(6, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(6, true).Verify(cq_.get());
EXPECT_EQ(send_response.message(), recv_response.message());
cli_stream->WritesDone(tag(7));
- Verifier().Expect(7, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(7, true).Verify(cq_.get());
srv_stream.Read(&recv_request, tag(8));
- Verifier().Expect(8, false).Verify(cq_.get());
+ Verifier(GetParam()).Expect(8, false).Verify(cq_.get());
srv_stream.Finish(Status::OK, tag(9));
- Verifier().Expect(9, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(9, true).Verify(cq_.get());
cli_stream->Finish(&recv_status, tag(10));
- Verifier().Expect(10, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(10, true).Verify(cq_.get());
EXPECT_TRUE(recv_status.ok());
}
// Metadata tests
-TEST_F(AsyncEnd2endTest, ClientInitialMetadataRpc) {
+TEST_P(AsyncEnd2endTest, ClientInitialMetadataRpc) {
ResetStub();
EchoRequest send_request;
@@ -416,26 +482,28 @@ TEST_F(AsyncEnd2endTest, ClientInitialMetadataRpc) {
service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(),
cq_.get(), tag(2));
- Verifier().Expect(2, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(2, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
auto client_initial_metadata = srv_ctx.client_metadata();
- EXPECT_EQ(meta1.second, client_initial_metadata.find(meta1.first)->second);
- EXPECT_EQ(meta2.second, client_initial_metadata.find(meta2.first)->second);
+ EXPECT_EQ(meta1.second,
+ ToString(client_initial_metadata.find(meta1.first)->second));
+ EXPECT_EQ(meta2.second,
+ ToString(client_initial_metadata.find(meta2.first)->second));
EXPECT_GE(client_initial_metadata.size(), static_cast<size_t>(2));
send_response.set_message(recv_request.message());
response_writer.Finish(send_response, Status::OK, tag(3));
- Verifier().Expect(3, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(3, true).Verify(cq_.get());
response_reader->Finish(&recv_response, &recv_status, tag(4));
- Verifier().Expect(4, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, true).Verify(cq_.get());
EXPECT_EQ(send_response.message(), recv_response.message());
EXPECT_TRUE(recv_status.ok());
}
-TEST_F(AsyncEnd2endTest, ServerInitialMetadataRpc) {
+TEST_P(AsyncEnd2endTest, ServerInitialMetadataRpc) {
ResetStub();
EchoRequest send_request;
@@ -457,32 +525,34 @@ TEST_F(AsyncEnd2endTest, ServerInitialMetadataRpc) {
service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(),
cq_.get(), tag(2));
- Verifier().Expect(2, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(2, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
srv_ctx.AddInitialMetadata(meta1.first, meta1.second);
srv_ctx.AddInitialMetadata(meta2.first, meta2.second);
response_writer.SendInitialMetadata(tag(3));
- Verifier().Expect(3, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(3, true).Verify(cq_.get());
response_reader->ReadInitialMetadata(tag(4));
- Verifier().Expect(4, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, true).Verify(cq_.get());
auto server_initial_metadata = cli_ctx.GetServerInitialMetadata();
- EXPECT_EQ(meta1.second, server_initial_metadata.find(meta1.first)->second);
- EXPECT_EQ(meta2.second, server_initial_metadata.find(meta2.first)->second);
+ EXPECT_EQ(meta1.second,
+ ToString(server_initial_metadata.find(meta1.first)->second));
+ EXPECT_EQ(meta2.second,
+ ToString(server_initial_metadata.find(meta2.first)->second));
EXPECT_EQ(static_cast<size_t>(2), server_initial_metadata.size());
send_response.set_message(recv_request.message());
response_writer.Finish(send_response, Status::OK, tag(5));
- Verifier().Expect(5, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(5, true).Verify(cq_.get());
response_reader->Finish(&recv_response, &recv_status, tag(6));
- Verifier().Expect(6, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(6, true).Verify(cq_.get());
EXPECT_EQ(send_response.message(), recv_response.message());
EXPECT_TRUE(recv_status.ok());
}
-TEST_F(AsyncEnd2endTest, ServerTrailingMetadataRpc) {
+TEST_P(AsyncEnd2endTest, ServerTrailingMetadataRpc) {
ResetStub();
EchoRequest send_request;
@@ -504,29 +574,31 @@ TEST_F(AsyncEnd2endTest, ServerTrailingMetadataRpc) {
service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(),
cq_.get(), tag(2));
- Verifier().Expect(2, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(2, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
response_writer.SendInitialMetadata(tag(3));
- Verifier().Expect(3, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(3, true).Verify(cq_.get());
send_response.set_message(recv_request.message());
srv_ctx.AddTrailingMetadata(meta1.first, meta1.second);
srv_ctx.AddTrailingMetadata(meta2.first, meta2.second);
response_writer.Finish(send_response, Status::OK, tag(4));
- Verifier().Expect(4, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, true).Verify(cq_.get());
response_reader->Finish(&recv_response, &recv_status, tag(5));
- Verifier().Expect(5, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(5, true).Verify(cq_.get());
EXPECT_EQ(send_response.message(), recv_response.message());
EXPECT_TRUE(recv_status.ok());
auto server_trailing_metadata = cli_ctx.GetServerTrailingMetadata();
- EXPECT_EQ(meta1.second, server_trailing_metadata.find(meta1.first)->second);
- EXPECT_EQ(meta2.second, server_trailing_metadata.find(meta2.first)->second);
+ EXPECT_EQ(meta1.second,
+ ToString(server_trailing_metadata.find(meta1.first)->second));
+ EXPECT_EQ(meta2.second,
+ ToString(server_trailing_metadata.find(meta2.first)->second));
EXPECT_EQ(static_cast<size_t>(2), server_trailing_metadata.size());
}
-TEST_F(AsyncEnd2endTest, MetadataRpc) {
+TEST_P(AsyncEnd2endTest, MetadataRpc) {
ResetStub();
EchoRequest send_request;
@@ -563,22 +635,26 @@ TEST_F(AsyncEnd2endTest, MetadataRpc) {
service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(),
cq_.get(), tag(2));
- Verifier().Expect(2, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(2, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
auto client_initial_metadata = srv_ctx.client_metadata();
- EXPECT_EQ(meta1.second, client_initial_metadata.find(meta1.first)->second);
- EXPECT_EQ(meta2.second, client_initial_metadata.find(meta2.first)->second);
+ EXPECT_EQ(meta1.second,
+ ToString(client_initial_metadata.find(meta1.first)->second));
+ EXPECT_EQ(meta2.second,
+ ToString(client_initial_metadata.find(meta2.first)->second));
EXPECT_GE(client_initial_metadata.size(), static_cast<size_t>(2));
srv_ctx.AddInitialMetadata(meta3.first, meta3.second);
srv_ctx.AddInitialMetadata(meta4.first, meta4.second);
response_writer.SendInitialMetadata(tag(3));
- Verifier().Expect(3, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(3, true).Verify(cq_.get());
response_reader->ReadInitialMetadata(tag(4));
- Verifier().Expect(4, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, true).Verify(cq_.get());
auto server_initial_metadata = cli_ctx.GetServerInitialMetadata();
- EXPECT_EQ(meta3.second, server_initial_metadata.find(meta3.first)->second);
- EXPECT_EQ(meta4.second, server_initial_metadata.find(meta4.first)->second);
+ EXPECT_EQ(meta3.second,
+ ToString(server_initial_metadata.find(meta3.first)->second));
+ EXPECT_EQ(meta4.second,
+ ToString(server_initial_metadata.find(meta4.first)->second));
EXPECT_GE(server_initial_metadata.size(), static_cast<size_t>(2));
send_response.set_message(recv_request.message());
@@ -586,20 +662,22 @@ TEST_F(AsyncEnd2endTest, MetadataRpc) {
srv_ctx.AddTrailingMetadata(meta6.first, meta6.second);
response_writer.Finish(send_response, Status::OK, tag(5));
- Verifier().Expect(5, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(5, true).Verify(cq_.get());
response_reader->Finish(&recv_response, &recv_status, tag(6));
- Verifier().Expect(6, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(6, true).Verify(cq_.get());
EXPECT_EQ(send_response.message(), recv_response.message());
EXPECT_TRUE(recv_status.ok());
auto server_trailing_metadata = cli_ctx.GetServerTrailingMetadata();
- EXPECT_EQ(meta5.second, server_trailing_metadata.find(meta5.first)->second);
- EXPECT_EQ(meta6.second, server_trailing_metadata.find(meta6.first)->second);
+ EXPECT_EQ(meta5.second,
+ ToString(server_trailing_metadata.find(meta5.first)->second));
+ EXPECT_EQ(meta6.second,
+ ToString(server_trailing_metadata.find(meta6.first)->second));
EXPECT_GE(server_trailing_metadata.size(), static_cast<size_t>(2));
}
// Server uses AsyncNotifyWhenDone API to check for cancellation
-TEST_F(AsyncEnd2endTest, ServerCheckCancellation) {
+TEST_P(AsyncEnd2endTest, ServerCheckCancellation) {
ResetStub();
EchoRequest send_request;
@@ -620,21 +698,21 @@ TEST_F(AsyncEnd2endTest, ServerCheckCancellation) {
service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(),
cq_.get(), tag(2));
- Verifier().Expect(2, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(2, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
cli_ctx.TryCancel();
- Verifier().Expect(5, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(5, true).Verify(cq_.get());
EXPECT_TRUE(srv_ctx.IsCancelled());
response_reader->Finish(&recv_response, &recv_status, tag(4));
- Verifier().Expect(4, false).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, false).Verify(cq_.get());
EXPECT_EQ(StatusCode::CANCELLED, recv_status.error_code());
}
// Server uses AsyncNotifyWhenDone API to check for normal finish
-TEST_F(AsyncEnd2endTest, ServerCheckDone) {
+TEST_P(AsyncEnd2endTest, ServerCheckDone) {
ResetStub();
EchoRequest send_request;
@@ -655,25 +733,25 @@ TEST_F(AsyncEnd2endTest, ServerCheckDone) {
service_.RequestEcho(&srv_ctx, &recv_request, &response_writer, cq_.get(),
cq_.get(), tag(2));
- Verifier().Expect(2, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(2, true).Verify(cq_.get());
EXPECT_EQ(send_request.message(), recv_request.message());
send_response.set_message(recv_request.message());
response_writer.Finish(send_response, Status::OK, tag(3));
- Verifier().Expect(3, true).Verify(cq_.get());
- Verifier().Expect(5, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(3, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(5, true).Verify(cq_.get());
EXPECT_FALSE(srv_ctx.IsCancelled());
response_reader->Finish(&recv_response, &recv_status, tag(4));
- Verifier().Expect(4, true).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, true).Verify(cq_.get());
EXPECT_EQ(send_response.message(), recv_response.message());
EXPECT_TRUE(recv_status.ok());
}
-TEST_F(AsyncEnd2endTest, UnimplementedRpc) {
- std::shared_ptr<ChannelInterface> channel = CreateChannel(
- server_address_.str(), InsecureCredentials(), ChannelArguments());
+TEST_P(AsyncEnd2endTest, UnimplementedRpc) {
+ std::shared_ptr<Channel> channel =
+ CreateChannel(server_address_.str(), InsecureCredentials());
std::unique_ptr<grpc::cpp::test::util::UnimplementedService::Stub> stub;
stub =
std::move(grpc::cpp::test::util::UnimplementedService::NewStub(channel));
@@ -687,12 +765,15 @@ TEST_F(AsyncEnd2endTest, UnimplementedRpc) {
stub->AsyncUnimplemented(&cli_ctx, send_request, cq_.get()));
response_reader->Finish(&recv_response, &recv_status, tag(4));
- Verifier().Expect(4, false).Verify(cq_.get());
+ Verifier(GetParam()).Expect(4, false).Verify(cq_.get());
EXPECT_EQ(StatusCode::UNIMPLEMENTED, recv_status.error_code());
EXPECT_EQ("", recv_status.error_message());
}
+INSTANTIATE_TEST_CASE_P(AsyncEnd2end, AsyncEnd2endTest,
+ ::testing::Values(false, true));
+
} // namespace
} // namespace testing
} // namespace grpc
diff --git a/test/cpp/end2end/client_crash_test.cc b/test/cpp/end2end/client_crash_test.cc
index 1c2a5c3a36..3a6e55216a 100644
--- a/test/cpp/end2end/client_crash_test.cc
+++ b/test/cpp/end2end/client_crash_test.cc
@@ -31,12 +31,10 @@
*
*/
-#include "test/core/util/port.h"
-#include "test/core/util/test_config.h"
-#include "test/cpp/util/echo_duplicate.grpc.pb.h"
-#include "test/cpp/util/echo.grpc.pb.h"
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc/grpc.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/time.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
@@ -44,15 +42,12 @@
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
-#include <grpc++/time.h>
#include <gtest/gtest.h>
-#include <grpc/grpc.h>
-#include <grpc/support/thd.h>
-#include <grpc/support/time.h>
-
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+#include "test/cpp/util/echo_duplicate.grpc.pb.h"
+#include "test/cpp/util/echo.grpc.pb.h"
#include "test/cpp/util/subprocess.h"
using grpc::cpp::test::util::EchoRequest;
@@ -81,7 +76,7 @@ class CrashTest : public ::testing::Test {
}));
GPR_ASSERT(server_);
return grpc::cpp::test::util::TestService::NewStub(
- CreateChannel(addr, InsecureCredentials(), ChannelArguments()));
+ CreateChannel(addr, InsecureCredentials()));
}
void KillServer() { server_.reset(); }
diff --git a/test/cpp/end2end/client_crash_test_server.cc b/test/cpp/end2end/client_crash_test_server.cc
index 3fd8c2c2f9..79a7832874 100644
--- a/test/cpp/end2end/client_crash_test_server.cc
+++ b/test/cpp/end2end/client_crash_test_server.cc
@@ -40,7 +40,6 @@
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
#include "test/cpp/util/echo.grpc.pb.h"
DEFINE_string(address, "", "Address to bind to");
diff --git a/test/cpp/end2end/end2end_test.cc b/test/cpp/end2end/end2end_test.cc
index 350b10726f..37a6e693e6 100644
--- a/test/cpp/end2end/end2end_test.cc
+++ b/test/cpp/end2end/end2end_test.cc
@@ -34,30 +34,26 @@
#include <mutex>
#include <thread>
-#include "src/core/security/credentials.h"
-#include "test/core/end2end/data/ssl_test_data.h"
-#include "test/core/util/port.h"
-#include "test/core/util/test_config.h"
-#include "test/cpp/util/echo_duplicate.grpc.pb.h"
-#include "test/cpp/util/echo.grpc.pb.h"
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc/grpc.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/time.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
-#include <grpc++/dynamic_thread_pool.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
-#include <grpc++/time.h>
#include <gtest/gtest.h>
-#include <grpc/grpc.h>
-#include <grpc/support/thd.h>
-#include <grpc/support/time.h>
+#include "src/core/security/credentials.h"
+#include "test/core/end2end/data/ssl_test_data.h"
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+#include "test/cpp/util/echo_duplicate.grpc.pb.h"
+#include "test/cpp/util/echo.grpc.pb.h"
+#include "test/cpp/util/string_ref_helper.h"
using grpc::cpp::test::util::EchoRequest;
using grpc::cpp::test::util::EchoResponse;
@@ -85,10 +81,10 @@ void MaybeEchoDeadline(ServerContext* context, const EchoRequest* request,
void CheckServerAuthContext(const ServerContext* context) {
std::shared_ptr<const AuthContext> auth_ctx = context->auth_context();
- std::vector<grpc::string> ssl =
+ std::vector<grpc::string_ref> ssl =
auth_ctx->FindPropertyValues("transport_security_type");
EXPECT_EQ(1u, ssl.size());
- EXPECT_EQ("ssl", ssl[0]);
+ EXPECT_EQ("ssl", ToString(ssl[0]));
EXPECT_TRUE(auth_ctx->GetPeerIdentityPropertyName().empty());
EXPECT_TRUE(auth_ctx->GetPeerIdentity().empty());
}
@@ -106,7 +102,7 @@ bool CheckIsLocalhost(const grpc::string& addr) {
class Proxy : public ::grpc::cpp::test::util::TestService::Service {
public:
- Proxy(std::shared_ptr<ChannelInterface> channel)
+ Proxy(std::shared_ptr<Channel> channel)
: stub_(grpc::cpp::test::util::TestService::NewStub(channel)) {}
Status Echo(ServerContext* server_context, const EchoRequest* request,
@@ -157,12 +153,13 @@ class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service {
}
if (request->has_param() && request->param().echo_metadata()) {
- const std::multimap<grpc::string, grpc::string>& client_metadata =
+ const std::multimap<grpc::string_ref, grpc::string_ref>& client_metadata =
context->client_metadata();
- for (std::multimap<grpc::string, grpc::string>::const_iterator iter =
- client_metadata.begin();
+ for (std::multimap<grpc::string_ref, grpc::string_ref>::const_iterator
+ iter = client_metadata.begin();
iter != client_metadata.end(); ++iter) {
- context->AddTrailingMetadata((*iter).first, (*iter).second);
+ context->AddTrailingMetadata(ToString(iter->first),
+ ToString(iter->second));
}
}
if (request->has_param() && request->param().check_auth_context()) {
@@ -187,12 +184,12 @@ class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service {
EchoRequest request;
response->set_message("");
int cancel_after_reads = 0;
- const std::multimap<grpc::string, grpc::string> client_initial_metadata =
- context->client_metadata();
+ const std::multimap<grpc::string_ref, grpc::string_ref>&
+ client_initial_metadata = context->client_metadata();
if (client_initial_metadata.find(kServerCancelAfterReads) !=
client_initial_metadata.end()) {
- std::istringstream iss(
- client_initial_metadata.find(kServerCancelAfterReads)->second);
+ std::istringstream iss(ToString(
+ client_initial_metadata.find(kServerCancelAfterReads)->second));
iss >> cancel_after_reads;
gpr_log(GPR_INFO, "cancel_after_reads %d", cancel_after_reads);
}
@@ -262,7 +259,7 @@ class TestServiceImplDupPkg
class End2endTest : public ::testing::TestWithParam<bool> {
protected:
End2endTest()
- : kMaxMessageSize_(8192), special_service_("special"), thread_pool_(2) {}
+ : kMaxMessageSize_(8192), special_service_("special") {}
void SetUp() GRPC_OVERRIDE {
int port = grpc_pick_unused_port_or_die();
@@ -281,7 +278,6 @@ class End2endTest : public ::testing::TestWithParam<bool> {
builder.SetMaxMessageSize(
kMaxMessageSize_); // For testing max message size.
builder.RegisterService(&dup_pkg_service_);
- builder.SetThreadPool(&thread_pool_);
server_ = builder.BuildAndStart();
}
@@ -295,8 +291,8 @@ class End2endTest : public ::testing::TestWithParam<bool> {
ChannelArguments args;
args.SetSslTargetNameOverride("foo.test.google.fr");
args.SetString(GRPC_ARG_SECONDARY_USER_AGENT_STRING, "end2end_test");
- channel_ =
- CreateChannel(server_address_.str(), SslCredentials(ssl_opts), args);
+ channel_ = CreateCustomChannel(server_address_.str(),
+ SslCredentials(ssl_opts), args);
}
void ResetStub(bool use_proxy) {
@@ -309,17 +305,15 @@ class End2endTest : public ::testing::TestWithParam<bool> {
ServerBuilder builder;
builder.AddListeningPort(proxyaddr.str(), InsecureServerCredentials());
builder.RegisterService(proxy_service_.get());
- builder.SetThreadPool(&thread_pool_);
proxy_server_ = builder.BuildAndStart();
- channel_ = CreateChannel(proxyaddr.str(), InsecureCredentials(),
- ChannelArguments());
+ channel_ = CreateChannel(proxyaddr.str(), InsecureCredentials());
}
stub_ = std::move(grpc::cpp::test::util::TestService::NewStub(channel_));
}
- std::shared_ptr<ChannelInterface> channel_;
+ std::shared_ptr<Channel> channel_;
std::unique_ptr<grpc::cpp::test::util::TestService::Stub> stub_;
std::unique_ptr<Server> server_;
std::unique_ptr<Server> proxy_server_;
@@ -329,7 +323,6 @@ class End2endTest : public ::testing::TestWithParam<bool> {
TestServiceImpl service_;
TestServiceImpl special_service_;
TestServiceImplDupPkg dup_pkg_service_;
- DynamicThreadPool thread_pool_;
};
static void SendRpc(grpc::cpp::test::util::TestService::Stub* stub,
@@ -571,8 +564,8 @@ TEST_F(End2endTest, DiffPackageServices) {
TEST_F(End2endTest, BadCredentials) {
std::shared_ptr<Credentials> bad_creds = ServiceAccountCredentials("", "", 1);
EXPECT_EQ(static_cast<Credentials*>(nullptr), bad_creds.get());
- std::shared_ptr<ChannelInterface> channel =
- CreateChannel(server_address_.str(), bad_creds, ChannelArguments());
+ std::shared_ptr<Channel> channel =
+ CreateChannel(server_address_.str(), bad_creds);
std::unique_ptr<grpc::cpp::test::util::TestService::Stub> stub(
grpc::cpp::test::util::TestService::NewStub(channel));
EchoRequest request;
@@ -729,14 +722,15 @@ TEST_F(End2endTest, RpcMaxMessageSize) {
EXPECT_FALSE(s.ok());
}
-bool MetadataContains(const std::multimap<grpc::string, grpc::string>& metadata,
- const grpc::string& key, const grpc::string& value) {
+bool MetadataContains(
+ const std::multimap<grpc::string_ref, grpc::string_ref>& metadata,
+ const grpc::string& key, const grpc::string& value) {
int count = 0;
- for (std::multimap<grpc::string, grpc::string>::const_iterator iter =
+ for (std::multimap<grpc::string_ref, grpc::string_ref>::const_iterator iter =
metadata.begin();
iter != metadata.end(); ++iter) {
- if ((*iter).first == key && (*iter).second == value) {
+ if (ToString(iter->first) == key && ToString(iter->second) == value) {
count++;
}
}
@@ -845,16 +839,17 @@ TEST_F(End2endTest, ClientAuthContext) {
EXPECT_TRUE(s.ok());
std::shared_ptr<const AuthContext> auth_ctx = context.auth_context();
- std::vector<grpc::string> ssl =
+ std::vector<grpc::string_ref> ssl =
auth_ctx->FindPropertyValues("transport_security_type");
EXPECT_EQ(1u, ssl.size());
- EXPECT_EQ("ssl", ssl[0]);
+ EXPECT_EQ("ssl", ToString(ssl[0]));
EXPECT_EQ("x509_subject_alternative_name",
auth_ctx->GetPeerIdentityPropertyName());
EXPECT_EQ(3u, auth_ctx->GetPeerIdentity().size());
- EXPECT_EQ("*.test.google.fr", auth_ctx->GetPeerIdentity()[0]);
- EXPECT_EQ("waterzooi.test.google.be", auth_ctx->GetPeerIdentity()[1]);
- EXPECT_EQ("*.test.youtube.com", auth_ctx->GetPeerIdentity()[2]);
+ EXPECT_EQ("*.test.google.fr", ToString(auth_ctx->GetPeerIdentity()[0]));
+ EXPECT_EQ("waterzooi.test.google.be",
+ ToString(auth_ctx->GetPeerIdentity()[1]));
+ EXPECT_EQ("*.test.youtube.com", ToString(auth_ctx->GetPeerIdentity()[2]));
}
// Make the response larger than the flow control window.
diff --git a/test/cpp/end2end/generic_end2end_test.cc b/test/cpp/end2end/generic_end2end_test.cc
index 3120cec938..7acbc711fb 100644
--- a/test/cpp/end2end/generic_end2end_test.cc
+++ b/test/cpp/end2end/generic_end2end_test.cc
@@ -33,32 +33,26 @@
#include <memory>
-#include "test/core/util/port.h"
-#include "test/core/util/test_config.h"
-#include "test/cpp/util/echo.grpc.pb.h"
+#include <grpc/grpc.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/time.h>
#include <grpc++/impl/proto_utils.h>
-#include <grpc++/async_generic_service.h>
-#include <grpc++/async_unary_call.h>
-#include <grpc++/byte_buffer.h>
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
-#include <grpc++/generic_stub.h>
+#include <grpc++/generic/async_generic_service.h>
+#include <grpc++/generic/generic_stub.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/slice.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
-#include <grpc++/time.h>
+#include <grpc++/support/slice.h>
#include <gtest/gtest.h>
-#include <grpc/grpc.h>
-#include <grpc/support/thd.h>
-#include <grpc/support/time.h>
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+#include "test/cpp/util/echo.grpc.pb.h"
using grpc::cpp::test::util::EchoRequest;
using grpc::cpp::test::util::EchoResponse;
@@ -127,8 +121,8 @@ class GenericEnd2endTest : public ::testing::Test {
}
void ResetStub() {
- std::shared_ptr<ChannelInterface> channel = CreateChannel(
- server_address_.str(), InsecureCredentials(), ChannelArguments());
+ std::shared_ptr<Channel> channel =
+ CreateChannel(server_address_.str(), InsecureCredentials());
generic_stub_.reset(new GenericStub(channel));
}
@@ -166,7 +160,7 @@ class GenericEnd2endTest : public ::testing::Test {
srv_cq_.get(), tag(4));
verify_ok(srv_cq_.get(), 4, true);
- EXPECT_EQ(server_host_, srv_ctx.host());
+ EXPECT_EQ(server_host_, srv_ctx.host().substr(0, server_host_.length()));
EXPECT_EQ(kMethodName, srv_ctx.method());
ByteBuffer recv_buffer;
stream.Read(&recv_buffer, tag(5));
@@ -239,7 +233,7 @@ TEST_F(GenericEnd2endTest, SimpleBidiStreaming) {
srv_cq_.get(), tag(2));
verify_ok(srv_cq_.get(), 2, true);
- EXPECT_EQ(server_host_, srv_ctx.host());
+ EXPECT_EQ(server_host_, srv_ctx.host().substr(0, server_host_.length()));
EXPECT_EQ(kMethodName, srv_ctx.method());
std::unique_ptr<ByteBuffer> send_buffer =
diff --git a/test/cpp/end2end/mock_test.cc b/test/cpp/end2end/mock_test.cc
index 32130e24e9..077d21aa72 100644
--- a/test/cpp/end2end/mock_test.cc
+++ b/test/cpp/end2end/mock_test.cc
@@ -33,28 +33,23 @@
#include <thread>
-#include "test/core/util/port.h"
-#include "test/core/util/test_config.h"
-#include "test/cpp/util/echo_duplicate.grpc.pb.h"
-#include "test/cpp/util/echo.grpc.pb.h"
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc/grpc.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/time.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
-#include <grpc++/dynamic_thread_pool.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
-#include <grpc++/time.h>
#include <gtest/gtest.h>
-#include <grpc/grpc.h>
-#include <grpc/support/thd.h>
-#include <grpc/support/time.h>
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+#include "test/cpp/util/echo_duplicate.grpc.pb.h"
+#include "test/cpp/util/echo.grpc.pb.h"
using grpc::cpp::test::util::EchoRequest;
using grpc::cpp::test::util::EchoResponse;
@@ -234,7 +229,7 @@ class TestServiceImpl : public TestService::Service {
class MockTest : public ::testing::Test {
protected:
- MockTest() : thread_pool_(2) {}
+ MockTest() {}
void SetUp() GRPC_OVERRIDE {
int port = grpc_pick_unused_port_or_die();
@@ -244,15 +239,14 @@ class MockTest : public ::testing::Test {
builder.AddListeningPort(server_address_.str(),
InsecureServerCredentials());
builder.RegisterService(&service_);
- builder.SetThreadPool(&thread_pool_);
server_ = builder.BuildAndStart();
}
void TearDown() GRPC_OVERRIDE { server_->Shutdown(); }
void ResetStub() {
- std::shared_ptr<ChannelInterface> channel = CreateChannel(
- server_address_.str(), InsecureCredentials(), ChannelArguments());
+ std::shared_ptr<Channel> channel =
+ CreateChannel(server_address_.str(), InsecureCredentials());
stub_ = std::move(grpc::cpp::test::util::TestService::NewStub(channel));
}
@@ -260,7 +254,6 @@ class MockTest : public ::testing::Test {
std::unique_ptr<Server> server_;
std::ostringstream server_address_;
TestServiceImpl service_;
- DynamicThreadPool thread_pool_;
};
// Do one real rpc and one mocked one
diff --git a/test/cpp/end2end/server_crash_test.cc b/test/cpp/end2end/server_crash_test.cc
index 5c7bb4e653..1a0f04e22b 100644
--- a/test/cpp/end2end/server_crash_test.cc
+++ b/test/cpp/end2end/server_crash_test.cc
@@ -31,12 +31,10 @@
*
*/
-#include "test/core/util/port.h"
-#include "test/core/util/test_config.h"
-#include "test/cpp/util/echo_duplicate.grpc.pb.h"
-#include "test/cpp/util/echo.grpc.pb.h"
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc/grpc.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/time.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
@@ -44,15 +42,12 @@
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
-#include <grpc++/time.h>
#include <gtest/gtest.h>
-#include <grpc/grpc.h>
-#include <grpc/support/thd.h>
-#include <grpc/support/time.h>
-
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+#include "test/cpp/util/echo.grpc.pb.h"
+#include "test/cpp/util/echo_duplicate.grpc.pb.h"
#include "test/cpp/util/subprocess.h"
using grpc::cpp::test::util::EchoRequest;
diff --git a/test/cpp/end2end/server_crash_test_client.cc b/test/cpp/end2end/server_crash_test_client.cc
index 1da4f05c8d..6ff42fcb30 100644
--- a/test/cpp/end2end/server_crash_test_client.cc
+++ b/test/cpp/end2end/server_crash_test_client.cc
@@ -37,12 +37,10 @@
#include <string>
#include <gflags/gflags.h>
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
-#include <grpc++/status.h>
#include "test/cpp/util/echo.grpc.pb.h"
DEFINE_string(address, "", "Address to connect to");
@@ -60,8 +58,8 @@ using namespace gflags;
int main(int argc, char** argv) {
ParseCommandLineFlags(&argc, &argv, true);
- auto stub = grpc::cpp::test::util::TestService::NewStub(grpc::CreateChannel(
- FLAGS_address, grpc::InsecureCredentials(), grpc::ChannelArguments()));
+ auto stub = grpc::cpp::test::util::TestService::NewStub(
+ grpc::CreateChannel(FLAGS_address, grpc::InsecureCredentials()));
EchoRequest request;
EchoResponse response;
diff --git a/test/cpp/end2end/shutdown_test.cc b/test/cpp/end2end/shutdown_test.cc
index fccbb13030..59fec6ad40 100644
--- a/test/cpp/end2end/shutdown_test.cc
+++ b/test/cpp/end2end/shutdown_test.cc
@@ -31,15 +31,11 @@
*
*/
-#include "test/core/util/test_config.h"
-
#include <thread>
-#include "test/core/util/port.h"
-#include "test/cpp/util/echo.grpc.pb.h"
-#include "src/core/support/env.h"
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc/grpc.h>
+#include <grpc/support/sync.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
@@ -47,10 +43,12 @@
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
#include <gtest/gtest.h>
-#include <grpc/grpc.h>
-#include <grpc/support/sync.h>
+
+#include "src/core/support/env.h"
+#include "test/core/util/test_config.h"
+#include "test/core/util/port.h"
+#include "test/cpp/util/echo.grpc.pb.h"
using grpc::cpp::test::util::EchoRequest;
using grpc::cpp::test::util::EchoResponse;
@@ -97,7 +95,7 @@ class ShutdownTest : public ::testing::Test {
void ResetStub() {
string target = "dns:localhost:" + to_string(port_);
- channel_ = CreateChannel(target, InsecureCredentials(), ChannelArguments());
+ channel_ = CreateChannel(target, InsecureCredentials());
stub_ = std::move(grpc::cpp::test::util::TestService::NewStub(channel_));
}
@@ -118,7 +116,7 @@ class ShutdownTest : public ::testing::Test {
}
protected:
- std::shared_ptr<ChannelInterface> channel_;
+ std::shared_ptr<Channel> channel_;
std::unique_ptr<grpc::cpp::test::util::TestService::Stub> stub_;
std::unique_ptr<Server> server_;
bool shutdown_;
diff --git a/test/cpp/end2end/thread_stress_test.cc b/test/cpp/end2end/thread_stress_test.cc
index ff9c945c7c..2a16481972 100644
--- a/test/cpp/end2end/thread_stress_test.cc
+++ b/test/cpp/end2end/thread_stress_test.cc
@@ -34,28 +34,23 @@
#include <mutex>
#include <thread>
-#include "test/core/util/port.h"
-#include "test/core/util/test_config.h"
-#include "test/cpp/util/echo_duplicate.grpc.pb.h"
-#include "test/cpp/util/echo.grpc.pb.h"
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc/grpc.h>
+#include <grpc/support/thd.h>
+#include <grpc/support/time.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
-#include <grpc++/dynamic_thread_pool.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
-#include <grpc++/time.h>
#include <gtest/gtest.h>
-#include <grpc/grpc.h>
-#include <grpc/support/thd.h>
-#include <grpc/support/time.h>
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+#include "test/cpp/util/echo_duplicate.grpc.pb.h"
+#include "test/cpp/util/echo.grpc.pb.h"
using grpc::cpp::test::util::EchoRequest;
using grpc::cpp::test::util::EchoResponse;
@@ -177,7 +172,7 @@ class TestServiceImplDupPkg
class End2endTest : public ::testing::Test {
protected:
- End2endTest() : kMaxMessageSize_(8192), thread_pool_(2) {}
+ End2endTest() : kMaxMessageSize_(8192) {}
void SetUp() GRPC_OVERRIDE {
int port = grpc_pick_unused_port_or_die();
@@ -190,15 +185,14 @@ class End2endTest : public ::testing::Test {
builder.SetMaxMessageSize(
kMaxMessageSize_); // For testing max message size.
builder.RegisterService(&dup_pkg_service_);
- builder.SetThreadPool(&thread_pool_);
server_ = builder.BuildAndStart();
}
void TearDown() GRPC_OVERRIDE { server_->Shutdown(); }
void ResetStub() {
- std::shared_ptr<ChannelInterface> channel = CreateChannel(
- server_address_.str(), InsecureCredentials(), ChannelArguments());
+ std::shared_ptr<Channel> channel =
+ CreateChannel(server_address_.str(), InsecureCredentials());
stub_ = std::move(grpc::cpp::test::util::TestService::NewStub(channel));
}
@@ -208,7 +202,6 @@ class End2endTest : public ::testing::Test {
const int kMaxMessageSize_;
TestServiceImpl service_;
TestServiceImplDupPkg dup_pkg_service_;
- DynamicThreadPool thread_pool_;
};
static void SendRpc(grpc::cpp::test::util::TestService::Stub* stub,
diff --git a/test/cpp/end2end/zookeeper_test.cc b/test/cpp/end2end/zookeeper_test.cc
index f5eba66cb2..931541ca34 100644
--- a/test/cpp/end2end/zookeeper_test.cc
+++ b/test/cpp/end2end/zookeeper_test.cc
@@ -31,12 +31,7 @@
*
*/
-#include "test/core/util/test_config.h"
-#include "test/core/util/port.h"
-#include "test/cpp/util/echo.grpc.pb.h"
-#include "src/core/support/env.h"
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
@@ -44,12 +39,16 @@
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
#include <gtest/gtest.h>
#include <grpc/grpc.h>
#include <grpc/grpc_zookeeper.h>
#include <zookeeper/zookeeper.h>
+#include "test/core/util/test_config.h"
+#include "test/core/util/port.h"
+#include "test/cpp/util/echo.grpc.pb.h"
+#include "src/core/support/env.h"
+
using grpc::cpp::test::util::EchoRequest;
using grpc::cpp::test::util::EchoResponse;
@@ -160,7 +159,7 @@ class ZookeeperTest : public ::testing::Test {
void ResetStub() {
string target = "zookeeper://" + zookeeper_address_ + "/test";
- channel_ = CreateChannel(target, InsecureCredentials(), ChannelArguments());
+ channel_ = CreateChannel(target, InsecureCredentials());
stub_ = std::move(grpc::cpp::test::util::TestService::NewStub(channel_));
}
@@ -170,7 +169,7 @@ class ZookeeperTest : public ::testing::Test {
return strs.str();
}
- std::shared_ptr<ChannelInterface> channel_;
+ std::shared_ptr<Channel> channel_;
std::unique_ptr<grpc::cpp::test::util::TestService::Stub> stub_;
std::unique_ptr<Server> server1_;
std::unique_ptr<Server> server2_;
diff --git a/test/cpp/interop/client.cc b/test/cpp/interop/client.cc
index 48143b2e53..cb5232153b 100644
--- a/test/cpp/interop/client.cc
+++ b/test/cpp/interop/client.cc
@@ -38,10 +38,9 @@
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include <gflags/gflags.h>
-#include <grpc++/channel_interface.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
+
#include "test/cpp/interop/client_helper.h"
#include "test/cpp/interop/interop_client.h"
#include "test/cpp/util/test_config.h"
diff --git a/test/cpp/interop/client_helper.cc b/test/cpp/interop/client_helper.cc
index da5627de95..abc14aeb98 100644
--- a/test/cpp/interop/client_helper.cc
+++ b/test/cpp/interop/client_helper.cc
@@ -33,27 +33,24 @@
#include "test/cpp/interop/client_helper.h"
+#include <unistd.h>
+
#include <fstream>
#include <memory>
#include <sstream>
-#include <unistd.h>
-
#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <gflags/gflags.h>
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc++/channel.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
-#include <grpc++/stream.h>
+#include "src/cpp/client/secure_credentials.h"
#include "test/core/security/oauth2_utils.h"
#include "test/cpp/util/create_test_channel.h"
-#include "src/cpp/client/secure_credentials.h"
-
DECLARE_bool(enable_ssl);
DECLARE_bool(use_prod_roots);
DECLARE_int32(server_port);
@@ -102,7 +99,7 @@ grpc::string GetOauth2AccessToken() {
return access_token;
}
-std::shared_ptr<ChannelInterface> CreateChannelForTestCase(
+std::shared_ptr<Channel> CreateChannelForTestCase(
const grpc::string& test_case) {
GPR_ASSERT(FLAGS_server_port);
const int host_port_buf_size = 1024;
diff --git a/test/cpp/interop/client_helper.h b/test/cpp/interop/client_helper.h
index edc69e90ac..92d5078f48 100644
--- a/test/cpp/interop/client_helper.h
+++ b/test/cpp/interop/client_helper.h
@@ -36,8 +36,7 @@
#include <memory>
-#include <grpc++/config.h>
-#include <grpc++/channel_interface.h>
+#include <grpc++/channel.h>
#include "src/core/surface/call.h"
@@ -48,7 +47,7 @@ grpc::string GetServiceAccountJsonKey();
grpc::string GetOauth2AccessToken();
-std::shared_ptr<ChannelInterface> CreateChannelForTestCase(
+std::shared_ptr<Channel> CreateChannelForTestCase(
const grpc::string& test_case);
class InteropClientContextInspector {
diff --git a/test/cpp/interop/interop_client.cc b/test/cpp/interop/interop_client.cc
index 5ed14d556a..ca13cdc53d 100644
--- a/test/cpp/interop/interop_client.cc
+++ b/test/cpp/interop/interop_client.cc
@@ -33,26 +33,24 @@
#include "test/cpp/interop/interop_client.h"
+#include <unistd.h>
+
#include <fstream>
#include <memory>
-#include <unistd.h>
-
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
#include <grpc/support/useful.h>
-#include <grpc++/channel_interface.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/credentials.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
+#include "src/core/transport/stream_op.h"
#include "test/cpp/interop/client_helper.h"
#include "test/proto/test.grpc.pb.h"
#include "test/proto/empty.grpc.pb.h"
#include "test/proto/messages.grpc.pb.h"
-#include "src/core/transport/stream_op.h"
namespace grpc {
namespace testing {
@@ -84,7 +82,7 @@ CompressionType GetInteropCompressionTypeFromCompressionAlgorithm(
}
} // namespace
-InteropClient::InteropClient(std::shared_ptr<ChannelInterface> channel)
+InteropClient::InteropClient(std::shared_ptr<Channel> channel)
: channel_(channel) {}
void InteropClient::AssertOkOrPrintErrorStatus(const Status& s) {
@@ -364,20 +362,37 @@ void InteropClient::DoResponseCompressedStreaming() {
request.set_response_type(payload_types[i]);
request.set_response_compression(compression_types[j]);
- for (unsigned int i = 0; i < response_stream_sizes.size(); ++i) {
+ for (size_t k = 0; k < response_stream_sizes.size(); ++k) {
ResponseParameters* response_parameter =
request.add_response_parameters();
- response_parameter->set_size(response_stream_sizes[i]);
+ response_parameter->set_size(response_stream_sizes[k]);
}
StreamingOutputCallResponse response;
std::unique_ptr<ClientReader<StreamingOutputCallResponse>> stream(
stub->StreamingOutputCall(&context, request));
- unsigned int i = 0;
+ size_t k = 0;
while (stream->Read(&response)) {
- GPR_ASSERT(response.payload().body() ==
- grpc::string(response_stream_sizes[i], '\0'));
+ // Payload related checks.
+ if (request.response_type() != PayloadType::RANDOM) {
+ GPR_ASSERT(response.payload().type() == request.response_type());
+ }
+ switch (response.payload().type()) {
+ case PayloadType::COMPRESSABLE:
+ GPR_ASSERT(response.payload().body() ==
+ grpc::string(response_stream_sizes[k], '\0'));
+ break;
+ case PayloadType::UNCOMPRESSABLE: {
+ std::ifstream rnd_file(kRandomFile);
+ GPR_ASSERT(rnd_file.good());
+ for (int n = 0; n < response_stream_sizes[k]; n++) {
+ GPR_ASSERT(response.payload().body()[n] == (char)rnd_file.get());
+ }
+ } break;
+ default:
+ GPR_ASSERT(false);
+ }
// Compression related checks.
GPR_ASSERT(request.response_compression() ==
@@ -393,10 +408,10 @@ void InteropClient::DoResponseCompressedStreaming() {
GRPC_WRITE_INTERNAL_COMPRESS);
}
- ++i;
+ ++k;
}
- GPR_ASSERT(response_stream_sizes.size() == i);
+ GPR_ASSERT(response_stream_sizes.size() == k);
Status s = stream->Finish();
AssertOkOrPrintErrorStatus(s);
diff --git a/test/cpp/interop/interop_client.h b/test/cpp/interop/interop_client.h
index d6fb9bff39..5e26cc82e6 100644
--- a/test/cpp/interop/interop_client.h
+++ b/test/cpp/interop/interop_client.h
@@ -33,11 +33,11 @@
#ifndef GRPC_TEST_CPP_INTEROP_INTEROP_CLIENT_H
#define GRPC_TEST_CPP_INTEROP_INTEROP_CLIENT_H
+
#include <memory>
#include <grpc/grpc.h>
-#include <grpc++/channel_interface.h>
-#include <grpc++/status.h>
+#include <grpc++/channel.h>
#include "test/proto/messages.grpc.pb.h"
namespace grpc {
@@ -45,10 +45,10 @@ namespace testing {
class InteropClient {
public:
- explicit InteropClient(std::shared_ptr<ChannelInterface> channel);
+ explicit InteropClient(std::shared_ptr<Channel> channel);
~InteropClient() {}
- void Reset(std::shared_ptr<ChannelInterface> channel) { channel_ = channel; }
+ void Reset(std::shared_ptr<Channel> channel) { channel_ = channel; }
void DoEmpty();
void DoLargeUnary();
@@ -82,7 +82,7 @@ class InteropClient {
void PerformLargeUnary(SimpleRequest* request, SimpleResponse* response);
void AssertOkOrPrintErrorStatus(const Status& s);
- std::shared_ptr<ChannelInterface> channel_;
+ std::shared_ptr<Channel> channel_;
};
} // namespace testing
diff --git a/test/cpp/interop/interop_test.cc b/test/cpp/interop/interop_test.cc
index aac6e56b89..f01b032e95 100644
--- a/test/cpp/interop/interop_test.cc
+++ b/test/cpp/interop/interop_test.cc
@@ -44,17 +44,18 @@
#include <sys/types.h>
#include <sys/wait.h>
-extern "C" {
-#include "src/core/iomgr/socket_utils_posix.h"
-#include "src/core/support/string.h"
-}
-
#include <grpc/support/alloc.h>
#include <grpc/support/host_port.h>
#include <grpc/support/log.h>
#include <grpc/support/string_util.h>
#include "test/core/util/port.h"
+extern "C" {
+#include "src/core/iomgr/socket_utils_posix.h"
+#include "src/core/support/string.h"
+}
+
+
int test_client(const char* root, const char* host, int port) {
int status;
pid_t cli;
diff --git a/test/cpp/interop/reconnect_interop_client.cc b/test/cpp/interop/reconnect_interop_client.cc
index 65f098050e..d332dcad84 100644
--- a/test/cpp/interop/reconnect_interop_client.cc
+++ b/test/cpp/interop/reconnect_interop_client.cc
@@ -37,9 +37,8 @@
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include <gflags/gflags.h>
-#include <grpc++/channel_interface.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
-#include <grpc++/status.h>
#include "test/cpp/util/create_test_channel.h"
#include "test/cpp/util/test_config.h"
#include "test/proto/test.grpc.pb.h"
@@ -50,7 +49,7 @@ DEFINE_int32(server_control_port, 0, "Server port for control rpcs.");
DEFINE_int32(server_retry_port, 0, "Server port for testing reconnection.");
DEFINE_string(server_host, "127.0.0.1", "Server host to connect to");
-using grpc::ChannelInterface;
+using grpc::Channel;
using grpc::ClientContext;
using grpc::CreateTestChannel;
using grpc::Status;
@@ -78,7 +77,7 @@ int main(int argc, char** argv) {
gpr_log(GPR_INFO, "Starting connections with retries.");
server_address.str("");
server_address << FLAGS_server_host << ':' << FLAGS_server_retry_port;
- std::shared_ptr<ChannelInterface> retry_channel =
+ std::shared_ptr<Channel> retry_channel =
CreateTestChannel(server_address.str(), true);
// About 13 retries.
const int kDeadlineSeconds = 540;
diff --git a/test/cpp/interop/reconnect_interop_server.cc b/test/cpp/interop/reconnect_interop_server.cc
index 8bc51aa52e..d4f171b1d0 100644
--- a/test/cpp/interop/reconnect_interop_server.cc
+++ b/test/cpp/interop/reconnect_interop_server.cc
@@ -31,23 +31,22 @@
*
*/
+#include <signal.h>
+#include <unistd.h>
+
#include <condition_variable>
#include <memory>
#include <mutex>
#include <sstream>
-#include <signal.h>
-#include <unistd.h>
-
#include <gflags/gflags.h>
#include <grpc/grpc.h>
#include <grpc/support/log.h>
-#include <grpc++/config.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
+
#include "test/core/util/reconnect_server.h"
#include "test/cpp/util/test_config.h"
#include "test/proto/test.grpc.pb.h"
diff --git a/test/cpp/interop/server.cc b/test/cpp/interop/server.cc
index 760bb18f73..4921fde9fa 100644
--- a/test/cpp/interop/server.cc
+++ b/test/cpp/interop/server.cc
@@ -31,32 +31,28 @@
*
*/
+#include <signal.h>
+#include <unistd.h>
+
#include <fstream>
#include <memory>
#include <sstream>
#include <thread>
-#include <signal.h>
-#include <unistd.h>
-
#include <gflags/gflags.h>
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include <grpc/support/useful.h>
-
-#include <grpc++/config.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
+#include "test/cpp/interop/server_helper.h"
+#include "test/cpp/util/test_config.h"
#include "test/proto/test.grpc.pb.h"
#include "test/proto/empty.grpc.pb.h"
#include "test/proto/messages.grpc.pb.h"
-#include "test/cpp/interop/server_helper.h"
-#include "test/cpp/util/test_config.h"
DEFINE_bool(enable_ssl, false, "Whether to use ssl/tls.");
DEFINE_int32(port, 0, "Server port.");
@@ -162,11 +158,13 @@ class TestServiceImpl : public TestService::Service {
SetResponseCompression(context, *request);
StreamingOutputCallResponse response;
bool write_success = true;
- response.mutable_payload()->set_type(request->response_type());
for (int i = 0; write_success && i < request->response_parameters_size();
i++) {
- response.mutable_payload()->set_body(
- grpc::string(request->response_parameters(i).size(), '\0'));
+ if (!SetPayload(request->response_type(),
+ request->response_parameters(i).size(),
+ response.mutable_payload())) {
+ return Status(grpc::StatusCode::INTERNAL, "Error creating payload.");
+ }
write_success = writer->Write(response);
}
if (write_success) {
diff --git a/test/cpp/interop/server_helper.cc b/test/cpp/interop/server_helper.cc
index 3721d79635..e897f4ebf0 100644
--- a/test/cpp/interop/server_helper.cc
+++ b/test/cpp/interop/server_helper.cc
@@ -36,7 +36,6 @@
#include <memory>
#include <gflags/gflags.h>
-#include <grpc++/config.h>
#include <grpc++/server_credentials.h>
#include "src/core/surface/call.h"
diff --git a/test/cpp/qps/client.h b/test/cpp/qps/client.h
index 1c4f46328f..0f95cfea38 100644
--- a/test/cpp/qps/client.h
+++ b/test/cpp/qps/client.h
@@ -34,14 +34,14 @@
#ifndef TEST_QPS_CLIENT_H
#define TEST_QPS_CLIENT_H
+#include <condition_variable>
+#include <mutex>
+
#include "test/cpp/qps/histogram.h"
#include "test/cpp/qps/interarrival.h"
#include "test/cpp/qps/timer.h"
#include "test/cpp/qps/qpstest.grpc.pb.h"
-
-#include <condition_variable>
-#include <mutex>
-#include <grpc++/config.h>
+#include "test/cpp/util/create_test_channel.h"
namespace grpc {
@@ -125,11 +125,11 @@ class Client {
channel_ = CreateTestChannel(target, config.enable_ssl());
stub_ = TestService::NewStub(channel_);
}
- ChannelInterface* get_channel() { return channel_.get(); }
+ Channel* get_channel() { return channel_.get(); }
TestService::Stub* get_stub() { return stub_.get(); }
private:
- std::shared_ptr<ChannelInterface> channel_;
+ std::shared_ptr<Channel> channel_;
std::unique_ptr<TestService::Stub> stub_;
};
std::vector<ClientChannelInfo> channels_;
diff --git a/test/cpp/qps/client_async.cc b/test/cpp/qps/client_async.cc
index a337610cbf..f779e4a577 100644
--- a/test/cpp/qps/client_async.cc
+++ b/test/cpp/qps/client_async.cc
@@ -46,14 +46,12 @@
#include <grpc/support/histogram.h>
#include <grpc/support/log.h>
#include <gflags/gflags.h>
-#include <grpc++/async_unary_call.h>
#include <grpc++/client_context.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
-#include "test/cpp/util/create_test_channel.h"
+
#include "test/cpp/qps/qpstest.grpc.pb.h"
#include "test/cpp/qps/timer.h"
#include "test/cpp/qps/client.h"
+#include "test/cpp/util/create_test_channel.h"
namespace grpc {
namespace testing {
diff --git a/test/cpp/qps/client_sync.cc b/test/cpp/qps/client_sync.cc
index db5416a707..123dca6600 100644
--- a/test/cpp/qps/client_sync.cc
+++ b/test/cpp/qps/client_sync.cc
@@ -31,6 +31,8 @@
*
*/
+#include <sys/signal.h>
+
#include <cassert>
#include <chrono>
#include <memory>
@@ -40,21 +42,18 @@
#include <vector>
#include <sstream>
-#include <sys/signal.h>
-
+#include <gflags/gflags.h>
#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
#include <grpc/support/histogram.h>
#include <grpc/support/host_port.h>
#include <grpc/support/log.h>
#include <grpc/support/time.h>
-#include <gflags/gflags.h>
#include <grpc++/client_context.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
#include <gtest/gtest.h>
+
#include "test/cpp/util/create_test_channel.h"
#include "test/cpp/qps/client.h"
#include "test/cpp/qps/qpstest.grpc.pb.h"
diff --git a/test/cpp/qps/driver.cc b/test/cpp/qps/driver.cc
index 78e3720938..0e771d6b81 100644
--- a/test/cpp/qps/driver.cc
+++ b/test/cpp/qps/driver.cc
@@ -31,24 +31,24 @@
*
*/
-#include "test/cpp/qps/driver.h"
-#include "src/core/support/env.h"
+#include <unistd.h>
+#include <list>
+#include <thread>
+#include <deque>
+#include <vector>
+
#include <grpc/support/alloc.h>
#include <grpc/support/log.h>
#include <grpc/support/host_port.h>
-#include <grpc++/channel_arguments.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
-#include <grpc++/stream.h>
-#include <list>
-#include <thread>
-#include <deque>
-#include <vector>
-#include <unistd.h>
-#include "test/cpp/qps/histogram.h"
-#include "test/cpp/qps/qps_worker.h"
+
+#include "src/core/support/env.h"
#include "test/core/util/port.h"
#include "test/core/util/test_config.h"
+#include "test/cpp/qps/driver.h"
+#include "test/cpp/qps/histogram.h"
+#include "test/cpp/qps/qps_worker.h"
using std::list;
using std::thread;
@@ -154,8 +154,8 @@ std::unique_ptr<ScenarioResult> RunScenario(
// where class contained in std::vector must have a copy constructor
auto* servers = new ServerData[num_servers];
for (size_t i = 0; i < num_servers; i++) {
- servers[i].stub = std::move(Worker::NewStub(
- CreateChannel(workers[i], InsecureCredentials(), ChannelArguments())));
+ servers[i].stub = std::move(
+ Worker::NewStub(CreateChannel(workers[i], InsecureCredentials())));
ServerArgs args;
result_server_config = server_config;
result_server_config.set_host(workers[i]);
@@ -182,8 +182,8 @@ std::unique_ptr<ScenarioResult> RunScenario(
// where class contained in std::vector must have a copy constructor
auto* clients = new ClientData[num_clients];
for (size_t i = 0; i < num_clients; i++) {
- clients[i].stub = std::move(Worker::NewStub(CreateChannel(
- workers[i + num_servers], InsecureCredentials(), ChannelArguments())));
+ clients[i].stub = std::move(Worker::NewStub(
+ CreateChannel(workers[i + num_servers], InsecureCredentials())));
ClientArgs args;
result_client_config = client_config;
result_client_config.set_host(workers[i + num_servers]);
diff --git a/test/cpp/qps/interarrival.h b/test/cpp/qps/interarrival.h
index 04d14f689f..841619e3ff 100644
--- a/test/cpp/qps/interarrival.h
+++ b/test/cpp/qps/interarrival.h
@@ -39,7 +39,7 @@
#include <cstdlib>
#include <vector>
-#include <grpc++/config.h>
+#include <grpc++/support/config.h>
namespace grpc {
namespace testing {
diff --git a/test/cpp/qps/perf_db_client.h b/test/cpp/qps/perf_db_client.h
index 7a9d86d3a6..ae5d17074b 100644
--- a/test/cpp/qps/perf_db_client.h
+++ b/test/cpp/qps/perf_db_client.h
@@ -37,12 +37,11 @@
#include <cfloat>
#include <grpc/grpc.h>
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc++/support/channel_arguments.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
-#include <grpc++/status.h>
#include "test/cpp/qps/perf_db.grpc.pb.h"
namespace grpc {
@@ -65,7 +64,7 @@ class PerfDbClient {
client_user_time_ = DBL_MIN;
}
- void init(std::shared_ptr<ChannelInterface> channel) {
+ void init(std::shared_ptr<Channel> channel) {
stub_ = PerfDbTransfer::NewStub(channel);
}
diff --git a/test/cpp/qps/qps_interarrival_test.cc b/test/cpp/qps/qps_interarrival_test.cc
index 1eed956a1c..a7979e6187 100644
--- a/test/cpp/qps/qps_interarrival_test.cc
+++ b/test/cpp/qps/qps_interarrival_test.cc
@@ -31,13 +31,13 @@
*
*/
-#include "test/cpp/qps/interarrival.h"
#include <chrono>
#include <iostream>
// Use the C histogram rather than C++ to avoid depending on proto
#include <grpc/support/histogram.h>
-#include <grpc++/config.h>
+
+#include "test/cpp/qps/interarrival.h"
using grpc::testing::RandomDist;
using grpc::testing::InterarrivalTimer;
diff --git a/test/cpp/qps/qps_openloop_test.cc b/test/cpp/qps/qps_openloop_test.cc
index 9a7313f6e8..5a6a9249a9 100644
--- a/test/cpp/qps/qps_openloop_test.cc
+++ b/test/cpp/qps/qps_openloop_test.cc
@@ -31,12 +31,12 @@
*
*/
+#include <signal.h>
+
#include <set>
#include <grpc/support/log.h>
-#include <signal.h>
-
#include "test/cpp/qps/driver.h"
#include "test/cpp/qps/report.h"
#include "test/cpp/util/benchmark_config.h"
diff --git a/test/cpp/qps/qps_test.cc b/test/cpp/qps/qps_test.cc
index ba980a6664..d0c4a79cd9 100644
--- a/test/cpp/qps/qps_test.cc
+++ b/test/cpp/qps/qps_test.cc
@@ -31,12 +31,12 @@
*
*/
+#include <signal.h>
+
#include <set>
#include <grpc/support/log.h>
-#include <signal.h>
-
#include "test/cpp/qps/driver.h"
#include "test/cpp/qps/report.h"
#include "test/cpp/util/benchmark_config.h"
diff --git a/test/cpp/qps/qps_test_with_poll.cc b/test/cpp/qps/qps_test_with_poll.cc
index 90a8da8d11..31d2c1bf7b 100644
--- a/test/cpp/qps/qps_test_with_poll.cc
+++ b/test/cpp/qps/qps_test_with_poll.cc
@@ -31,12 +31,12 @@
*
*/
+#include <signal.h>
+
#include <set>
#include <grpc/support/log.h>
-#include <signal.h>
-
#include "test/cpp/qps/driver.h"
#include "test/cpp/qps/report.h"
#include "test/cpp/util/benchmark_config.h"
diff --git a/test/cpp/qps/qps_worker.cc b/test/cpp/qps/qps_worker.cc
index f1cea5ee66..51e955a80a 100644
--- a/test/cpp/qps/qps_worker.cc
+++ b/test/cpp/qps/qps_worker.cc
@@ -47,16 +47,15 @@
#include <grpc/support/log.h>
#include <grpc/support/host_port.h>
#include <grpc++/client_context.h>
-#include <grpc++/status.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/stream.h>
+
#include "test/core/util/grpc_profiler.h"
-#include "test/cpp/util/create_test_channel.h"
#include "test/cpp/qps/qpstest.pb.h"
#include "test/cpp/qps/client.h"
#include "test/cpp/qps/server.h"
+#include "test/cpp/util/create_test_channel.h"
namespace grpc {
namespace testing {
diff --git a/test/cpp/qps/report.h b/test/cpp/qps/report.h
index aec3cbe80a..5914fc4e30 100644
--- a/test/cpp/qps/report.h
+++ b/test/cpp/qps/report.h
@@ -37,7 +37,8 @@
#include <memory>
#include <set>
#include <vector>
-#include <grpc++/config.h>
+
+#include <grpc++/support/config.h>
#include "test/cpp/qps/driver.h"
#include "test/cpp/qps/qpstest.grpc.pb.h"
@@ -115,8 +116,8 @@ class PerfDbReporter : public Reporter {
test_name_(test_name),
sys_info_(sys_info),
tag_(tag) {
- perf_db_client_.init(grpc::CreateChannel(
- server_address, grpc::InsecureCredentials(), ChannelArguments()));
+ perf_db_client_.init(
+ grpc::CreateChannel(server_address, grpc::InsecureCredentials()));
}
~PerfDbReporter() GRPC_OVERRIDE { SendData(); };
diff --git a/test/cpp/qps/server_async.cc b/test/cpp/qps/server_async.cc
index b4fc49c31c..77415f42ce 100644
--- a/test/cpp/qps/server_async.cc
+++ b/test/cpp/qps/server_async.cc
@@ -41,22 +41,20 @@
#include <thread>
#include <gflags/gflags.h>
+#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
#include <grpc/support/host_port.h>
-#include <grpc++/async_unary_call.h>
-#include <grpc++/config.h>
+#include <grpc/support/log.h>
+#include <grpc++/support/config.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
#include <gtest/gtest.h>
+
#include "test/cpp/qps/qpstest.grpc.pb.h"
#include "test/cpp/qps/server.h"
-#include <grpc/grpc.h>
-#include <grpc/support/log.h>
namespace grpc {
namespace testing {
diff --git a/test/cpp/qps/server_sync.cc b/test/cpp/qps/server_sync.cc
index 4c3c9cb497..29ec19cd4b 100644
--- a/test/cpp/qps/server_sync.cc
+++ b/test/cpp/qps/server_sync.cc
@@ -32,28 +32,23 @@
*/
#include <sys/signal.h>
-#include <thread>
-
#include <unistd.h>
+#include <thread>
#include <gflags/gflags.h>
+#include <grpc/grpc.h>
#include <grpc/support/alloc.h>
#include <grpc/support/host_port.h>
-#include <grpc++/config.h>
-#include <grpc++/dynamic_thread_pool.h>
-#include <grpc++/fixed_size_thread_pool.h>
+#include <grpc/support/log.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
+
#include "test/cpp/qps/qpstest.grpc.pb.h"
#include "test/cpp/qps/server.h"
#include "test/cpp/qps/timer.h"
-#include <grpc/grpc.h>
-#include <grpc/support/log.h>
namespace grpc {
namespace testing {
@@ -93,12 +88,7 @@ class TestServiceImpl GRPC_FINAL : public TestService::Service {
class SynchronousServer GRPC_FINAL : public grpc::testing::Server {
public:
SynchronousServer(const ServerConfig& config, int port)
- : thread_pool_(), impl_(MakeImpl(port)) {
- if (config.threads() > 0) {
- thread_pool_.reset(new FixedSizeThreadPool(config.threads()));
- } else {
- thread_pool_.reset(new DynamicThreadPool(-config.threads()));
- }
+ : impl_(MakeImpl(port)) {
}
private:
@@ -112,13 +102,10 @@ class SynchronousServer GRPC_FINAL : public grpc::testing::Server {
builder.RegisterService(&service_);
- builder.SetThreadPool(thread_pool_.get());
-
return builder.BuildAndStart();
}
TestServiceImpl service_;
- std::unique_ptr<ThreadPoolInterface> thread_pool_;
std::unique_ptr<grpc::Server> impl_;
};
diff --git a/test/cpp/qps/stats.h b/test/cpp/qps/stats.h
index 82dc03e3da..93875017ca 100644
--- a/test/cpp/qps/stats.h
+++ b/test/cpp/qps/stats.h
@@ -34,9 +34,10 @@
#ifndef TEST_QPS_STATS_UTILS_H
#define TEST_QPS_STATS_UTILS_H
-#include "test/cpp/qps/histogram.h"
#include <string>
+#include "test/cpp/qps/histogram.h"
+
namespace grpc {
namespace testing {
diff --git a/test/cpp/qps/sync_streaming_ping_pong_test.cc b/test/cpp/qps/sync_streaming_ping_pong_test.cc
index d53905a779..52e43939a8 100644
--- a/test/cpp/qps/sync_streaming_ping_pong_test.cc
+++ b/test/cpp/qps/sync_streaming_ping_pong_test.cc
@@ -31,12 +31,12 @@
*
*/
+#include <signal.h>
+
#include <set>
#include <grpc/support/log.h>
-#include <signal.h>
-
#include "test/cpp/qps/driver.h"
#include "test/cpp/qps/report.h"
#include "test/cpp/util/benchmark_config.h"
diff --git a/test/cpp/qps/sync_unary_ping_pong_test.cc b/test/cpp/qps/sync_unary_ping_pong_test.cc
index d276d13a43..fbd21357aa 100644
--- a/test/cpp/qps/sync_unary_ping_pong_test.cc
+++ b/test/cpp/qps/sync_unary_ping_pong_test.cc
@@ -31,12 +31,12 @@
*
*/
+#include <signal.h>
+
#include <set>
#include <grpc/support/log.h>
-#include <signal.h>
-
#include "test/cpp/qps/driver.h"
#include "test/cpp/qps/report.h"
#include "test/cpp/util/benchmark_config.h"
diff --git a/test/cpp/qps/timer.cc b/test/cpp/qps/timer.cc
index c1ba23decd..8edb838da3 100644
--- a/test/cpp/qps/timer.cc
+++ b/test/cpp/qps/timer.cc
@@ -36,7 +36,6 @@
#include <sys/time.h>
#include <sys/resource.h>
#include <grpc/support/time.h>
-#include <grpc++/config.h>
Timer::Timer() : start_(Sample()) {}
diff --git a/test/cpp/qps/worker.cc b/test/cpp/qps/worker.cc
index 7cf4903148..935e4853a6 100644
--- a/test/cpp/qps/worker.cc
+++ b/test/cpp/qps/worker.cc
@@ -36,9 +36,9 @@
#include <chrono>
#include <thread>
+#include <gflags/gflags.h>
#include <grpc/grpc.h>
#include <grpc/support/time.h>
-#include <gflags/gflags.h>
#include "test/cpp/qps/qps_worker.h"
#include "test/cpp/util/test_config.h"
diff --git a/test/cpp/util/byte_buffer_test.cc b/test/cpp/util/byte_buffer_test.cc
index 5195575f99..f36c32cac5 100644
--- a/test/cpp/util/byte_buffer_test.cc
+++ b/test/cpp/util/byte_buffer_test.cc
@@ -31,13 +31,13 @@
*
*/
-#include <grpc++/byte_buffer.h>
+#include <grpc++/support/byte_buffer.h>
#include <cstring>
#include <vector>
#include <grpc/support/slice.h>
-#include <grpc++/slice.h>
+#include <grpc++/support/slice.h>
#include <gtest/gtest.h>
namespace grpc {
diff --git a/test/cpp/util/cli_call.cc b/test/cpp/util/cli_call.cc
index ac88910a01..9a769848a4 100644
--- a/test/cpp/util/cli_call.cc
+++ b/test/cpp/util/cli_call.cc
@@ -35,16 +35,13 @@
#include <iostream>
-#include <grpc++/byte_buffer.h>
-#include <grpc++/channel_interface.h>
-#include <grpc++/client_context.h>
-#include <grpc++/generic_stub.h>
-#include <grpc++/status.h>
-#include <grpc++/stream.h>
-
#include <grpc/grpc.h>
#include <grpc/support/log.h>
#include <grpc/support/slice.h>
+#include <grpc++/support/byte_buffer.h>
+#include <grpc++/channel.h>
+#include <grpc++/client_context.h>
+#include <grpc++/generic/generic_stub.h>
namespace grpc {
namespace testing {
@@ -52,16 +49,16 @@ namespace {
void* tag(int i) { return (void*)(gpr_intptr)i; }
} // namespace
-Status CliCall::Call(std::shared_ptr<grpc::ChannelInterface> channel,
+Status CliCall::Call(std::shared_ptr<grpc::Channel> channel,
const grpc::string& method, const grpc::string& request,
- grpc::string* response, const MetadataContainer& metadata,
- MetadataContainer* server_initial_metadata,
- MetadataContainer* server_trailing_metadata) {
+ grpc::string* response,
+ const OutgoingMetadataContainer& metadata,
+ IncomingMetadataContainer* server_initial_metadata,
+ IncomingMetadataContainer* server_trailing_metadata) {
std::unique_ptr<grpc::GenericStub> stub(new grpc::GenericStub(channel));
grpc::ClientContext ctx;
if (!metadata.empty()) {
- for (std::multimap<grpc::string, grpc::string>::const_iterator iter =
- metadata.begin();
+ for (OutgoingMetadataContainer::const_iterator iter = metadata.begin();
iter != metadata.end(); ++iter) {
ctx.AddMetadata(iter->first, iter->second);
}
diff --git a/test/cpp/util/cli_call.h b/test/cpp/util/cli_call.h
index 8d114c9cb5..2fbc9618b6 100644
--- a/test/cpp/util/cli_call.h
+++ b/test/cpp/util/cli_call.h
@@ -36,21 +36,24 @@
#include <map>
-#include <grpc++/channel_interface.h>
-#include <grpc++/config.h>
-#include <grpc++/status.h>
+#include <grpc++/channel.h>
+#include <grpc++/support/status.h>
+#include <grpc++/support/string_ref.h>
namespace grpc {
namespace testing {
class CliCall GRPC_FINAL {
public:
- typedef std::multimap<grpc::string, grpc::string> MetadataContainer;
- static Status Call(std::shared_ptr<grpc::ChannelInterface> channel,
+ typedef std::multimap<grpc::string, grpc::string> OutgoingMetadataContainer;
+ typedef std::multimap<grpc::string_ref, grpc::string_ref>
+ IncomingMetadataContainer;
+ static Status Call(std::shared_ptr<grpc::Channel> channel,
const grpc::string& method, const grpc::string& request,
- grpc::string* response, const MetadataContainer& metadata,
- MetadataContainer* server_initial_metadata,
- MetadataContainer* server_trailing_metadata);
+ grpc::string* response,
+ const OutgoingMetadataContainer& metadata,
+ IncomingMetadataContainer* server_initial_metadata,
+ IncomingMetadataContainer* server_trailing_metadata);
};
} // namespace testing
diff --git a/test/cpp/util/cli_call_test.cc b/test/cpp/util/cli_call_test.cc
index 848a3aee57..0efa201622 100644
--- a/test/cpp/util/cli_call_test.cc
+++ b/test/cpp/util/cli_call_test.cc
@@ -31,24 +31,23 @@
*
*/
-#include "test/core/util/test_config.h"
#include "test/cpp/util/cli_call.h"
-#include "test/cpp/util/echo.grpc.pb.h"
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+
+#include <grpc/grpc.h>
+#include <grpc++/channel.h>
#include <grpc++/client_context.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
-#include <grpc++/dynamic_thread_pool.h>
#include <grpc++/server.h>
#include <grpc++/server_builder.h>
#include <grpc++/server_context.h>
#include <grpc++/server_credentials.h>
-#include <grpc++/status.h>
-#include "test/core/util/port.h"
#include <gtest/gtest.h>
-#include <grpc/grpc.h>
+#include "test/core/util/port.h"
+#include "test/core/util/test_config.h"
+#include "test/cpp/util/echo.grpc.pb.h"
+#include "test/cpp/util/string_ref_helper.h"
using grpc::cpp::test::util::EchoRequest;
using grpc::cpp::test::util::EchoResponse;
@@ -61,10 +60,11 @@ class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service {
Status Echo(ServerContext* context, const EchoRequest* request,
EchoResponse* response) GRPC_OVERRIDE {
if (!context->client_metadata().empty()) {
- for (std::multimap<grpc::string, grpc::string>::const_iterator iter =
- context->client_metadata().begin();
+ for (std::multimap<grpc::string_ref, grpc::string_ref>::const_iterator
+ iter = context->client_metadata().begin();
iter != context->client_metadata().end(); ++iter) {
- context->AddInitialMetadata(iter->first, iter->second);
+ context->AddInitialMetadata(ToString(iter->first),
+ ToString(iter->second));
}
}
context->AddTrailingMetadata("trailing_key", "trailing_value");
@@ -75,7 +75,7 @@ class TestServiceImpl : public ::grpc::cpp::test::util::TestService::Service {
class CliCallTest : public ::testing::Test {
protected:
- CliCallTest() : thread_pool_(2) {}
+ CliCallTest() {}
void SetUp() GRPC_OVERRIDE {
int port = grpc_pick_unused_port_or_die();
@@ -85,24 +85,21 @@ class CliCallTest : public ::testing::Test {
builder.AddListeningPort(server_address_.str(),
InsecureServerCredentials());
builder.RegisterService(&service_);
- builder.SetThreadPool(&thread_pool_);
server_ = builder.BuildAndStart();
}
void TearDown() GRPC_OVERRIDE { server_->Shutdown(); }
void ResetStub() {
- channel_ = CreateChannel(server_address_.str(), InsecureCredentials(),
- ChannelArguments());
+ channel_ = CreateChannel(server_address_.str(), InsecureCredentials());
stub_ = std::move(grpc::cpp::test::util::TestService::NewStub(channel_));
}
- std::shared_ptr<ChannelInterface> channel_;
+ std::shared_ptr<Channel> channel_;
std::unique_ptr<grpc::cpp::test::util::TestService::Stub> stub_;
std::unique_ptr<Server> server_;
std::ostringstream server_address_;
TestServiceImpl service_;
- DynamicThreadPool thread_pool_;
};
// Send a rpc with a normal stub and then a CliCall. Verify they match.
@@ -123,8 +120,9 @@ TEST_F(CliCallTest, SimpleRpc) {
grpc::string request_bin, response_bin, expected_response_bin;
EXPECT_TRUE(request.SerializeToString(&request_bin));
EXPECT_TRUE(response.SerializeToString(&expected_response_bin));
- std::multimap<grpc::string, grpc::string> client_metadata,
- server_initial_metadata, server_trailing_metadata;
+ std::multimap<grpc::string, grpc::string> client_metadata;
+ std::multimap<grpc::string_ref, grpc::string_ref> server_initial_metadata,
+ server_trailing_metadata;
client_metadata.insert(std::pair<grpc::string, grpc::string>("key1", "val1"));
Status s2 = CliCall::Call(channel_, kMethod, request_bin, &response_bin,
client_metadata, &server_initial_metadata,
diff --git a/test/cpp/util/create_test_channel.cc b/test/cpp/util/create_test_channel.cc
index dc48fa2d87..e993d14e71 100644
--- a/test/cpp/util/create_test_channel.cc
+++ b/test/cpp/util/create_test_channel.cc
@@ -33,11 +33,11 @@
#include "test/cpp/util/create_test_channel.h"
-#include "test/core/end2end/data/ssl_test_data.h"
-#include <grpc++/channel_arguments.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
+#include "test/core/end2end/data/ssl_test_data.h"
+
namespace grpc {
// When ssl is enabled, if server is empty, override_hostname is used to
@@ -55,7 +55,7 @@ namespace grpc {
// CreateTestChannel("test.google.com:443", "", true, true, creds);
// same as above
// CreateTestChannel("", "test.google.com:443", true, true, creds);
-std::shared_ptr<ChannelInterface> CreateTestChannel(
+std::shared_ptr<Channel> CreateTestChannel(
const grpc::string& server, const grpc::string& override_hostname,
bool enable_ssl, bool use_prod_roots,
const std::shared_ptr<Credentials>& creds) {
@@ -74,13 +74,13 @@ std::shared_ptr<ChannelInterface> CreateTestChannel(
if (creds.get()) {
channel_creds = CompositeCredentials(creds, channel_creds);
}
- return CreateChannel(connect_to, channel_creds, channel_args);
+ return CreateCustomChannel(connect_to, channel_creds, channel_args);
} else {
- return CreateChannel(server, InsecureCredentials(), channel_args);
+ return CreateChannel(server, InsecureCredentials());
}
}
-std::shared_ptr<ChannelInterface> CreateTestChannel(
+std::shared_ptr<Channel> CreateTestChannel(
const grpc::string& server, const grpc::string& override_hostname,
bool enable_ssl, bool use_prod_roots) {
return CreateTestChannel(server, override_hostname, enable_ssl,
@@ -88,8 +88,8 @@ std::shared_ptr<ChannelInterface> CreateTestChannel(
}
// Shortcut for end2end and interop tests.
-std::shared_ptr<ChannelInterface> CreateTestChannel(const grpc::string& server,
- bool enable_ssl) {
+std::shared_ptr<Channel> CreateTestChannel(const grpc::string& server,
+ bool enable_ssl) {
return CreateTestChannel(server, "foo.test.google.fr", enable_ssl, false);
}
diff --git a/test/cpp/util/create_test_channel.h b/test/cpp/util/create_test_channel.h
index 5f2609ddd8..1263d4ed68 100644
--- a/test/cpp/util/create_test_channel.h
+++ b/test/cpp/util/create_test_channel.h
@@ -36,20 +36,19 @@
#include <memory>
-#include <grpc++/config.h>
#include <grpc++/credentials.h>
namespace grpc {
-class ChannelInterface;
+class Channel;
-std::shared_ptr<ChannelInterface> CreateTestChannel(const grpc::string& server,
- bool enable_ssl);
+std::shared_ptr<Channel> CreateTestChannel(const grpc::string& server,
+ bool enable_ssl);
-std::shared_ptr<ChannelInterface> CreateTestChannel(
+std::shared_ptr<Channel> CreateTestChannel(
const grpc::string& server, const grpc::string& override_hostname,
bool enable_ssl, bool use_prod_roots);
-std::shared_ptr<ChannelInterface> CreateTestChannel(
+std::shared_ptr<Channel> CreateTestChannel(
const grpc::string& server, const grpc::string& override_hostname,
bool enable_ssl, bool use_prod_roots,
const std::shared_ptr<Credentials>& creds);
diff --git a/test/cpp/util/grpc_cli.cc b/test/cpp/util/grpc_cli.cc
index 3c3baeb769..22cac21f77 100644
--- a/test/cpp/util/grpc_cli.cc
+++ b/test/cpp/util/grpc_cli.cc
@@ -64,14 +64,15 @@
#include <sstream>
#include <gflags/gflags.h>
-#include "test/cpp/util/cli_call.h"
-#include "test/cpp/util/test_config.h"
-#include <grpc++/channel_arguments.h>
-#include <grpc++/channel_interface.h>
+#include <grpc/grpc.h>
+#include <grpc++/channel.h>
#include <grpc++/create_channel.h>
#include <grpc++/credentials.h>
+#include <grpc++/support/string_ref.h>
-#include <grpc/grpc.h>
+#include "test/cpp/util/cli_call.h"
+#include "test/cpp/util/string_ref_helper.h"
+#include "test/cpp/util/test_config.h"
DEFINE_bool(enable_ssl, true, "Whether to use ssl/tls.");
DEFINE_bool(use_auth, false, "Whether to create default google credentials.");
@@ -105,16 +106,19 @@ void ParseMetadataFlag(
}
}
-void PrintMetadata(const std::multimap<grpc::string, grpc::string>& m,
- const grpc::string& message) {
+template <typename T>
+void PrintMetadata(const T& m, const grpc::string& message) {
if (m.empty()) {
return;
}
std::cout << message << std::endl;
- for (std::multimap<grpc::string, grpc::string>::const_iterator iter =
- m.begin();
- iter != m.end(); ++iter) {
- std::cout << iter->first << " : " << iter->second << std::endl;
+ grpc::string pair;
+ for (typename T::const_iterator iter = m.begin(); iter != m.end(); ++iter) {
+ pair.clear();
+ pair.append(iter->first.data(), iter->first.size());
+ pair.append(" : ");
+ pair.append(iter->second.data(), iter->second.size());
+ std::cout << pair << std::endl;
}
}
@@ -154,12 +158,13 @@ int main(int argc, char** argv) {
creds = grpc::SslCredentials(grpc::SslCredentialsOptions());
}
}
- std::shared_ptr<grpc::ChannelInterface> channel =
- grpc::CreateChannel(server_address, creds, grpc::ChannelArguments());
+ std::shared_ptr<grpc::Channel> channel =
+ grpc::CreateChannel(server_address, creds);
grpc::string response;
- std::multimap<grpc::string, grpc::string> client_metadata,
- server_initial_metadata, server_trailing_metadata;
+ std::multimap<grpc::string, grpc::string> client_metadata;
+ std::multimap<grpc::string_ref, grpc::string_ref> server_initial_metadata,
+ server_trailing_metadata;
ParseMetadataFlag(&client_metadata);
PrintMetadata(client_metadata, "Sending client initial metadata:");
grpc::Status s = grpc::testing::CliCall::Call(
diff --git a/test/cpp/util/slice_test.cc b/test/cpp/util/slice_test.cc
index eb328490e1..de7ff031ab 100644
--- a/test/cpp/util/slice_test.cc
+++ b/test/cpp/util/slice_test.cc
@@ -31,7 +31,7 @@
*
*/
-#include <grpc++/slice.h>
+#include <grpc++/support/slice.h>
#include <grpc/support/slice.h>
#include <gtest/gtest.h>
diff --git a/test/cpp/util/status_test.cc b/test/cpp/util/status_test.cc
index 17b92ab06a..837a6bab02 100644
--- a/test/cpp/util/status_test.cc
+++ b/test/cpp/util/status_test.cc
@@ -31,7 +31,8 @@
*
*/
-#include <grpc++/status.h>
+#include <grpc++/support/status.h>
+
#include <grpc/status.h>
#include <grpc/support/log.h>
diff --git a/test/cpp/util/string_ref_helper.cc b/test/cpp/util/string_ref_helper.cc
new file mode 100644
index 0000000000..4eb4fe0357
--- /dev/null
+++ b/test/cpp/util/string_ref_helper.cc
@@ -0,0 +1,44 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include "test/cpp/util/string_ref_helper.h"
+
+namespace grpc {
+namespace testing {
+
+grpc::string ToString(const grpc::string_ref& r) {
+ return grpc::string(r.data(), r.size());
+}
+
+} // namespace testing
+} // namespace grpc
diff --git a/test/cpp/util/string_ref_helper.h b/test/cpp/util/string_ref_helper.h
new file mode 100644
index 0000000000..ac94bcd018
--- /dev/null
+++ b/test/cpp/util/string_ref_helper.h
@@ -0,0 +1,47 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#ifndef GRPC_TEST_CPP_UTIL_STRING_REF_HELPER_H
+#define GRPC_TEST_CPP_UTIL_STRING_REF_HELPER_H
+
+#include <grpc++/support/string_ref.h>
+
+namespace grpc {
+namespace testing {
+
+grpc::string ToString(const grpc::string_ref& r);
+
+} // namespace testing
+} // namespace grpc
+
+#endif // GRPC_TEST_CPP_UTIL_STRING_REF_HELPER_H
diff --git a/test/cpp/util/string_ref_test.cc b/test/cpp/util/string_ref_test.cc
new file mode 100644
index 0000000000..465072d43e
--- /dev/null
+++ b/test/cpp/util/string_ref_test.cc
@@ -0,0 +1,215 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <grpc++/support/string_ref.h>
+
+#include <string.h>
+
+#include <gtest/gtest.h>
+
+namespace grpc {
+namespace {
+
+const char kTestString[] = "blah";
+const char kTestStringWithEmbeddedNull[] = "blah\0foo";
+const size_t kTestStringWithEmbeddedNullLength = 8;
+const char kTestUnrelatedString[] = "foo";
+
+class StringRefTest : public ::testing::Test {
+};
+
+TEST_F(StringRefTest, Empty) {
+ string_ref s;
+ EXPECT_EQ(0U, s.length());
+ EXPECT_EQ(nullptr, s.data());
+}
+
+TEST_F(StringRefTest, FromCString) {
+ string_ref s(kTestString);
+ EXPECT_EQ(strlen(kTestString), s.length());
+ EXPECT_EQ(kTestString, s.data());
+}
+
+TEST_F(StringRefTest, FromCStringWithLength) {
+ string_ref s(kTestString, 2);
+ EXPECT_EQ(2U, s.length());
+ EXPECT_EQ(kTestString, s.data());
+}
+
+TEST_F(StringRefTest, FromString) {
+ string copy(kTestString);
+ string_ref s(copy);
+ EXPECT_EQ(copy.data(), s.data());
+ EXPECT_EQ(copy.length(), s.length());
+}
+
+TEST_F(StringRefTest, CopyConstructor) {
+ string_ref s1(kTestString);;
+ string_ref s2(s1);
+ EXPECT_EQ(s1.length(), s2.length());
+ EXPECT_EQ(s1.data(), s2.data());
+}
+
+TEST_F(StringRefTest, FromStringWithEmbeddedNull) {
+ string copy(kTestStringWithEmbeddedNull, kTestStringWithEmbeddedNullLength);
+ string_ref s(copy);
+ EXPECT_EQ(copy.data(), s.data());
+ EXPECT_EQ(copy.length(), s.length());
+ EXPECT_EQ(kTestStringWithEmbeddedNullLength, s.length());
+}
+
+TEST_F(StringRefTest, Assignment) {
+ string_ref s1(kTestString);;
+ string_ref s2;
+ EXPECT_EQ(nullptr, s2.data());
+ s2 = s1;
+ EXPECT_EQ(s1.length(), s2.length());
+ EXPECT_EQ(s1.data(), s2.data());
+}
+
+TEST_F(StringRefTest, Iterator) {
+ string_ref s(kTestString);
+ size_t i = 0;
+ for (auto it = s.cbegin(); it != s.cend(); ++it) {
+ EXPECT_EQ(kTestString[i++], *it);
+ }
+ EXPECT_EQ(strlen(kTestString), i);
+}
+
+TEST_F(StringRefTest, ReverseIterator) {
+ string_ref s(kTestString);
+ size_t i = strlen(kTestString);
+ for (auto rit = s.crbegin(); rit != s.crend(); ++rit) {
+ EXPECT_EQ(kTestString[--i], *rit);
+ }
+ EXPECT_EQ(0U, i);
+}
+
+TEST_F(StringRefTest, Capacity) {
+ string_ref empty;
+ EXPECT_EQ(0U, empty.length());
+ EXPECT_EQ(0U, empty.size());
+ EXPECT_EQ(0U, empty.max_size());
+ EXPECT_TRUE(empty.empty());
+
+ string_ref s(kTestString);
+ EXPECT_EQ(strlen(kTestString), s.length());
+ EXPECT_EQ(s.length(), s.size());
+ EXPECT_EQ(s.max_size(), s.length());
+ EXPECT_FALSE(s.empty());
+}
+
+TEST_F(StringRefTest, Compare) {
+ string_ref s1(kTestString);
+ string s1_copy(kTestString);
+ string_ref s2(kTestUnrelatedString);
+ string_ref s3(kTestStringWithEmbeddedNull, kTestStringWithEmbeddedNullLength);
+ EXPECT_EQ(0, s1.compare(s1_copy));
+ EXPECT_NE(0, s1.compare(s2));
+ EXPECT_NE(0, s1.compare(s3));
+}
+
+TEST_F(StringRefTest, StartsWith) {
+ string_ref s1(kTestString);
+ string_ref s2(kTestUnrelatedString);
+ string_ref s3(kTestStringWithEmbeddedNull, kTestStringWithEmbeddedNullLength);
+ EXPECT_TRUE(s1.starts_with(s1));
+ EXPECT_FALSE(s1.starts_with(s2));
+ EXPECT_FALSE(s2.starts_with(s1));
+ EXPECT_FALSE(s1.starts_with(s3));
+ EXPECT_TRUE(s3.starts_with(s1));
+}
+
+TEST_F(StringRefTest, Endswith) {
+ string_ref s1(kTestString);
+ string_ref s2(kTestUnrelatedString);
+ string_ref s3(kTestStringWithEmbeddedNull, kTestStringWithEmbeddedNullLength);
+ EXPECT_TRUE(s1.ends_with(s1));
+ EXPECT_FALSE(s1.ends_with(s2));
+ EXPECT_FALSE(s2.ends_with(s1));
+ EXPECT_FALSE(s2.ends_with(s3));
+ EXPECT_TRUE(s3.ends_with(s2));
+}
+
+TEST_F(StringRefTest, Find) {
+ string_ref s1(kTestString);
+ string_ref s2(kTestUnrelatedString);
+ string_ref s3(kTestStringWithEmbeddedNull, kTestStringWithEmbeddedNullLength);
+ EXPECT_EQ(0U, s1.find(s1));
+ EXPECT_EQ(0U, s2.find(s2));
+ EXPECT_EQ(0U, s3.find(s3));
+ EXPECT_EQ(string_ref::npos,s1.find(s2) );
+ EXPECT_EQ(string_ref::npos,s2.find(s1));
+ EXPECT_EQ(string_ref::npos,s1.find(s3));
+ EXPECT_EQ(0U, s3.find(s1));
+ EXPECT_EQ(5U, s3.find(s2));
+ EXPECT_EQ(string_ref::npos, s1.find('z'));
+ EXPECT_EQ(1U, s2.find('o'));
+}
+
+TEST_F(StringRefTest, SubString) {
+ string_ref s(kTestStringWithEmbeddedNull, kTestStringWithEmbeddedNullLength);
+ string_ref sub1 = s.substr(0, 4);
+ EXPECT_EQ(string_ref(kTestString), sub1);
+ string_ref sub2 = s.substr(5);
+ EXPECT_EQ(string_ref(kTestUnrelatedString), sub2);
+}
+
+TEST_F(StringRefTest, ComparisonOperators) {
+ string_ref s1(kTestString);
+ string_ref s2(kTestUnrelatedString);
+ string_ref s3(kTestStringWithEmbeddedNull, kTestStringWithEmbeddedNullLength);
+ EXPECT_EQ(s1, s1);
+ EXPECT_EQ(s2, s2);
+ EXPECT_EQ(s3, s3);
+ EXPECT_GE(s1, s1);
+ EXPECT_GE(s2, s2);
+ EXPECT_GE(s3, s3);
+ EXPECT_LE(s1, s1);
+ EXPECT_LE(s2, s2);
+ EXPECT_LE(s3, s3);
+ EXPECT_NE(s1, s2);
+ EXPECT_NE(s1, s3);
+ EXPECT_NE(s2, s3);
+ EXPECT_GT(s3, s1);
+ EXPECT_LT(s1, s3);
+}
+
+} // namespace
+} // namespace grpc
+
+int main(int argc, char** argv) {
+ ::testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
+}
+
diff --git a/test/cpp/util/time_test.cc b/test/cpp/util/time_test.cc
index 4cb6ec4b4e..1e501dfd28 100644
--- a/test/cpp/util/time_test.cc
+++ b/test/cpp/util/time_test.cc
@@ -32,7 +32,7 @@
*/
#include <grpc/support/time.h>
-#include <grpc++/time.h>
+#include <grpc++/support/time.h>
#include <gtest/gtest.h>
using std::chrono::duration_cast;
diff --git a/third_party/googletest b/third_party/googletest
new file mode 160000
+Subproject c99458533a9b4c743ed51537e25989ea5594490
diff --git a/third_party/protobuf b/third_party/protobuf
-Subproject 3e2c8a5dd79481e1d36572cdf65be93514ba658
+Subproject 23408684b4d2bf1b25e14314413a14d542c18bc
diff --git a/tools/codegen/core/gen_legal_metadata_characters.c b/tools/codegen/core/gen_legal_metadata_characters.c
new file mode 100644
index 0000000000..0fbc545d8d
--- /dev/null
+++ b/tools/codegen/core/gen_legal_metadata_characters.c
@@ -0,0 +1,76 @@
+/*
+ *
+ * Copyright 2015, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+/* generates constant table for metadata.c */
+
+#include <stdio.h>
+#include <string.h>
+
+static unsigned char legal_bits[256 / 8];
+
+static void legal(int x) {
+ int byte = x / 8;
+ int bit = x % 8;
+ legal_bits[byte] |= 1 << bit;
+}
+
+static void dump(void) {
+ int i;
+
+ printf("static const gpr_uint8 legal_header_bits[256/8] = ");
+ for (i = 0; i < 256 / 8; i++)
+ printf("%c 0x%02x", i ? ',' : '{', legal_bits[i]);
+ printf(" };\n");
+}
+
+static void clear(void) { memset(legal_bits, 0, sizeof(legal_bits)); }
+
+int main(void) {
+ int i;
+
+ clear();
+ for (i = 'a'; i <= 'z'; i++) legal(i);
+ for (i = '0'; i <= '9'; i++) legal(i);
+ legal('-');
+ legal('_');
+ dump();
+
+ clear();
+ for (i = 32; i <= 126; i++) {
+ if (i == ',') continue;
+ legal(i);
+ }
+ dump();
+
+ return 0;
+}
diff --git a/tools/doxygen/Doxyfile.c++ b/tools/doxygen/Doxyfile.c++
index 790e637b72..887f6169af 100644
--- a/tools/doxygen/Doxyfile.c++
+++ b/tools/doxygen/Doxyfile.c++
@@ -760,25 +760,16 @@ WARN_LOGFILE =
# spaces.
# Note: If this tag is empty the current directory is searched.
-INPUT = include/grpc++/async_generic_service.h \
-include/grpc++/async_unary_call.h \
-include/grpc++/auth_context.h \
-include/grpc++/byte_buffer.h \
-include/grpc++/channel_arguments.h \
-include/grpc++/channel_interface.h \
+INPUT = include/grpc++/channel.h \
include/grpc++/client_context.h \
include/grpc++/completion_queue.h \
-include/grpc++/config.h \
-include/grpc++/config_protobuf.h \
include/grpc++/create_channel.h \
include/grpc++/credentials.h \
-include/grpc++/dynamic_thread_pool.h \
-include/grpc++/fixed_size_thread_pool.h \
-include/grpc++/generic_stub.h \
+include/grpc++/generic/async_generic_service.h \
+include/grpc++/generic/generic_stub.h \
include/grpc++/impl/call.h \
include/grpc++/impl/client_unary_call.h \
include/grpc++/impl/grpc_library.h \
-include/grpc++/impl/internal_stub.h \
include/grpc++/impl/proto_utils.h \
include/grpc++/impl/rpc_method.h \
include/grpc++/impl/rpc_service_method.h \
@@ -794,13 +785,20 @@ include/grpc++/server.h \
include/grpc++/server_builder.h \
include/grpc++/server_context.h \
include/grpc++/server_credentials.h \
-include/grpc++/slice.h \
-include/grpc++/status.h \
-include/grpc++/status_code_enum.h \
-include/grpc++/stream.h \
-include/grpc++/stub_options.h \
-include/grpc++/thread_pool_interface.h \
-include/grpc++/time.h
+include/grpc++/support/async_stream.h \
+include/grpc++/support/async_unary_call.h \
+include/grpc++/support/auth_context.h \
+include/grpc++/support/byte_buffer.h \
+include/grpc++/support/channel_arguments.h \
+include/grpc++/support/config.h \
+include/grpc++/support/config_protobuf.h \
+include/grpc++/support/slice.h \
+include/grpc++/support/status.h \
+include/grpc++/support/status_code_enum.h \
+include/grpc++/support/string_ref.h \
+include/grpc++/support/stub_options.h \
+include/grpc++/support/sync_stream.h \
+include/grpc++/support/time.h
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
diff --git a/tools/doxygen/Doxyfile.c++.internal b/tools/doxygen/Doxyfile.c++.internal
index cd1279e2a6..84b13f94a7 100644
--- a/tools/doxygen/Doxyfile.c++.internal
+++ b/tools/doxygen/Doxyfile.c++.internal
@@ -760,25 +760,16 @@ WARN_LOGFILE =
# spaces.
# Note: If this tag is empty the current directory is searched.
-INPUT = include/grpc++/async_generic_service.h \
-include/grpc++/async_unary_call.h \
-include/grpc++/auth_context.h \
-include/grpc++/byte_buffer.h \
-include/grpc++/channel_arguments.h \
-include/grpc++/channel_interface.h \
+INPUT = include/grpc++/channel.h \
include/grpc++/client_context.h \
include/grpc++/completion_queue.h \
-include/grpc++/config.h \
-include/grpc++/config_protobuf.h \
include/grpc++/create_channel.h \
include/grpc++/credentials.h \
-include/grpc++/dynamic_thread_pool.h \
-include/grpc++/fixed_size_thread_pool.h \
-include/grpc++/generic_stub.h \
+include/grpc++/generic/async_generic_service.h \
+include/grpc++/generic/generic_stub.h \
include/grpc++/impl/call.h \
include/grpc++/impl/client_unary_call.h \
include/grpc++/impl/grpc_library.h \
-include/grpc++/impl/internal_stub.h \
include/grpc++/impl/proto_utils.h \
include/grpc++/impl/rpc_method.h \
include/grpc++/impl/rpc_service_method.h \
@@ -794,18 +785,28 @@ include/grpc++/server.h \
include/grpc++/server_builder.h \
include/grpc++/server_context.h \
include/grpc++/server_credentials.h \
-include/grpc++/slice.h \
-include/grpc++/status.h \
-include/grpc++/status_code_enum.h \
-include/grpc++/stream.h \
-include/grpc++/stub_options.h \
-include/grpc++/thread_pool_interface.h \
-include/grpc++/time.h \
+include/grpc++/support/async_stream.h \
+include/grpc++/support/async_unary_call.h \
+include/grpc++/support/auth_context.h \
+include/grpc++/support/byte_buffer.h \
+include/grpc++/support/channel_arguments.h \
+include/grpc++/support/config.h \
+include/grpc++/support/config_protobuf.h \
+include/grpc++/support/slice.h \
+include/grpc++/support/status.h \
+include/grpc++/support/status_code_enum.h \
+include/grpc++/support/string_ref.h \
+include/grpc++/support/stub_options.h \
+include/grpc++/support/sync_stream.h \
+include/grpc++/support/time.h \
src/cpp/client/secure_credentials.h \
src/cpp/common/secure_auth_context.h \
src/cpp/server/secure_server_credentials.h \
-src/cpp/client/channel.h \
+src/cpp/client/create_channel_internal.h \
src/cpp/common/create_auth_context.h \
+src/cpp/server/dynamic_thread_pool.h \
+src/cpp/server/fixed_size_thread_pool.h \
+src/cpp/server/thread_pool_interface.h \
src/cpp/client/secure_channel_arguments.cc \
src/cpp/client/secure_credentials.cc \
src/cpp/common/auth_property_iterator.cc \
@@ -816,10 +817,10 @@ src/cpp/client/channel.cc \
src/cpp/client/channel_arguments.cc \
src/cpp/client/client_context.cc \
src/cpp/client/create_channel.cc \
+src/cpp/client/create_channel_internal.cc \
src/cpp/client/credentials.cc \
src/cpp/client/generic_stub.cc \
src/cpp/client/insecure_credentials.cc \
-src/cpp/client/internal_stub.cc \
src/cpp/common/call.cc \
src/cpp/common/completion_queue.cc \
src/cpp/common/rpc_method.cc \
@@ -836,6 +837,7 @@ src/cpp/server/server_credentials.cc \
src/cpp/util/byte_buffer.cc \
src/cpp/util/slice.cc \
src/cpp/util/status.cc \
+src/cpp/util/string_ref.cc \
src/cpp/util/time.cc
# This tag can be used to specify the character encoding of the source files
diff --git a/tools/doxygen/Doxyfile.core.internal b/tools/doxygen/Doxyfile.core.internal
index 325a293e04..7d5df66bc1 100644
--- a/tools/doxygen/Doxyfile.core.internal
+++ b/tools/doxygen/Doxyfile.core.internal
@@ -780,7 +780,7 @@ src/core/tsi/fake_transport_security.h \
src/core/tsi/ssl_transport_security.h \
src/core/tsi/transport_security.h \
src/core/tsi/transport_security_interface.h \
-src/core/channel/census_filter.h \
+src/core/census/grpc_filter.h \
src/core/channel/channel_args.h \
src/core/channel/channel_stack.h \
src/core/channel/client_channel.h \
@@ -845,7 +845,8 @@ src/core/json/json_common.h \
src/core/json/json_reader.h \
src/core/json/json_writer.h \
src/core/profiling/timers.h \
-src/core/profiling/timers_preciseclock.h \
+src/core/statistics/census_interface.h \
+src/core/statistics/census_rpc_stats.h \
src/core/surface/byte_buffer_queue.h \
src/core/surface/call.h \
src/core/surface/channel.h \
@@ -904,6 +905,7 @@ src/core/tsi/fake_transport_security.c \
src/core/tsi/ssl_transport_security.c \
src/core/tsi/transport_security.c \
src/core/census/grpc_context.c \
+src/core/census/grpc_filter.c \
src/core/channel/channel_args.c \
src/core/channel/channel_stack.c \
src/core/channel/client_channel.c \
@@ -1055,6 +1057,7 @@ src/core/support/stack_lockfree.h \
src/core/support/string.h \
src/core/support/string_win32.h \
src/core/support/thd_internal.h \
+src/core/support/time_precise.h \
src/core/support/alloc.c \
src/core/support/cmdline.c \
src/core/support/cpu_iphone.c \
diff --git a/tools/jenkins/run_jenkins.sh b/tools/jenkins/run_jenkins.sh
index 1ef7bb1ba0..0f15835ea8 100755
--- a/tools/jenkins/run_jenkins.sh
+++ b/tools/jenkins/run_jenkins.sh
@@ -89,8 +89,12 @@ then
bash -l /var/local/jenkins/grpc/tools/jenkins/docker_run_jenkins.sh || DOCKER_FAILED="true"
DOCKER_CID=`cat docker.cid`
- docker kill $DOCKER_CID
+ # forcefully kill the instance if it's still running, otherwise
+ # continue
+ # (failure to kill something that's already dead => things are dead)
+ docker kill $DOCKER_CID || true
docker cp $DOCKER_CID:/var/local/git/grpc/report.xml $git_root
+ # TODO(ctiller): why?
sleep 4
docker rm $DOCKER_CID || true
elif [ "$platform" == "interop" ]
diff --git a/tools/run_tests/build_php.sh b/tools/run_tests/build_php.sh
index 2d52a6e33b..1d81779b6a 100755
--- a/tools/run_tests/build_php.sh
+++ b/tools/run_tests/build_php.sh
@@ -37,6 +37,7 @@ cd $(dirname $0)/../..
root=`pwd`
export GRPC_LIB_SUBDIR=libs/$CONFIG
+export CFLAGS="-Wno-parentheses-equality"
# build php
cd src/php
diff --git a/tools/run_tests/jobset.py b/tools/run_tests/jobset.py
index 538deac0e3..2a86319125 100755
--- a/tools/run_tests/jobset.py
+++ b/tools/run_tests/jobset.py
@@ -96,12 +96,12 @@ def message(tag, msg, explanatory_text=None, do_newline=False):
return
message.old_tag = tag
message.old_msg = msg
- if platform.system() == 'Windows' or not sys.stdout.isatty():
- if explanatory_text:
- print explanatory_text
- print '%s: %s' % (tag, msg)
- return
try:
+ if platform.system() == 'Windows' or not sys.stdout.isatty():
+ if explanatory_text:
+ print explanatory_text
+ print '%s: %s' % (tag, msg)
+ return
sys.stdout.write('%s%s%s\x1b[%d;%dm%s\x1b[0m: %s%s' % (
_BEGINNING_OF_LINE,
_CLEAR_LINE,
diff --git a/tools/run_tests/run_csharp.bat b/tools/run_tests/run_csharp.bat
index c86136767c..310cfe0d2f 100644
--- a/tools/run_tests/run_csharp.bat
+++ b/tools/run_tests/run_csharp.bat
@@ -8,7 +8,7 @@ cd /d %~dp0\..\..\src\csharp
@rem set UUID variable to a random GUID, we will use it to put TestResults.xml to a dedicated directory, so that parallel test runs don't collide
for /F %%i in ('powershell -Command "[guid]::NewGuid().ToString()"') do (set UUID=%%i)
-packages\NUnit.Runners.2.6.4\tools\nunit-console-x86.exe -labels "%1/bin/Debug/%1.dll" -work test-results/%UUID% || goto :error
+packages\NUnit.Runners.2.6.4\tools\nunit-console-x86.exe /domain:None -labels "%1/bin/Debug/%1.dll" -work test-results/%UUID% || goto :error
endlocal
diff --git a/tools/run_tests/run_python.sh b/tools/run_tests/run_python.sh
index 6f80219b0e..fe5685f793 100755
--- a/tools/run_tests/run_python.sh
+++ b/tools/run_tests/run_python.sh
@@ -39,4 +39,14 @@ export LD_LIBRARY_PATH=$ROOT/libs/$CONFIG
export DYLD_LIBRARY_PATH=$ROOT/libs/$CONFIG
export PATH=$ROOT/bins/$CONFIG:$ROOT/bins/$CONFIG/protobuf:$PATH
source "python"$PYVER"_virtual_environment"/bin/activate
-"python"$PYVER $GRPCIO_TEST/setup.py test -a "-n8 --cov=grpc --junitxml=./report.xml"
+
+# TODO(atash): These tests don't currently run under py.test and thus don't
+# appear under the coverage report. Find a way to get these tests to work with
+# py.test (or find another tool or *something*) that's acceptable to the rest of
+# the team...
+"python"$PYVER -m grpc_test._core_over_links_base_interface_test
+"python"$PYVER -m grpc_test._crust_over_core_over_links_face_interface_test
+"python"$PYVER -m grpc_test.framework._crust_over_core_face_interface_test
+"python"$PYVER -m grpc_test.framework.core._base_interface_test
+
+"python"$PYVER $GRPCIO_TEST/setup.py test -a "-n8 --cov=grpc --junitxml=./report.xml --timeout=300"
diff --git a/tools/run_tests/run_sanity.sh b/tools/run_tests/run_sanity.sh
index 18d5ba026e..2737e564c6 100755
--- a/tools/run_tests/run_sanity.sh
+++ b/tools/run_tests/run_sanity.sh
@@ -44,8 +44,9 @@ git submodule > $submodules
diff -u $submodules - << EOF
05b155ff59114735ec8cd089f669c4c3d8f59029 third_party/gflags (v2.1.0-45-g05b155f)
+ c99458533a9b4c743ed51537e25989ea55944908 third_party/googletest (release-1.7.0)
33dd08320648ac71d7d9d732be774ed3818dccc5 third_party/openssl (OpenSSL_1_0_2d)
- 3e2c8a5dd79481e1d36572cdf65be93514ba6581 third_party/protobuf (v3.0.0-alpha-1-1048-g3e2c8a5)
+ 23408684b4d2bf1b25e14314413a14d542c18bc4 third_party/protobuf (v3.0.0-alpha-1-1592-g2340868)
50893291621658f355bc5b4d450a8d06a563053d third_party/zlib (v1.2.8)
EOF
diff --git a/tools/run_tests/run_tests.py b/tools/run_tests/run_tests.py
index beb43438e5..64900b6200 100755
--- a/tools/run_tests/run_tests.py
+++ b/tools/run_tests/run_tests.py
@@ -70,13 +70,14 @@ def platform_string():
# SimpleConfig: just compile with CONFIG=config, and run the binary to test
class SimpleConfig(object):
- def __init__(self, config, environ=None):
+ def __init__(self, config, environ=None, timeout_seconds=5*60):
if environ is None:
environ = {}
self.build_config = config
self.allow_hashing = (config != 'gcov')
self.environ = environ
self.environ['CONFIG'] = config
+ self.timeout_seconds = timeout_seconds
def job_spec(self, cmdline, hash_targets, shortname=None, environ={}):
"""Construct a jobset.JobSpec for a test under this config
@@ -96,6 +97,7 @@ class SimpleConfig(object):
return jobset.JobSpec(cmdline=cmdline,
shortname=shortname,
environ=actual_environ,
+ timeout_seconds=self.timeout_seconds,
hash_targets=hash_targets
if self.allow_hashing else None)
@@ -354,11 +356,11 @@ class Build(object):
_CONFIGS = {
'dbg': SimpleConfig('dbg'),
'opt': SimpleConfig('opt'),
- 'tsan': SimpleConfig('tsan', environ={
+ 'tsan': SimpleConfig('tsan', timeout_seconds=10*60, environ={
'TSAN_OPTIONS': 'suppressions=tools/tsan_suppressions.txt:halt_on_error=1:second_deadlock_stack=1'}),
- 'msan': SimpleConfig('msan'),
+ 'msan': SimpleConfig('msan', timeout_seconds=7*60),
'ubsan': SimpleConfig('ubsan'),
- 'asan': SimpleConfig('asan', environ={
+ 'asan': SimpleConfig('asan', timeout_seconds=7*60, environ={
'ASAN_OPTIONS': 'detect_leaks=1:color=always:suppressions=tools/tsan_suppressions.txt',
'LSAN_OPTIONS': 'report_objects=1'}),
'asan-noleaks': SimpleConfig('asan', environ={
@@ -465,7 +467,8 @@ if len(build_configs) > 1:
if platform.system() == 'Windows':
def make_jobspec(cfg, targets):
return jobset.JobSpec(['make.bat', 'CONFIG=%s' % cfg] + targets,
- cwd='vsprojects', shell=True)
+ cwd='vsprojects', shell=True,
+ timeout_seconds=30*60)
else:
def make_jobspec(cfg, targets):
return jobset.JobSpec([os.getenv('MAKE', 'make'),
@@ -535,7 +538,8 @@ def _start_port_server(port_server_port):
# if not running ==> start a new one
# otherwise, leave it up
try:
- version = urllib2.urlopen('http://localhost:%d/version' % port_server_port).read()
+ version = urllib2.urlopen('http://localhost:%d/version' % port_server_port,
+ timeout=1).read()
running = True
except Exception:
running = False
@@ -553,12 +557,20 @@ def _start_port_server(port_server_port):
stderr=subprocess.STDOUT,
stdout=port_log)
# ensure port server is up
+ waits = 0
while True:
+ if waits > 10:
+ port_server.kill()
+ print "port_server failed to start"
+ sys.exit(1)
try:
- urllib2.urlopen('http://localhost:%d/get' % port_server_port).read()
+ urllib2.urlopen('http://localhost:%d/get' % port_server_port,
+ timeout=1).read()
break
except urllib2.URLError:
+ print "waiting for port_server"
time.sleep(0.5)
+ waits += 1
except:
port_server.kill()
raise
diff --git a/tools/run_tests/sources_and_headers.json b/tools/run_tests/sources_and_headers.json
index 50f078586d..0585b8268f 100644
--- a/tools/run_tests/sources_and_headers.json
+++ b/tools/run_tests/sources_and_headers.json
@@ -238,6 +238,15 @@
]
},
{
+ "deps": [],
+ "headers": [],
+ "language": "c",
+ "name": "gen_legal_metadata_characters",
+ "src": [
+ "tools/codegen/core/gen_legal_metadata_characters.c"
+ ]
+ },
+ {
"deps": [
"gpr",
"gpr_test_util"
@@ -468,6 +477,20 @@
],
"headers": [],
"language": "c",
+ "name": "grpc_channel_args_test",
+ "src": [
+ "test/core/channel/channel_args_test.c"
+ ]
+ },
+ {
+ "deps": [
+ "gpr",
+ "gpr_test_util",
+ "grpc",
+ "grpc_test_util"
+ ],
+ "headers": [],
+ "language": "c",
"name": "grpc_channel_stack_test",
"src": [
"test/core/channel/channel_stack_test.c"
@@ -1054,8 +1077,11 @@
{
"deps": [
"gpr",
+ "gpr_test_util",
"grpc",
- "grpc++"
+ "grpc++",
+ "grpc++_test_util",
+ "grpc_test_util"
],
"headers": [],
"language": "c++",
@@ -1170,17 +1196,13 @@
},
{
"deps": [
- "gpr",
- "gpr_test_util",
- "grpc",
- "grpc++",
- "grpc_test_util"
+ "grpc++"
],
"headers": [],
"language": "c++",
- "name": "cxx_time_test",
+ "name": "cxx_string_ref_test",
"src": [
- "test/cpp/util/time_test.cc"
+ "test/cpp/util/string_ref_test.cc"
]
},
{
@@ -1193,9 +1215,9 @@
],
"headers": [],
"language": "c++",
- "name": "dynamic_thread_pool_test",
+ "name": "cxx_time_test",
"src": [
- "test/cpp/server/dynamic_thread_pool_test.cc"
+ "test/cpp/util/time_test.cc"
]
},
{
@@ -1220,21 +1242,6 @@
"gpr_test_util",
"grpc",
"grpc++",
- "grpc_test_util"
- ],
- "headers": [],
- "language": "c++",
- "name": "fixed_size_thread_pool_test",
- "src": [
- "test/cpp/server/fixed_size_thread_pool_test.cc"
- ]
- },
- {
- "deps": [
- "gpr",
- "gpr_test_util",
- "grpc",
- "grpc++",
"grpc++_test_util",
"grpc_test_util"
],
@@ -1388,57 +1395,6 @@
"grpc",
"grpc++",
"grpc++_test_config",
- "grpc_test_util",
- "pubsub_client_lib"
- ],
- "headers": [],
- "language": "c++",
- "name": "pubsub_client",
- "src": [
- "examples/pubsub/main.cc"
- ]
- },
- {
- "deps": [
- "gpr",
- "gpr_test_util",
- "grpc",
- "grpc++",
- "grpc++_test_util",
- "grpc_test_util",
- "pubsub_client_lib"
- ],
- "headers": [],
- "language": "c++",
- "name": "pubsub_publisher_test",
- "src": [
- "examples/pubsub/publisher_test.cc"
- ]
- },
- {
- "deps": [
- "gpr",
- "gpr_test_util",
- "grpc",
- "grpc++",
- "grpc++_test_util",
- "grpc_test_util",
- "pubsub_client_lib"
- ],
- "headers": [],
- "language": "c++",
- "name": "pubsub_subscriber_test",
- "src": [
- "examples/pubsub/subscriber_test.cc"
- ]
- },
- {
- "deps": [
- "gpr",
- "gpr_test_util",
- "grpc",
- "grpc++",
- "grpc++_test_config",
"grpc++_test_util",
"grpc_test_util",
"qps"
@@ -1578,8 +1534,11 @@
{
"deps": [
"gpr",
+ "gpr_test_util",
"grpc",
- "grpc++"
+ "grpc++",
+ "grpc++_test_util",
+ "grpc_test_util"
],
"headers": [],
"language": "c++",
@@ -1627,8 +1586,7 @@
"grpc",
"grpc++",
"grpc++_test_util",
- "grpc_test_util",
- "grpc_zookeeper"
+ "grpc_test_util"
],
"headers": [],
"language": "c++",
@@ -12165,7 +12123,8 @@
"src/core/support/stack_lockfree.h",
"src/core/support/string.h",
"src/core/support/string_win32.h",
- "src/core/support/thd_internal.h"
+ "src/core/support/thd_internal.h",
+ "src/core/support/time_precise.h"
],
"language": "c",
"name": "gpr",
@@ -12239,6 +12198,7 @@
"src/core/support/thd_win32.c",
"src/core/support/time.c",
"src/core/support/time_posix.c",
+ "src/core/support/time_precise.h",
"src/core/support/time_win32.c",
"src/core/support/tls_pthread.c"
]
@@ -12270,8 +12230,8 @@
"include/grpc/grpc_security.h",
"include/grpc/status.h",
"src/core/census/context.h",
+ "src/core/census/grpc_filter.h",
"src/core/census/rpc_stat_id.h",
- "src/core/channel/census_filter.h",
"src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h",
"src/core/channel/client_channel.h",
@@ -12336,7 +12296,6 @@
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
"src/core/profiling/timers.h",
- "src/core/profiling/timers_preciseclock.h",
"src/core/security/auth_filters.h",
"src/core/security/base64.h",
"src/core/security/credentials.h",
@@ -12346,6 +12305,8 @@
"src/core/security/secure_transport_setup.h",
"src/core/security/security_connector.h",
"src/core/security/security_context.h",
+ "src/core/statistics/census_interface.h",
+ "src/core/statistics/census_rpc_stats.h",
"src/core/surface/byte_buffer_queue.h",
"src/core/surface/call.h",
"src/core/surface/channel.h",
@@ -12398,10 +12359,11 @@
"src/core/census/context.c",
"src/core/census/context.h",
"src/core/census/grpc_context.c",
+ "src/core/census/grpc_filter.c",
+ "src/core/census/grpc_filter.h",
"src/core/census/initialize.c",
"src/core/census/record_stat.c",
"src/core/census/rpc_stat_id.h",
- "src/core/channel/census_filter.h",
"src/core/channel/channel_args.c",
"src/core/channel/channel_args.h",
"src/core/channel/channel_stack.c",
@@ -12536,7 +12498,6 @@
"src/core/profiling/basic_timers.c",
"src/core/profiling/stap_timers.c",
"src/core/profiling/timers.h",
- "src/core/profiling/timers_preciseclock.h",
"src/core/security/auth_filters.h",
"src/core/security/base64.c",
"src/core/security/base64.h",
@@ -12561,6 +12522,8 @@
"src/core/security/security_context.h",
"src/core/security/server_auth_filter.c",
"src/core/security/server_secure_chttp2.c",
+ "src/core/statistics/census_interface.h",
+ "src/core/statistics/census_rpc_stats.h",
"src/core/surface/byte_buffer.c",
"src/core/surface/byte_buffer_queue.c",
"src/core/surface/byte_buffer_queue.h",
@@ -12744,8 +12707,8 @@
"include/grpc/grpc.h",
"include/grpc/status.h",
"src/core/census/context.h",
+ "src/core/census/grpc_filter.h",
"src/core/census/rpc_stat_id.h",
- "src/core/channel/census_filter.h",
"src/core/channel/channel_args.h",
"src/core/channel/channel_stack.h",
"src/core/channel/client_channel.h",
@@ -12810,7 +12773,8 @@
"src/core/json/json_reader.h",
"src/core/json/json_writer.h",
"src/core/profiling/timers.h",
- "src/core/profiling/timers_preciseclock.h",
+ "src/core/statistics/census_interface.h",
+ "src/core/statistics/census_rpc_stats.h",
"src/core/surface/byte_buffer_queue.h",
"src/core/surface/call.h",
"src/core/surface/channel.h",
@@ -12858,10 +12822,11 @@
"src/core/census/context.c",
"src/core/census/context.h",
"src/core/census/grpc_context.c",
+ "src/core/census/grpc_filter.c",
+ "src/core/census/grpc_filter.h",
"src/core/census/initialize.c",
"src/core/census/record_stat.c",
"src/core/census/rpc_stat_id.h",
- "src/core/channel/census_filter.h",
"src/core/channel/channel_args.c",
"src/core/channel/channel_args.h",
"src/core/channel/channel_stack.c",
@@ -12995,7 +12960,8 @@
"src/core/profiling/basic_timers.c",
"src/core/profiling/stap_timers.c",
"src/core/profiling/timers.h",
- "src/core/profiling/timers_preciseclock.h",
+ "src/core/statistics/census_interface.h",
+ "src/core/statistics/census_rpc_stats.h",
"src/core/surface/byte_buffer.c",
"src/core/surface/byte_buffer_queue.c",
"src/core/surface/byte_buffer_queue.h",
@@ -13118,25 +13084,16 @@
"grpc"
],
"headers": [
- "include/grpc++/async_generic_service.h",
- "include/grpc++/async_unary_call.h",
- "include/grpc++/auth_context.h",
- "include/grpc++/byte_buffer.h",
- "include/grpc++/channel_arguments.h",
- "include/grpc++/channel_interface.h",
+ "include/grpc++/channel.h",
"include/grpc++/client_context.h",
"include/grpc++/completion_queue.h",
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
"include/grpc++/create_channel.h",
"include/grpc++/credentials.h",
- "include/grpc++/dynamic_thread_pool.h",
- "include/grpc++/fixed_size_thread_pool.h",
- "include/grpc++/generic_stub.h",
+ "include/grpc++/generic/async_generic_service.h",
+ "include/grpc++/generic/generic_stub.h",
"include/grpc++/impl/call.h",
"include/grpc++/impl/client_unary_call.h",
"include/grpc++/impl/grpc_library.h",
- "include/grpc++/impl/internal_stub.h",
"include/grpc++/impl/proto_utils.h",
"include/grpc++/impl/rpc_method.h",
"include/grpc++/impl/rpc_service_method.h",
@@ -13152,41 +13109,42 @@
"include/grpc++/server_builder.h",
"include/grpc++/server_context.h",
"include/grpc++/server_credentials.h",
- "include/grpc++/slice.h",
- "include/grpc++/status.h",
- "include/grpc++/status_code_enum.h",
- "include/grpc++/stream.h",
- "include/grpc++/stub_options.h",
- "include/grpc++/thread_pool_interface.h",
- "include/grpc++/time.h",
- "src/cpp/client/channel.h",
+ "include/grpc++/support/async_stream.h",
+ "include/grpc++/support/async_unary_call.h",
+ "include/grpc++/support/auth_context.h",
+ "include/grpc++/support/byte_buffer.h",
+ "include/grpc++/support/channel_arguments.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
+ "include/grpc++/support/slice.h",
+ "include/grpc++/support/status.h",
+ "include/grpc++/support/status_code_enum.h",
+ "include/grpc++/support/string_ref.h",
+ "include/grpc++/support/stub_options.h",
+ "include/grpc++/support/sync_stream.h",
+ "include/grpc++/support/time.h",
+ "src/cpp/client/create_channel_internal.h",
"src/cpp/client/secure_credentials.h",
"src/cpp/common/create_auth_context.h",
"src/cpp/common/secure_auth_context.h",
- "src/cpp/server/secure_server_credentials.h"
+ "src/cpp/server/dynamic_thread_pool.h",
+ "src/cpp/server/fixed_size_thread_pool.h",
+ "src/cpp/server/secure_server_credentials.h",
+ "src/cpp/server/thread_pool_interface.h"
],
"language": "c++",
"name": "grpc++",
"src": [
- "include/grpc++/async_generic_service.h",
- "include/grpc++/async_unary_call.h",
- "include/grpc++/auth_context.h",
- "include/grpc++/byte_buffer.h",
- "include/grpc++/channel_arguments.h",
- "include/grpc++/channel_interface.h",
+ "include/grpc++/channel.h",
"include/grpc++/client_context.h",
"include/grpc++/completion_queue.h",
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
"include/grpc++/create_channel.h",
"include/grpc++/credentials.h",
- "include/grpc++/dynamic_thread_pool.h",
- "include/grpc++/fixed_size_thread_pool.h",
- "include/grpc++/generic_stub.h",
+ "include/grpc++/generic/async_generic_service.h",
+ "include/grpc++/generic/generic_stub.h",
"include/grpc++/impl/call.h",
"include/grpc++/impl/client_unary_call.h",
"include/grpc++/impl/grpc_library.h",
- "include/grpc++/impl/internal_stub.h",
"include/grpc++/impl/proto_utils.h",
"include/grpc++/impl/rpc_method.h",
"include/grpc++/impl/rpc_service_method.h",
@@ -13202,22 +13160,29 @@
"include/grpc++/server_builder.h",
"include/grpc++/server_context.h",
"include/grpc++/server_credentials.h",
- "include/grpc++/slice.h",
- "include/grpc++/status.h",
- "include/grpc++/status_code_enum.h",
- "include/grpc++/stream.h",
- "include/grpc++/stub_options.h",
- "include/grpc++/thread_pool_interface.h",
- "include/grpc++/time.h",
+ "include/grpc++/support/async_stream.h",
+ "include/grpc++/support/async_unary_call.h",
+ "include/grpc++/support/auth_context.h",
+ "include/grpc++/support/byte_buffer.h",
+ "include/grpc++/support/channel_arguments.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
+ "include/grpc++/support/slice.h",
+ "include/grpc++/support/status.h",
+ "include/grpc++/support/status_code_enum.h",
+ "include/grpc++/support/string_ref.h",
+ "include/grpc++/support/stub_options.h",
+ "include/grpc++/support/sync_stream.h",
+ "include/grpc++/support/time.h",
"src/cpp/client/channel.cc",
- "src/cpp/client/channel.h",
"src/cpp/client/channel_arguments.cc",
"src/cpp/client/client_context.cc",
"src/cpp/client/create_channel.cc",
+ "src/cpp/client/create_channel_internal.cc",
+ "src/cpp/client/create_channel_internal.h",
"src/cpp/client/credentials.cc",
"src/cpp/client/generic_stub.cc",
"src/cpp/client/insecure_credentials.cc",
- "src/cpp/client/internal_stub.cc",
"src/cpp/client/secure_channel_arguments.cc",
"src/cpp/client/secure_credentials.cc",
"src/cpp/client/secure_credentials.h",
@@ -13233,7 +13198,9 @@
"src/cpp/server/async_generic_service.cc",
"src/cpp/server/create_default_thread_pool.cc",
"src/cpp/server/dynamic_thread_pool.cc",
+ "src/cpp/server/dynamic_thread_pool.h",
"src/cpp/server/fixed_size_thread_pool.cc",
+ "src/cpp/server/fixed_size_thread_pool.h",
"src/cpp/server/insecure_server_credentials.cc",
"src/cpp/server/secure_server_credentials.cc",
"src/cpp/server/secure_server_credentials.h",
@@ -13241,9 +13208,11 @@
"src/cpp/server/server_builder.cc",
"src/cpp/server/server_context.cc",
"src/cpp/server/server_credentials.cc",
+ "src/cpp/server/thread_pool_interface.h",
"src/cpp/util/byte_buffer.cc",
"src/cpp/util/slice.cc",
"src/cpp/util/status.cc",
+ "src/cpp/util/string_ref.cc",
"src/cpp/util/time.cc"
]
},
@@ -13273,6 +13242,7 @@
"test/cpp/util/echo_duplicate.pb.h",
"test/cpp/util/messages.grpc.pb.h",
"test/cpp/util/messages.pb.h",
+ "test/cpp/util/string_ref_helper.h",
"test/cpp/util/subprocess.h"
],
"language": "c++",
@@ -13282,6 +13252,8 @@
"test/cpp/util/cli_call.h",
"test/cpp/util/create_test_channel.cc",
"test/cpp/util/create_test_channel.h",
+ "test/cpp/util/string_ref_helper.cc",
+ "test/cpp/util/string_ref_helper.h",
"test/cpp/util/subprocess.cc",
"test/cpp/util/subprocess.h"
]
@@ -13292,25 +13264,16 @@
"grpc_unsecure"
],
"headers": [
- "include/grpc++/async_generic_service.h",
- "include/grpc++/async_unary_call.h",
- "include/grpc++/auth_context.h",
- "include/grpc++/byte_buffer.h",
- "include/grpc++/channel_arguments.h",
- "include/grpc++/channel_interface.h",
+ "include/grpc++/channel.h",
"include/grpc++/client_context.h",
"include/grpc++/completion_queue.h",
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
"include/grpc++/create_channel.h",
"include/grpc++/credentials.h",
- "include/grpc++/dynamic_thread_pool.h",
- "include/grpc++/fixed_size_thread_pool.h",
- "include/grpc++/generic_stub.h",
+ "include/grpc++/generic/async_generic_service.h",
+ "include/grpc++/generic/generic_stub.h",
"include/grpc++/impl/call.h",
"include/grpc++/impl/client_unary_call.h",
"include/grpc++/impl/grpc_library.h",
- "include/grpc++/impl/internal_stub.h",
"include/grpc++/impl/proto_utils.h",
"include/grpc++/impl/rpc_method.h",
"include/grpc++/impl/rpc_service_method.h",
@@ -13326,38 +13289,39 @@
"include/grpc++/server_builder.h",
"include/grpc++/server_context.h",
"include/grpc++/server_credentials.h",
- "include/grpc++/slice.h",
- "include/grpc++/status.h",
- "include/grpc++/status_code_enum.h",
- "include/grpc++/stream.h",
- "include/grpc++/stub_options.h",
- "include/grpc++/thread_pool_interface.h",
- "include/grpc++/time.h",
- "src/cpp/client/channel.h",
- "src/cpp/common/create_auth_context.h"
+ "include/grpc++/support/async_stream.h",
+ "include/grpc++/support/async_unary_call.h",
+ "include/grpc++/support/auth_context.h",
+ "include/grpc++/support/byte_buffer.h",
+ "include/grpc++/support/channel_arguments.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
+ "include/grpc++/support/slice.h",
+ "include/grpc++/support/status.h",
+ "include/grpc++/support/status_code_enum.h",
+ "include/grpc++/support/string_ref.h",
+ "include/grpc++/support/stub_options.h",
+ "include/grpc++/support/sync_stream.h",
+ "include/grpc++/support/time.h",
+ "src/cpp/client/create_channel_internal.h",
+ "src/cpp/common/create_auth_context.h",
+ "src/cpp/server/dynamic_thread_pool.h",
+ "src/cpp/server/fixed_size_thread_pool.h",
+ "src/cpp/server/thread_pool_interface.h"
],
"language": "c++",
"name": "grpc++_unsecure",
"src": [
- "include/grpc++/async_generic_service.h",
- "include/grpc++/async_unary_call.h",
- "include/grpc++/auth_context.h",
- "include/grpc++/byte_buffer.h",
- "include/grpc++/channel_arguments.h",
- "include/grpc++/channel_interface.h",
+ "include/grpc++/channel.h",
"include/grpc++/client_context.h",
"include/grpc++/completion_queue.h",
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
"include/grpc++/create_channel.h",
"include/grpc++/credentials.h",
- "include/grpc++/dynamic_thread_pool.h",
- "include/grpc++/fixed_size_thread_pool.h",
- "include/grpc++/generic_stub.h",
+ "include/grpc++/generic/async_generic_service.h",
+ "include/grpc++/generic/generic_stub.h",
"include/grpc++/impl/call.h",
"include/grpc++/impl/client_unary_call.h",
"include/grpc++/impl/grpc_library.h",
- "include/grpc++/impl/internal_stub.h",
"include/grpc++/impl/proto_utils.h",
"include/grpc++/impl/rpc_method.h",
"include/grpc++/impl/rpc_service_method.h",
@@ -13373,22 +13337,29 @@
"include/grpc++/server_builder.h",
"include/grpc++/server_context.h",
"include/grpc++/server_credentials.h",
- "include/grpc++/slice.h",
- "include/grpc++/status.h",
- "include/grpc++/status_code_enum.h",
- "include/grpc++/stream.h",
- "include/grpc++/stub_options.h",
- "include/grpc++/thread_pool_interface.h",
- "include/grpc++/time.h",
+ "include/grpc++/support/async_stream.h",
+ "include/grpc++/support/async_unary_call.h",
+ "include/grpc++/support/auth_context.h",
+ "include/grpc++/support/byte_buffer.h",
+ "include/grpc++/support/channel_arguments.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
+ "include/grpc++/support/slice.h",
+ "include/grpc++/support/status.h",
+ "include/grpc++/support/status_code_enum.h",
+ "include/grpc++/support/string_ref.h",
+ "include/grpc++/support/stub_options.h",
+ "include/grpc++/support/sync_stream.h",
+ "include/grpc++/support/time.h",
"src/cpp/client/channel.cc",
- "src/cpp/client/channel.h",
"src/cpp/client/channel_arguments.cc",
"src/cpp/client/client_context.cc",
"src/cpp/client/create_channel.cc",
+ "src/cpp/client/create_channel_internal.cc",
+ "src/cpp/client/create_channel_internal.h",
"src/cpp/client/credentials.cc",
"src/cpp/client/generic_stub.cc",
"src/cpp/client/insecure_credentials.cc",
- "src/cpp/client/internal_stub.cc",
"src/cpp/common/call.cc",
"src/cpp/common/completion_queue.cc",
"src/cpp/common/create_auth_context.h",
@@ -13398,23 +13369,27 @@
"src/cpp/server/async_generic_service.cc",
"src/cpp/server/create_default_thread_pool.cc",
"src/cpp/server/dynamic_thread_pool.cc",
+ "src/cpp/server/dynamic_thread_pool.h",
"src/cpp/server/fixed_size_thread_pool.cc",
+ "src/cpp/server/fixed_size_thread_pool.h",
"src/cpp/server/insecure_server_credentials.cc",
"src/cpp/server/server.cc",
"src/cpp/server/server_builder.cc",
"src/cpp/server/server_context.cc",
"src/cpp/server/server_credentials.cc",
+ "src/cpp/server/thread_pool_interface.h",
"src/cpp/util/byte_buffer.cc",
"src/cpp/util/slice.cc",
"src/cpp/util/status.cc",
+ "src/cpp/util/string_ref.cc",
"src/cpp/util/time.cc"
]
},
{
"deps": [],
"headers": [
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
"src/compiler/config.h",
"src/compiler/cpp_generator.h",
"src/compiler/cpp_generator_helpers.h",
@@ -13432,8 +13407,8 @@
"language": "c++",
"name": "grpc_plugin_support",
"src": [
- "include/grpc++/config.h",
- "include/grpc++/config_protobuf.h",
+ "include/grpc++/support/config.h",
+ "include/grpc++/support/config_protobuf.h",
"src/compiler/config.h",
"src/compiler/cpp_generator.cc",
"src/compiler/cpp_generator.h",
@@ -13546,31 +13521,6 @@
},
{
"deps": [
- "gpr",
- "grpc",
- "grpc++"
- ],
- "headers": [
- "examples/pubsub/empty.grpc.pb.h",
- "examples/pubsub/empty.pb.h",
- "examples/pubsub/label.grpc.pb.h",
- "examples/pubsub/label.pb.h",
- "examples/pubsub/publisher.h",
- "examples/pubsub/pubsub.grpc.pb.h",
- "examples/pubsub/pubsub.pb.h",
- "examples/pubsub/subscriber.h"
- ],
- "language": "c++",
- "name": "pubsub_client_lib",
- "src": [
- "examples/pubsub/publisher.cc",
- "examples/pubsub/publisher.h",
- "examples/pubsub/subscriber.cc",
- "examples/pubsub/subscriber.h"
- ]
- },
- {
- "deps": [
"grpc++",
"grpc++_test_util",
"grpc_test_util"
diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json
index 127b1dfc40..f1c57190af 100644
--- a/tools/run_tests/tests.json
+++ b/tools/run_tests/tests.json
@@ -577,6 +577,24 @@
"exclude_configs": [],
"flaky": false,
"language": "c",
+ "name": "grpc_channel_args_test",
+ "platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ]
+ },
+ {
+ "ci_platforms": [
+ "linux",
+ "mac",
+ "posix",
+ "windows"
+ ],
+ "exclude_configs": [],
+ "flaky": false,
+ "language": "c",
"name": "grpc_channel_stack_test",
"platforms": [
"linux",
@@ -1331,7 +1349,7 @@
"exclude_configs": [],
"flaky": false,
"language": "c++",
- "name": "cxx_time_test",
+ "name": "cxx_string_ref_test",
"platforms": [
"linux",
"mac",
@@ -1349,7 +1367,7 @@
"exclude_configs": [],
"flaky": false,
"language": "c++",
- "name": "dynamic_thread_pool_test",
+ "name": "cxx_time_test",
"platforms": [
"linux",
"mac",
@@ -1385,24 +1403,6 @@
"exclude_configs": [],
"flaky": false,
"language": "c++",
- "name": "fixed_size_thread_pool_test",
- "platforms": [
- "linux",
- "mac",
- "posix",
- "windows"
- ]
- },
- {
- "ci_platforms": [
- "linux",
- "mac",
- "posix",
- "windows"
- ],
- "exclude_configs": [],
- "flaky": false,
- "language": "c++",
"name": "generic_end2end_test",
"platforms": [
"linux",
diff --git a/vsprojects/Grpc.mak b/vsprojects/Grpc.mak
index 662de784f7..15a500dcae 100644
--- a/vsprojects/Grpc.mak
+++ b/vsprojects/Grpc.mak
@@ -80,10 +80,10 @@ $(OUT_DIR):
build_libs: build_gpr build_gpr_test_util build_grpc build_grpc_test_util build_grpc_test_util_unsecure build_grpc_unsecure Debug\grpc_zookeeper.lib Debug\reconnect_server.lib build_grpc++ Debug\grpc++_test_config.lib Debug\grpc++_test_util.lib build_grpc++_unsecure Debug\interop_client_helper.lib Debug\interop_client_main.lib Debug\interop_server_helper.lib Debug\interop_server_main.lib Debug\qps.lib Debug\end2end_fixture_chttp2_fake_security.lib Debug\end2end_fixture_chttp2_fullstack.lib Debug\end2end_fixture_chttp2_fullstack_compression.lib Debug\end2end_fixture_chttp2_fullstack_with_proxy.lib Debug\end2end_fixture_chttp2_simple_ssl_fullstack.lib Debug\end2end_fixture_chttp2_simple_ssl_fullstack_with_proxy.lib Debug\end2end_fixture_chttp2_simple_ssl_with_oauth2_fullstack.lib Debug\end2end_fixture_chttp2_socket_pair.lib Debug\end2end_fixture_chttp2_socket_pair_one_byte_at_a_time.lib Debug\end2end_fixture_chttp2_socket_pair_with_grpc_trace.lib Debug\end2end_test_bad_hostname.lib Debug\end2end_test_cancel_after_accept.lib Debug\end2end_test_cancel_after_accept_and_writes_closed.lib Debug\end2end_test_cancel_after_invoke.lib Debug\end2end_test_cancel_before_invoke.lib Debug\end2end_test_cancel_in_a_vacuum.lib Debug\end2end_test_census_simple_request.lib Debug\end2end_test_channel_connectivity.lib Debug\end2end_test_default_host.lib Debug\end2end_test_disappearing_server.lib Debug\end2end_test_early_server_shutdown_finishes_inflight_calls.lib Debug\end2end_test_early_server_shutdown_finishes_tags.lib Debug\end2end_test_empty_batch.lib Debug\end2end_test_graceful_server_shutdown.lib Debug\end2end_test_invoke_large_request.lib Debug\end2end_test_max_concurrent_streams.lib Debug\end2end_test_max_message_length.lib Debug\end2end_test_no_op.lib Debug\end2end_test_ping_pong_streaming.lib Debug\end2end_test_registered_call.lib Debug\end2end_test_request_response_with_binary_metadata_and_payload.lib Debug\end2end_test_request_response_with_metadata_and_payload.lib Debug\end2end_test_request_response_with_payload.lib Debug\end2end_test_request_response_with_payload_and_call_creds.lib Debug\end2end_test_request_response_with_trailing_metadata_and_payload.lib Debug\end2end_test_request_with_compressed_payload.lib Debug\end2end_test_request_with_flags.lib Debug\end2end_test_request_with_large_metadata.lib Debug\end2end_test_request_with_payload.lib Debug\end2end_test_server_finishes_request.lib Debug\end2end_test_simple_delayed_request.lib Debug\end2end_test_simple_request.lib Debug\end2end_test_simple_request_with_high_initial_sequence_number.lib Debug\end2end_certs.lib Debug\bad_client_test.lib
buildtests: buildtests_c buildtests_cxx
-buildtests_c: alarm_heap_test.exe alarm_list_test.exe alarm_test.exe alpn_test.exe bin_encoder_test.exe chttp2_status_conversion_test.exe chttp2_stream_encoder_test.exe chttp2_stream_map_test.exe compression_test.exe fling_client.exe fling_server.exe gpr_cmdline_test.exe gpr_env_test.exe gpr_file_test.exe gpr_histogram_test.exe gpr_host_port_test.exe gpr_log_test.exe gpr_slice_buffer_test.exe gpr_slice_test.exe gpr_stack_lockfree_test.exe gpr_string_test.exe gpr_sync_test.exe gpr_thd_test.exe gpr_time_test.exe gpr_tls_test.exe gpr_useful_test.exe grpc_auth_context_test.exe grpc_base64_test.exe grpc_byte_buffer_reader_test.exe grpc_channel_stack_test.exe grpc_completion_queue_test.exe grpc_credentials_test.exe grpc_json_token_test.exe grpc_jwt_verifier_test.exe grpc_security_connector_test.exe grpc_stream_op_test.exe hpack_parser_test.exe hpack_table_test.exe httpcli_format_request_test.exe httpcli_parser_test.exe json_rewrite.exe json_rewrite_test.exe json_test.exe lame_client_test.exe message_compress_test.exe multi_init_test.exe multiple_server_queues_test.exe murmur_hash_test.exe no_server_test.exe resolve_address_test.exe secure_endpoint_test.exe sockaddr_utils_test.exe time_averaged_stats_test.exe timeout_encoding_test.exe timers_test.exe transport_metadata_test.exe transport_security_test.exe uri_parser_test.exe chttp2_fake_security_bad_hostname_test.exe chttp2_fake_security_cancel_after_accept_test.exe chttp2_fake_security_cancel_after_accept_and_writes_closed_test.exe chttp2_fake_security_cancel_after_invoke_test.exe chttp2_fake_security_cancel_before_invoke_test.exe chttp2_fake_security_cancel_in_a_vacuum_test.exe chttp2_fake_security_census_simple_request_test.exe chttp2_fake_security_channel_connectivity_test.exe chttp2_fake_security_default_host_test.exe chttp2_fake_security_disappearing_server_test.exe chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_fake_security_early_server_shutdown_finishes_tags_test.exe chttp2_fake_security_empty_batch_test.exe chttp2_fake_security_graceful_server_shutdown_test.exe chttp2_fake_security_invoke_large_request_test.exe chttp2_fake_security_max_concurrent_streams_test.exe chttp2_fake_security_max_message_length_test.exe chttp2_fake_security_no_op_test.exe chttp2_fake_security_ping_pong_streaming_test.exe chttp2_fake_security_registered_call_test.exe chttp2_fake_security_request_response_with_binary_metadata_and_payload_test.exe chttp2_fake_security_request_response_with_metadata_and_payload_test.exe chttp2_fake_security_request_response_with_payload_test.exe chttp2_fake_security_request_response_with_payload_and_call_creds_test.exe chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test.exe chttp2_fake_security_request_with_compressed_payload_test.exe chttp2_fake_security_request_with_flags_test.exe chttp2_fake_security_request_with_large_metadata_test.exe chttp2_fake_security_request_with_payload_test.exe chttp2_fake_security_server_finishes_request_test.exe chttp2_fake_security_simple_delayed_request_test.exe chttp2_fake_security_simple_request_test.exe chttp2_fake_security_simple_request_with_high_initial_sequence_number_test.exe chttp2_fullstack_bad_hostname_test.exe chttp2_fullstack_cancel_after_accept_test.exe chttp2_fullstack_cancel_after_accept_and_writes_closed_test.exe chttp2_fullstack_cancel_after_invoke_test.exe chttp2_fullstack_cancel_before_invoke_test.exe chttp2_fullstack_cancel_in_a_vacuum_test.exe chttp2_fullstack_census_simple_request_test.exe chttp2_fullstack_channel_connectivity_test.exe chttp2_fullstack_default_host_test.exe chttp2_fullstack_disappearing_server_test.exe chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_fullstack_early_server_shutdown_finishes_tags_test.exe chttp2_fullstack_empty_batch_test.exe chttp2_fullstack_graceful_server_shutdown_test.exe chttp2_fullstack_invoke_large_request_test.exe chttp2_fullstack_max_concurrent_streams_test.exe chttp2_fullstack_max_message_length_test.exe chttp2_fullstack_no_op_test.exe chttp2_fullstack_ping_pong_streaming_test.exe chttp2_fullstack_registered_call_test.exe chttp2_fullstack_request_response_with_binary_metadata_and_payload_test.exe chttp2_fullstack_request_response_with_metadata_and_payload_test.exe chttp2_fullstack_request_response_with_payload_test.exe chttp2_fullstack_request_response_with_payload_and_call_creds_test.exe chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test.exe chttp2_fullstack_request_with_compressed_payload_test.exe chttp2_fullstack_request_with_flags_test.exe chttp2_fullstack_request_with_large_metadata_test.exe chttp2_fullstack_request_with_payload_test.exe chttp2_fullstack_server_finishes_request_test.exe chttp2_fullstack_simple_delayed_request_test.exe chttp2_fullstack_simple_request_test.exe chttp2_fullstack_simple_request_with_high_initial_sequence_number_test.exe chttp2_fullstack_compression_bad_hostname_test.exe chttp2_fullstack_compression_cancel_after_accept_test.exe chttp2_fullstack_compression_cancel_after_accept_and_writes_closed_test.exe chttp2_fullstack_compression_cancel_after_invoke_test.exe chttp2_fullstack_compression_cancel_before_invoke_test.exe chttp2_fullstack_compression_cancel_in_a_vacuum_test.exe chttp2_fullstack_compression_census_simple_request_test.exe chttp2_fullstack_compression_channel_connectivity_test.exe chttp2_fullstack_compression_default_host_test.exe chttp2_fullstack_compression_disappearing_server_test.exe chttp2_fullstack_compression_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_fullstack_compression_early_server_shutdown_finishes_tags_test.exe chttp2_fullstack_compression_empty_batch_test.exe chttp2_fullstack_compression_graceful_server_shutdown_test.exe chttp2_fullstack_compression_invoke_large_request_test.exe chttp2_fullstack_compression_max_concurrent_streams_test.exe chttp2_fullstack_compression_max_message_length_test.exe chttp2_fullstack_compression_no_op_test.exe chttp2_fullstack_compression_ping_pong_streaming_test.exe chttp2_fullstack_compression_registered_call_test.exe chttp2_fullstack_compression_request_response_with_binary_metadata_and_payload_test.exe chttp2_fullstack_compression_request_response_with_metadata_and_payload_test.exe chttp2_fullstack_compression_request_response_with_payload_test.exe chttp2_fullstack_compression_request_response_with_payload_and_call_creds_test.exe chttp2_fullstack_compression_request_response_with_trailing_metadata_and_payload_test.exe chttp2_fullstack_compression_request_with_compressed_payload_test.exe chttp2_fullstack_compression_request_with_flags_test.exe chttp2_fullstack_compression_request_with_large_metadata_test.exe chttp2_fullstack_compression_request_with_payload_test.exe chttp2_fullstack_compression_server_finishes_request_test.exe chttp2_fullstack_compression_simple_delayed_request_test.exe chttp2_fullstack_compression_simple_request_test.exe chttp2_fullstack_compression_simple_request_with_high_initial_sequence_number_test.exe chttp2_fullstack_with_proxy_bad_hostname_test.exe chttp2_fullstack_with_proxy_cancel_after_accept_test.exe chttp2_fullstack_with_proxy_cancel_after_accept_and_writes_closed_test.exe chttp2_fullstack_with_proxy_cancel_after_invoke_test.exe chttp2_fullstack_with_proxy_cancel_before_invoke_test.exe chttp2_fullstack_with_proxy_cancel_in_a_vacuum_test.exe chttp2_fullstack_with_proxy_census_simple_request_test.exe chttp2_fullstack_with_proxy_default_host_test.exe chttp2_fullstack_with_proxy_disappearing_server_test.exe chttp2_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_fullstack_with_proxy_early_server_shutdown_finishes_tags_test.exe chttp2_fullstack_with_proxy_empty_batch_test.exe chttp2_fullstack_with_proxy_graceful_server_shutdown_test.exe chttp2_fullstack_with_proxy_invoke_large_request_test.exe chttp2_fullstack_with_proxy_max_message_length_test.exe chttp2_fullstack_with_proxy_no_op_test.exe chttp2_fullstack_with_proxy_ping_pong_streaming_test.exe chttp2_fullstack_with_proxy_registered_call_test.exe chttp2_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_test.exe chttp2_fullstack_with_proxy_request_response_with_metadata_and_payload_test.exe chttp2_fullstack_with_proxy_request_response_with_payload_test.exe chttp2_fullstack_with_proxy_request_response_with_payload_and_call_creds_test.exe chttp2_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_test.exe chttp2_fullstack_with_proxy_request_with_large_metadata_test.exe chttp2_fullstack_with_proxy_request_with_payload_test.exe chttp2_fullstack_with_proxy_server_finishes_request_test.exe chttp2_fullstack_with_proxy_simple_delayed_request_test.exe chttp2_fullstack_with_proxy_simple_request_test.exe chttp2_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_test.exe chttp2_simple_ssl_fullstack_bad_hostname_test.exe chttp2_simple_ssl_fullstack_cancel_after_accept_test.exe chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test.exe chttp2_simple_ssl_fullstack_cancel_after_invoke_test.exe chttp2_simple_ssl_fullstack_cancel_before_invoke_test.exe chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test.exe chttp2_simple_ssl_fullstack_census_simple_request_test.exe chttp2_simple_ssl_fullstack_channel_connectivity_test.exe chttp2_simple_ssl_fullstack_default_host_test.exe chttp2_simple_ssl_fullstack_disappearing_server_test.exe chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test.exe chttp2_simple_ssl_fullstack_empty_batch_test.exe chttp2_simple_ssl_fullstack_graceful_server_shutdown_test.exe chttp2_simple_ssl_fullstack_invoke_large_request_test.exe chttp2_simple_ssl_fullstack_max_concurrent_streams_test.exe chttp2_simple_ssl_fullstack_max_message_length_test.exe chttp2_simple_ssl_fullstack_no_op_test.exe chttp2_simple_ssl_fullstack_ping_pong_streaming_test.exe chttp2_simple_ssl_fullstack_registered_call_test.exe chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_request_response_with_payload_test.exe chttp2_simple_ssl_fullstack_request_response_with_payload_and_call_creds_test.exe chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_request_with_compressed_payload_test.exe chttp2_simple_ssl_fullstack_request_with_flags_test.exe chttp2_simple_ssl_fullstack_request_with_large_metadata_test.exe chttp2_simple_ssl_fullstack_request_with_payload_test.exe chttp2_simple_ssl_fullstack_server_finishes_request_test.exe chttp2_simple_ssl_fullstack_simple_delayed_request_test.exe chttp2_simple_ssl_fullstack_simple_request_test.exe chttp2_simple_ssl_fullstack_simple_request_with_high_initial_sequence_number_test.exe chttp2_simple_ssl_fullstack_with_proxy_bad_hostname_test.exe chttp2_simple_ssl_fullstack_with_proxy_cancel_after_accept_test.exe chttp2_simple_ssl_fullstack_with_proxy_cancel_after_accept_and_writes_closed_test.exe chttp2_simple_ssl_fullstack_with_proxy_cancel_after_invoke_test.exe chttp2_simple_ssl_fullstack_with_proxy_cancel_before_invoke_test.exe chttp2_simple_ssl_fullstack_with_proxy_cancel_in_a_vacuum_test.exe chttp2_simple_ssl_fullstack_with_proxy_census_simple_request_test.exe chttp2_simple_ssl_fullstack_with_proxy_default_host_test.exe chttp2_simple_ssl_fullstack_with_proxy_disappearing_server_test.exe chttp2_simple_ssl_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_simple_ssl_fullstack_with_proxy_early_server_shutdown_finishes_tags_test.exe chttp2_simple_ssl_fullstack_with_proxy_empty_batch_test.exe chttp2_simple_ssl_fullstack_with_proxy_graceful_server_shutdown_test.exe chttp2_simple_ssl_fullstack_with_proxy_invoke_large_request_test.exe chttp2_simple_ssl_fullstack_with_proxy_max_message_length_test.exe chttp2_simple_ssl_fullstack_with_proxy_no_op_test.exe chttp2_simple_ssl_fullstack_with_proxy_ping_pong_streaming_test.exe chttp2_simple_ssl_fullstack_with_proxy_registered_call_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_response_with_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_response_with_payload_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_response_with_payload_and_call_creds_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_with_large_metadata_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_with_payload_test.exe chttp2_simple_ssl_fullstack_with_proxy_server_finishes_request_test.exe chttp2_simple_ssl_fullstack_with_proxy_simple_delayed_request_test.exe chttp2_simple_ssl_fullstack_with_proxy_simple_request_test.exe chttp2_simple_ssl_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_test.exe chttp2_simple_ssl_with_oauth2_fullstack_bad_hostname_test.exe chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test.exe chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test.exe chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test.exe chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test.exe chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test.exe chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test.exe chttp2_simple_ssl_with_oauth2_fullstack_channel_connectivity_test.exe chttp2_simple_ssl_with_oauth2_fullstack_default_host_test.exe chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test.exe chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test.exe chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test.exe chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test.exe chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test.exe chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test.exe chttp2_simple_ssl_with_oauth2_fullstack_max_message_length_test.exe chttp2_simple_ssl_with_oauth2_fullstack_no_op_test.exe chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test.exe chttp2_simple_ssl_with_oauth2_fullstack_registered_call_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_and_call_creds_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_with_compressed_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_with_flags_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_server_finishes_request_test.exe chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test.exe chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test.exe chttp2_simple_ssl_with_oauth2_fullstack_simple_request_with_high_initial_sequence_number_test.exe chttp2_socket_pair_bad_hostname_test.exe chttp2_socket_pair_cancel_after_accept_test.exe chttp2_socket_pair_cancel_after_accept_and_writes_closed_test.exe chttp2_socket_pair_cancel_after_invoke_test.exe chttp2_socket_pair_cancel_before_invoke_test.exe chttp2_socket_pair_cancel_in_a_vacuum_test.exe chttp2_socket_pair_census_simple_request_test.exe chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_socket_pair_early_server_shutdown_finishes_tags_test.exe chttp2_socket_pair_empty_batch_test.exe chttp2_socket_pair_graceful_server_shutdown_test.exe chttp2_socket_pair_invoke_large_request_test.exe chttp2_socket_pair_max_concurrent_streams_test.exe chttp2_socket_pair_max_message_length_test.exe chttp2_socket_pair_no_op_test.exe chttp2_socket_pair_ping_pong_streaming_test.exe chttp2_socket_pair_registered_call_test.exe chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test.exe chttp2_socket_pair_request_response_with_metadata_and_payload_test.exe chttp2_socket_pair_request_response_with_payload_test.exe chttp2_socket_pair_request_response_with_payload_and_call_creds_test.exe chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test.exe chttp2_socket_pair_request_with_compressed_payload_test.exe chttp2_socket_pair_request_with_flags_test.exe chttp2_socket_pair_request_with_large_metadata_test.exe chttp2_socket_pair_request_with_payload_test.exe chttp2_socket_pair_server_finishes_request_test.exe chttp2_socket_pair_simple_request_test.exe chttp2_socket_pair_simple_request_with_high_initial_sequence_number_test.exe chttp2_socket_pair_one_byte_at_a_time_bad_hostname_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test.exe chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test.exe chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test.exe chttp2_socket_pair_one_byte_at_a_time_empty_batch_test.exe chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test.exe chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test.exe chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test.exe chttp2_socket_pair_one_byte_at_a_time_max_message_length_test.exe chttp2_socket_pair_one_byte_at_a_time_no_op_test.exe chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test.exe chttp2_socket_pair_one_byte_at_a_time_registered_call_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_and_call_creds_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_compressed_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_flags_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_server_finishes_request_test.exe chttp2_socket_pair_one_byte_at_a_time_simple_request_test.exe chttp2_socket_pair_one_byte_at_a_time_simple_request_with_high_initial_sequence_number_test.exe chttp2_socket_pair_with_grpc_trace_bad_hostname_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_accept_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_accept_and_writes_closed_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_invoke_test.exe chttp2_socket_pair_with_grpc_trace_cancel_before_invoke_test.exe chttp2_socket_pair_with_grpc_trace_cancel_in_a_vacuum_test.exe chttp2_socket_pair_with_grpc_trace_census_simple_request_test.exe chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_tags_test.exe chttp2_socket_pair_with_grpc_trace_empty_batch_test.exe chttp2_socket_pair_with_grpc_trace_graceful_server_shutdown_test.exe chttp2_socket_pair_with_grpc_trace_invoke_large_request_test.exe chttp2_socket_pair_with_grpc_trace_max_concurrent_streams_test.exe chttp2_socket_pair_with_grpc_trace_max_message_length_test.exe chttp2_socket_pair_with_grpc_trace_no_op_test.exe chttp2_socket_pair_with_grpc_trace_ping_pong_streaming_test.exe chttp2_socket_pair_with_grpc_trace_registered_call_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_binary_metadata_and_payload_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_metadata_and_payload_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_payload_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_payload_and_call_creds_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_trailing_metadata_and_payload_test.exe chttp2_socket_pair_with_grpc_trace_request_with_compressed_payload_test.exe chttp2_socket_pair_with_grpc_trace_request_with_flags_test.exe chttp2_socket_pair_with_grpc_trace_request_with_large_metadata_test.exe chttp2_socket_pair_with_grpc_trace_request_with_payload_test.exe chttp2_socket_pair_with_grpc_trace_server_finishes_request_test.exe chttp2_socket_pair_with_grpc_trace_simple_request_test.exe chttp2_socket_pair_with_grpc_trace_simple_request_with_high_initial_sequence_number_test.exe chttp2_fullstack_bad_hostname_unsecure_test.exe chttp2_fullstack_cancel_after_accept_unsecure_test.exe chttp2_fullstack_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_fullstack_cancel_after_invoke_unsecure_test.exe chttp2_fullstack_cancel_before_invoke_unsecure_test.exe chttp2_fullstack_cancel_in_a_vacuum_unsecure_test.exe chttp2_fullstack_census_simple_request_unsecure_test.exe chttp2_fullstack_channel_connectivity_unsecure_test.exe chttp2_fullstack_default_host_unsecure_test.exe chttp2_fullstack_disappearing_server_unsecure_test.exe chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_fullstack_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_fullstack_empty_batch_unsecure_test.exe chttp2_fullstack_graceful_server_shutdown_unsecure_test.exe chttp2_fullstack_invoke_large_request_unsecure_test.exe chttp2_fullstack_max_concurrent_streams_unsecure_test.exe chttp2_fullstack_max_message_length_unsecure_test.exe chttp2_fullstack_no_op_unsecure_test.exe chttp2_fullstack_ping_pong_streaming_unsecure_test.exe chttp2_fullstack_registered_call_unsecure_test.exe chttp2_fullstack_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_fullstack_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_fullstack_request_response_with_payload_unsecure_test.exe chttp2_fullstack_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_fullstack_request_with_compressed_payload_unsecure_test.exe chttp2_fullstack_request_with_flags_unsecure_test.exe chttp2_fullstack_request_with_large_metadata_unsecure_test.exe chttp2_fullstack_request_with_payload_unsecure_test.exe chttp2_fullstack_server_finishes_request_unsecure_test.exe chttp2_fullstack_simple_delayed_request_unsecure_test.exe chttp2_fullstack_simple_request_unsecure_test.exe chttp2_fullstack_simple_request_with_high_initial_sequence_number_unsecure_test.exe chttp2_fullstack_compression_bad_hostname_unsecure_test.exe chttp2_fullstack_compression_cancel_after_accept_unsecure_test.exe chttp2_fullstack_compression_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_fullstack_compression_cancel_after_invoke_unsecure_test.exe chttp2_fullstack_compression_cancel_before_invoke_unsecure_test.exe chttp2_fullstack_compression_cancel_in_a_vacuum_unsecure_test.exe chttp2_fullstack_compression_census_simple_request_unsecure_test.exe chttp2_fullstack_compression_channel_connectivity_unsecure_test.exe chttp2_fullstack_compression_default_host_unsecure_test.exe chttp2_fullstack_compression_disappearing_server_unsecure_test.exe chttp2_fullstack_compression_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_fullstack_compression_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_fullstack_compression_empty_batch_unsecure_test.exe chttp2_fullstack_compression_graceful_server_shutdown_unsecure_test.exe chttp2_fullstack_compression_invoke_large_request_unsecure_test.exe chttp2_fullstack_compression_max_concurrent_streams_unsecure_test.exe chttp2_fullstack_compression_max_message_length_unsecure_test.exe chttp2_fullstack_compression_no_op_unsecure_test.exe chttp2_fullstack_compression_ping_pong_streaming_unsecure_test.exe chttp2_fullstack_compression_registered_call_unsecure_test.exe chttp2_fullstack_compression_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_fullstack_compression_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_fullstack_compression_request_response_with_payload_unsecure_test.exe chttp2_fullstack_compression_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_fullstack_compression_request_with_compressed_payload_unsecure_test.exe chttp2_fullstack_compression_request_with_flags_unsecure_test.exe chttp2_fullstack_compression_request_with_large_metadata_unsecure_test.exe chttp2_fullstack_compression_request_with_payload_unsecure_test.exe chttp2_fullstack_compression_server_finishes_request_unsecure_test.exe chttp2_fullstack_compression_simple_delayed_request_unsecure_test.exe chttp2_fullstack_compression_simple_request_unsecure_test.exe chttp2_fullstack_compression_simple_request_with_high_initial_sequence_number_unsecure_test.exe chttp2_fullstack_with_proxy_bad_hostname_unsecure_test.exe chttp2_fullstack_with_proxy_cancel_after_accept_unsecure_test.exe chttp2_fullstack_with_proxy_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_fullstack_with_proxy_cancel_after_invoke_unsecure_test.exe chttp2_fullstack_with_proxy_cancel_before_invoke_unsecure_test.exe chttp2_fullstack_with_proxy_cancel_in_a_vacuum_unsecure_test.exe chttp2_fullstack_with_proxy_census_simple_request_unsecure_test.exe chttp2_fullstack_with_proxy_default_host_unsecure_test.exe chttp2_fullstack_with_proxy_disappearing_server_unsecure_test.exe chttp2_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_fullstack_with_proxy_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_fullstack_with_proxy_empty_batch_unsecure_test.exe chttp2_fullstack_with_proxy_graceful_server_shutdown_unsecure_test.exe chttp2_fullstack_with_proxy_invoke_large_request_unsecure_test.exe chttp2_fullstack_with_proxy_max_message_length_unsecure_test.exe chttp2_fullstack_with_proxy_no_op_unsecure_test.exe chttp2_fullstack_with_proxy_ping_pong_streaming_unsecure_test.exe chttp2_fullstack_with_proxy_registered_call_unsecure_test.exe chttp2_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_fullstack_with_proxy_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_fullstack_with_proxy_request_response_with_payload_unsecure_test.exe chttp2_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_fullstack_with_proxy_request_with_large_metadata_unsecure_test.exe chttp2_fullstack_with_proxy_request_with_payload_unsecure_test.exe chttp2_fullstack_with_proxy_server_finishes_request_unsecure_test.exe chttp2_fullstack_with_proxy_simple_delayed_request_unsecure_test.exe chttp2_fullstack_with_proxy_simple_request_unsecure_test.exe chttp2_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_unsecure_test.exe chttp2_socket_pair_bad_hostname_unsecure_test.exe chttp2_socket_pair_cancel_after_accept_unsecure_test.exe chttp2_socket_pair_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_socket_pair_cancel_after_invoke_unsecure_test.exe chttp2_socket_pair_cancel_before_invoke_unsecure_test.exe chttp2_socket_pair_cancel_in_a_vacuum_unsecure_test.exe chttp2_socket_pair_census_simple_request_unsecure_test.exe chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_socket_pair_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_socket_pair_empty_batch_unsecure_test.exe chttp2_socket_pair_graceful_server_shutdown_unsecure_test.exe chttp2_socket_pair_invoke_large_request_unsecure_test.exe chttp2_socket_pair_max_concurrent_streams_unsecure_test.exe chttp2_socket_pair_max_message_length_unsecure_test.exe chttp2_socket_pair_no_op_unsecure_test.exe chttp2_socket_pair_ping_pong_streaming_unsecure_test.exe chttp2_socket_pair_registered_call_unsecure_test.exe chttp2_socket_pair_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_request_response_with_payload_unsecure_test.exe chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_request_with_compressed_payload_unsecure_test.exe chttp2_socket_pair_request_with_flags_unsecure_test.exe chttp2_socket_pair_request_with_large_metadata_unsecure_test.exe chttp2_socket_pair_request_with_payload_unsecure_test.exe chttp2_socket_pair_server_finishes_request_unsecure_test.exe chttp2_socket_pair_simple_request_unsecure_test.exe chttp2_socket_pair_simple_request_with_high_initial_sequence_number_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_bad_hostname_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_census_simple_request_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_empty_batch_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_max_message_length_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_no_op_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_registered_call_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_compressed_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_flags_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_server_finishes_request_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_simple_request_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_simple_request_with_high_initial_sequence_number_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_bad_hostname_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_accept_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_invoke_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_cancel_before_invoke_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_cancel_in_a_vacuum_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_census_simple_request_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_empty_batch_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_graceful_server_shutdown_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_invoke_large_request_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_max_concurrent_streams_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_max_message_length_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_no_op_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_ping_pong_streaming_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_registered_call_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_with_compressed_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_with_flags_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_with_large_metadata_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_with_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_server_finishes_request_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_simple_request_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_simple_request_with_high_initial_sequence_number_unsecure_test.exe connection_prefix_bad_client_test.exe initial_settings_frame_bad_client_test.exe
+buildtests_c: alarm_heap_test.exe alarm_list_test.exe alarm_test.exe alpn_test.exe bin_encoder_test.exe chttp2_status_conversion_test.exe chttp2_stream_encoder_test.exe chttp2_stream_map_test.exe compression_test.exe fling_client.exe fling_server.exe gpr_cmdline_test.exe gpr_env_test.exe gpr_file_test.exe gpr_histogram_test.exe gpr_host_port_test.exe gpr_log_test.exe gpr_slice_buffer_test.exe gpr_slice_test.exe gpr_stack_lockfree_test.exe gpr_string_test.exe gpr_sync_test.exe gpr_thd_test.exe gpr_time_test.exe gpr_tls_test.exe gpr_useful_test.exe grpc_auth_context_test.exe grpc_base64_test.exe grpc_byte_buffer_reader_test.exe grpc_channel_args_test.exe grpc_channel_stack_test.exe grpc_completion_queue_test.exe grpc_credentials_test.exe grpc_json_token_test.exe grpc_jwt_verifier_test.exe grpc_security_connector_test.exe grpc_stream_op_test.exe hpack_parser_test.exe hpack_table_test.exe httpcli_format_request_test.exe httpcli_parser_test.exe json_rewrite.exe json_rewrite_test.exe json_test.exe lame_client_test.exe message_compress_test.exe multi_init_test.exe multiple_server_queues_test.exe murmur_hash_test.exe no_server_test.exe resolve_address_test.exe secure_endpoint_test.exe sockaddr_utils_test.exe time_averaged_stats_test.exe timeout_encoding_test.exe timers_test.exe transport_metadata_test.exe transport_security_test.exe uri_parser_test.exe chttp2_fake_security_bad_hostname_test.exe chttp2_fake_security_cancel_after_accept_test.exe chttp2_fake_security_cancel_after_accept_and_writes_closed_test.exe chttp2_fake_security_cancel_after_invoke_test.exe chttp2_fake_security_cancel_before_invoke_test.exe chttp2_fake_security_cancel_in_a_vacuum_test.exe chttp2_fake_security_census_simple_request_test.exe chttp2_fake_security_channel_connectivity_test.exe chttp2_fake_security_default_host_test.exe chttp2_fake_security_disappearing_server_test.exe chttp2_fake_security_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_fake_security_early_server_shutdown_finishes_tags_test.exe chttp2_fake_security_empty_batch_test.exe chttp2_fake_security_graceful_server_shutdown_test.exe chttp2_fake_security_invoke_large_request_test.exe chttp2_fake_security_max_concurrent_streams_test.exe chttp2_fake_security_max_message_length_test.exe chttp2_fake_security_no_op_test.exe chttp2_fake_security_ping_pong_streaming_test.exe chttp2_fake_security_registered_call_test.exe chttp2_fake_security_request_response_with_binary_metadata_and_payload_test.exe chttp2_fake_security_request_response_with_metadata_and_payload_test.exe chttp2_fake_security_request_response_with_payload_test.exe chttp2_fake_security_request_response_with_payload_and_call_creds_test.exe chttp2_fake_security_request_response_with_trailing_metadata_and_payload_test.exe chttp2_fake_security_request_with_compressed_payload_test.exe chttp2_fake_security_request_with_flags_test.exe chttp2_fake_security_request_with_large_metadata_test.exe chttp2_fake_security_request_with_payload_test.exe chttp2_fake_security_server_finishes_request_test.exe chttp2_fake_security_simple_delayed_request_test.exe chttp2_fake_security_simple_request_test.exe chttp2_fake_security_simple_request_with_high_initial_sequence_number_test.exe chttp2_fullstack_bad_hostname_test.exe chttp2_fullstack_cancel_after_accept_test.exe chttp2_fullstack_cancel_after_accept_and_writes_closed_test.exe chttp2_fullstack_cancel_after_invoke_test.exe chttp2_fullstack_cancel_before_invoke_test.exe chttp2_fullstack_cancel_in_a_vacuum_test.exe chttp2_fullstack_census_simple_request_test.exe chttp2_fullstack_channel_connectivity_test.exe chttp2_fullstack_default_host_test.exe chttp2_fullstack_disappearing_server_test.exe chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_fullstack_early_server_shutdown_finishes_tags_test.exe chttp2_fullstack_empty_batch_test.exe chttp2_fullstack_graceful_server_shutdown_test.exe chttp2_fullstack_invoke_large_request_test.exe chttp2_fullstack_max_concurrent_streams_test.exe chttp2_fullstack_max_message_length_test.exe chttp2_fullstack_no_op_test.exe chttp2_fullstack_ping_pong_streaming_test.exe chttp2_fullstack_registered_call_test.exe chttp2_fullstack_request_response_with_binary_metadata_and_payload_test.exe chttp2_fullstack_request_response_with_metadata_and_payload_test.exe chttp2_fullstack_request_response_with_payload_test.exe chttp2_fullstack_request_response_with_payload_and_call_creds_test.exe chttp2_fullstack_request_response_with_trailing_metadata_and_payload_test.exe chttp2_fullstack_request_with_compressed_payload_test.exe chttp2_fullstack_request_with_flags_test.exe chttp2_fullstack_request_with_large_metadata_test.exe chttp2_fullstack_request_with_payload_test.exe chttp2_fullstack_server_finishes_request_test.exe chttp2_fullstack_simple_delayed_request_test.exe chttp2_fullstack_simple_request_test.exe chttp2_fullstack_simple_request_with_high_initial_sequence_number_test.exe chttp2_fullstack_compression_bad_hostname_test.exe chttp2_fullstack_compression_cancel_after_accept_test.exe chttp2_fullstack_compression_cancel_after_accept_and_writes_closed_test.exe chttp2_fullstack_compression_cancel_after_invoke_test.exe chttp2_fullstack_compression_cancel_before_invoke_test.exe chttp2_fullstack_compression_cancel_in_a_vacuum_test.exe chttp2_fullstack_compression_census_simple_request_test.exe chttp2_fullstack_compression_channel_connectivity_test.exe chttp2_fullstack_compression_default_host_test.exe chttp2_fullstack_compression_disappearing_server_test.exe chttp2_fullstack_compression_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_fullstack_compression_early_server_shutdown_finishes_tags_test.exe chttp2_fullstack_compression_empty_batch_test.exe chttp2_fullstack_compression_graceful_server_shutdown_test.exe chttp2_fullstack_compression_invoke_large_request_test.exe chttp2_fullstack_compression_max_concurrent_streams_test.exe chttp2_fullstack_compression_max_message_length_test.exe chttp2_fullstack_compression_no_op_test.exe chttp2_fullstack_compression_ping_pong_streaming_test.exe chttp2_fullstack_compression_registered_call_test.exe chttp2_fullstack_compression_request_response_with_binary_metadata_and_payload_test.exe chttp2_fullstack_compression_request_response_with_metadata_and_payload_test.exe chttp2_fullstack_compression_request_response_with_payload_test.exe chttp2_fullstack_compression_request_response_with_payload_and_call_creds_test.exe chttp2_fullstack_compression_request_response_with_trailing_metadata_and_payload_test.exe chttp2_fullstack_compression_request_with_compressed_payload_test.exe chttp2_fullstack_compression_request_with_flags_test.exe chttp2_fullstack_compression_request_with_large_metadata_test.exe chttp2_fullstack_compression_request_with_payload_test.exe chttp2_fullstack_compression_server_finishes_request_test.exe chttp2_fullstack_compression_simple_delayed_request_test.exe chttp2_fullstack_compression_simple_request_test.exe chttp2_fullstack_compression_simple_request_with_high_initial_sequence_number_test.exe chttp2_fullstack_with_proxy_bad_hostname_test.exe chttp2_fullstack_with_proxy_cancel_after_accept_test.exe chttp2_fullstack_with_proxy_cancel_after_accept_and_writes_closed_test.exe chttp2_fullstack_with_proxy_cancel_after_invoke_test.exe chttp2_fullstack_with_proxy_cancel_before_invoke_test.exe chttp2_fullstack_with_proxy_cancel_in_a_vacuum_test.exe chttp2_fullstack_with_proxy_census_simple_request_test.exe chttp2_fullstack_with_proxy_default_host_test.exe chttp2_fullstack_with_proxy_disappearing_server_test.exe chttp2_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_fullstack_with_proxy_early_server_shutdown_finishes_tags_test.exe chttp2_fullstack_with_proxy_empty_batch_test.exe chttp2_fullstack_with_proxy_graceful_server_shutdown_test.exe chttp2_fullstack_with_proxy_invoke_large_request_test.exe chttp2_fullstack_with_proxy_max_message_length_test.exe chttp2_fullstack_with_proxy_no_op_test.exe chttp2_fullstack_with_proxy_ping_pong_streaming_test.exe chttp2_fullstack_with_proxy_registered_call_test.exe chttp2_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_test.exe chttp2_fullstack_with_proxy_request_response_with_metadata_and_payload_test.exe chttp2_fullstack_with_proxy_request_response_with_payload_test.exe chttp2_fullstack_with_proxy_request_response_with_payload_and_call_creds_test.exe chttp2_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_test.exe chttp2_fullstack_with_proxy_request_with_large_metadata_test.exe chttp2_fullstack_with_proxy_request_with_payload_test.exe chttp2_fullstack_with_proxy_server_finishes_request_test.exe chttp2_fullstack_with_proxy_simple_delayed_request_test.exe chttp2_fullstack_with_proxy_simple_request_test.exe chttp2_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_test.exe chttp2_simple_ssl_fullstack_bad_hostname_test.exe chttp2_simple_ssl_fullstack_cancel_after_accept_test.exe chttp2_simple_ssl_fullstack_cancel_after_accept_and_writes_closed_test.exe chttp2_simple_ssl_fullstack_cancel_after_invoke_test.exe chttp2_simple_ssl_fullstack_cancel_before_invoke_test.exe chttp2_simple_ssl_fullstack_cancel_in_a_vacuum_test.exe chttp2_simple_ssl_fullstack_census_simple_request_test.exe chttp2_simple_ssl_fullstack_channel_connectivity_test.exe chttp2_simple_ssl_fullstack_default_host_test.exe chttp2_simple_ssl_fullstack_disappearing_server_test.exe chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_simple_ssl_fullstack_early_server_shutdown_finishes_tags_test.exe chttp2_simple_ssl_fullstack_empty_batch_test.exe chttp2_simple_ssl_fullstack_graceful_server_shutdown_test.exe chttp2_simple_ssl_fullstack_invoke_large_request_test.exe chttp2_simple_ssl_fullstack_max_concurrent_streams_test.exe chttp2_simple_ssl_fullstack_max_message_length_test.exe chttp2_simple_ssl_fullstack_no_op_test.exe chttp2_simple_ssl_fullstack_ping_pong_streaming_test.exe chttp2_simple_ssl_fullstack_registered_call_test.exe chttp2_simple_ssl_fullstack_request_response_with_binary_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_request_response_with_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_request_response_with_payload_test.exe chttp2_simple_ssl_fullstack_request_response_with_payload_and_call_creds_test.exe chttp2_simple_ssl_fullstack_request_response_with_trailing_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_request_with_compressed_payload_test.exe chttp2_simple_ssl_fullstack_request_with_flags_test.exe chttp2_simple_ssl_fullstack_request_with_large_metadata_test.exe chttp2_simple_ssl_fullstack_request_with_payload_test.exe chttp2_simple_ssl_fullstack_server_finishes_request_test.exe chttp2_simple_ssl_fullstack_simple_delayed_request_test.exe chttp2_simple_ssl_fullstack_simple_request_test.exe chttp2_simple_ssl_fullstack_simple_request_with_high_initial_sequence_number_test.exe chttp2_simple_ssl_fullstack_with_proxy_bad_hostname_test.exe chttp2_simple_ssl_fullstack_with_proxy_cancel_after_accept_test.exe chttp2_simple_ssl_fullstack_with_proxy_cancel_after_accept_and_writes_closed_test.exe chttp2_simple_ssl_fullstack_with_proxy_cancel_after_invoke_test.exe chttp2_simple_ssl_fullstack_with_proxy_cancel_before_invoke_test.exe chttp2_simple_ssl_fullstack_with_proxy_cancel_in_a_vacuum_test.exe chttp2_simple_ssl_fullstack_with_proxy_census_simple_request_test.exe chttp2_simple_ssl_fullstack_with_proxy_default_host_test.exe chttp2_simple_ssl_fullstack_with_proxy_disappearing_server_test.exe chttp2_simple_ssl_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_simple_ssl_fullstack_with_proxy_early_server_shutdown_finishes_tags_test.exe chttp2_simple_ssl_fullstack_with_proxy_empty_batch_test.exe chttp2_simple_ssl_fullstack_with_proxy_graceful_server_shutdown_test.exe chttp2_simple_ssl_fullstack_with_proxy_invoke_large_request_test.exe chttp2_simple_ssl_fullstack_with_proxy_max_message_length_test.exe chttp2_simple_ssl_fullstack_with_proxy_no_op_test.exe chttp2_simple_ssl_fullstack_with_proxy_ping_pong_streaming_test.exe chttp2_simple_ssl_fullstack_with_proxy_registered_call_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_response_with_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_response_with_payload_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_response_with_payload_and_call_creds_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_with_large_metadata_test.exe chttp2_simple_ssl_fullstack_with_proxy_request_with_payload_test.exe chttp2_simple_ssl_fullstack_with_proxy_server_finishes_request_test.exe chttp2_simple_ssl_fullstack_with_proxy_simple_delayed_request_test.exe chttp2_simple_ssl_fullstack_with_proxy_simple_request_test.exe chttp2_simple_ssl_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_test.exe chttp2_simple_ssl_with_oauth2_fullstack_bad_hostname_test.exe chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_test.exe chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_accept_and_writes_closed_test.exe chttp2_simple_ssl_with_oauth2_fullstack_cancel_after_invoke_test.exe chttp2_simple_ssl_with_oauth2_fullstack_cancel_before_invoke_test.exe chttp2_simple_ssl_with_oauth2_fullstack_cancel_in_a_vacuum_test.exe chttp2_simple_ssl_with_oauth2_fullstack_census_simple_request_test.exe chttp2_simple_ssl_with_oauth2_fullstack_channel_connectivity_test.exe chttp2_simple_ssl_with_oauth2_fullstack_default_host_test.exe chttp2_simple_ssl_with_oauth2_fullstack_disappearing_server_test.exe chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_simple_ssl_with_oauth2_fullstack_early_server_shutdown_finishes_tags_test.exe chttp2_simple_ssl_with_oauth2_fullstack_empty_batch_test.exe chttp2_simple_ssl_with_oauth2_fullstack_graceful_server_shutdown_test.exe chttp2_simple_ssl_with_oauth2_fullstack_invoke_large_request_test.exe chttp2_simple_ssl_with_oauth2_fullstack_max_concurrent_streams_test.exe chttp2_simple_ssl_with_oauth2_fullstack_max_message_length_test.exe chttp2_simple_ssl_with_oauth2_fullstack_no_op_test.exe chttp2_simple_ssl_with_oauth2_fullstack_ping_pong_streaming_test.exe chttp2_simple_ssl_with_oauth2_fullstack_registered_call_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_binary_metadata_and_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_metadata_and_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_payload_and_call_creds_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_response_with_trailing_metadata_and_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_with_compressed_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_with_flags_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_with_large_metadata_test.exe chttp2_simple_ssl_with_oauth2_fullstack_request_with_payload_test.exe chttp2_simple_ssl_with_oauth2_fullstack_server_finishes_request_test.exe chttp2_simple_ssl_with_oauth2_fullstack_simple_delayed_request_test.exe chttp2_simple_ssl_with_oauth2_fullstack_simple_request_test.exe chttp2_simple_ssl_with_oauth2_fullstack_simple_request_with_high_initial_sequence_number_test.exe chttp2_socket_pair_bad_hostname_test.exe chttp2_socket_pair_cancel_after_accept_test.exe chttp2_socket_pair_cancel_after_accept_and_writes_closed_test.exe chttp2_socket_pair_cancel_after_invoke_test.exe chttp2_socket_pair_cancel_before_invoke_test.exe chttp2_socket_pair_cancel_in_a_vacuum_test.exe chttp2_socket_pair_census_simple_request_test.exe chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_socket_pair_early_server_shutdown_finishes_tags_test.exe chttp2_socket_pair_empty_batch_test.exe chttp2_socket_pair_graceful_server_shutdown_test.exe chttp2_socket_pair_invoke_large_request_test.exe chttp2_socket_pair_max_concurrent_streams_test.exe chttp2_socket_pair_max_message_length_test.exe chttp2_socket_pair_no_op_test.exe chttp2_socket_pair_ping_pong_streaming_test.exe chttp2_socket_pair_registered_call_test.exe chttp2_socket_pair_request_response_with_binary_metadata_and_payload_test.exe chttp2_socket_pair_request_response_with_metadata_and_payload_test.exe chttp2_socket_pair_request_response_with_payload_test.exe chttp2_socket_pair_request_response_with_payload_and_call_creds_test.exe chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_test.exe chttp2_socket_pair_request_with_compressed_payload_test.exe chttp2_socket_pair_request_with_flags_test.exe chttp2_socket_pair_request_with_large_metadata_test.exe chttp2_socket_pair_request_with_payload_test.exe chttp2_socket_pair_server_finishes_request_test.exe chttp2_socket_pair_simple_request_test.exe chttp2_socket_pair_simple_request_with_high_initial_sequence_number_test.exe chttp2_socket_pair_one_byte_at_a_time_bad_hostname_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_test.exe chttp2_socket_pair_one_byte_at_a_time_census_simple_request_test.exe chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_test.exe chttp2_socket_pair_one_byte_at_a_time_empty_batch_test.exe chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_test.exe chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_test.exe chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_test.exe chttp2_socket_pair_one_byte_at_a_time_max_message_length_test.exe chttp2_socket_pair_one_byte_at_a_time_no_op_test.exe chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_test.exe chttp2_socket_pair_one_byte_at_a_time_registered_call_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_and_call_creds_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_compressed_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_flags_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_payload_test.exe chttp2_socket_pair_one_byte_at_a_time_server_finishes_request_test.exe chttp2_socket_pair_one_byte_at_a_time_simple_request_test.exe chttp2_socket_pair_one_byte_at_a_time_simple_request_with_high_initial_sequence_number_test.exe chttp2_socket_pair_with_grpc_trace_bad_hostname_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_accept_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_accept_and_writes_closed_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_invoke_test.exe chttp2_socket_pair_with_grpc_trace_cancel_before_invoke_test.exe chttp2_socket_pair_with_grpc_trace_cancel_in_a_vacuum_test.exe chttp2_socket_pair_with_grpc_trace_census_simple_request_test.exe chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_inflight_calls_test.exe chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_tags_test.exe chttp2_socket_pair_with_grpc_trace_empty_batch_test.exe chttp2_socket_pair_with_grpc_trace_graceful_server_shutdown_test.exe chttp2_socket_pair_with_grpc_trace_invoke_large_request_test.exe chttp2_socket_pair_with_grpc_trace_max_concurrent_streams_test.exe chttp2_socket_pair_with_grpc_trace_max_message_length_test.exe chttp2_socket_pair_with_grpc_trace_no_op_test.exe chttp2_socket_pair_with_grpc_trace_ping_pong_streaming_test.exe chttp2_socket_pair_with_grpc_trace_registered_call_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_binary_metadata_and_payload_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_metadata_and_payload_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_payload_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_payload_and_call_creds_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_trailing_metadata_and_payload_test.exe chttp2_socket_pair_with_grpc_trace_request_with_compressed_payload_test.exe chttp2_socket_pair_with_grpc_trace_request_with_flags_test.exe chttp2_socket_pair_with_grpc_trace_request_with_large_metadata_test.exe chttp2_socket_pair_with_grpc_trace_request_with_payload_test.exe chttp2_socket_pair_with_grpc_trace_server_finishes_request_test.exe chttp2_socket_pair_with_grpc_trace_simple_request_test.exe chttp2_socket_pair_with_grpc_trace_simple_request_with_high_initial_sequence_number_test.exe chttp2_fullstack_bad_hostname_unsecure_test.exe chttp2_fullstack_cancel_after_accept_unsecure_test.exe chttp2_fullstack_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_fullstack_cancel_after_invoke_unsecure_test.exe chttp2_fullstack_cancel_before_invoke_unsecure_test.exe chttp2_fullstack_cancel_in_a_vacuum_unsecure_test.exe chttp2_fullstack_census_simple_request_unsecure_test.exe chttp2_fullstack_channel_connectivity_unsecure_test.exe chttp2_fullstack_default_host_unsecure_test.exe chttp2_fullstack_disappearing_server_unsecure_test.exe chttp2_fullstack_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_fullstack_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_fullstack_empty_batch_unsecure_test.exe chttp2_fullstack_graceful_server_shutdown_unsecure_test.exe chttp2_fullstack_invoke_large_request_unsecure_test.exe chttp2_fullstack_max_concurrent_streams_unsecure_test.exe chttp2_fullstack_max_message_length_unsecure_test.exe chttp2_fullstack_no_op_unsecure_test.exe chttp2_fullstack_ping_pong_streaming_unsecure_test.exe chttp2_fullstack_registered_call_unsecure_test.exe chttp2_fullstack_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_fullstack_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_fullstack_request_response_with_payload_unsecure_test.exe chttp2_fullstack_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_fullstack_request_with_compressed_payload_unsecure_test.exe chttp2_fullstack_request_with_flags_unsecure_test.exe chttp2_fullstack_request_with_large_metadata_unsecure_test.exe chttp2_fullstack_request_with_payload_unsecure_test.exe chttp2_fullstack_server_finishes_request_unsecure_test.exe chttp2_fullstack_simple_delayed_request_unsecure_test.exe chttp2_fullstack_simple_request_unsecure_test.exe chttp2_fullstack_simple_request_with_high_initial_sequence_number_unsecure_test.exe chttp2_fullstack_compression_bad_hostname_unsecure_test.exe chttp2_fullstack_compression_cancel_after_accept_unsecure_test.exe chttp2_fullstack_compression_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_fullstack_compression_cancel_after_invoke_unsecure_test.exe chttp2_fullstack_compression_cancel_before_invoke_unsecure_test.exe chttp2_fullstack_compression_cancel_in_a_vacuum_unsecure_test.exe chttp2_fullstack_compression_census_simple_request_unsecure_test.exe chttp2_fullstack_compression_channel_connectivity_unsecure_test.exe chttp2_fullstack_compression_default_host_unsecure_test.exe chttp2_fullstack_compression_disappearing_server_unsecure_test.exe chttp2_fullstack_compression_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_fullstack_compression_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_fullstack_compression_empty_batch_unsecure_test.exe chttp2_fullstack_compression_graceful_server_shutdown_unsecure_test.exe chttp2_fullstack_compression_invoke_large_request_unsecure_test.exe chttp2_fullstack_compression_max_concurrent_streams_unsecure_test.exe chttp2_fullstack_compression_max_message_length_unsecure_test.exe chttp2_fullstack_compression_no_op_unsecure_test.exe chttp2_fullstack_compression_ping_pong_streaming_unsecure_test.exe chttp2_fullstack_compression_registered_call_unsecure_test.exe chttp2_fullstack_compression_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_fullstack_compression_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_fullstack_compression_request_response_with_payload_unsecure_test.exe chttp2_fullstack_compression_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_fullstack_compression_request_with_compressed_payload_unsecure_test.exe chttp2_fullstack_compression_request_with_flags_unsecure_test.exe chttp2_fullstack_compression_request_with_large_metadata_unsecure_test.exe chttp2_fullstack_compression_request_with_payload_unsecure_test.exe chttp2_fullstack_compression_server_finishes_request_unsecure_test.exe chttp2_fullstack_compression_simple_delayed_request_unsecure_test.exe chttp2_fullstack_compression_simple_request_unsecure_test.exe chttp2_fullstack_compression_simple_request_with_high_initial_sequence_number_unsecure_test.exe chttp2_fullstack_with_proxy_bad_hostname_unsecure_test.exe chttp2_fullstack_with_proxy_cancel_after_accept_unsecure_test.exe chttp2_fullstack_with_proxy_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_fullstack_with_proxy_cancel_after_invoke_unsecure_test.exe chttp2_fullstack_with_proxy_cancel_before_invoke_unsecure_test.exe chttp2_fullstack_with_proxy_cancel_in_a_vacuum_unsecure_test.exe chttp2_fullstack_with_proxy_census_simple_request_unsecure_test.exe chttp2_fullstack_with_proxy_default_host_unsecure_test.exe chttp2_fullstack_with_proxy_disappearing_server_unsecure_test.exe chttp2_fullstack_with_proxy_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_fullstack_with_proxy_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_fullstack_with_proxy_empty_batch_unsecure_test.exe chttp2_fullstack_with_proxy_graceful_server_shutdown_unsecure_test.exe chttp2_fullstack_with_proxy_invoke_large_request_unsecure_test.exe chttp2_fullstack_with_proxy_max_message_length_unsecure_test.exe chttp2_fullstack_with_proxy_no_op_unsecure_test.exe chttp2_fullstack_with_proxy_ping_pong_streaming_unsecure_test.exe chttp2_fullstack_with_proxy_registered_call_unsecure_test.exe chttp2_fullstack_with_proxy_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_fullstack_with_proxy_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_fullstack_with_proxy_request_response_with_payload_unsecure_test.exe chttp2_fullstack_with_proxy_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_fullstack_with_proxy_request_with_large_metadata_unsecure_test.exe chttp2_fullstack_with_proxy_request_with_payload_unsecure_test.exe chttp2_fullstack_with_proxy_server_finishes_request_unsecure_test.exe chttp2_fullstack_with_proxy_simple_delayed_request_unsecure_test.exe chttp2_fullstack_with_proxy_simple_request_unsecure_test.exe chttp2_fullstack_with_proxy_simple_request_with_high_initial_sequence_number_unsecure_test.exe chttp2_socket_pair_bad_hostname_unsecure_test.exe chttp2_socket_pair_cancel_after_accept_unsecure_test.exe chttp2_socket_pair_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_socket_pair_cancel_after_invoke_unsecure_test.exe chttp2_socket_pair_cancel_before_invoke_unsecure_test.exe chttp2_socket_pair_cancel_in_a_vacuum_unsecure_test.exe chttp2_socket_pair_census_simple_request_unsecure_test.exe chttp2_socket_pair_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_socket_pair_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_socket_pair_empty_batch_unsecure_test.exe chttp2_socket_pair_graceful_server_shutdown_unsecure_test.exe chttp2_socket_pair_invoke_large_request_unsecure_test.exe chttp2_socket_pair_max_concurrent_streams_unsecure_test.exe chttp2_socket_pair_max_message_length_unsecure_test.exe chttp2_socket_pair_no_op_unsecure_test.exe chttp2_socket_pair_ping_pong_streaming_unsecure_test.exe chttp2_socket_pair_registered_call_unsecure_test.exe chttp2_socket_pair_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_request_response_with_payload_unsecure_test.exe chttp2_socket_pair_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_request_with_compressed_payload_unsecure_test.exe chttp2_socket_pair_request_with_flags_unsecure_test.exe chttp2_socket_pair_request_with_large_metadata_unsecure_test.exe chttp2_socket_pair_request_with_payload_unsecure_test.exe chttp2_socket_pair_server_finishes_request_unsecure_test.exe chttp2_socket_pair_simple_request_unsecure_test.exe chttp2_socket_pair_simple_request_with_high_initial_sequence_number_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_bad_hostname_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_after_invoke_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_before_invoke_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_cancel_in_a_vacuum_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_census_simple_request_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_empty_batch_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_graceful_server_shutdown_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_invoke_large_request_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_max_concurrent_streams_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_max_message_length_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_no_op_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_ping_pong_streaming_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_registered_call_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_compressed_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_flags_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_large_metadata_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_request_with_payload_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_server_finishes_request_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_simple_request_unsecure_test.exe chttp2_socket_pair_one_byte_at_a_time_simple_request_with_high_initial_sequence_number_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_bad_hostname_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_accept_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_accept_and_writes_closed_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_cancel_after_invoke_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_cancel_before_invoke_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_cancel_in_a_vacuum_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_census_simple_request_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_inflight_calls_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_early_server_shutdown_finishes_tags_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_empty_batch_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_graceful_server_shutdown_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_invoke_large_request_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_max_concurrent_streams_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_max_message_length_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_no_op_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_ping_pong_streaming_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_registered_call_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_binary_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_response_with_trailing_metadata_and_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_with_compressed_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_with_flags_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_with_large_metadata_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_request_with_payload_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_server_finishes_request_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_simple_request_unsecure_test.exe chttp2_socket_pair_with_grpc_trace_simple_request_with_high_initial_sequence_number_unsecure_test.exe connection_prefix_bad_client_test.exe initial_settings_frame_bad_client_test.exe
echo All C tests built.
-buildtests_cxx: async_end2end_test.exe auth_property_iterator_test.exe channel_arguments_test.exe cli_call_test.exe client_crash_test_server.exe credentials_test.exe cxx_byte_buffer_test.exe cxx_slice_test.exe cxx_time_test.exe dynamic_thread_pool_test.exe end2end_test.exe fixed_size_thread_pool_test.exe generic_end2end_test.exe grpc_cli.exe mock_test.exe reconnect_interop_client.exe reconnect_interop_server.exe secure_auth_context_test.exe server_crash_test_client.exe shutdown_test.exe status_test.exe thread_stress_test.exe zookeeper_test.exe
+buildtests_cxx: async_end2end_test.exe auth_property_iterator_test.exe channel_arguments_test.exe cli_call_test.exe client_crash_test_server.exe credentials_test.exe cxx_byte_buffer_test.exe cxx_slice_test.exe cxx_string_ref_test.exe cxx_time_test.exe end2end_test.exe generic_end2end_test.exe grpc_cli.exe mock_test.exe reconnect_interop_client.exe reconnect_interop_server.exe secure_auth_context_test.exe server_crash_test_client.exe shutdown_test.exe status_test.exe thread_stress_test.exe zookeeper_test.exe
echo All C++ tests built.
@@ -183,6 +183,14 @@ gen_hpack_tables: gen_hpack_tables.exe
echo Running gen_hpack_tables
$(OUT_DIR)\gen_hpack_tables.exe
+gen_legal_metadata_characters.exe: $(OUT_DIR)
+ echo Building gen_legal_metadata_characters
+ $(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\tools\codegen\core\gen_legal_metadata_characters.c
+ $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\gen_legal_metadata_characters.exe" $(LIBS) $(OUT_DIR)\gen_legal_metadata_characters.obj
+gen_legal_metadata_characters: gen_legal_metadata_characters.exe
+ echo Running gen_legal_metadata_characters
+ $(OUT_DIR)\gen_legal_metadata_characters.exe
+
gpr_cmdline_test.exe: build_gpr_test_util build_gpr $(OUT_DIR)
echo Building gpr_cmdline_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\core\support\cmdline_test.c
@@ -327,6 +335,14 @@ grpc_byte_buffer_reader_test: grpc_byte_buffer_reader_test.exe
echo Running grpc_byte_buffer_reader_test
$(OUT_DIR)\grpc_byte_buffer_reader_test.exe
+grpc_channel_args_test.exe: build_grpc_test_util build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
+ echo Building grpc_channel_args_test
+ $(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\core\channel\channel_args_test.c
+ $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\grpc_channel_args_test.exe" Debug\grpc_test_util.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(LIBS) $(OUT_DIR)\channel_args_test.obj
+grpc_channel_args_test: grpc_channel_args_test.exe
+ echo Running grpc_channel_args_test
+ $(OUT_DIR)\grpc_channel_args_test.exe
+
grpc_channel_stack_test.exe: build_grpc_test_util build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
echo Building grpc_channel_stack_test
$(CC) $(CFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\core\channel\channel_stack_test.c
@@ -607,10 +623,10 @@ async_end2end_test: async_end2end_test.exe
echo Running async_end2end_test
$(OUT_DIR)\async_end2end_test.exe
-auth_property_iterator_test.exe: build_grpc++ build_grpc build_gpr $(OUT_DIR)
+auth_property_iterator_test.exe: Debug\grpc++_test_util.lib build_grpc_test_util build_grpc++ build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
echo Building auth_property_iterator_test
$(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\common\auth_property_iterator_test.cc
- $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\auth_property_iterator_test.exe" Debug\grpc++.lib Debug\grpc.lib Debug\gpr.lib $(CXX_LIBS) $(LIBS) $(OUT_DIR)\auth_property_iterator_test.obj
+ $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\auth_property_iterator_test.exe" Debug\grpc++_test_util.lib Debug\grpc_test_util.lib Debug\grpc++.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(CXX_LIBS) $(LIBS) $(OUT_DIR)\auth_property_iterator_test.obj
auth_property_iterator_test: auth_property_iterator_test.exe
echo Running auth_property_iterator_test
$(OUT_DIR)\auth_property_iterator_test.exe
@@ -663,6 +679,14 @@ cxx_slice_test: cxx_slice_test.exe
echo Running cxx_slice_test
$(OUT_DIR)\cxx_slice_test.exe
+cxx_string_ref_test.exe: build_grpc++ $(OUT_DIR)
+ echo Building cxx_string_ref_test
+ $(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\util\string_ref_test.cc
+ $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\cxx_string_ref_test.exe" Debug\grpc++.lib $(CXX_LIBS) $(LIBS) $(OUT_DIR)\string_ref_test.obj
+cxx_string_ref_test: cxx_string_ref_test.exe
+ echo Running cxx_string_ref_test
+ $(OUT_DIR)\cxx_string_ref_test.exe
+
cxx_time_test.exe: build_grpc_test_util build_grpc++ build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
echo Building cxx_time_test
$(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\util\time_test.cc
@@ -671,14 +695,6 @@ cxx_time_test: cxx_time_test.exe
echo Running cxx_time_test
$(OUT_DIR)\cxx_time_test.exe
-dynamic_thread_pool_test.exe: build_grpc_test_util build_grpc++ build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
- echo Building dynamic_thread_pool_test
- $(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\server\dynamic_thread_pool_test.cc
- $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\dynamic_thread_pool_test.exe" Debug\grpc_test_util.lib Debug\grpc++.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(CXX_LIBS) $(LIBS) $(OUT_DIR)\dynamic_thread_pool_test.obj
-dynamic_thread_pool_test: dynamic_thread_pool_test.exe
- echo Running dynamic_thread_pool_test
- $(OUT_DIR)\dynamic_thread_pool_test.exe
-
end2end_test.exe: Debug\grpc++_test_util.lib build_grpc_test_util build_grpc++ build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
echo Building end2end_test
$(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\end2end\end2end_test.cc
@@ -687,14 +703,6 @@ end2end_test: end2end_test.exe
echo Running end2end_test
$(OUT_DIR)\end2end_test.exe
-fixed_size_thread_pool_test.exe: build_grpc_test_util build_grpc++ build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
- echo Building fixed_size_thread_pool_test
- $(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\server\fixed_size_thread_pool_test.cc
- $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\fixed_size_thread_pool_test.exe" Debug\grpc_test_util.lib Debug\grpc++.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(CXX_LIBS) $(LIBS) $(OUT_DIR)\fixed_size_thread_pool_test.obj
-fixed_size_thread_pool_test: fixed_size_thread_pool_test.exe
- echo Running fixed_size_thread_pool_test
- $(OUT_DIR)\fixed_size_thread_pool_test.exe
-
generic_end2end_test.exe: Debug\grpc++_test_util.lib build_grpc_test_util build_grpc++ build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
echo Building generic_end2end_test
$(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\end2end\generic_end2end_test.cc
@@ -751,10 +759,10 @@ reconnect_interop_server: reconnect_interop_server.exe
echo Running reconnect_interop_server
$(OUT_DIR)\reconnect_interop_server.exe
-secure_auth_context_test.exe: build_grpc++ build_grpc build_gpr $(OUT_DIR)
+secure_auth_context_test.exe: Debug\grpc++_test_util.lib build_grpc_test_util build_grpc++ build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
echo Building secure_auth_context_test
$(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\common\secure_auth_context_test.cc
- $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\secure_auth_context_test.exe" Debug\grpc++.lib Debug\grpc.lib Debug\gpr.lib $(CXX_LIBS) $(LIBS) $(OUT_DIR)\secure_auth_context_test.obj
+ $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\secure_auth_context_test.exe" Debug\grpc++_test_util.lib Debug\grpc_test_util.lib Debug\grpc++.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(CXX_LIBS) $(LIBS) $(OUT_DIR)\secure_auth_context_test.obj
secure_auth_context_test: secure_auth_context_test.exe
echo Running secure_auth_context_test
$(OUT_DIR)\secure_auth_context_test.exe
@@ -767,10 +775,10 @@ server_crash_test_client: server_crash_test_client.exe
echo Running server_crash_test_client
$(OUT_DIR)\server_crash_test_client.exe
-shutdown_test.exe: Debug\grpc++_test_util.lib build_grpc_test_util build_grpc++ Debug\grpc_zookeeper.lib build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
+shutdown_test.exe: Debug\grpc++_test_util.lib build_grpc_test_util build_grpc++ build_grpc build_gpr_test_util build_gpr $(OUT_DIR)
echo Building shutdown_test
$(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\end2end\shutdown_test.cc
- $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\shutdown_test.exe" Debug\grpc++_test_util.lib Debug\grpc_test_util.lib Debug\grpc++.lib Debug\grpc_zookeeper.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(CXX_LIBS) $(LIBS) $(OUT_DIR)\shutdown_test.obj
+ $(LINK) $(LFLAGS) /OUT:"$(OUT_DIR)\shutdown_test.exe" Debug\grpc++_test_util.lib Debug\grpc_test_util.lib Debug\grpc++.lib Debug\grpc.lib Debug\gpr_test_util.lib Debug\gpr.lib $(CXX_LIBS) $(LIBS) $(OUT_DIR)\shutdown_test.obj
shutdown_test: shutdown_test.exe
echo Running shutdown_test
$(OUT_DIR)\shutdown_test.exe
@@ -4744,8 +4752,8 @@ Debug\grpc++_test_config.lib: $(OUT_DIR)
Debug\grpc++_test_util.lib: $(OUT_DIR)
echo Building grpc++_test_util
- $(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\util\cli_call.cc $(REPO_ROOT)\test\cpp\util\create_test_channel.cc $(REPO_ROOT)\test\cpp\util\subprocess.cc $(REPO_ROOT)\test\cpp\util\messages.pb.cc $(REPO_ROOT)\test\cpp\util\messages.grpc.pb.cc $(REPO_ROOT)\test\cpp\util\echo.pb.cc $(REPO_ROOT)\test\cpp\util\echo.grpc.pb.cc $(REPO_ROOT)\test\cpp\util\echo_duplicate.pb.cc $(REPO_ROOT)\test\cpp\util\echo_duplicate.grpc.pb.cc
- $(LIBTOOL) /OUT:"Debug\grpc++_test_util.lib" $(OUT_DIR)\cli_call.obj $(OUT_DIR)\create_test_channel.obj $(OUT_DIR)\subprocess.obj $(OUT_DIR)\messages.pb.obj $(OUT_DIR)\messages.grpc.pb.obj $(OUT_DIR)\echo.pb.obj $(OUT_DIR)\echo.grpc.pb.obj $(OUT_DIR)\echo_duplicate.pb.obj $(OUT_DIR)\echo_duplicate.grpc.pb.obj
+ $(CC) $(CXXFLAGS) /Fo:$(OUT_DIR)\ $(REPO_ROOT)\test\cpp\util\cli_call.cc $(REPO_ROOT)\test\cpp\util\create_test_channel.cc $(REPO_ROOT)\test\cpp\util\string_ref_helper.cc $(REPO_ROOT)\test\cpp\util\subprocess.cc $(REPO_ROOT)\test\cpp\util\messages.pb.cc $(REPO_ROOT)\test\cpp\util\messages.grpc.pb.cc $(REPO_ROOT)\test\cpp\util\echo.pb.cc $(REPO_ROOT)\test\cpp\util\echo.grpc.pb.cc $(REPO_ROOT)\test\cpp\util\echo_duplicate.pb.cc $(REPO_ROOT)\test\cpp\util\echo_duplicate.grpc.pb.cc
+ $(LIBTOOL) /OUT:"Debug\grpc++_test_util.lib" $(OUT_DIR)\cli_call.obj $(OUT_DIR)\create_test_channel.obj $(OUT_DIR)\string_ref_helper.obj $(OUT_DIR)\subprocess.obj $(OUT_DIR)\messages.pb.obj $(OUT_DIR)\messages.grpc.pb.obj $(OUT_DIR)\echo.pb.obj $(OUT_DIR)\echo.grpc.pb.obj $(OUT_DIR)\echo_duplicate.pb.obj $(OUT_DIR)\echo_duplicate.grpc.pb.obj
build_grpc++_unsecure:
msbuild grpc.sln /t:grpc++_unsecure /p:Configuration=Debug /p:Linkage-grpc_dependencies_zlib=static
diff --git a/vsprojects/README.md b/vsprojects/README.md
index e6cbf83359..b95b468465 100644
--- a/vsprojects/README.md
+++ b/vsprojects/README.md
@@ -80,7 +80,12 @@ Individual tests can be run by directly running the executable in `/vsprojects/r
For generating service stub code, gRPC relies on plugins for `protoc` (the protocol buffer compiler). The solution `grpc_protoc_plugins.sln` allows you to build
Windows .exe binaries of gRPC protoc plugins.
-1. Open solution `third_party\protobuf\vsprojects\protobuf.sln`
-2. Accept the conversion to newer Visual Studio version and ignore errors about gtest.
-3. Build libprotoc in Release mode.
-4. Open solution `vsprojects\grpc_protoc_plugins.sln` and build it in Release mode. As a result, you should obtain a set of gRPC protoc plugin binaries (`grpc_cpp_plugin.exe`, `grpc_csharp_plugin.exe`, ...)
+1. Follow instructions in `third_party\protobuf\cmake\README.md` to create Visual Studio 2013 projects for protobuf.
+```
+$ cd third_party/protobuf/cmake
+$ cmake -G "Visual Studio 12 2013"
+```
+
+2. Open solution `third_party\protobuf\cmake\protobuf.sln` and build it in Release mode. That will build libraries `libprotobuf.lib` and `libprotoc.lib` needed for the next step.
+
+3. Open solution `vsprojects\grpc_protoc_plugins.sln` and build it in Release mode. As a result, you should obtain a set of gRPC protoc plugin binaries (`grpc_cpp_plugin.exe`, `grpc_csharp_plugin.exe`, ...)
diff --git a/vsprojects/build_plugins.bat b/vsprojects/build_plugins.bat
new file mode 100644
index 0000000000..4c33a584ad
--- /dev/null
+++ b/vsprojects/build_plugins.bat
@@ -0,0 +1,23 @@
+@rem Convenience script to build gRPC protoc plugins from command line. protoc plugins are used to generate service stub code from .proto service defintions.
+
+setlocal
+
+@rem enter this directory
+cd /d %~dp0
+
+@rem Set VS variables (uses Visual Studio 2013)
+@call "%VS120COMNTOOLS%\..\..\vc\vcvarsall.bat" x86
+
+@rem Build third_party/protobuf
+msbuild ..\third_party\protobuf\cmake\protobuf.sln /p:Configuration=Release || goto :error
+
+@rem Build the C# protoc plugins
+msbuild grpc_protoc_plugins.sln /p:Configuration=Release || goto :error
+
+endlocal
+
+goto :EOF
+
+:error
+echo Failed!
+exit /b %errorlevel%
diff --git a/vsprojects/gpr/gpr.vcxproj b/vsprojects/gpr/gpr.vcxproj
index 83c295625d..3f8f554fd3 100644
--- a/vsprojects/gpr/gpr.vcxproj
+++ b/vsprojects/gpr/gpr.vcxproj
@@ -158,6 +158,7 @@
<ClInclude Include="..\..\src\core\support\string.h" />
<ClInclude Include="..\..\src\core\support\string_win32.h" />
<ClInclude Include="..\..\src\core\support\thd_internal.h" />
+ <ClInclude Include="..\..\src\core\support\time_precise.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\core\support\alloc.c">
diff --git a/vsprojects/gpr/gpr.vcxproj.filters b/vsprojects/gpr/gpr.vcxproj.filters
index 64b90924ab..b6ac061e05 100644
--- a/vsprojects/gpr/gpr.vcxproj.filters
+++ b/vsprojects/gpr/gpr.vcxproj.filters
@@ -218,6 +218,9 @@
<ClInclude Include="..\..\src\core\support\thd_internal.h">
<Filter>src\core\support</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\core\support\time_precise.h">
+ <Filter>src\core\support</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
diff --git a/vsprojects/grpc++/grpc++.vcxproj b/vsprojects/grpc++/grpc++.vcxproj
index 929bc1500e..53930c1394 100644
--- a/vsprojects/grpc++/grpc++.vcxproj
+++ b/vsprojects/grpc++/grpc++.vcxproj
@@ -213,25 +213,16 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
- <ClInclude Include="..\..\include\grpc++\async_generic_service.h" />
- <ClInclude Include="..\..\include\grpc++\async_unary_call.h" />
- <ClInclude Include="..\..\include\grpc++\auth_context.h" />
- <ClInclude Include="..\..\include\grpc++\byte_buffer.h" />
- <ClInclude Include="..\..\include\grpc++\channel_arguments.h" />
- <ClInclude Include="..\..\include\grpc++\channel_interface.h" />
+ <ClInclude Include="..\..\include\grpc++\channel.h" />
<ClInclude Include="..\..\include\grpc++\client_context.h" />
<ClInclude Include="..\..\include\grpc++\completion_queue.h" />
- <ClInclude Include="..\..\include\grpc++\config.h" />
- <ClInclude Include="..\..\include\grpc++\config_protobuf.h" />
<ClInclude Include="..\..\include\grpc++\create_channel.h" />
<ClInclude Include="..\..\include\grpc++\credentials.h" />
- <ClInclude Include="..\..\include\grpc++\dynamic_thread_pool.h" />
- <ClInclude Include="..\..\include\grpc++\fixed_size_thread_pool.h" />
- <ClInclude Include="..\..\include\grpc++\generic_stub.h" />
+ <ClInclude Include="..\..\include\grpc++\generic\async_generic_service.h" />
+ <ClInclude Include="..\..\include\grpc++\generic\generic_stub.h" />
<ClInclude Include="..\..\include\grpc++\impl\call.h" />
<ClInclude Include="..\..\include\grpc++\impl\client_unary_call.h" />
<ClInclude Include="..\..\include\grpc++\impl\grpc_library.h" />
- <ClInclude Include="..\..\include\grpc++\impl\internal_stub.h" />
<ClInclude Include="..\..\include\grpc++\impl\proto_utils.h" />
<ClInclude Include="..\..\include\grpc++\impl\rpc_method.h" />
<ClInclude Include="..\..\include\grpc++\impl\rpc_service_method.h" />
@@ -247,20 +238,30 @@
<ClInclude Include="..\..\include\grpc++\server_builder.h" />
<ClInclude Include="..\..\include\grpc++\server_context.h" />
<ClInclude Include="..\..\include\grpc++\server_credentials.h" />
- <ClInclude Include="..\..\include\grpc++\slice.h" />
- <ClInclude Include="..\..\include\grpc++\status.h" />
- <ClInclude Include="..\..\include\grpc++\status_code_enum.h" />
- <ClInclude Include="..\..\include\grpc++\stream.h" />
- <ClInclude Include="..\..\include\grpc++\stub_options.h" />
- <ClInclude Include="..\..\include\grpc++\thread_pool_interface.h" />
- <ClInclude Include="..\..\include\grpc++\time.h" />
+ <ClInclude Include="..\..\include\grpc++\support\async_stream.h" />
+ <ClInclude Include="..\..\include\grpc++\support\async_unary_call.h" />
+ <ClInclude Include="..\..\include\grpc++\support\auth_context.h" />
+ <ClInclude Include="..\..\include\grpc++\support\byte_buffer.h" />
+ <ClInclude Include="..\..\include\grpc++\support\channel_arguments.h" />
+ <ClInclude Include="..\..\include\grpc++\support\config.h" />
+ <ClInclude Include="..\..\include\grpc++\support\config_protobuf.h" />
+ <ClInclude Include="..\..\include\grpc++\support\slice.h" />
+ <ClInclude Include="..\..\include\grpc++\support\status.h" />
+ <ClInclude Include="..\..\include\grpc++\support\status_code_enum.h" />
+ <ClInclude Include="..\..\include\grpc++\support\string_ref.h" />
+ <ClInclude Include="..\..\include\grpc++\support\stub_options.h" />
+ <ClInclude Include="..\..\include\grpc++\support\sync_stream.h" />
+ <ClInclude Include="..\..\include\grpc++\support\time.h" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\cpp\client\secure_credentials.h" />
<ClInclude Include="..\..\src\cpp\common\secure_auth_context.h" />
<ClInclude Include="..\..\src\cpp\server\secure_server_credentials.h" />
- <ClInclude Include="..\..\src\cpp\client\channel.h" />
+ <ClInclude Include="..\..\src\cpp\client\create_channel_internal.h" />
<ClInclude Include="..\..\src\cpp\common\create_auth_context.h" />
+ <ClInclude Include="..\..\src\cpp\server\dynamic_thread_pool.h" />
+ <ClInclude Include="..\..\src\cpp\server\fixed_size_thread_pool.h" />
+ <ClInclude Include="..\..\src\cpp\server\thread_pool_interface.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\cpp\client\secure_channel_arguments.cc">
@@ -283,14 +284,14 @@
</ClCompile>
<ClCompile Include="..\..\src\cpp\client\create_channel.cc">
</ClCompile>
+ <ClCompile Include="..\..\src\cpp\client\create_channel_internal.cc">
+ </ClCompile>
<ClCompile Include="..\..\src\cpp\client\credentials.cc">
</ClCompile>
<ClCompile Include="..\..\src\cpp\client\generic_stub.cc">
</ClCompile>
<ClCompile Include="..\..\src\cpp\client\insecure_credentials.cc">
</ClCompile>
- <ClCompile Include="..\..\src\cpp\client\internal_stub.cc">
- </ClCompile>
<ClCompile Include="..\..\src\cpp\common\call.cc">
</ClCompile>
<ClCompile Include="..\..\src\cpp\common\completion_queue.cc">
@@ -323,6 +324,8 @@
</ClCompile>
<ClCompile Include="..\..\src\cpp\util\status.cc">
</ClCompile>
+ <ClCompile Include="..\..\src\cpp\util\string_ref.cc">
+ </ClCompile>
<ClCompile Include="..\..\src\cpp\util\time.cc">
</ClCompile>
</ItemGroup>
diff --git a/vsprojects/grpc++/grpc++.vcxproj.filters b/vsprojects/grpc++/grpc++.vcxproj.filters
index 0408fb46a5..6bc9ed64d2 100644
--- a/vsprojects/grpc++/grpc++.vcxproj.filters
+++ b/vsprojects/grpc++/grpc++.vcxproj.filters
@@ -31,6 +31,9 @@
<ClCompile Include="..\..\src\cpp\client\create_channel.cc">
<Filter>src\cpp\client</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\cpp\client\create_channel_internal.cc">
+ <Filter>src\cpp\client</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\cpp\client\credentials.cc">
<Filter>src\cpp\client</Filter>
</ClCompile>
@@ -40,9 +43,6 @@
<ClCompile Include="..\..\src\cpp\client\insecure_credentials.cc">
<Filter>src\cpp\client</Filter>
</ClCompile>
- <ClCompile Include="..\..\src\cpp\client\internal_stub.cc">
- <Filter>src\cpp\client</Filter>
- </ClCompile>
<ClCompile Include="..\..\src\cpp\common\call.cc">
<Filter>src\cpp\common</Filter>
</ClCompile>
@@ -91,27 +91,15 @@
<ClCompile Include="..\..\src\cpp\util\status.cc">
<Filter>src\cpp\util</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\cpp\util\string_ref.cc">
+ <Filter>src\cpp\util</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\cpp\util\time.cc">
<Filter>src\cpp\util</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\include\grpc++\async_generic_service.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\async_unary_call.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\auth_context.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\byte_buffer.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\channel_arguments.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\channel_interface.h">
+ <ClInclude Include="..\..\include\grpc++\channel.h">
<Filter>include\grpc++</Filter>
</ClInclude>
<ClInclude Include="..\..\include\grpc++\client_context.h">
@@ -120,26 +108,17 @@
<ClInclude Include="..\..\include\grpc++\completion_queue.h">
<Filter>include\grpc++</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\config.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\config_protobuf.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\grpc++\create_channel.h">
<Filter>include\grpc++</Filter>
</ClInclude>
<ClInclude Include="..\..\include\grpc++\credentials.h">
<Filter>include\grpc++</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\dynamic_thread_pool.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\fixed_size_thread_pool.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\generic\async_generic_service.h">
+ <Filter>include\grpc++\generic</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\generic_stub.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\generic\generic_stub.h">
+ <Filter>include\grpc++\generic</Filter>
</ClInclude>
<ClInclude Include="..\..\include\grpc++\impl\call.h">
<Filter>include\grpc++\impl</Filter>
@@ -150,9 +129,6 @@
<ClInclude Include="..\..\include\grpc++\impl\grpc_library.h">
<Filter>include\grpc++\impl</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\impl\internal_stub.h">
- <Filter>include\grpc++\impl</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\grpc++\impl\proto_utils.h">
<Filter>include\grpc++\impl</Filter>
</ClInclude>
@@ -198,26 +174,47 @@
<ClInclude Include="..\..\include\grpc++\server_credentials.h">
<Filter>include\grpc++</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\slice.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\async_stream.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\status.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\async_unary_call.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\status_code_enum.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\auth_context.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\stream.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\byte_buffer.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\stub_options.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\channel_arguments.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\thread_pool_interface.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\config.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\time.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\config_protobuf.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\slice.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\status.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\status_code_enum.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\string_ref.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\stub_options.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\sync_stream.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\time.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
@@ -230,12 +227,21 @@
<ClInclude Include="..\..\src\cpp\server\secure_server_credentials.h">
<Filter>src\cpp\server</Filter>
</ClInclude>
- <ClInclude Include="..\..\src\cpp\client\channel.h">
+ <ClInclude Include="..\..\src\cpp\client\create_channel_internal.h">
<Filter>src\cpp\client</Filter>
</ClInclude>
<ClInclude Include="..\..\src\cpp\common\create_auth_context.h">
<Filter>src\cpp\common</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\cpp\server\dynamic_thread_pool.h">
+ <Filter>src\cpp\server</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\cpp\server\fixed_size_thread_pool.h">
+ <Filter>src\cpp\server</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\cpp\server\thread_pool_interface.h">
+ <Filter>src\cpp\server</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
@@ -245,9 +251,15 @@
<Filter Include="include\grpc++">
<UniqueIdentifier>{784a0281-f547-aeb0-9f55-b26b7de9c769}</UniqueIdentifier>
</Filter>
+ <Filter Include="include\grpc++\generic">
+ <UniqueIdentifier>{51dae921-3aa2-1976-2ee4-c5615de1af54}</UniqueIdentifier>
+ </Filter>
<Filter Include="include\grpc++\impl">
<UniqueIdentifier>{0da8cd95-314f-da1b-5ce7-7791a5be1f1a}</UniqueIdentifier>
</Filter>
+ <Filter Include="include\grpc++\support">
+ <UniqueIdentifier>{a5c10dae-f715-2a30-1066-d22f8bc94cb2}</UniqueIdentifier>
+ </Filter>
<Filter Include="src">
<UniqueIdentifier>{328ff211-2886-406e-56f9-18ba1686f363}</UniqueIdentifier>
</Filter>
diff --git a/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj b/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj
index 2ff252e04e..12fa1b781c 100644
--- a/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj
+++ b/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj
@@ -213,25 +213,16 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
- <ClInclude Include="..\..\include\grpc++\async_generic_service.h" />
- <ClInclude Include="..\..\include\grpc++\async_unary_call.h" />
- <ClInclude Include="..\..\include\grpc++\auth_context.h" />
- <ClInclude Include="..\..\include\grpc++\byte_buffer.h" />
- <ClInclude Include="..\..\include\grpc++\channel_arguments.h" />
- <ClInclude Include="..\..\include\grpc++\channel_interface.h" />
+ <ClInclude Include="..\..\include\grpc++\channel.h" />
<ClInclude Include="..\..\include\grpc++\client_context.h" />
<ClInclude Include="..\..\include\grpc++\completion_queue.h" />
- <ClInclude Include="..\..\include\grpc++\config.h" />
- <ClInclude Include="..\..\include\grpc++\config_protobuf.h" />
<ClInclude Include="..\..\include\grpc++\create_channel.h" />
<ClInclude Include="..\..\include\grpc++\credentials.h" />
- <ClInclude Include="..\..\include\grpc++\dynamic_thread_pool.h" />
- <ClInclude Include="..\..\include\grpc++\fixed_size_thread_pool.h" />
- <ClInclude Include="..\..\include\grpc++\generic_stub.h" />
+ <ClInclude Include="..\..\include\grpc++\generic\async_generic_service.h" />
+ <ClInclude Include="..\..\include\grpc++\generic\generic_stub.h" />
<ClInclude Include="..\..\include\grpc++\impl\call.h" />
<ClInclude Include="..\..\include\grpc++\impl\client_unary_call.h" />
<ClInclude Include="..\..\include\grpc++\impl\grpc_library.h" />
- <ClInclude Include="..\..\include\grpc++\impl\internal_stub.h" />
<ClInclude Include="..\..\include\grpc++\impl\proto_utils.h" />
<ClInclude Include="..\..\include\grpc++\impl\rpc_method.h" />
<ClInclude Include="..\..\include\grpc++\impl\rpc_service_method.h" />
@@ -247,17 +238,27 @@
<ClInclude Include="..\..\include\grpc++\server_builder.h" />
<ClInclude Include="..\..\include\grpc++\server_context.h" />
<ClInclude Include="..\..\include\grpc++\server_credentials.h" />
- <ClInclude Include="..\..\include\grpc++\slice.h" />
- <ClInclude Include="..\..\include\grpc++\status.h" />
- <ClInclude Include="..\..\include\grpc++\status_code_enum.h" />
- <ClInclude Include="..\..\include\grpc++\stream.h" />
- <ClInclude Include="..\..\include\grpc++\stub_options.h" />
- <ClInclude Include="..\..\include\grpc++\thread_pool_interface.h" />
- <ClInclude Include="..\..\include\grpc++\time.h" />
+ <ClInclude Include="..\..\include\grpc++\support\async_stream.h" />
+ <ClInclude Include="..\..\include\grpc++\support\async_unary_call.h" />
+ <ClInclude Include="..\..\include\grpc++\support\auth_context.h" />
+ <ClInclude Include="..\..\include\grpc++\support\byte_buffer.h" />
+ <ClInclude Include="..\..\include\grpc++\support\channel_arguments.h" />
+ <ClInclude Include="..\..\include\grpc++\support\config.h" />
+ <ClInclude Include="..\..\include\grpc++\support\config_protobuf.h" />
+ <ClInclude Include="..\..\include\grpc++\support\slice.h" />
+ <ClInclude Include="..\..\include\grpc++\support\status.h" />
+ <ClInclude Include="..\..\include\grpc++\support\status_code_enum.h" />
+ <ClInclude Include="..\..\include\grpc++\support\string_ref.h" />
+ <ClInclude Include="..\..\include\grpc++\support\stub_options.h" />
+ <ClInclude Include="..\..\include\grpc++\support\sync_stream.h" />
+ <ClInclude Include="..\..\include\grpc++\support\time.h" />
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\src\cpp\client\channel.h" />
+ <ClInclude Include="..\..\src\cpp\client\create_channel_internal.h" />
<ClInclude Include="..\..\src\cpp\common\create_auth_context.h" />
+ <ClInclude Include="..\..\src\cpp\server\dynamic_thread_pool.h" />
+ <ClInclude Include="..\..\src\cpp\server\fixed_size_thread_pool.h" />
+ <ClInclude Include="..\..\src\cpp\server\thread_pool_interface.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\src\cpp\common\insecure_create_auth_context.cc">
@@ -270,14 +271,14 @@
</ClCompile>
<ClCompile Include="..\..\src\cpp\client\create_channel.cc">
</ClCompile>
+ <ClCompile Include="..\..\src\cpp\client\create_channel_internal.cc">
+ </ClCompile>
<ClCompile Include="..\..\src\cpp\client\credentials.cc">
</ClCompile>
<ClCompile Include="..\..\src\cpp\client\generic_stub.cc">
</ClCompile>
<ClCompile Include="..\..\src\cpp\client\insecure_credentials.cc">
</ClCompile>
- <ClCompile Include="..\..\src\cpp\client\internal_stub.cc">
- </ClCompile>
<ClCompile Include="..\..\src\cpp\common\call.cc">
</ClCompile>
<ClCompile Include="..\..\src\cpp\common\completion_queue.cc">
@@ -310,6 +311,8 @@
</ClCompile>
<ClCompile Include="..\..\src\cpp\util\status.cc">
</ClCompile>
+ <ClCompile Include="..\..\src\cpp\util\string_ref.cc">
+ </ClCompile>
<ClCompile Include="..\..\src\cpp\util\time.cc">
</ClCompile>
</ItemGroup>
diff --git a/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj.filters b/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
index b4fae7741c..17d9d5332f 100644
--- a/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
+++ b/vsprojects/grpc++_unsecure/grpc++_unsecure.vcxproj.filters
@@ -16,6 +16,9 @@
<ClCompile Include="..\..\src\cpp\client\create_channel.cc">
<Filter>src\cpp\client</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\cpp\client\create_channel_internal.cc">
+ <Filter>src\cpp\client</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\cpp\client\credentials.cc">
<Filter>src\cpp\client</Filter>
</ClCompile>
@@ -25,9 +28,6 @@
<ClCompile Include="..\..\src\cpp\client\insecure_credentials.cc">
<Filter>src\cpp\client</Filter>
</ClCompile>
- <ClCompile Include="..\..\src\cpp\client\internal_stub.cc">
- <Filter>src\cpp\client</Filter>
- </ClCompile>
<ClCompile Include="..\..\src\cpp\common\call.cc">
<Filter>src\cpp\common</Filter>
</ClCompile>
@@ -76,27 +76,15 @@
<ClCompile Include="..\..\src\cpp\util\status.cc">
<Filter>src\cpp\util</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\cpp\util\string_ref.cc">
+ <Filter>src\cpp\util</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\cpp\util\time.cc">
<Filter>src\cpp\util</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\include\grpc++\async_generic_service.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\async_unary_call.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\auth_context.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\byte_buffer.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\channel_arguments.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\channel_interface.h">
+ <ClInclude Include="..\..\include\grpc++\channel.h">
<Filter>include\grpc++</Filter>
</ClInclude>
<ClInclude Include="..\..\include\grpc++\client_context.h">
@@ -105,26 +93,17 @@
<ClInclude Include="..\..\include\grpc++\completion_queue.h">
<Filter>include\grpc++</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\config.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\config_protobuf.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\grpc++\create_channel.h">
<Filter>include\grpc++</Filter>
</ClInclude>
<ClInclude Include="..\..\include\grpc++\credentials.h">
<Filter>include\grpc++</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\dynamic_thread_pool.h">
- <Filter>include\grpc++</Filter>
- </ClInclude>
- <ClInclude Include="..\..\include\grpc++\fixed_size_thread_pool.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\generic\async_generic_service.h">
+ <Filter>include\grpc++\generic</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\generic_stub.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\generic\generic_stub.h">
+ <Filter>include\grpc++\generic</Filter>
</ClInclude>
<ClInclude Include="..\..\include\grpc++\impl\call.h">
<Filter>include\grpc++\impl</Filter>
@@ -135,9 +114,6 @@
<ClInclude Include="..\..\include\grpc++\impl\grpc_library.h">
<Filter>include\grpc++\impl</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\impl\internal_stub.h">
- <Filter>include\grpc++\impl</Filter>
- </ClInclude>
<ClInclude Include="..\..\include\grpc++\impl\proto_utils.h">
<Filter>include\grpc++\impl</Filter>
</ClInclude>
@@ -183,35 +159,65 @@
<ClInclude Include="..\..\include\grpc++\server_credentials.h">
<Filter>include\grpc++</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\slice.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\async_stream.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\status.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\async_unary_call.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\status_code_enum.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\auth_context.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\stream.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\byte_buffer.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\stub_options.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\channel_arguments.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\thread_pool_interface.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\config.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
- <ClInclude Include="..\..\include\grpc++\time.h">
- <Filter>include\grpc++</Filter>
+ <ClInclude Include="..\..\include\grpc++\support\config_protobuf.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\slice.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\status.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\status_code_enum.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\string_ref.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\stub_options.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\sync_stream.h">
+ <Filter>include\grpc++\support</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\include\grpc++\support\time.h">
+ <Filter>include\grpc++\support</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\src\cpp\client\channel.h">
+ <ClInclude Include="..\..\src\cpp\client\create_channel_internal.h">
<Filter>src\cpp\client</Filter>
</ClInclude>
<ClInclude Include="..\..\src\cpp\common\create_auth_context.h">
<Filter>src\cpp\common</Filter>
</ClInclude>
+ <ClInclude Include="..\..\src\cpp\server\dynamic_thread_pool.h">
+ <Filter>src\cpp\server</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\cpp\server\fixed_size_thread_pool.h">
+ <Filter>src\cpp\server</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\cpp\server\thread_pool_interface.h">
+ <Filter>src\cpp\server</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
@@ -221,9 +227,15 @@
<Filter Include="include\grpc++">
<UniqueIdentifier>{eceb50c0-bb49-3812-b6bd-b0af6df81da7}</UniqueIdentifier>
</Filter>
+ <Filter Include="include\grpc++\generic">
+ <UniqueIdentifier>{83717d3c-57d9-2bfa-ed9c-2b08f86da12b}</UniqueIdentifier>
+ </Filter>
<Filter Include="include\grpc++\impl">
<UniqueIdentifier>{dadc0002-f2ac-451b-a9b8-33b8de10b5fc}</UniqueIdentifier>
</Filter>
+ <Filter Include="include\grpc++\support">
+ <UniqueIdentifier>{0ebf8008-80b9-d6da-e1dc-854bf1ec2195}</UniqueIdentifier>
+ </Filter>
<Filter Include="src">
<UniqueIdentifier>{cce6a85d-1111-3834-6825-31e170d93cff}</UniqueIdentifier>
</Filter>
diff --git a/vsprojects/grpc/grpc.vcxproj b/vsprojects/grpc/grpc.vcxproj
index ebdc926ee7..1fa7e4b4f1 100644
--- a/vsprojects/grpc/grpc.vcxproj
+++ b/vsprojects/grpc/grpc.vcxproj
@@ -242,7 +242,7 @@
<ClInclude Include="..\..\src\core\tsi\ssl_transport_security.h" />
<ClInclude Include="..\..\src\core\tsi\transport_security.h" />
<ClInclude Include="..\..\src\core\tsi\transport_security_interface.h" />
- <ClInclude Include="..\..\src\core\channel\census_filter.h" />
+ <ClInclude Include="..\..\src\core\census\grpc_filter.h" />
<ClInclude Include="..\..\src\core\channel\channel_args.h" />
<ClInclude Include="..\..\src\core\channel\channel_stack.h" />
<ClInclude Include="..\..\src\core\channel\client_channel.h" />
@@ -307,7 +307,8 @@
<ClInclude Include="..\..\src\core\json\json_reader.h" />
<ClInclude Include="..\..\src\core\json\json_writer.h" />
<ClInclude Include="..\..\src\core\profiling\timers.h" />
- <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h" />
+ <ClInclude Include="..\..\src\core\statistics\census_interface.h" />
+ <ClInclude Include="..\..\src\core\statistics\census_rpc_stats.h" />
<ClInclude Include="..\..\src\core\surface\byte_buffer_queue.h" />
<ClInclude Include="..\..\src\core\surface\call.h" />
<ClInclude Include="..\..\src\core\surface\channel.h" />
@@ -390,6 +391,8 @@
</ClCompile>
<ClCompile Include="..\..\src\core\census\grpc_context.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\census\grpc_filter.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\channel\channel_args.c">
</ClCompile>
<ClCompile Include="..\..\src\core\channel\channel_stack.c">
diff --git a/vsprojects/grpc/grpc.vcxproj.filters b/vsprojects/grpc/grpc.vcxproj.filters
index baec0db4f9..b22818aebd 100644
--- a/vsprojects/grpc/grpc.vcxproj.filters
+++ b/vsprojects/grpc/grpc.vcxproj.filters
@@ -67,6 +67,9 @@
<ClCompile Include="..\..\src\core\census\grpc_context.c">
<Filter>src\core\census</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\census\grpc_filter.c">
+ <Filter>src\core\census</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\channel\channel_args.c">
<Filter>src\core\channel</Filter>
</ClCompile>
@@ -482,8 +485,8 @@
<ClInclude Include="..\..\src\core\tsi\transport_security_interface.h">
<Filter>src\core\tsi</Filter>
</ClInclude>
- <ClInclude Include="..\..\src\core\channel\census_filter.h">
- <Filter>src\core\channel</Filter>
+ <ClInclude Include="..\..\src\core\census\grpc_filter.h">
+ <Filter>src\core\census</Filter>
</ClInclude>
<ClInclude Include="..\..\src\core\channel\channel_args.h">
<Filter>src\core\channel</Filter>
@@ -677,8 +680,11 @@
<ClInclude Include="..\..\src\core\profiling\timers.h">
<Filter>src\core\profiling</Filter>
</ClInclude>
- <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h">
- <Filter>src\core\profiling</Filter>
+ <ClInclude Include="..\..\src\core\statistics\census_interface.h">
+ <Filter>src\core\statistics</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\core\statistics\census_rpc_stats.h">
+ <Filter>src\core\statistics</Filter>
</ClInclude>
<ClInclude Include="..\..\src\core\surface\byte_buffer_queue.h">
<Filter>src\core\surface</Filter>
@@ -842,6 +848,9 @@
<Filter Include="src\core\security">
<UniqueIdentifier>{1d850ac6-e639-4eab-5338-4ba40272fcc9}</UniqueIdentifier>
</Filter>
+ <Filter Include="src\core\statistics">
+ <UniqueIdentifier>{0ef49896-2313-4a3f-1ce2-716fa0e5c6ca}</UniqueIdentifier>
+ </Filter>
<Filter Include="src\core\surface">
<UniqueIdentifier>{aeb18e82-5d25-0aad-8b02-a0a3470073ce}</UniqueIdentifier>
</Filter>
diff --git a/vsprojects/grpc_cpp_plugin/grpc_cpp_plugin.vcxproj b/vsprojects/grpc_cpp_plugin/grpc_cpp_plugin.vcxproj
index 1693a48438..1fd03e185d 100644
--- a/vsprojects/grpc_cpp_plugin/grpc_cpp_plugin.vcxproj
+++ b/vsprojects/grpc_cpp_plugin/grpc_cpp_plugin.vcxproj
@@ -48,6 +48,7 @@
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\protoc.props" />
+ <Import Project="..\protobuf.props" />
<Import Project="..\global.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
diff --git a/vsprojects/grpc_csharp_plugin/grpc_csharp_plugin.vcxproj b/vsprojects/grpc_csharp_plugin/grpc_csharp_plugin.vcxproj
index aae82723e4..2d63a8496b 100644
--- a/vsprojects/grpc_csharp_plugin/grpc_csharp_plugin.vcxproj
+++ b/vsprojects/grpc_csharp_plugin/grpc_csharp_plugin.vcxproj
@@ -48,6 +48,7 @@
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\protoc.props" />
+ <Import Project="..\protobuf.props" />
<Import Project="..\global.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
diff --git a/vsprojects/grpc_objective_c_plugin/grpc_objective_c_plugin.vcxproj b/vsprojects/grpc_objective_c_plugin/grpc_objective_c_plugin.vcxproj
index 07a837a804..46e064f3e3 100644
--- a/vsprojects/grpc_objective_c_plugin/grpc_objective_c_plugin.vcxproj
+++ b/vsprojects/grpc_objective_c_plugin/grpc_objective_c_plugin.vcxproj
@@ -48,6 +48,7 @@
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\protoc.props" />
+ <Import Project="..\protobuf.props" />
<Import Project="..\global.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
diff --git a/vsprojects/grpc_plugin_support/grpc_plugin_support.vcxproj b/vsprojects/grpc_plugin_support/grpc_plugin_support.vcxproj
index 444d796137..9f098d10a1 100644
--- a/vsprojects/grpc_plugin_support/grpc_plugin_support.vcxproj
+++ b/vsprojects/grpc_plugin_support/grpc_plugin_support.vcxproj
@@ -122,8 +122,8 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
- <ClInclude Include="..\..\include\grpc++\config.h" />
- <ClInclude Include="..\..\include\grpc++\config_protobuf.h" />
+ <ClInclude Include="..\..\include\grpc++\support\config.h" />
+ <ClInclude Include="..\..\include\grpc++\support\config_protobuf.h" />
<ClInclude Include="..\..\src\compiler\config.h" />
<ClInclude Include="..\..\src\compiler\cpp_generator.h" />
<ClInclude Include="..\..\src\compiler\cpp_generator_helpers.h" />
diff --git a/vsprojects/grpc_python_plugin/grpc_python_plugin.vcxproj b/vsprojects/grpc_python_plugin/grpc_python_plugin.vcxproj
index 02bab1c61b..a1e3a4aa6c 100644
--- a/vsprojects/grpc_python_plugin/grpc_python_plugin.vcxproj
+++ b/vsprojects/grpc_python_plugin/grpc_python_plugin.vcxproj
@@ -48,6 +48,7 @@
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\protoc.props" />
+ <Import Project="..\protobuf.props" />
<Import Project="..\global.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
diff --git a/vsprojects/grpc_ruby_plugin/grpc_ruby_plugin.vcxproj b/vsprojects/grpc_ruby_plugin/grpc_ruby_plugin.vcxproj
index 4763d14858..7f31678530 100644
--- a/vsprojects/grpc_ruby_plugin/grpc_ruby_plugin.vcxproj
+++ b/vsprojects/grpc_ruby_plugin/grpc_ruby_plugin.vcxproj
@@ -48,6 +48,7 @@
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\protoc.props" />
+ <Import Project="..\protobuf.props" />
<Import Project="..\global.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
diff --git a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
index 1d60839b70..3883a328e0 100644
--- a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
+++ b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj
@@ -225,7 +225,7 @@
<ClInclude Include="..\..\include\grpc\census.h" />
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\src\core\channel\census_filter.h" />
+ <ClInclude Include="..\..\src\core\census\grpc_filter.h" />
<ClInclude Include="..\..\src\core\channel\channel_args.h" />
<ClInclude Include="..\..\src\core\channel\channel_stack.h" />
<ClInclude Include="..\..\src\core\channel\client_channel.h" />
@@ -290,7 +290,8 @@
<ClInclude Include="..\..\src\core\json\json_reader.h" />
<ClInclude Include="..\..\src\core\json\json_writer.h" />
<ClInclude Include="..\..\src\core\profiling\timers.h" />
- <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h" />
+ <ClInclude Include="..\..\src\core\statistics\census_interface.h" />
+ <ClInclude Include="..\..\src\core\statistics\census_rpc_stats.h" />
<ClInclude Include="..\..\src\core\surface\byte_buffer_queue.h" />
<ClInclude Include="..\..\src\core\surface\call.h" />
<ClInclude Include="..\..\src\core\surface\channel.h" />
@@ -333,6 +334,8 @@
</ClCompile>
<ClCompile Include="..\..\src\core\census\grpc_context.c">
</ClCompile>
+ <ClCompile Include="..\..\src\core\census\grpc_filter.c">
+ </ClCompile>
<ClCompile Include="..\..\src\core\channel\channel_args.c">
</ClCompile>
<ClCompile Include="..\..\src\core\channel\channel_stack.c">
diff --git a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
index cb9e8c2741..d12abc0ad7 100644
--- a/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
+++ b/vsprojects/grpc_unsecure/grpc_unsecure.vcxproj.filters
@@ -7,6 +7,9 @@
<ClCompile Include="..\..\src\core\census\grpc_context.c">
<Filter>src\core\census</Filter>
</ClCompile>
+ <ClCompile Include="..\..\src\core\census\grpc_filter.c">
+ <Filter>src\core\census</Filter>
+ </ClCompile>
<ClCompile Include="..\..\src\core\channel\channel_args.c">
<Filter>src\core\channel</Filter>
</ClCompile>
@@ -380,8 +383,8 @@
</ClInclude>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\src\core\channel\census_filter.h">
- <Filter>src\core\channel</Filter>
+ <ClInclude Include="..\..\src\core\census\grpc_filter.h">
+ <Filter>src\core\census</Filter>
</ClInclude>
<ClInclude Include="..\..\src\core\channel\channel_args.h">
<Filter>src\core\channel</Filter>
@@ -575,8 +578,11 @@
<ClInclude Include="..\..\src\core\profiling\timers.h">
<Filter>src\core\profiling</Filter>
</ClInclude>
- <ClInclude Include="..\..\src\core\profiling\timers_preciseclock.h">
- <Filter>src\core\profiling</Filter>
+ <ClInclude Include="..\..\src\core\statistics\census_interface.h">
+ <Filter>src\core\statistics</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\src\core\statistics\census_rpc_stats.h">
+ <Filter>src\core\statistics</Filter>
</ClInclude>
<ClInclude Include="..\..\src\core\surface\byte_buffer_queue.h">
<Filter>src\core\surface</Filter>
@@ -737,6 +743,9 @@
<Filter Include="src\core\profiling">
<UniqueIdentifier>{7f91d9bf-c9de-835a-d74d-b16f843b89a9}</UniqueIdentifier>
</Filter>
+ <Filter Include="src\core\statistics">
+ <UniqueIdentifier>{e084164c-a069-00e3-db35-4e0b1cd6f0b7}</UniqueIdentifier>
+ </Filter>
<Filter Include="src\core\surface">
<UniqueIdentifier>{6cd0127e-c24b-d43c-38f5-198db8d4322a}</UniqueIdentifier>
</Filter>
diff --git a/vsprojects/protobuf.props b/vsprojects/protobuf.props
index d2685f7762..4a3c49266f 100644
--- a/vsprojects/protobuf.props
+++ b/vsprojects/protobuf.props
@@ -6,7 +6,7 @@
<ItemDefinitionGroup>
<Link>
<AdditionalDependencies>libprotobuf.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(ProjectDir)\..\..\third_party\protobuf\vsprojects\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(ProjectDir)\..\..\third_party\protobuf\cmake\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
diff --git a/vsprojects/protoc.props b/vsprojects/protoc.props
index 6024022690..fc89694633 100644
--- a/vsprojects/protoc.props
+++ b/vsprojects/protoc.props
@@ -6,7 +6,7 @@
<ItemDefinitionGroup>
<Link>
<AdditionalDependencies>libprotoc.lib;%(AdditionalDependencies)</AdditionalDependencies>
- <AdditionalLibraryDirectories>$(ProjectDir)\..\..\third_party\protobuf\vsprojects\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
+ <AdditionalLibraryDirectories>$(ProjectDir)\..\..\third_party\protobuf\cmake\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemGroup />