誰かがBing Map Web Services(以前のVirtual Earth Web Services)をDelphiで使えましたか?誰かがBing Map WebサービスをDelphiで使用していますか?
これまでの私の経験(DelphiとVisual Studio C#の両方を使用していました)に基づいて、今後のバージョンのBing Maps Webサービスがリリースされるまでは、あきらめてMapPoint Webサービスに進んでいきます。しかし、最後の手段としてここに質問を投稿すると思いました...
トークンサービスとジオコードサービスWSDLドキュメントをインポートしました。
トークンサービスからトークンを取得することに成功しましたが、ジオコードサービスをまったく動作させることができませんでした。常に次のエラーメッセージを返します。 EndpointDispatcherでContractFilterの不一致が原因で、アクション ''のメッセージを受信者で処理できません。これは、契約の不一致(送信者と受信者の間の不一致)または送信者と受信者の間のバインディング/セキュリティの不一致のいずれかが原因である可能性があります。送信者と受信者が同じ契約と同じバインディング(セキュリティ要件、たとえばメッセージ、トランスポート、なしなど)を持っていることを確認します。
私は、DelphiがSOAPActionヘッダーの値を指定しないことに気づいたので、私は「http://staging.dev.virtualearth.net/webservices/v1/geocode/contracts/IGeocodeService/Geocode」を指定しようとした代わりに、次のエラーメッセージを得た:
サーバは、内部エラーのため要求を処理できませんでした。エラーの詳細については、例外情報をクライアントに送り返すために、サーバー上のIncludeExceptionDetailInFaults(ServiceBehaviorAttributeまたは<serviceDebug>構成動作)をオンにするか、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>
おかげで、私は前にも似たようなしようとしたが、私はただ運で再びそれを試してみました。 –