如图,
启动服务器,注册新账号,然后登陆,再获取用户的基本信息,是正常的。
接下来,重启服务端,然后登陆刚才注册的账号,成功,但是接下来的获取玩家基本信息出现Rpc错误信息。
刚开始学,研究了几天没弄明白,希望有知道的帮忙解惑,下面是具体的的错误信息:
<G2C_PlayerInfo>{RpcId:3, Error:102001, Message:"System.Exception: Rpc Error: ETModel.DBQueryRequest 102001
at ETModel.ETTaskCompletionSource`1.ETModel.IAwaiter<T>.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTaskCompletionSource.cs:line 171
at ETModel.ETTask`1.get_Result() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 168
at ETModel.ETTask`1.Awaiter.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 254
at ETHotfix.DBProxyComponentEx.QueryInner[T](DBProxyComponent self, Int64 id, String key) in F:\UnityNet\NetGame\ET-Branch_V5.0\Server\Hotfix\Module\DB\DBProxyComponentSystem.cs:line 76
at ETModel.ETTaskCompletionSource`1.ETModel.IAwaiter<T>.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTaskCompletionSource.cs:line 171
at ETModel.ETTask`1.get_Result() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 168
at ETModel.ETTask`1.Awaiter.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 254
at ETHotfix.C2G_PlayerInfoHandler.Run(Session session, C2G_PlayerInfo request, G2C_PlayerInfo response, Action reply) in F:\UnityNet\NetGame\ET-Branch_V5.0\Server\Hotfix\Module\GameCode\C2G_PlayerInfoHandler.cs:line 12
at ETModel.ETTaskCompletionSource.ETModel.IAwaiter.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTaskCompletionSource.cs:line 32
at ETModel.ETTask.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 33
at ETModel.ETTask.Awaiter.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 98
at ETModel.AMRpcHandler`2.Handle(Session session, Object message) in F:\UnityNet\NetGame\ET-Branch_V5.0\Server\Model\Module\Message\AMRpcHandler.cs:line 37", PlayerName:"", }
UnityEngine.Debug:Log(Object)
ETModel.Log:Debug(String) (at Assets/Model/Base/Log.cs:14)
ETHotfix.Log:Debug(String) (at Assets/Hotfix/Base/Log.cs:34)
ETHotfix.Log:Msg(Object) (at Assets/Hotfix/Base/Log.cs:69)
ETHotfix.Session:Run(Session, UInt16, MemoryStream) (at Assets/Hotfix/Module/Message/Session.cs:60)
ETHotfix.<>c__DisplayClass0_0:<Awake>b__0(Session, UInt16, MemoryStream) (at Assets/Hotfix/Module/Message/Session.cs:18)
ETModel.Session:Run(MemoryStream) (at Assets/Model/Module/Message/Session.cs:136)
ETModel.Session:OnRead(MemoryStream) (at Assets/Model/Module/Message/Session.cs:120)
ETModel.AChannel:OnRead(MemoryStream) (at Assets/Model/Module/Message/Network/AChannel.cs:55)
ETModel.TChannel:OnRecvComplete(Object) (at Assets/Model/Module/Message/Network/TCP/TChannel.cs:279)
ETModel.<>c__DisplayClass7_0:<Post>b__0() (at Assets/Model/Base/OneThreadSynchronizationContext.cs:38)
ETModel.OneThreadSynchronizationContext:Update() (at Assets/Model/Base/OneThreadSynchronizationContext.cs:26)
ETModel.Init:Update() (at Assets/Model/Init.cs:53)
RpcException: Error: 102001 Message: System.Exception: Rpc Error: ETModel.DBQueryRequest 102001
at ETModel.ETTaskCompletionSource`1.ETModel.IAwaiter<T>.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTaskCompletionSource.cs:line 171
at ETModel.ETTask`1.get_Result() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 168
at ETModel.ETTask`1.Awaiter.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 254
at ETHotfix.DBProxyComponentEx.QueryInner[T](DBProxyComponent self, Int64 id, String key) in F:\UnityNet\NetGame\ET-Branch_V5.0\Server\Hotfix\Module\DB\DBProxyComponentSystem.cs:line 76
at ETModel.ETTaskCompletionSource`1.ETModel.IAwaiter<T>.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTaskCompletionSource.cs:line 171
at ETModel.ETTask`1.get_Result() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 168
at ETModel.ETTask`1.Awaiter.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 254
at ETHotfix.C2G_PlayerInfoHandler.Run(Session session, C2G_PlayerInfo request, G2C_PlayerInfo response, Action reply) in F:\UnityNet\NetGame\ET-Branch_V5.0\Server\Hotfix\Module\GameCode\C2G_PlayerInfoHandler.cs:line 12
at ETModel.ETTaskCompletionSource.ETModel.IAwaiter.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTaskCompletionSource.cs:line 32
at ETModel.ETTask.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 33
at ETModel.ETTask.Awaiter.GetResult() in F:\UnityNet\NetGame\ET-Branch_V5.0\Unity\Assets\Model\Base\Async\ETTask.cs:line 98
at ETModel.AMRpcHandler`2.Handle(Session session, Object message) in F:\UnityNet\NetGame\ET-Branch_V5.0\Server\Model\Module\Message\AMRpcHandler.cs:line 37
ETHotfix.Session+<>c__DisplayClass10_0.<Call>b__0 (ETHotfix.IResponse response) (at Assets/Hotfix/Module/Message/Session.cs:106)
Rethrow as Exception: Rpc Error: ETHotfix.C2G_PlayerInfo
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () (at <e1319b7195c343e79b385cd3aa43f5dc>:0)
ETModel.ETTaskCompletionSource`1[T].ETModel.IAwaiter<T>.GetResult () (at Assets/Model/Base/Async/ETTaskCompletionSource.cs:171)
ETModel.ETTask`1[T].get_Result () (at Assets/Model/Base/Async/ETTask.cs:168)
ETModel.ETTask`1+Awaiter[T].GetResult () (at Assets/Model/Base/Async/ETTask.cs:254)
ETHotfix.FUILobbyStartSystem+<GetUserInfo>d__1.MoveNext () (at Assets/Hotfix/Module/GameCode/FairyGUI/UILobby/UILobbySystem.cs:16)
UnityEngine.Debug:LogException(Exception)
ETModel.Log:Error(Exception) (at Assets/Model/Base/Log.cs:34)
ETModel.AsyncETVoidMethodBuilder:SetException(Exception) (at Assets/Model/Base/Async/AsyncETVoidMethodBuilder.cs:27)
ETHotfix.<GetUserInfo>d__1:MoveNext() (at Assets/Hotfix/Module/GameCode/FairyGUI/UILobby/UILobbySystem.cs:19)
ETModel.MoveNextRunner`1:Run() (at Assets/Model/Base/Async/MoveNextRunner.cs:12)
ETModel.ETTaskCompletionSource`1:TryInvokeContinuation() (at Assets/Model/Base/Async/ETTaskCompletionSource.cs:196)
ETModel.ETTaskCompletionSource`1:TrySetException(Exception) (at Assets/Model/Base/Async/ETTaskCompletionSource.cs:245)
ETModel.ETTaskCompletionSource`1:SetException(Exception) (at Assets/Model/Base/Async/ETTaskCompletionSource.cs:212)
ETHotfix.<>c__DisplayClass10_0:<Call>b__0(IResponse) (at Assets/Hotfix/Module/Message/Session.cs:113)
ETHotfix.Session:Run(Session, UInt16, MemoryStream) (at Assets/Hotfix/Module/Message/Session.cs:77)
ETHotfix.<>c__DisplayClass0_0:<Awake>b__0(Session, UInt16, MemoryStream) (at Assets/Hotfix/Module/Message/Session.cs:18)
ETModel.Session:Run(MemoryStream) (at Assets/Model/Module/Message/Session.cs:136)
ETModel.Session:OnRead(MemoryStream) (at Assets/Model/Module/Message/Session.cs:120)
ETModel.AChannel:OnRead(MemoryStream) (at Assets/Model/Module/Message/Network/AChannel.cs:55)
ETModel.TChannel:OnRecvComplete(Object) (at Assets/Model/Module/Message/Network/TCP/TChannel.cs:279)
ETModel.<>c__DisplayClass7_0:<Post>b__0() (at Assets/Model/Base/OneThreadSynchronizationContext.cs:38)
ETModel.OneThreadSynchronizationContext:Update() (at Assets/Model/Base/OneThreadSynchronizationContext.cs:26)
ETModel.Init:Update() (at Assets/Model/Init.cs:53)
玩家数据类如下:
namespace ETHotfix
{
[BsonIgnoreExtraElements]
public class PlayerInfo : Entity
{
private string playerName;
public string PlayerName { get => playerName; set => playerName = value; }
}
}
请求玩家数据:
G2C_PlayerInfo g2CPlayerInfo = (G2C_PlayerInfo)await Game.Scene.GetComponent<SessionComponent>().Session.Call(new C2G_PlayerInfo() { PlayerID = ETModel.Game.Scene.GetComponent<PlayerComponent>().MyPlayer.Id });
服务端获取玩家信息处理:
namespace ETHotfix
{
[MessageHandler(AppType.Gate)]
public class C2G_PlayerInfoHandler : AMRpcHandler<C2G_PlayerInfo, G2C_PlayerInfo>
{
protected override async ETTask Run(Session session, C2G_PlayerInfo request, G2C_PlayerInfo response, Action reply)
{
DBProxyComponent dbProxyComponent = Game.Scene.GetComponent<DBProxyComponent>();
PlayerInfo playerInfo = await dbProxyComponent.Query<PlayerInfo>(request.PlayerID);
response.PlayerName = playerInfo.PlayerName;
reply();
}
}
}
如下处理却不会出现错误:
namespace ETHotfix
{
[MessageHandler(AppType.Gate)]
public class C2G_PlayerInfoHandler : AMRpcHandler<C2G_PlayerInfo, G2C_PlayerInfo>
{
protected override async ETTask Run(Session session, C2G_PlayerInfo request, G2C_PlayerInfo response, Action reply)
{
DBProxyComponent dbProxyComponent = Game.Scene.GetComponent<DBProxyComponent>();
List<ComponentWithId> results = await dbProxyComponent.Query<PlayerInfo>(x => x.Id == request.PlayerID);
Log.Info(MongoHelper.ToJson(results));
PlayerInfo player = await dbProxyComponent.Query<PlayerInfo>(request.PlayerID);
response.PlayerName = playerInfo.PlayerName;
Log.Info(MongoHelper.ToJson(player));
reply();
}
}
}