首先,我要说我喜欢将ServiceStack设计为客户机。(我从未在服务器端使用过)
我正在为API调用编写一个C包装器,我不断地得到超时和身份验证错误。我已经联系了另一端的开发人员,他们向我保证在他们的一端没有问题,我一定是做错了什么。通常我不会相信他们,我会构建一个示例项目来演示这个问题,但在这种情况下,他们会将我指向一个网页,该网页将测试我在C中运行的相同API,并且他们可以尽快地重新进行身份验证,单击提交按钮。我忘记了他们用来测试的确切地点,但我的故事已经够多了…我肯定我做错了什么,我就是不知道。
这是我的单元测试。如果我单独运行它或使用一个副本,它可以正常工作(150-1100ms),但是如果我复制3个或更多副本,我只会得到2-3个副本,其余的将超时。
[TestMethod]
[Timeout(5000)]
public void Login_Success1()
{
var client = new JsonServiceClient("apiurl");
var response = client.Login("XXXAccessKeyXXX", "XXXSecretKeyXXX");
//Assertions
}
这是我的扩展方法:
public static class Extensions
{
public static (bool Success, string Message, string Token) Login(this JsonServiceClient client, string accessKey, string secretKey)
{
try
{
var response = client.Post(new LoginRequest(accessKey, secretKey));
var authorization = response.Headers.GetValues("Authorization")[0];
return (true, string.Empty, authorization);
}
catch (Exception ex)
{
return (false, $"Authentication failed: {ex.Message}", string.Empty);
}
}
}
下面是登录请求:
[Route("/sessions")]
[DataContract]
internal class LoginRequest
{
internal LoginRequest(string accessKey, string secretKey)
{
AccessKey = accessKey ?? throw new ArgumentNullException(nameof(accessKey));
SecretKey = secretKey ?? throw new ArgumentNullException(nameof(secretKey));
}
[DataMember(Name = "accessKey")]
internal string AccessKey { get; set; }
[DataMember(Name = "secretKey")]
internal string SecretKey { get; set; }
}
我认为这是所有相关的代码,但如果你觉得我错过了什么,请lmk。