{"record":{"id":"0206365e70e49071","repo":"microsoft/semantic-kernel","slug":"no-address-provided-for-the-operation-name-grp","errorCode":null,"errorMessage":"No address provided for the '{operation.Name}' gRPC operation.","messagePattern":"No address provided for the '(.+?)' gRPC operation\\.","errorType":"exception","errorClass":"KernelException","httpStatus":null,"severity":"error","filePath":"dotnet/src/Functions/Functions.Grpc/GrpcOperationRunner.cs","lineNumber":174,"sourceCode":"    /// </summary>\n    /// <param name=\"operation\">The gRPC operation.</param>\n    /// <returns>The channel address.</returns>\n    private string GetAddress(GrpcOperation operation)\n    {\n        string? address;\n\n        if (this._addressOverride is not null)\n        {\n            address = this._addressOverride.AbsoluteUri;\n        }\n        else\n        {\n            address = operation.Address;\n        }\n\n        if (string.IsNullOrEmpty(address))\n        {\n            throw new KernelException($\"No address provided for the '{operation.Name}' gRPC operation.\");\n        }\n\n        if (!Uri.TryCreate(address, UriKind.Absolute, out var addressUri))\n        {\n            throw new KernelException($\"The address '{address}' for the '{operation.Name}' gRPC operation is not a valid absolute URI.\");\n        }\n\n        // Validate scheme\n        if (!this._allowedSchemes.Contains(addressUri.Scheme, StringComparer.OrdinalIgnoreCase))\n        {\n            throw new KernelException($\"The URI scheme '{addressUri.Scheme}' is not allowed for the '{operation.Name}' gRPC operation. Allowed schemes: {string.Join(\", \", this._allowedSchemes)}.\");\n        }\n\n        // Validate against allowed addresses\n        if (this._allowedAddresses is { Count: > 0 })\n        {\n            bool isAllowed = false;\n            foreach (var allowedAddress in this._allowedAddresses)","sourceCodeStart":156,"sourceCodeEnd":192,"githubUrl":"https://github.com/microsoft/semantic-kernel/blob/c028a0c7dc4f0814cdcbaba9d998f187a41197bf/dotnet/src/Functions/Functions.Grpc/GrpcOperationRunner.cs#L156-L192","documentation":"Thrown by GrpcOperationRunner when resolving the target address for an operation and both the address override and the operation's own `Address` are null or empty. Without a valid address the runner cannot open a gRPC channel, so it aborts before any network attempt.","triggerScenarios":"An operation whose .proto-defined address is empty and no `GrpcOperationRunnerOptions.AddressOverride` was supplied; a .proto file missing the option that carries the service URL.","commonSituations":"Service URL defined only in environment config that wasn't wired into the address override; .proto generated without the address option; dev vs prod address sources out of sync.","solutions":["Set an address override via GrpcOperationRunnerOptions.AddressOverride when registering the plugin.","Ensure the .proto file declares the address option on the service.","Load the address from configuration and pass it explicitly."],"exampleFix":"// before\nkernel.CreatePluginFromGrpc(stream, name); // no address\n// after\nkernel.CreatePluginFromGrpc(stream, name, new GrpcFunctionExecutionParameters {\n    GrpcOperationRunnerOptions = new() { AddressOverride = new Uri(serviceUrl) }\n});","handlingStrategy":"validation","validationCode":"if (string.IsNullOrWhiteSpace(operationAddress)) {\n    runnerOptions.AddressOverride = new Uri(config[\"ServiceUrl\"]);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always supply an AddressOverride sourced from configuration.","Centralize service URL resolution so no operation is left address-less."],"tags":["grpc","network","configuration"],"backgroundTag":null,"analyzedSha":"c028a0c7dc4f0814cdcbaba9d998f187a41197bf","analyzedAt":"2026-08-13T13:48:05.040Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}