ServiceStack IServiceClient 在 iOS 设备上运行时抛出“<request DTO> 不是 IList<> 类型”

问题描述 投票:0回答:1

ServiceStack 服务客户端调用(在桌面和 iOS 模拟器上运行良好)在 iOS 设备上运行时崩溃。该服务是 ServiceStack 文档/示例中的最小“Hello”:

public class Hello : IReturn<HelloResponse> {
    public string Name { get; set; }
}

public class HelloResponse {
    public string Result { get; set; }
}

我这样调用它:


IServiceClient client = new JsonApiClient("https://foobar.com/");   
Hello request = new Hello { Name = "World!" };
var response = await client.ApiAsync(request);

(请注意,服务 URI 在这里无关紧要,因为崩溃发生在实际调用服务之前的设备上。)

尝试在 Visual Studio Mac OS 17.5.4 的 iPhone 上以调试模式运行此程序,

ApiAsync()
调用从 ServiceStack.Text 中抛出
ArgumentException

System.ArgumentException    "Type ServiceTest.Hello is not of type IList<>"

   at ServiceStack.Text.Common.WriteLists`2[[ServiceTest.Hello, ServiceTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[ServiceStack.Text.Json.JsonTypeSerializer, ServiceStack.Text, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null]].GetWriteFn() in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.Text/src/ServiceStack.Text/Common/WriteLists.cs:line 497
   at ServiceStack.Text.Common.WriteLists`2[[ServiceTest.Hello, ServiceTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[ServiceStack.Text.Json.JsonTypeSerializer, ServiceStack.Text, Version=6.0.0.0, Culture=neutral, PublicKeyToken=null]]..cctor() in /home/runner/work/ServiceStack/ServiceStack/ServiceStack.Text/src/ServiceStack.Text/Common/WriteLists.cs:line 483

测试用例是最小的 net7.0-ios (Xamarin.iOS) 单项目解决方案。我试过:

  • .NET 6 而不是 .NET 7

  • JsonServiceClient
    &
    JsonHttpClient
    而不是
    JsonApiClient

  • 其他

    IServiceClient
    方法,例如
    PostAsync()
    代替
    ApiAsync()

  • 不同的iOS设备有不同的iOS大版本

  • ServiceStack 的最新版本和旧版本(6.8.0、6.7.0、6.6.0、6.5.0、6.0.2)

  • Xamarin 链接器设置的各种混乱,为 SS 程序集指定“linkskip”,DTO 类上的 [Preserve] 属性

  • 其中一些变化导致了不同的崩溃,但它们似乎都与 AOT 相关

有什么想法吗? ServiceStack 是否需要一些魔法。[文本] 在 iOS 设备上工作?

xamarin.ios servicestack
1个回答
0
投票

不幸的是,坦率地说有点令人惊讶,但 ServiceStack 通过电子邮件通知我这种情况不受支持。

来自

[email protected]

这个问题看起来是由于不受支持的 Xamarin AOT 问题 平台。

和:

它曾经与旧版本的 Xamarin 一起工作,但他们的新 Xamarin 实施似乎已经打破了他们的有限支持 在他们早期的 iOS AOT 实现中有通用反射, 看起来他们将来不太可能解决这些问题 考虑到 Microsoft 计划终止支持的 Xamarin 版本 Xamarin 2024 年 5 月 1 日。

© www.soinside.com 2019 - 2024. All rights reserved.