我正在使用HttpClient类与我的WPF应用程序中的Web服务进行通信.
当我在同一个连接上发出连续的GET请求时,一切正常.但是,当我在同一个连接上发出连续的PUT/PATCH请求时,第一个请求准确执行,我收到一个响应,但第二个请求不包括请求中的正文,我收到臭名昭着的错误"服务器提交协议违规.Section = ResponseStatusLine".
如果我在每次请求后通过添加Connection来手动关闭连接,我的请求会成功完成:靠近标题.这种"解决方案"是一种糟糕的模式,性能无法适当扩展.
以下是我发送的请求的TCP流输出列表的抵押版本:
Wireshark:遵循TCP流输出
GET /domain/api/tenant/current/object?objectName=Lizbot HTTP/1.1
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 50
{"Data":[{"Id":123,"ObjectName":"Lizbot","Date":null}],"Errors":[]}
PATCH /domain/api/tenant/current/object/123 HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 50
{"Id":123,"ObjectName":"Lizbot","Date":null}
HTTP/1.1 204 No Content
Content-Type: application/json; charset=utf-8
{"Data":null,"Errors":[]}
PATCH /domain/api/tenant/current/object/123/otherObject HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
HTTP/1.1 400 Bad Request</b>
Content-Type: text/html; charset=us-ascii
Connection: close
Content-Length: 311
Run Code Online (Sandbox Code Playgroud)
请注意,第二个PATCH缺少它应该修补的对象.如果我改变了PATCHing的顺序,则第二个PATCH仍然缺少其对象.
这个错误似乎与我尝试过的一些已知解决方案相同.它们包含此解决方案,其中包括将useUnsafeHeaderParsing属性设置为TRUE并在Web.Config 中将Keep-Alive属性设置为FALSE.我也试过这种方式设置这些属性的解决方案如下所示:
ServicePointManager.DefaultConnectionLimit = 2;
ServicePointManager.Expect100Continue = false; …Run Code Online (Sandbox Code Playgroud) 我目前正在为Windows 8编写一个Windows应用商店应用程序,我正在使用SQLite在Windows应用程序的类库中对嵌入式数据库进行持久化.我试图从我的嵌入式数据库中的两个不同表中加入数据,但SQLite不断从其GenerateCommand方法中抛出一个不受支持的异常.
我目前在两个表中都有数据,并且每个表中都有一个questionId可以加入.我尝试了两种不同的方法,它们都抛出相同的错误.
第一种方法:
var q = (from gameTable in db.Table<Model.GameSaved>()
join qTable in db.Table<Questions>() on gameTable.QuestionId equals qTable.QuestionId
select qTable
).First();
Run Code Online (Sandbox Code Playgroud)
第二种方法:
var q =
(from question in db.Table<Model.GameSaved>()
select question
).Join(db.Table<Questions>(),
game => game.QuestionId,
questionObject => questionObject.QuestionId,
(game,questionObject) => questionObject)
.First();
Run Code Online (Sandbox Code Playgroud)
我不确定我在这里缺少什么,但它必须是简单而明显的东西.