gpt4 book ai didi

web-services - 有人使用带有 Delphi 的 Bing map Web 服务吗?

转载 作者:行者123 更新时间:2023-12-03 14:44:33 29 4
gpt4 key购买 nike

有人获得了与 Delphi 一起使用的 Bing map Web 服务(以前称为 Virtual Earth Web 服务)吗?

根据我迄今为止的经验(使用 Delphi 和 Visual Studio C#),我准备放弃它并使用 MapPoint Web 服务,直到 Bing map Web 服务的 future 版本问世。但是,我想我应该在这里发布一个问题作为最后的手段......

我导入了 token 服务和地理编码服务 WSDL 文档。

我成功地从 token 服务获取了 token ,但根本无法让地理编码服务正常工作。它总是返回以下错误消息:由于 EndpointDispatcher 上的 ContractFilter 不匹配,带有 Action '' 的消息无法在接收方处理。这可能是因为契约(Contract)不匹配(发送者和接收者之间的操作不匹配)或发送者和接收者之间的绑定(bind)/安全不匹配。检查发送方和接收方是否具有相同的合约和相同的绑定(bind)(包括安全要求,例如消息、传输、无)。

我注意到 Delphi 没有为 SOAPAction header 指定值,因此我尝试指定“http://staging.dev.virtualearth.net/webservices/v1/geocode/contracts/IGeocodeService/Geocode ”,但收到以下错误消息:

由于内部错误,服务器无法处理请求。有关错误的详细信息,请在服务器上打开 IncludeExceptionDetailInFaults(从 ServiceBehaviorAttribute 或从 配置行为),以便将异常信息发送回客户端,或者根据 Microsoft .NET Framework 打开跟踪3.0 SDK 文档并检查服务器跟踪日志。

下面是我的 Delphi 代码和发送的原始 XML,然后通过来自 Microsoft 的示例 C# 代码的类似调用发送原始 XML。 XML 中存在一些差异,但我不确定关键是什么差异。

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>

最佳答案

我最好的猜测是 Delphi 似乎生成了太多的 Geocode 元素 - 在 C# 生成的 XML 中似乎没有任何与 NS2:Geocode 相对应的内容。如果您可以拦截 XML 并将其更改为如下所示,谁知道呢 - 它可能会起作用:

    ...
<NS1:Geocode xmlns:NS1="http://dev.virtualearth.net/webservices/v1/geocode/contracts">
<parameters href="#2"/>
</NS1:Geocode>
<NS3:request id="2" xsi:type="NS3:GeocodeRequest">
...

另一个问题可能是 Bing 服务不支持 Delphi 组织 SOAP 请求的方式。

如果这不起作用,也许您可​​以找到另一个可以与 Delphi 一起使用的 SOAP 库 - 或许可以使用 C 或 COM 接口(interface)来包装库。

关于web-services - 有人使用带有 Delphi 的 Bing map Web 服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1049800/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com