Javascript 通过http POST的WFS GetFeature请求不适用于ArcGIS

Javascript 通过http POST的WFS GetFeature请求不适用于ArcGIS,javascript,gis,arcgis,geoserver,arcgis-server,Javascript,Gis,Arcgis,Geoserver,Arcgis Server,以下WFS GetFeature请求在Geoserver上运行时没有问题,但在ArcGIS上失败 JavaScript调用: jQuery.ajax({ type: "POST", url: "http://......", data: "...", headers: { 'Content-Type': 'application/xml' }, dataType: 'xml',

以下WFS GetFeature请求在Geoserver上运行时没有问题,但在ArcGIS上失败

JavaScript调用:

jQuery.ajax({
        type: "POST",
        url: "http://......",
        data: "...",
        headers: {
            'Content-Type': 'application/xml'
        },
        dataType: 'xml',
        error: function (xhr,status,error){
            console.debug(status + " - "+ error);
        },
        success: callBack
    });
邮政机构(数据):

ArcGIS服务器错误(服务器):

我也注意到了以下几点:

1) 如果我将上面的POST请求(相同的代码)与Geoserver的TestServlet(web界面上的演示部分)一起使用,它就可以工作

2) 以下http GET请求适用于ArcGIS:

http://..../MapServer/WFSServer?service=WFS&request=getfeature&version=1.1.1&typename=wellhole&Filter=%3Cogc:Filter%3E%3Cogc:PropertyIsEqualTo%3E%3Cogc:PropertyName%3EOBJECTID%3C/ogc:PropertyName%3E%3Cogc:Literal%3E402%3C/ogc:Literal%3E%3C/ogc:PropertyIsEqualTo%3E%3C/ogc:Filter%3E

请帮助。

我认为这个问题可能是您的POST请求正文中缺少名称空间

也许您可以尝试在每个标记中添加名称空间,如下面的示例所示,并让我们知道

<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:cgf="http://www.opengis.net/cite/geometry" outputFormat="GML2" version="1.0.0" service="WFS">
<wfs:Query typeName="esri:we">
<ogc:Filter>
<ogc:BBOX>
<ogc:PropertyName>gml:multiPointProperty</ogc:PropertyName>
<gml:Box xmlns="http://www.opengis.net/cite/spatialTestSuite" srsName="EPSG:4326">
<gml:coordinates>-122.087210506228, 37.208402, -121.813389493772, 37.383473</gml:coordinates>
</gml:Box>
</ogc:BBOX>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>

多点属性
-122.087210506228, 37.208402, -121.813389493772, 37.383473

我刚刚尝试使用名称空间,但得到了相同的输出

<wfs:GetFeature xmlns="http://www.opengis.net/wfs" 
                       service="WFS" version="1.1.0" 
                       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                       xsi:schemaLocation="http://www.opengis.net/wfs 
                       http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
<wfs:Query typeName="WellHole" srsName="EPSG:3857" >
<ogc:Filter xmlns="http://www.opengis.net/ogc">
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>OBJECTID</ogc:PropertyName>
<ogc:Literal>402</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>

目标
402

看起来是CORS的问题(飞行前提示),我想我已经检查过了。为什么它可以从Geoserver的测试servlet中工作?它还可以通过java中的HttpPost方法工作。不确定Javascript的错误看起来像是CORS问题——当然,我假设(可能是错误的)这个问题涉及到一个浏览器——再看看,它看起来不像,所以CORS不会是服务器端代码的问题——我收回这一点——jQuery指的是浏览器,对-所以要么服务器不理解请求,要么根本没有为CORS配置。。。飞行前发送一个选项方法请求,其标题/数据与您在飞行后请求中指定的标题/数据完全相同-服务器需要正确响应飞行前请求才能“通过”-您连接的服务器没有,但400错误并不能真正说明问题是“无CORS”还是“错误请求”(这就是400错误)我用过,看起来还可以。我想知道ArcGIS是否需要一种不同的请求格式。我尝试了上面的代码,但也没有成功。还有其他提示吗?
http://..../MapServer/WFSServer?service=WFS&request=getfeature&version=1.1.1&typename=wellhole&Filter=%3Cogc:Filter%3E%3Cogc:PropertyIsEqualTo%3E%3Cogc:PropertyName%3EOBJECTID%3C/ogc:PropertyName%3E%3Cogc:Literal%3E402%3C/ogc:Literal%3E%3C/ogc:PropertyIsEqualTo%3E%3C/ogc:Filter%3E
<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:cgf="http://www.opengis.net/cite/geometry" outputFormat="GML2" version="1.0.0" service="WFS">
<wfs:Query typeName="esri:we">
<ogc:Filter>
<ogc:BBOX>
<ogc:PropertyName>gml:multiPointProperty</ogc:PropertyName>
<gml:Box xmlns="http://www.opengis.net/cite/spatialTestSuite" srsName="EPSG:4326">
<gml:coordinates>-122.087210506228, 37.208402, -121.813389493772, 37.383473</gml:coordinates>
</gml:Box>
</ogc:BBOX>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>
<wfs:GetFeature xmlns="http://www.opengis.net/wfs" 
                       service="WFS" version="1.1.0" 
                       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                       xsi:schemaLocation="http://www.opengis.net/wfs 
                       http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
<wfs:Query typeName="WellHole" srsName="EPSG:3857" >
<ogc:Filter xmlns="http://www.opengis.net/ogc">
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>OBJECTID</ogc:PropertyName>
<ogc:Literal>402</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Query>
</wfs:GetFeature>