【问题标题】:ServiceStack: Keep getting HTTP 500 errors for unknown reasonServiceStack:由于未知原因不断收到 HTTP 500 错误
【发布时间】:2018-09-26 11:36:05
【问题描述】:

突然之间,我在自托管的 ServiceStack WS 中不断收到 HTTP 500 错误。

我已经提出了几个请求,并且它们运行良好,但是这一个根本行不通。我已经像这样添加了我的许可证:

    private void StartServiceStackService()
    {
        Licensing.RegisterLicenseFromFileIfExists("servicestack-license.txt".MapHostAbsolutePath());

        _serviceStackHost = new ServiceStackWsHost(this, _frontEndModuleParameters, _alfaWebServicesSettings);
        _serviceStackHost.Init();
        if (!Debugger.IsAttached)
        {
            _serviceStackHost.Start(new[] { "http://+:8080/" });
        }
        else
        {
            _serviceStackHost.Start(new[] { "http://+:8081/" });
        }
    }

失败的服务是:

[Route(Bookings.BASE_PATH + "search", Verbs = "GET")]
public class SearchAddress : IReturn<SearchAddressResponse>
{
    public string SearchString { get; set; }
}

public class SearchAddressResponse : ResponseBase
{
    public string Test { get; set; }
    // public List<Address> Addresses { get; set; }
}

internal class SearchAddressHandler : ServiceHandlerBase
{
    public SearchAddressResponse Get(SearchAddress searchAddress)
    {
        return new SearchAddressResponse()
        {
            Test = "ASDASDASD"
        };
    }
}

我这样使用 Fiddler4 来称呼它:

GET http://192.168.0.147:8081/alfaonline/bookings/search?SearchString=123 HTTP/1.1
User-Agent: Fiddler
Host: 192.168.0.147:8081
AuthToken: a18b613c-23b2-4f4e-8934-ad8d6cbc57bb
DeviceUUID: 1baaace

并得到这个回复:

HTTP/1.1 500 Internal Server Error
Transfer-Encoding: chunked
Content-Type: text/html
Vary: Accept
Server: Microsoft-HTTPAPI/2.0
X-Powered-By: ServiceStack/5.20 Net45/Windows
Date: Wed, 26 Sep 2018 11:28:31 GMT

0

如果我改为返回“null”,如下所示:

[MyAuthenticate]
internal class SearchAddressHandler : ServiceHandlerBase
{
    public SearchAddressResponse Get(SearchAddress searchAddress)
    {
        return null;
    }
}

Fiddler 给了我 HTTP 204 OK:

HTTP/1.1 204 OK
Content-Length: 0
Vary: Accept
Server: Microsoft-HTTPAPI/2.0
X-Powered-By: ServiceStack/5.20 Net45/Windows
Date: Wed, 26 Sep 2018 11:26:29 GMT

我在调试模式下的 VS 中没有看到任何错误、异常,在异常设置中看到“全部捕获”。我可以在处理程序中放置一个断点,它会在那里中断,因此执行正确的处理程序。


更新 我一直在使用 Fiddler,现在正在运行 Fiddler4。当我尝试下面描述的服务时,例如 swagger(ServiceStack 的插件),它按预期运行。如果我在 Postman 中运行该服务,它会按预期运行。但是如果我在 Fiddler 中运行它,我会得到 HTTP 500


更新 2 我也刚刚注意到转到 http://127.0.0.1:8081/requestlogs 也会产生 HTTP 500 错误。更具体地说,当我访问 /requestlogs 并添加 UncaughtExceptionHandlers 时,我看到了这个错误:

System.MissingMethodException:找不到方法:'System.String ServiceStack.StringUtils.HtmlEncodeLite(System.String)'。在 ServiceStack.Formats.HtmlFormat.d__10.MoveNext() 在 System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start[TStateMachine](TStateMachine& 状态机)在 ServiceStack.Formats.HtmlFormat.SerializeToStreamAsync(IRequest 请求, 对象响应,流输出流)在 ServiceStack.HttpResponseExtensionsInternal.d__7.MoveNext()

【问题讨论】:

标签: servicestack http-error


【解决方案1】:

您的第一种方法应该是获取有关错误的信息:

【讨论】:

  • 我已经或当然在发布之前阅读了文档 =) 我正在使用您喜欢的结构、基于消息的 DTO 等,所以 ResponseStatus 在那里,但我从 Fiddler 那里得不到任何回报。由于我在调试模式下运行,因此默认情况下应该启用 DebugMode 吗?我现在添加了StrictMode = true,但我仍然在控制台或其他地方看不到任何有价值的东西(我添加了LogManager.LogFactory = new ConsoleLogFactory(debugEnabled: true);)。我看到DEBUG: CreateRequestAsync/requestParams:SearchString 是一个日志,但在 Fiddler 中仍然是 500,但在 Postman 中没有......
  • 我在上面添加了 Update 2127.0.0.1:8081/requestlogs 不起作用,我也得到了 HTTP 500。
  • 在添加 UncaughtExceptionHandlers 之后,我看到了一些东西:Error: MissingMethodException: Method not found: 'System.String ServiceStack.StringUtils.HtmlEncodeLite(System.String)'. 尝试访问 /requestslogs
  • ?缺少方法异常? =)
  • 你有脏 dll,确保所有 NuGet 包使用相同版本,删除包 bin 和 obj 文件夹而不是再次恢复包。
猜你喜欢
  • 2017-08-19
  • 2014-01-02
  • 2017-04-09
  • 2011-01-28
  • 2016-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多