【发布时间】:2014-10-21 09:32:43
【问题描述】:
我通过 AJAX 调用使用服务堆栈已经有一段时间没有问题了,但最近创建了一个使用服务堆栈客户端(特别是 JsonServiceClient)的快速 winforms 应用程序。
但是 - 我遇到了一个问题,即我一直在呼叫超时,该呼叫在前两次尝试中成功运行。看起来服务堆栈客户端正在保留某些资源,或者我以错误的方式使用客户端。它仅在针对远程服务运行时发生(每次都在本地计算机上工作)。这是我的代码,还有一个例外:
var url = "http://www.TestServer.com/api";
var taskId = Guid.Parse("30fed418-214b-e411-80c1-22000a5b9fe5");
var email = "admin@example.com";
using (var client = new JsonServiceClient(url))
{
var result = client.Send(new Authenticate {UserName = "username", Password = "Password01", RememberMe = true});
client.Put(new AssignTask { AdminTaskId = taskId, Assignee = email });//Call #1 - works fine
client.Put(new AssignTask { AdminTaskId = taskId, Assignee = email });//Call #2 - works fine
try
{
client.Put(new AssignTask { AdminTaskId = taskId, Assignee = email });//Call #3 - works fine
}
catch (WebException ex)
{
//Times out every time
//at System.Net.HttpWebRequest.GetRequestStream(TransportContext& context)
//at System.Net.HttpWebRequest.GetRequestStream()
//at ServiceStack.Net40PclExport.GetRequestStream(WebRequest webRequest)
//at ServiceStack.ServiceClientBase.<>c__DisplayClassa.<SendRequest>b__9(HttpWebRequest client)
//at ServiceStack.ServiceClientBase.PrepareWebRequest(String httpMethod, String requestUri, Object request, Action`1 sendRequestAction)
//at ServiceStack.ServiceClientBase.SendRequest(String httpMethod, String requestUri, Object request)
//at ServiceStack.ServiceClientBase.Send[TResponse](String httpMethod, String relativeOrAbsoluteUrl, Object request)
//at ServiceStack.ServiceClientBase.Put[TResponse](String relativeOrAbsoluteUrl, Object requestDto)
//at ServiceStack.ServiceClientBase.Put(Object requestDto)
//at SSClientIssue.Program.Main(String[] args) in c:\Users\David\Documents\Visual Studio 2013\Projects\SSClientIssue\SSClientIssue\Program.cs:line 27
throw;
}
}
超时后,我可以关闭并重新加载应用程序(服务器保持正常运行),然后再次获得相同的行为(两次成功调用)。 IIS 日志显示第三次调用没有到达服务器,因此看起来像是客户端问题。
我已经看了 8 个小时了,我觉得我的眼睛开始流血了……如果有人能帮忙,我会请你喝啤酒!
【问题讨论】:
-
复制这个的最好方法是什么?您可以在 GitHub 复制中添加一个自包含示例或链接到我们可以在本地运行的 .zip 吗?
-
对不起神话 - 带着一个新宝宝离开了!我已将 repro 添加到 GitHub (github.com/hiblen/SSIssue)。需要注意的一件事是,仅当客户端和服务位于不同的机器上时才会出现问题(在我的情况下,通过互联网针对 AWS 实例)。我怀疑这是因为 Windows 中的连接限制......我可能错了。客户端代码显示引发错误的位置。如果您需要更多详细信息,请大声喊叫......很乐意解决这个问题。
标签: httpwebrequest servicestack webmethod