4

DelphiXE2を使用してWebサービスアプリケーションを作成しています。ただし、外部仕様に従ってサービス名を定義する必要があります。

Delphiは、デフォルトでサービス名に「サービス」を追加しています。これをオーバーライドすることは可能ですか?

'service'はTWebServEx.GenerateWSDLメソッドに追加されます(Soap.WebServExp、261行目)。

4

2 に答える 2

6

OnAfterPublishingWSDLコンポーネントのイベントを使用TWSDLHTMLPublishして、サービス名を変更できます。

procedure TMyWebModule.WSDLHTMLPublishAfterPublishingWSDL(const WSDLDoc: IWSDLDocument);
begin
  WSDLDoc.Definition.Attributes[SName] := 'MyServiceName';
end;
于 2012-09-03T13:47:29.270 に答える
0

申し訳ありませんが、プログラムインターフェイスによってライブラリの動作を変更することはできません。ユニットSoap.WSDLIntf(const SService = 'service';)にハードコーディングされています。使用している場合

    procedure TMyWebModule.WSDLHTMLPublishAfterPublishingWSDL(const WSDLDoc: IWSDLDocument);
    begin
       WSDLDoc.Definition.Attributes[SName] := 'MyServiceName';
    end;

XMLヘッダーでタグを取得"name = MyServiceName"しますが、エクスポートサービス名には「service」が追加されたままになります。

解決策は、DelphiSOAPライブラリを再構築することです。

  1. フォルダ%DELPHIDIR%\ Source \ soapのセキュリティ設定を変更して、ドメインユーザーが読み取り/書き込みできるようにします。
  2. セクションのSoap.WSDLIntf行を見つけSService = 'service';ますconst
  3. 次のように置き換えます。

    {$IFDEF TRUNCATE_WSDL_EXTERNAL_NAME }
    SService = ''; 
    {$ELSE }
    "SService = 'service';
    {$ENDIF }
    
  4. 定義名TRUNCATE_WSDL_EXTERNAL_NAMEをプロジェクトに追加します。

  5. プロジェクトに%DELPHIDIR%\ Source\soapからすべてのファイルを追加します。
  6. アプリケーションを再構築します。「E2010互換性のないタイプ:'ブール値'および'切り捨てられた'」というエラーが発生した場合は、通常、プロジェクトのdprファイルで発生する可能性があり、プレフィックス「システム」を追加します。ブール定数「true」または「false」への例: Result := system.True;
  7. 楽しみ。
于 2018-09-04T06:48:14.553 に答える