#region Copyright notice and license // Copyright 2015 gRPC authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #endregion using System; using Grpc.Core.Utils; namespace Grpc.Core { /// /// Thrown when remote procedure call fails. Every RpcException is associated with a resulting of the call. /// public class RpcException : Exception { private readonly Status status; private readonly Metadata trailers; /// /// Creates a new RpcException associated with given status. /// /// Resulting status of a call. public RpcException(Status status) : this(status, Metadata.Empty, status.ToString()) { } /// /// Creates a new RpcException associated with given status and message. /// /// Resulting status of a call. /// The exception message. public RpcException(Status status, string message) : this(status, Metadata.Empty, message) { } /// /// Creates a new RpcException associated with given status and trailing response metadata. /// /// Resulting status of a call. /// Response trailing metadata. public RpcException(Status status, Metadata trailers) : this(status, trailers, status.ToString()) { } /// /// Creates a new RpcException associated with given status, message and trailing response metadata. /// /// Resulting status of a call. /// Response trailing metadata. /// The exception message. public RpcException(Status status, Metadata trailers, string message) : base(message) { this.status = status; this.trailers = GrpcPreconditions.CheckNotNull(trailers); } /// /// Resulting status of the call. /// public Status Status { get { return status; } } /// /// Returns the status code of the call, as a convenient alternative to Status.StatusCode. /// public StatusCode StatusCode { get { return status.StatusCode; } } /// /// Gets the call trailing metadata. /// Trailers only have meaningful content for client-side calls (in which case they represent the trailing metadata sent by the server when closing the call). /// Instances of RpcException thrown by the server-side part of the stack will have trailers always set to empty. /// public Metadata Trailers { get { return trailers; } } } }