Tether provides a way for the control plane to send HTTP API requests to
services in data planes that runs in a remote datacenter without
requiring customers to open firewalls on their runtime plane.
Egress streams egress requests and responses. Logically, this is not
actually a streaming request, but uses streaming as a mechanism to flip
the client-server relationship of gRPC so that the server can act as a
client.
The listener, the RPC server, accepts connections from the dialer,
the RPC client.
The listener streams http requests and the dialer streams http responses.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-07 UTC."],[[["\u003cp\u003eThis document provides reference information for the \u003ccode\u003eTetherClientImpl\u003c/code\u003e class, which is an implementation of the \u003ccode\u003eTetherClient\u003c/code\u003e for the Apigee Connect v1 API.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eTetherClientImpl\u003c/code\u003e serves as a convenient wrapper for the Tether service, allowing the control plane to send HTTP API requests to services in data planes within remote datacenters without requiring customers to open firewalls.\u003c/p\u003e\n"],["\u003cp\u003eThe class inherits from \u003ccode\u003eTetherClient\u003c/code\u003e and \u003ccode\u003eobject\u003c/code\u003e, and includes inherited members such as \u003ccode\u003eDefaultEndpoint\u003c/code\u003e, \u003ccode\u003eDefaultScopes\u003c/code\u003e, and methods for creating and managing client instances.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eTetherClientImpl\u003c/code\u003e includes a constructor that takes a gRPC client, settings, and an optional logger, as well as an overriden \u003ccode\u003eGrpcClient\u003c/code\u003e property, and a method \u003ccode\u003eEgress\u003c/code\u003e, that manages egress streams for requests and responses.\u003c/p\u003e\n"],["\u003cp\u003eThere are seven different versions of the documentation ranging from \u003ccode\u003e2.4.0\u003c/code\u003e to \u003ccode\u003e1.0.0\u003c/code\u003e with version \u003ccode\u003e2.4.0\u003c/code\u003e being the latest.\u003c/p\u003e\n"]]],[],null,["# Apigee Connect v1 API - Class TetherClientImpl (2.4.0)\n\nVersion latestkeyboard_arrow_down\n\n- [2.4.0 (latest)](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.TetherClientImpl)\n- [2.3.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/2.3.0/Google.Cloud.ApigeeConnect.V1.TetherClientImpl)\n- [2.2.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/2.2.0/Google.Cloud.ApigeeConnect.V1.TetherClientImpl)\n- [2.1.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/2.1.0/Google.Cloud.ApigeeConnect.V1.TetherClientImpl)\n- [2.0.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/2.0.0/Google.Cloud.ApigeeConnect.V1.TetherClientImpl)\n- [1.1.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/1.1.0/Google.Cloud.ApigeeConnect.V1.TetherClientImpl)\n- [1.0.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/1.0.0/Google.Cloud.ApigeeConnect.V1.TetherClientImpl) \n\n public sealed class TetherClientImpl : TetherClient\n\nReference documentation and code samples for the Apigee Connect v1 API class TetherClientImpl.\n\nTether client wrapper implementation, for convenient use. \n\nInheritance\n-----------\n\n[object](https://learn.microsoft.com/dotnet/api/system.object) \\\u003e [TetherClient](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.TetherClient) \\\u003e TetherClientImpl \n\nInherited Members\n-----------------\n\n[TetherClient.DefaultEndpoint](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.TetherClient#Google_Cloud_ApigeeConnect_V1_TetherClient_DefaultEndpoint) \n[TetherClient.DefaultScopes](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.TetherClient#Google_Cloud_ApigeeConnect_V1_TetherClient_DefaultScopes) \n[TetherClient.ServiceMetadata](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.TetherClient#Google_Cloud_ApigeeConnect_V1_TetherClient_ServiceMetadata) \n[TetherClient.CreateAsync(CancellationToken)](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.TetherClient#Google_Cloud_ApigeeConnect_V1_TetherClient_CreateAsync_System_Threading_CancellationToken_) \n[TetherClient.Create()](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.TetherClient#Google_Cloud_ApigeeConnect_V1_TetherClient_Create) \n[TetherClient.ShutdownDefaultChannelsAsync()](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.TetherClient#Google_Cloud_ApigeeConnect_V1_TetherClient_ShutdownDefaultChannelsAsync) \n[object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode) \n[object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype) \n[object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)\n\nNamespace\n---------\n\n[Google.Cloud.ApigeeConnect.V1](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1)\n\nAssembly\n--------\n\nGoogle.Cloud.ApigeeConnect.V1.dll\n\nRemarks\n-------\n\nTether provides a way for the control plane to send HTTP API requests to\nservices in data planes that runs in a remote datacenter without\nrequiring customers to open firewalls on their runtime plane.\n\nConstructors\n------------\n\n### TetherClientImpl(TetherClient, TetherSettings, ILogger)\n\n public TetherClientImpl(Tether.TetherClient grpcClient, TetherSettings settings, ILogger logger)\n\nConstructs a client wrapper for the Tether service, with the specified gRPC client and settings.\n\nProperties\n----------\n\n### GrpcClient\n\n public override Tether.TetherClient GrpcClient { get; }\n\nThe underlying gRPC Tether client\n\n**Overrides** \n[TetherClient.GrpcClient](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.TetherClient#Google_Cloud_ApigeeConnect_V1_TetherClient_GrpcClient)\n\nMethods\n-------\n\n### Egress(CallSettings, BidirectionalStreamingSettings)\n\n public override TetherClient.EgressStream Egress(CallSettings callSettings = null, BidirectionalStreamingSettings streamingSettings = null)\n\nEgress streams egress requests and responses. Logically, this is not\nactually a streaming request, but uses streaming as a mechanism to flip\nthe client-server relationship of gRPC so that the server can act as a\nclient.\nThe listener, the RPC server, accepts connections from the dialer,\nthe RPC client.\nThe listener streams http requests and the dialer streams http responses.\n\n**Overrides** \n[TetherClient.Egress(CallSettings, BidirectionalStreamingSettings)](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.TetherClient#Google_Cloud_ApigeeConnect_V1_TetherClient_Egress_Google_Api_Gax_Grpc_CallSettings_Google_Api_Gax_Grpc_BidirectionalStreamingSettings_)"]]