如果我在Windows机器上运行我的Web应用程序,一切正常。当我在Linux(CentOS)机器上运行此应用程序时,我在尝试时发出以下异常,请发送Post请求:
System.Net.Http.HttpRequestException:服务器返回无效或无法识别的响应。 System.Net.Http.CurlResponseHeaderReader.ReadHeader(String& headerName,String& headerValue)at System.Net.Http.CurlHandler.MultiAgent.CurlReceiveHeadersCallback(IntPtr buffer,UInt64 size,UInt64 nitems,IntPtr context)---栈尾从抛出异常的先前位置追踪---在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)中
这是发布帖子的代码:
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发出请求,我得到了预期的响应。我是否对标题定义做错了什么?
与sucess(Source)
一起使用的CURL命令示例curl --header" Content-Type:text / xml; charset = UTF-8" --header" SOAPAction:ACTION_YOU_WANT_TO_CALL" --data @FILE_NAME URL_OF_THE_SOAP_WEB_SERVICE_ENDPOINT
SOAP UI请求(RAW):
POST http://xxx/xxx/xxx.php HTTP / 1.1 Accept-Encoding:gzip,deflate Content-Type:text / xml; charset = UTF-8 SOAPAction: " http://xxx/xxx/xxx.php/userLogin"内容长度:488主机:xxx 连接:Keep-Alive User-Agent:Apache-HttpClient / 4.1.1(java 1.5
答案 0 :(得分:2)
好吧,我们已经通过GitHub上的DNX团队解决了这个问题。我已经在link上创建了一个说明问题的帖子。
这就是我所做的:
[root @ su soaptest] #curl -I http://application.com/api/service.php
HTTP / 1.1 200 OK日期:星期二,07六月2016 01:21:20 GMT服务器: Apache / 2.4.6(CentOS)X-Powered-By:PHP / 5.4.16 Access-Control-Allow-Headers:SOAPAction,Content-Type Access-Control-Allow-Origin:*访问控制允许 - 方法: POST,GET,OPTIONS连接:关闭Content-Type:text / html; 字符集= UTF-8
问题是在我的主PHP API页面(我的案例service.php)中找到的(:)上的空白区域
Access-Control-Allow-Methods:POST,GET,OPTIONS
应该是:
Access-Control-Allow-Methods:POST,GET,OPTIONS
如果你在Windows机器上运行该应用程序,它仍然可以在上面的链接上查看整个问题,这仍然可以正确读取标题(有或没有空格)。他们现在已经创建了一个问题,所以这也可以在linux机器上实现。
谢谢。