Czy ktoś uzyskał usługi Bing Map Web Services (dawniej Virtual Earth Web Services) współpracujące z Delphi?Ktoś używający Bing Map Web Services z Delphi?
Opierając się na moich dotychczasowych doświadczeniach (zarówno przy użyciu Delphi, jak i Visual Studio C#), jestem gotowy zrezygnować z niego i korzystać z usługi MapPoint Web Service, dopóki nie pojawi się przyszłą wersję usług sieciowych Bing Maps. Pomyślałem jednak, że zadam tutaj pytanie w ostateczności ...
Zaimportowałem dokumenty WSDL usługi Token Service i usługi geokodowania.
Udało mi się uzyskać token z usługi tokena, ale nie mogłem w ogóle uruchomić usługi geokodowania. Zawsze zwraca następujący komunikat o błędzie: Komunikat z działaniem '' nie może zostać przetworzony w odbiorniku z powodu niezgodności ContractFilter w EndpointDispatcher. Może to być spowodowane niedopasowaniem umowy (niedopasowane działania między nadawcą a odbiorcą) lub niedopasowaniem powiązania/bezpieczeństwa między nadawcą a odbiorcą. Sprawdź, czy nadawca i odbiorca mają tę samą umowę i to samo wiązanie (w tym wymogi bezpieczeństwa, np. Wiadomość, transport, brak).
zauważyłem Delphi nie określając wartość nagłówka SoapAction, więc próbowałem określenie „http://staging.dev.virtualearth.net/webservices/v1/geocode/contracts/IGeocodeService/Geocode” i mam następujący komunikat o błędzie Zamiast:
Serwer nie może przetworzyć żądania z powodu błędu wewnętrznego . Aby uzyskać więcej informacji o błędzie, włącz funkcję IncludeExceptionDetailInFaults (z ServiceBehaviorAttribute lub z zachowania konfiguracyjnego <serviceDebug>) na serwerze, aby wysłać informacje o wyjątku z powrotem do klienta lub włączyć śledzenie zgodnie z programem Microsoft .NET Framework 3.0 Dokumentacja SDK i sprawdź dzienniki śledzenia serwera.
Poniżej znajduje się mój kod Delphi i wysyłany nieprzetworzony XML, a następnie nieprzetworzony XML wysyłany przez podobne wywołanie z przykładowego kodu C# firmy Microsoft. Istnieje kilka różnic w kodzie XML, ale nie jestem pewien, co to jest różnica (y).
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>
Dzięki, próbowałem coś podobnego wcześniej, ale ja po prostu próbowałem go ponownie bez powodzenia. –