Pārlūkot izejas kodu

Output rpcexception result

warr.qian 3 gadi atpakaļ
vecāks
revīzija
d58440f7fc

+ 32 - 0
.gitignore

@@ -0,0 +1,32 @@
+
+#Ignore thumbnails created by Windows
+Thumbs.db
+#Ignore files built by Visual Studio
+*.obj
+*.exe
+*.pdb
+*.user
+*.aps
+*.pch
+*.vspscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.cache
+*.ilk
+*.log
+[Bb]in
+[Dd]ebug*/
+*.lib
+*.sbr
+obj/
+[Rr]elease*/
+_ReSharper*/
+[Tt]est[Rr]esult*
+.vs/
+#Nuget packages folder
+packages/

+ 4 - 4
JsonRpcLite/JsonRpcLite.csproj

@@ -9,14 +9,14 @@
     <RepositoryUrl>http://git.ius.plus:88/Project-Wing/JsonRpcLite</RepositoryUrl>
     <RepositoryType></RepositoryType>
     <Description>A simple JsonRpc server implementation written in C#.</Description>
-    <AssemblyVersion>1.0.0.0</AssemblyVersion>
-    <FileVersion>1.0.0.0</FileVersion>
-    <Version>1.1.0</Version>
+    <AssemblyVersion>1.1.0.1</AssemblyVersion>
+    <FileVersion>1.1.0.1</FileVersion>
+    <Version>1.1.0.1</Version>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
     <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-    <Optimize>true</Optimize>
+    <Optimize>false</Optimize>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">

+ 15 - 18
JsonRpcLite/Network/JsonRpcHttpServerEngineBase.cs

@@ -273,7 +273,7 @@ namespace JsonRpcLite.Network
                 if (string.IsNullOrEmpty(serviceName))
                 {
                     Logger.WriteWarning($"Service for request: {requestPath} not found.");
-                    throw new HttpException((int) HttpStatusCode.ServiceUnavailable, "Service does not exist.");
+                    throw new HttpException((int)HttpStatusCode.ServiceUnavailable, "Service does not exist.");
                 }
 
                 if (httpMethod == "get")
@@ -289,7 +289,7 @@ namespace JsonRpcLite.Network
                     if (!router.ServiceExists(serviceName))
                     {
                         Logger.WriteWarning($"Service for request: {requestPath} not found.");
-                        throw new HttpException((int) HttpStatusCode.ServiceUnavailable,$"Service [{serviceName}] does not exist.");
+                        throw new HttpException((int)HttpStatusCode.ServiceUnavailable, $"Service [{serviceName}] does not exist.");
                     }
 
                     if (smdRequest)
@@ -308,12 +308,12 @@ namespace JsonRpcLite.Network
                         }
                         catch (Exception ex)
                         {
-                            throw new HttpException((int) HttpStatusCode.InternalServerError, ex.Message);
+                            throw new HttpException((int)HttpStatusCode.InternalServerError, ex.Message);
                         }
                     }
                     else
                     {
-                        throw new HttpException((int) HttpStatusCode.NotFound,$"Resource for {requestPath} does not exist.");
+                        throw new HttpException((int)HttpStatusCode.NotFound, $"Resource for {requestPath} does not exist.");
                     }
                 }
                 else if (httpMethod == "post")
@@ -321,7 +321,7 @@ namespace JsonRpcLite.Network
                     if (!router.ServiceExists(serviceName))
                     {
                         Logger.WriteWarning($"Service for request: {requestPath} not found.");
-                        throw new ServerErrorException("Service does not exist.",$"Service [{serviceName}] does not exist.");
+                        throw new ServerErrorException("Service does not exist.", $"Service [{serviceName}] does not exist.");
                     }
 
                     try
@@ -340,9 +340,14 @@ namespace JsonRpcLite.Network
                 }
                 else
                 {
-                    throw new HttpException((int) HttpStatusCode.MethodNotAllowed, $"Invalid http-method:{httpMethod}");
+                    throw new HttpException((int)HttpStatusCode.MethodNotAllowed, $"Invalid http-method:{httpMethod}");
                 }
             }
+            catch (RpcException rpcException)
+            {
+                var response = new JsonRpcResponse();
+                response.WriteResult(rpcException);
+            }
             catch (Exception ex)
             {
                 Logger.WriteError($"Handle request {requestPath} error: {ex.Message}");
@@ -353,18 +358,10 @@ namespace JsonRpcLite.Network
                 else
                 {
                     var response = new JsonRpcResponse();
-                    if (ex is RpcException rpcException)
-                    {
-                        response.WriteResult(rpcException);
-                    }
-                    else
-                    {
-                        var serverError =
-                            new InternalErrorException($"Handle request {requestPath} error: {ex.Message}");
-                        response.WriteResult(serverError);
-                    }
-
-                    await WriteRpcResponsesAsync(context, new[] {response}, cancellationToken).ConfigureAwait(false);
+                    var serverError =
+                        new InternalErrorException($"Handle request {requestPath} error: {ex.Message}");
+                    response.WriteResult(serverError);
+                    await WriteRpcResponsesAsync(context, new[] { response }, cancellationToken).ConfigureAwait(false);
                 }
             }
             finally

+ 4 - 1
JsonRpcLite/Services/JsonRpcExceptions.cs

@@ -1,14 +1,17 @@
 using System;
-
+using System.Text.Json.Serialization;
+
 namespace JsonRpcLite.Services
 {
     public class RpcException : Exception
     {
+        [JsonPropertyName("code")]
         /// <summary>
         /// Gets the error code of the rpc call.
         /// </summary>
         public int ErrorCode { get; }
 
+        [JsonPropertyName("message")]
         /// <summary>
         /// Gets the internal message of the exception.
         /// </summary>

+ 2 - 2
JsonRpcLite/Services/JsonRpcServiceRouter.cs

@@ -173,9 +173,9 @@ namespace JsonRpcLite.Services
                         }
                         response.WriteResult(result);
                     }
-                    catch (RpcException rpcException)
+                    catch (RpcException)
                     {
-                        response.WriteResult(rpcException);
+                        throw;
                     }
                     catch (Exception ex)
                     {

+ 4 - 0
JsonRpcLite/Utilities/JsonRpcCodec.cs

@@ -209,6 +209,10 @@ namespace JsonRpcLite.Utilities
                 try
                 {
                     doc = await JsonDocument.ParseAsync(memoryStream, JsonRpcConvertSettings.DocumentOptions, cancellationToken).ConfigureAwait(false);
+                }
+                catch (RpcException)
+                {
+                    throw;
                 }
                 catch (Exception ex)
                 {

+ 8 - 10
JsonRpcLite/Utilities/JsonRpcResponseData.cs

@@ -51,18 +51,16 @@ namespace JsonRpcLite.Utilities
                 return _data["error"];
             }
             set
-            {
-                if (value is Exception exception)
+            {
+                if (value is RpcException rpcException)
+                {
+                    _data.Remove("result");
+                    _data["error"] = new Dictionary<string, object> { { "code", rpcException.ErrorCode }, { "message", rpcException.InternalMessage } };
+                }
+                else if (value is Exception exception)
                 {
                     _data.Remove("result");
-                    if (value is RpcException rpcException)
-                    {
-                        _data["error"] = new Dictionary<string, object> {{"code", rpcException.ErrorCode}, {"message", rpcException.InternalMessage}};
-                    }
-                    else
-                    {
-                        _data["error"] = new Dictionary<string, object> { { "code", ServerErrorException.DefaultServerErrorCode }, { "message", exception.Message } };
-                    }
+                    _data["error"] = new Dictionary<string, object> { { "code", ServerErrorException.DefaultServerErrorCode }, { "message", exception.Message } };
                 }
                 else
                 {