v3.5.2025.1001
# NewLife.Remoting ¹Ø¼üʱÐòͼ
±¾Îļþ¸ø³öµäÐ͵÷ÓÃÓë´¦ÀíµÄʱÐò£¬°üÀ¨£º¿Í»§¶Ë·¢Æð RPC¡¢401 ´¥·¢µÇÂ¼ÖØÊÔ¡¢·þÎñ¶Ë´¦ÀíÇëÇóµÄÍêÕûÁ´Â·¡£
## 1. ¿Í»§¶Ë·¢Æð RPC µ÷Ó㨳ɹ¦£©
```mermaid
sequenceDiagram
autonumber
participant App as Application
participant AC as ApiClient
participant CL as Cluster
participant SC as ISocketClient
participant ENC as IEncoder
participant Svr as IApiServer
App->>AC: InvokeAsync(action, args)
AC->>AC: Open()
AC->>CL: Get()
CL-->>AC: ISocketClient
AC->>ENC: CreateRequest(action, args)
ENC-->>AC: IMessage(req)
AC->>SC: SendMessageAsync(req)
SC->>Svr: req
Svr-->>SC: rsp
SC-->>AC: IMessage(rsp)
AC->>ENC: Decode(rsp)
ENC-->>AC: ApiMessage(code,data)
AC-->>App: TResult
AC->>CL: Return(client)
```
## 2. ¿Í»§¶Ë 401 ´¥·¢µÇ¼ºóÖØ·¢
```mermaid
sequenceDiagram
autonumber
participant App as Application
participant AC as ApiClient
participant CL as Cluster
participant SC as ISocketClient
participant ENC as IEncoder
participant Svr as IApiServer
App->>AC: InvokeAsync(action, args)
AC->>CL: Get()
AC->>ENC: CreateRequest()
AC->>SC: SendMessageAsync()
SC->>Svr: req
Svr-->>SC: rsp(401)
SC-->>AC: IMessage(rsp)
AC->>ENC: Decode(rsp)
ENC-->>AC: ApiMessage(Unauthorized)
AC->>AC: catch ApiException(401)
AC->>AC: OnLoginAsync(force=true)
AC->>SC: µÇ¼¶¯×÷£¨ÊµÏÖ·½×Ô¶¨Ò壩
AC->>ENC: CreateRequest()
AC->>SC: SendMessageAsync()
SC->>Svr: req
Svr-->>SC: rsp(200)
SC-->>AC: IMessage(rsp)
AC->>ENC: Decode(rsp)
ENC-->>AC: ApiMessage(Ok, data)
AC-->>App: TResult
AC->>CL: Return(client)
```
## 3. ·þÎñ¶Ë´¦ÀíÇëÇó
```mermaid
sequenceDiagram
autonumber
participant SC as ISocketClient
participant Svr as IApiServer
participant AS as ApiServer
participant ENC as IEncoder
participant H as IApiHandler
participant M as IApiManager
SC->>Svr: IMessage(req)
Svr->>AS: Process(session, msg, sp)
AS->>ENC: Decode(msg)
ENC-->>AS: ApiMessage(action,args)
AS->>AS: Tracer.NewSpan("rps:"+action)
AS->>AS: Received?.Invoke(...)
AS->>H: Execute(session, action, args, msg, sp)
H->>M: Find(action)/CreateController
M-->>H: ApiAction/Controller
H-->>AS: result
AS->>ENC: CreateResponse(msg, action, code, result)
ENC-->>AS: IMessage(rsp)
AS-->>Svr: rsp
```
±¸×¢£º
- µ¥Ïòµ÷Óãº`msg.OneWay == true` ʱ£¬·þÎñ¶Ë `Process` Ö±½Ó·µ»Ø `null`£¬²»Ó¦´ð¡£
- Âý×·×Ù£º¿Í»§¶Ë `InvokeWithClientAsync` Óë·þÎñ¶Ë `Process` ¾ùÔÚ `finally` ¼Ç¼³¬¹ý `SlowTrace` µÄµ÷ÓÃ/´¦ÀíÈÕÖ¾¡£
|