【发布时间】:2012-09-27 09:46:38
【问题描述】:
对于初学者来说,BasicAuth 似乎在服务端进行了正确配置(该服务是一个 REST 服务,继承自 RestServiceBase,如果这在这里很重要的话),至少在使用浏览器时它工作得非常好。
当我尝试在 MonoTouch 下使用客户端进行服务时,这里有两个问题(我正在使用 IServiceClient 接口和 JsonServiceClient 支持它):
-
当我输入错误的凭据时,我会收到“用户名或密码无效”的异常消息,这一切都很好。但是,当我第二次输入 ANYTHING 时,无论是正确还是错误的凭据,并尝试发送请求,我都会收到
Internal Server Error异常,其中ReponseDto包含:Error Code: Cookie Exception, Message: The 'Name' = '$Version' part of the cookie is invalid我正在使用
SetCredentials方法,AlwaysSendBasicAuthHeader设置为true(但这并不重要,当它设置为false时,同样的事情发生了)。知道为什么会发生这种情况以及如何解决吗? -
现在让我们假设我第一次提供了正确的凭据(当一切正常时),初始身份验证正常。现在,当我尝试从标有
[Authenticate]属性的服务中获取 DTO 时,我得到:ServiceStack.ServiceClient.Web.WebServiceException: Internal Server Error
内部异常:
System.IndexOutOfRangeException: Array index is out of range.
at ServiceStack.Text.Json.JsonTypeSerializer.EatValue (System.String value, System.Int32& i) [0x00000] in <filename unknown>:0
at ServiceStack.Text.Json.JsonTypeSerializer.EatTypeValue (System.String value, System.Int32& i) [0x00000] in <filename unknown>:0
at ServiceStack.Text.Common.DeserializeListWithElements`2[DTO.Report,ServiceStack.Text.Json.JsonTypeSerializer].ParseGenericList (System.String value, System.Type createListType, ServiceStack.Text.Common.ParseStringDelegate parseFn) [0x00000] in <filename unknown>:0
at ServiceStack.Text.Common.DeserializeList`2+<GetParseFn>c__AnonStoreyB[System.Collections.Generic.IList`1[DTO.Report],ServiceStack.Text.Json.JsonTypeSerializer].<>m__37 (System.String value) [0x00000] in <filename unknown>:0
at ServiceStack.Text.JsonSerializer.DeserializeFromString (System.String value, System.Type type) [0x00000] in <filename unknown>:0
at ServiceStack.Text.JsonSerializer.DeserializeFromStream (System.Type type, System.IO.Stream stream) [0x00000] in <filename unknown>:0
at ServiceStack.ServiceClient.Web.AsyncServiceClient.HandleResponseError[IList`1] (System.Exception exception, ServiceStack.ServiceClient.Web.RequestState`1 requestState) [0x00000] in <filename unknown>:0 }
据我所知,这意味着 JSON 序列化程序因未知原因而放弃。有趣的是,如果我禁用身份验证,同一段代码可以正常工作 - 通过POSTing 搜索请求异步获取 DTO 列表:
client.SendAsync<IList<DTO.Report>>(searchRequest, OnSuccess, OnError)
第一点的问题仍然存在:为什么?如何解决? :)
【问题讨论】:
标签: c# web-services rest xamarin.ios servicestack