如果我在Windows机器上运行我的web应用程序,一切正常。当我在Linux (CentOS)机器上运行这个应用程序时,尝试发送Post请求时会得到以下异常:
System.Net.Http.HttpRequestException:服务器返回无效或无法识别的响应。在System.Net.Http.CurlResponseHeaderReader.ReadHeader(String& headerName,String& headerValue),在System.Net.Http.CurlHandler.MultiAgent.CurlReceiveHeadersCallback(IntPtr缓冲区,UInt64大小,UInt64 nitems,IntPtr上下文)--在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务中抛出异常的前一个位置的堆栈跟踪-在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task任务中))
这是发出post调用的代码:
Uri uri = new Uri(ServiceConfiguration.SERVICE_URL);
string sSOAPResponse = String.Empty;
HttpClient hc = new HttpClient();
hc.DefaultRequestHeaders.Add("SOAPAction", oRequest.Action);
var content = new StringContent(oRequest.RequestMessage, Encoding.UTF8, "text/xml");
try
{
using (HttpResponseMessage response = await hc.PostAsync(uri, content))
{
sSOAPResponse = await response.Content.ReadAsStringAsync();
(...)
}我猜这是因为我的标题定义。我还尝试在linux控制台上使用curl发出请求,并得到了预期的响应。我在头定义上做错什么了吗?
CURL命令示例用于sucess (来源)
curl --标题“内容--类型: text/xml;charset=UTF-8”-标头"SOAPAction: ACTION_YOU_WANT_TO_CALL“--data @FILE_NAME URL_OF_THE_SOAP_WEB_SERVICE_ENDPOINT
SOAP请求(RAW):
POST http://xxx/xxx/xxx.php HTTP/1.1接受-编码: gzip,压缩内容-类型: text/xml;charset=UTF-8 SOAPAction:"http://xxx/xxx/xxx.php/userLogin“内容-长度: 488主机: xxx连接:使用户保持活动-代理:Apache/4.1.1(Java1.5)
发布于 2016-06-07 11:11:47
伙计们,多亏了GitHub上的DNX团队,我才解决了这个问题。我已经创建了一个线程来说明这个链接上的问题。
这就是我所做的:
root@su soaptest# curl -I http://application.com/api/service.php HTTP/1.1 200确定日期: Tue,2016年6月7日01:21:20 GMT服务器: Apache/2.4.6 (CentOS) X驱动-By: PHP/5.4.16访问-控制-标头: SOAPAction,类型访问-控制-允许-源:*访问-控制-允许-方法: POST,GET,选项连接:关闭内容-类型: text/html;charset=utf-8
问题是在我的主PHP页面(我的例子service.php)中找到了(:)上的空白。
访问-控制-允许-方法: POST,GET,选项
应:
访问-控制-允许-方法: POST,GET,选项
另外,(您可以查看上面链接上的整个问题),如果您在Windows机器上运行应用程序,它仍然正确地读取标头(不管有没有空格)。他们现在制造了一个问题,所以这在linux机器上也是可能的。
谢谢。
https://stackoverflow.com/questions/37618243
复制相似问题