¿Alguien ha recibido Bing Map Web Services (anteriormente Virtual Earth Web Services) trabajando con Delphi?¿Alguien que utiliza Bing Web Web Services con Delphi?
Basado en mis experiencias hasta ahora (tanto con Delphi como con Visual Studio C#), estoy a punto de abandonarlo e ir con el servicio web MapPoint hasta que salga una versión futura de Bing Maps Web Services. Sin embargo, pensé en publicar una pregunta aquí como último recurso ...
Importé el servicio Token y los documentos WSDL de Geocode Services.
Pude con éxito obtener un token del servicio de token, pero no he podido conseguir que funcione el servicio de Geocode. Siempre devuelve el siguiente mensaje de error: El mensaje con la Acción '' no se puede procesar en el receptor, debido a una discrepancia ContractFilter en el EndpointDispatcher. Esto puede deberse a una discrepancia en el contrato (acciones no coincidentes entre el emisor y el receptor) o una falta de correspondencia vinculante/de seguridad entre el emisor y el receptor. Verifique que el remitente y el receptor tengan el mismo contrato y el mismo enlace (incluidos los requisitos de seguridad, por ejemplo, Mensaje, Transporte, Ninguno).
me di cuenta de Delphi no se especifica un valor para el encabezado SOAPAction, así que intentaron especificar "http://staging.dev.virtualearth.net/webservices/v1/geocode/contracts/IGeocodeService/Geocode" y recibieron el mensaje de error siguiente en su lugar:
El servidor no pudo procesar la solicitud debido a un error interno . Para obtener más información sobre el error, active IncludeExceptionDetailInFaults (ya sea desde ServiceBehaviorAttribute o desde el <serviceDebug> comportamiento de configuración) en el servidor para enviar de nuevo la información de excepción al cliente o active el rastreo según Microsoft .NET Framework 3.0 documentación de SDK e inspeccionar los registros de seguimiento del servidor.
A continuación se muestra mi código Delphi y el XML sin procesar que se está enviando, y luego el XML sin formato que se envía mediante una llamada similar del código de muestra C# de Microsoft. Hay varias diferencias en el XML, pero no estoy seguro de qué diferencia (s) es la clave.
var
Service: IGeocodeService;
Request: Geocode;
Response: GeocodeResponse3;
ResponseIndex: Integer;
Token: WideString;
Filters: ArrayOfFilterBase;
begin
Token := GetToken;
Service := GetIGeocodeService;
Request := Geocode.Create;
try
Request.request := GeocodeRequest.Create;
Request.request.Credentials := GeocodeService.Credentials.Create; // Freed by GeocodeRequest class
Request.request.Credentials.Token := Token;
Request.request.Query := AddressEdit.Text;
Request.request.Options := GeocodeOptions.Create;
SetLength(Filters, 1);
Filters[ 0 ] := ConfidenceFilter.Create;
ConfidenceFilter(Filters[ 0 ]).MinimumConfidence := GeocodeService.High_;
Request.request.Options.Filters := Filters;
Response := Service.Geocode(Request);
try
for ResponseIndex := Low(Response.GeocodeResult.Results) to High(Response.GeocodeResult.Results) do
begin
OutputMemo.Lines.Add(Response.GeocodeResult.Results[ ResponseIndex ].DisplayName);
end;
finally
Response.Free;
end;
finally
Request.Free;
end;
end;
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="http://dev.virtualearth.net/webservices/v1/geocode/contracts" xmlns:NS3="http://dev.virtualearth.net/webservices/v1/geocode" xmlns:NS4="http://dev.virtualearth.net/webservices/v1/common">
<NS1:Geocode xmlns:NS1="http://dev.virtualearth.net/webservices/v1/geocode/contracts">
<parameters href="#1"/>
</NS1:Geocode>
<NS2:Geocode id="1" xsi:type="NS2:Geocode">
<request href="#2"/>
</NS2:Geocode>
<NS3:request id="2" xsi:type="NS3:GeocodeRequest">
<Credentials href="#3"/>
<Options href="#4"/>
<Query xsi:type="xsd:string">Some Address</Query>
</NS3:request>
<NS4:Credentials id="3" xsi:type="NS4:Credentials">
<Token xsi:type="xsd:string">cbYkKgNlrsGnZbn3HRP7Xp5LJMv3RR_5qECwgB792COfY3EPmviaDpZ4mmD3fDP1Osc6fWUkTptog7bfgM73bA2</Token>
</NS4:Credentials>
<NS3:Options id="4" xsi:type="NS3:GeocodeOptions">
<Filters xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="NS3:FilterBase[1]">
<item href="#5"/>
</Filters>
</NS3:Options>
<NS3:ConfidenceFilter id="5" xsi:type="NS3:ConfidenceFilter">
<MinimumConfidence xsi:type="NS4:Confidence">High</MinimumConfidence>
</NS3:ConfidenceFilter>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<Geocode xmlns="http://dev.virtualearth.net/webservices/v1/geocode/contracts">
<request xmlns:a="http://dev.virtualearth.net/webservices/v1/geocode" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Credentials xmlns="http://dev.virtualearth.net/webservices/v1/common">
<ApplicationId i:nil="true"/>
<Token>pezCDpJoxdCG63NQdJUGkTrYYalnuSQDwuIC9FvheFAd9MIPO75qX9n7il0dx3eTEHlN2877PzN1_6YbQDL5tg2</Token>
</Credentials>
<Culture i:nil="true" xmlns="http://dev.virtualearth.net/webservices/v1/common"/>
<ExecutionOptions i:nil="true" xmlns="http://dev.virtualearth.net/webservices/v1/common"/>
<UserProfile i:nil="true" xmlns="http://dev.virtualearth.net/webservices/v1/common"/>
<a:Address i:nil="true" xmlns:b="http://dev.virtualearth.net/webservices/v1/common"/>
<a:Options>
<a:Count i:nil="true"/>
<a:Filters>
<a:FilterBase i:type="a:ConfidenceFilter">
<a:MinimumConfidence>High</a:MinimumConfidence>
</a:FilterBase>
</a:Filters>
</a:Options>
<a:Query>1 Microsoft Way, Redmond, WA</a:Query>
</request>
</Geocode>
</s:Body>
</s:Envelope>
Gracias, lo habían intentado algo similar antes, pero yo sólo lo intentó de nuevo, pero sin suerte. –