뒤끝펑션을 통한 게임정보 수정/삽입 중 Empty attribute name

문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족한 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : 5.5.0
  • 프로젝트명 :
  • 스테이터스 코드 : 400
  • 에러 코드 : ValidationException
  • 에러 메시지 : Empty attribute name

해당 에러는 무엇을 의미하는 것인가요?
뒤끝펑션 자체 디버그에서는 문제 없이 게임 정보 수정이 되는 것 같은데
유니티 게임 내에서 펑션을 불러 Json을 전달하여 수정하려고 하니
에러가 발생합니다.

SectorCreate 함수에 들어오는 _sectorCreateDic 딕셔너리까지는 멀쩡하게 들어오는 것 같습니다만.

안녕하세요 개발자님

현재 서버에 업로드된 뒤끝 펑션에 접근 시도 중에 발생하는 에러로 확인이 됩니다.(Function.cs에서 발생하는 에러 X)

뒤끝펑션(Param.Add() ~ InvokeFunction())을 호출하는 쪽의 코드 공유 가능하다면 제공 부탁드리며,

펑션에 사용되는 인자값에 문제가 있을 수 있으니, 뒤끝펑션에 사용되는 Param의 값또한 아래 코드와 같이 빈값으로 보내어 접근이 되는지 확인해주시면 감사하겠습니다.(성공할 경우, 200 Success가 호출됩니다)

Backend.BFunc.InvokeFunction("펑션 이름", new Param());
private void BackendFunc_Test() {
    Param _param = new Param();
    _param.Add("Command", "SectorCreate");

    Dictionary<string, string> infoDic = new Dictionary<string, string>();
    infoDic.Add("sectorType", "defaultSector00");
    infoDic.Add("sectorName", "나만의 섹터 123");
    infoDic.Add("sectorIndex", "1");
    _param.Add("Data", infoDic);

    BackendReturnObject _bro = Backend.BFunc.InvokeFunction("testFunction", _param);
    Debug.Log(_bro.ToString());
}

이렇게 간단하게 해봤습니다만.
유니티 에디터에서 생성하는 param 다 무시하고. (= new Param 으로 하더라도)
그냥 VS 디버거에서 테스트하던 data만으로 돌아가도록 해도 같은 에러가 납니다.
아래와 같이 말이죠. (호출은 유니티 상에서 함)

-----뒤끝 펑션 내에 작성한 코드------

    public Stream Function(Stream stream, ILambdaContext context) {
        try {
            // 뒤끝펑션 API 초기화
            Backend.Initialize(ref stream);
        } catch (Exception e) {
            // 뒤끝펑션 API 초기화 실패 시 이유를 리턴
            return ReturnErrorObject("initialize " + e.ToString());
        }

        Dictionary<string, string> sectorCreateDic = new Dictionary<string, string>();
        sectorCreateDic.Add("sectorType", "defaultSector00");
        sectorCreateDic.Add("sectorName", "나만의 섹터 1");
        sectorCreateDic.Add("_L0S0_name", "N");
        sectorCreateDic.Add("_L0S1_name", "kor_subway");
        sectorCreateDic.Add("_L1S0_name", "N");
        sectorCreateDic.Add("_L1S1_name", "kor_convenience");
        sectorCreateDic.Add("_L1S2_name", "N");
        sectorCreateDic.Add("_L2S0_name", "jp_convenience");
        sectorCreateDic.Add("_L2S1_name", "N");
        sectorCreateDic.Add("_L2S2_name", "us_building1");
        SectorCreate(0, sectorCreateDic);

        return Backend.StringToStream("Done!");

    }

확인해본 결과, 뒤끝 펑션의 배포 도중에 포함되는 Newtonsoft.json의 파일을 찾을 수 없거나 버전이 달라 발생하는 것으로 확인이 되었습니다.

다음을 시도해 주시면 감사하겠습니다.

  1. Function.cs가 들어있는 배포되는 폴더의 dll에 Newtonsoft.json.dll 이 있는지, 버전이 12.0.0.0 혹은 12.0.0.3인지 확인해주세요.
    (우클릭 - 속성 - 자세히 - 파일 버전을 통해 볼 수 있습니다.)

  2. 뒤끝펑션을 다시 설치 후 시도해주세요.
    (C드라이브 > Program Files > AFI > BackendFunction > uninst.exe 를 눌러 삭제 혹은
    Porgram Files 내에 AFI 폴더와 유저 > AppData > Roaming에 위치한 AFI 폴더 삭제.)

  3. 그래도 에러가 발생한다면 backend build 시 출력되는 로그와 backend deploy시 출력되는 로그를 공유해주세요.(명령어 시작부터 명령어 종료까지)

C:\Users\kywer\AppData\Roaming\AFI\BFunc>backend build

Ready to build E:[BACKENDFUCNTION]\TEST_VS2019\BackendFunction_Test\BackendFunction_Test\BackendFunction_Test.csproj
Building your project…
.NET용 Microsoft (R) Build Engine 버전 16.7.0+7fb82e5b2
Copyright (C) Microsoft Corporation. All rights reserved.

복원할 프로젝트를 확인하는 중…
E:[BACKENDFUCNTION]\TEST_VS2019\BackendFunction_Test\BackendFunction_Test\BackendFunction_Test.csproj을(를) 362 ms 동안 복원했습니다.
BackendFunction_Test → E:[BACKENDFUCNTION]\TEST_VS2019\BackendFunction_Test\BackendFunction_Test\bin\Release\netcoreapp2.1\linux-x64\BackendFunction.dll
BackendFunction_Test → E:[BACKENDFUCNTION]\TEST_VS2019\BackendFunction_Test\BackendFunction_Test\bin\Release\netcoreapp2.1\linux-x64\publish
Makeing publish.Zip
디렉터리 "E:[BACKENDFUCNTION]\TEST_VS2019\BackendFunction_Test\BackendFunction_Test\bin\Release\netcoreapp2.1\linux-x64\publish"의 압축을 "E:[BACKENDFUCNTION]\TEST_VS2019\BackendFunction_Test\BackendFunction_Test\bin\Release\netcoreapp2.1\linux-x64\publish.zip"에 푸는 중입니다.

C:\Users\kywer\AppData\Roaming\AFI\BFunc>backend deploy testFunction

Init Deploy Process

                        • DEPLOY INFO * * * * * * * * * * * *
  •                                                     *
    
    functionName: testFunction
  •                                                     *
    
    fileName: publish.zip
  •                                                     *
    
    fileSize: 310304 Bytes
  •                                                     *
    
    lastUpdateAt: 2021-09-13T20:07:00.210Z
  •                                                     *
    
    description: 요청보냄
  •                                                     *
    

Are you sure to deploy “publish.zip” to function name “testFunction”? (y/n) y

Ready to deploy testFunction
Extracting zip file data…

Success to Extract zip file
Waiting for response from server…

Success to deploy the function: testFunction
StatusCode: 200
Message: OK

uninst.exe를 실행하여 삭제 후 최신 버전으로 재설치하였습니다.
Newtonsoft.Json.dll은 12.0.3.23909 버전입니다.

유니티상에서 Invoke시 여전히 같은 문제가 발생합니다.
VS디버그 상에서 실행시 해당 문제가 발생하지 않습니다. (204 Success)

해당 에러는 조금 더 확인이 필요할 것 같습니다.

괜찮으시다면 backend build를 통해 만들어진 뒤끝펑션 폴더의 bin > Release > netcoreapp2.1 > linux-x64에 위치한 publish.zip 압축 파일을 DM 또는 게시글로 공유가 가능하실까요?

공유 시 에러 파악에 큰 도움이 될 수 있을 것 같습니다.

publish.txt (303.0 KB)

zip으로 확장자를 변경하시면 됩니다.

협력 감사드립니다.

해당 파일을 확인 및 테스트해본 결과,
참조에 Nuget에 존재하는 Newtonsoft.json.dll의 버전이 9.0.1로 낮아서 발생하는 것으로 추정이 되는데,
(dll에 있는 Newtonsoft와는 무관합니다.)

프로젝트의 참조 중 Newtonsoft.json의 버전이 9.0.1인지 확인해주시고 만약 9.0.1이라면 12.0.3으로 업그레이드 한 후 재배포 해주시면 감사하겠습니다.

아예 설치되어 있지 않길래 설치했습니다.
정상 동작합니다.