HttpSendHttpResponse 没有发送数据
HttpSendHttpResponse no data sent
我正在使用 Ms http server api
v2(在同步模式下)实现一个网络服务器,我正在尝试从网络浏览器对其进行测试。
我从浏览器向 http://localhost:50000/uri/ 发送了一个 GET 请求,我的应用程序正确地接收到了它。然后我发送响应,使用 HttpSendHttpResponse
在 (HTTP_DATA_CHUNK
) 中发送一些数据,然后我发送了 131 个字节。但是,浏览器没有收到任何数据。
我还使用 wininet
客户端对其进行了测试,结果相同。
这是我的发送响应代码 (Smalltalk):
sendResponse: aString
| data response sent id return |
data := HTTP_DATA_CHUNK external
data
DataChunkType: 0;
pBuffer: aString copyToExternalMemory;
BufferLength: aString size.
response := HTTP_RESPONSE_V2 external.
response
version1;
StatusCode: HTTP_STATUS_OK;
reason: 'Ok';
ContentType: 'text/html';
EntityChunkCount: 1;
dataChunk: data.
sent := ExternalLong external.
return := HttpServerDLL current
HttpSendHttpResponse: handle
RequestId: request id
Flags: 0
pHttpResponse: response asParameter
pCachePolicy: 0
pBytesSent: sent asParameter
pReserved2: 0
Reserved3: 0
pOverlapped: 0
pLogData: 0.
return = 0 ifFalse: [^self osError: return].
^sent asInteger
知道为什么如果 HttpSendHttpResponse 函数成功并指示已发送 n 个字节,客户端却没有收到数据吗?
谢谢,
塞巴斯蒂安
我找到问题了。我在 HTTP_DATA_CHUNK
结构的对齐中有一个错误,因为一些字段是 8 字节对齐的,所以数据指针处于错误的偏移量中。
修复此问题后,我再次尝试仅使用 HttpSendHttpResponse
但没有成功,然后将 HttpSendHttpResponse
用于 headers 和 HttpSendHttpResponseEntityBody
用于数据,并且它有效!也许 MSDN sample 已经过时了。在那里,数据与响应一起发送到 HttpSendHttpResponse
.
的单个调用中
非常感谢,塞巴斯蒂安
我正在使用 Ms http server api
v2(在同步模式下)实现一个网络服务器,我正在尝试从网络浏览器对其进行测试。
我从浏览器向 http://localhost:50000/uri/ 发送了一个 GET 请求,我的应用程序正确地接收到了它。然后我发送响应,使用 HttpSendHttpResponse
在 (HTTP_DATA_CHUNK
) 中发送一些数据,然后我发送了 131 个字节。但是,浏览器没有收到任何数据。
我还使用 wininet
客户端对其进行了测试,结果相同。
这是我的发送响应代码 (Smalltalk):
sendResponse: aString
| data response sent id return |
data := HTTP_DATA_CHUNK external
data
DataChunkType: 0;
pBuffer: aString copyToExternalMemory;
BufferLength: aString size.
response := HTTP_RESPONSE_V2 external.
response
version1;
StatusCode: HTTP_STATUS_OK;
reason: 'Ok';
ContentType: 'text/html';
EntityChunkCount: 1;
dataChunk: data.
sent := ExternalLong external.
return := HttpServerDLL current
HttpSendHttpResponse: handle
RequestId: request id
Flags: 0
pHttpResponse: response asParameter
pCachePolicy: 0
pBytesSent: sent asParameter
pReserved2: 0
Reserved3: 0
pOverlapped: 0
pLogData: 0.
return = 0 ifFalse: [^self osError: return].
^sent asInteger
知道为什么如果 HttpSendHttpResponse 函数成功并指示已发送 n 个字节,客户端却没有收到数据吗?
谢谢, 塞巴斯蒂安
我找到问题了。我在 HTTP_DATA_CHUNK
结构的对齐中有一个错误,因为一些字段是 8 字节对齐的,所以数据指针处于错误的偏移量中。
修复此问题后,我再次尝试仅使用 HttpSendHttpResponse
但没有成功,然后将 HttpSendHttpResponse
用于 headers 和 HttpSendHttpResponseEntityBody
用于数据,并且它有效!也许 MSDN sample 已经过时了。在那里,数据与响应一起发送到 HttpSendHttpResponse
.
非常感谢,塞巴斯蒂安