public virtual AsyncDuplexStreamingCall<EgressResponse, EgressRequest> Egress(CallOptions options)
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.
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\u003eThe \u003ccode\u003eTether.TetherClient\u003c/code\u003e class in the Google.Cloud.ApigeeConnect.V1 API provides client functionality for interacting with the Tether service.\u003c/p\u003e\n"],["\u003cp\u003eVersion 2.4.0 is the latest version of the \u003ccode\u003eTether.TetherClient\u003c/code\u003e within the documentation, with previous versions ranging down to version 1.0.0.\u003c/p\u003e\n"],["\u003cp\u003e\u003ccode\u003eTetherClient\u003c/code\u003e has constructors for creating instances using a \u003ccode\u003eCallInvoker\u003c/code\u003e, a \u003ccode\u003eChannelBase\u003c/code\u003e, or a \u003ccode\u003eClientBaseConfiguration\u003c/code\u003e, and a protected parameterless constructor.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eEgress\u003c/code\u003e method in \u003ccode\u003eTetherClient\u003c/code\u003e handles streaming egress requests and responses, utilizing streaming to change the gRPC client-server dynamic, which are sent via the \u003ccode\u003eEgressResponse\u003c/code\u003e and \u003ccode\u003eEgressRequest\u003c/code\u003e types respectively.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eNewInstance\u003c/code\u003e method within \u003ccode\u003eTetherClient\u003c/code\u003e allows for the creation of new client instances using a provided \u003ccode\u003eClientBaseConfiguration\u003c/code\u003e.\u003c/p\u003e\n"]]],[],null,["# Apigee Connect v1 API - Class Tether.TetherClient (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.Tether.TetherClient)\n- [2.3.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/2.3.0/Google.Cloud.ApigeeConnect.V1.Tether.TetherClient)\n- [2.2.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/2.2.0/Google.Cloud.ApigeeConnect.V1.Tether.TetherClient)\n- [2.1.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/2.1.0/Google.Cloud.ApigeeConnect.V1.Tether.TetherClient)\n- [2.0.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/2.0.0/Google.Cloud.ApigeeConnect.V1.Tether.TetherClient)\n- [1.1.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/1.1.0/Google.Cloud.ApigeeConnect.V1.Tether.TetherClient)\n- [1.0.0](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/1.0.0/Google.Cloud.ApigeeConnect.V1.Tether.TetherClient) \n\n public class Tether.TetherClient : ClientBase\u003cTether.TetherClient\u003e\n\nReference documentation and code samples for the Apigee Connect v1 API class Tether.TetherClient.\n\nClient for Tether \n\nInheritance\n-----------\n\n[object](https://learn.microsoft.com/dotnet/api/system.object) \\\u003e [ClientBase](https://github.com/grpc/grpc-dotnet/blob/6eccb614c532d52c1569ce9f14754fdc826609ef/src/Grpc.Core.Api/ClientBase.cs) \\\u003e [ClientBase](https://github.com/grpc/grpc-dotnet/blob/6eccb614c532d52c1569ce9f14754fdc826609ef/src/Grpc.Core.Api/ClientBase.cs)[Tether](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.Tether)[TetherClient](/dotnet/docs/reference/Google.Cloud.ApigeeConnect.V1/latest/Google.Cloud.ApigeeConnect.V1.Tether.TetherClient) \\\u003e Tether.TetherClient \n\nInherited Members\n-----------------\n\n[ClientBase\\\u003cTether.TetherClient\\\u003e.WithHost(string)](https://github.com/grpc/grpc-dotnet/blob/6eccb614c532d52c1569ce9f14754fdc826609ef/src/Grpc.Core.Api/ClientBase.cs) \n[ClientBase.CallInvoker](https://github.com/grpc/grpc-dotnet/blob/6eccb614c532d52c1569ce9f14754fdc826609ef/src/Grpc.Core.Api/ClientBase.cs) \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.MemberwiseClone()](https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone) \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\nConstructors\n------------\n\n### TetherClient()\n\n protected TetherClient()\n\nProtected parameterless constructor to allow creation of test doubles.\n\n### TetherClient(CallInvoker)\n\n public TetherClient(CallInvoker callInvoker)\n\nCreates a new client for Tether that uses a custom `CallInvoker`.\n\n### TetherClient(ChannelBase)\n\n public TetherClient(ChannelBase channel)\n\nCreates a new client for Tether\n\n### TetherClient(ClientBaseConfiguration)\n\n protected TetherClient(ClientBase.ClientBaseConfiguration configuration)\n\nProtected constructor to allow creation of configured clients.\n\nMethods\n-------\n\n### Egress(CallOptions)\n\n public virtual AsyncDuplexStreamingCall\u003cEgressResponse, EgressRequest\u003e Egress(CallOptions options)\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### Egress(Metadata, DateTime?, CancellationToken)\n\n public virtual AsyncDuplexStreamingCall\u003cEgressResponse, EgressRequest\u003e Egress(Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default)\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### NewInstance(ClientBaseConfiguration)\n\n protected override Tether.TetherClient NewInstance(ClientBase.ClientBaseConfiguration configuration)\n\nCreates a new instance of client from given `ClientBaseConfiguration`.\n\n**Overrides** \n[ClientBase\\\u003cTether.TetherClient\\\u003e.NewInstance(ClientBase.ClientBaseConfiguration)](https://github.com/grpc/grpc-dotnet/blob/6eccb614c532d52c1569ce9f14754fdc826609ef/src/Grpc.Core.Api/ClientBase.cs)"]]