Hi Ben,
I found two issues in WfsV2AsyncFeatureSource in ThinkGeo.Core
15.0.0-beta191 when requesting adv:AX_Bahnstrecke from this public WFS:
https://geoservices.bayern.de/wfs/v1/ogc_atkis_basisdlm.cgi
The service uses urn:ogc:def:crs:EPSG::25832. Its geometry property is
adv:position, inherited through the feature’s base type and declared as
gml:CurvePropertyType.
The SDK includes the adv namespace binding in its GetFeature requests, but
sends unqualified property names such as propertyname=position. Bayern rejects
that with an HTTP-200 OWS ExceptionReport:
- Exception code:
ErrorInPropertyName - Locator:
GetFeature - Reason:
Prefix ‘’ in qname ‘position’ is unknown (FeatureTypeContext: adv:AX_Bahnstrecke).
Here is a minimal HTTP reproduction:
curl --get 'https://geoservices.bayern.de/wfs/v1/ogc_atkis_basisdlm.cgi' \
--data-urlencode 'SERVICE=WFS' \
--data-urlencode 'VERSION=2.0.0' \
--data-urlencode 'REQUEST=GetFeature' \
--data-urlencode 'TYPENAMES=adv:AX_Bahnstrecke' \
--data-urlencode 'NAMESPACES=xmlns(adv,http://www.adv-online.de/namespaces/adv/gid/7.1)' \
--data-urlencode 'srsName=urn:ogc:def:crs:EPSG::25832' \
--data-urlencode 'propertyname=position' \
--data-urlencode 'STARTINDEX=0' \
--data-urlencode 'COUNT=2'
Changing only propertyname=position to propertyname=adv:position returns two
valid line features. Omitting propertyname also works. I verified the same
failure/success comparison with this BBOX added:
725800,5565900,726500,5567100,urn:ogc:def:crs:EPSG::25832
The second issue is error handling: the SDK parser searches for wfs:member
without first checking for an OWS exception. It therefore treats the rejected
request as an empty feature collection instead of throwing. LastXmlResponse
contains the exception document.
This is the minimal SDK example to reproduce the request and inspect its response:
using System;
using System.Threading;
using ThinkGeo.Core;
var source = new WfsV2AsyncFeatureSource(
"https://geoservices.bayern.de/wfs/v1/ogc_atkis_basisdlm.cgi",
"adv:AX_Bahnstrecke") { WfsAxisOrder = WfsAxisOrder.XY };
try
{
await source.OpenAsync(CancellationToken.None);
string request = source.GetRequestUrl(null, 2);
Console.WriteLine(request);
var page = await source.GetFeaturesAsync(request, CancellationToken.None);
Console.WriteLine(page.Features.Count);
Console.WriteLine(source.LastXmlResponse);
}
finally
{
await source.CloseAsync(CancellationToken.None);
}
I verified the HTTP responses on September 30, 2026, and inspected the beta191
assembly to trace request construction and response parsing. I have not run the
standalone C# example above. The unqualified property construction also applies
to BBOX queries; requesting no attribute columns still includes the unqualified
geometry property.
Could you please fix both cases?
- Qualify GetFeature property references using their schema namespaces, including
inherited geometry and attribute properties, while preserving the column names
exposed to callers. - Throw an exception containing the service error when an OWS/WFS exception
document is returned, including HTTP-200 responses, instead of returning empty
data.
Thanks!