Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Providers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-08-2013
Avatar de GerTorresM
GerTorresM GerTorresM is offline
Miembro
 
Registrado: nov 2005
Ubicación: Tunja - Boyacá
Posts: 210
Poder: 19
GerTorresM Va por buen camino
error al importar WSDL SOAP Server

Hola a tod@s:

Experimentando con el uso de cliente - servidor inicie trabajo con SOAP SERVER APLICATION, en orden de ideas el ideal es crear una servicio que me permita crear y tramitar las peticiones propias de la capa de datos de una aplicación e hice lo siguiente:

cree un SOAPWebModule que quedo así

Código Delphi [-]
{ SOAP WebModule }
unit UWMServerData;

interface

uses
  SysUtils, Classes, HTTPApp, InvokeRegistry, WSDLIntf, TypInfo,
  WebServExp, WSDLBind, XMLSchema, WSDLPub, SOAPPasInv, SOAPHTTPPasInv,
  SOAPHTTPDisp, WebBrokerSOAP;

type
  TWMServerDataPredial = class(TWebModule)
    HTTPSoapDispatcher1: THTTPSoapDispatcher;
    HTTPSoapPascalInvoker1: THTTPSoapPascalInvoker;
    WSDLHTMLPublish1: TWSDLHTMLPublish;
    procedure WebModule1DefaultHandlerAction(Sender: TObject;
      Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  WMServerDataPredial: TWMServerDataPredial;

implementation

{$R *.dfm}

procedure TWMServerDataPredial.WebModule1DefaultHandlerAction(Sender: TObject;
  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
  WSDLHTMLPublish1.ServiceInfo(Sender, Request, Response, Handled);
end;

end.

en el momento de crearlo me indico que si desea crear la interfaz e implementación a lo que respondi que no, a continuación adicione un SOAP SERVER DATAMODULE, en el cual adicione un componente TADOConnection y procedi a crear en el archivo tanto la interfaz como la implementación con el siguiente código.

Código Delphi [-]
Unit UDMServerData;

interface

uses SysUtils, Classes, InvokeRegistry, Midas, SOAPMidas, SOAPDm, DB, ADODB,
  Provider;

type
  IDMServerData = interface(IAppServerSOAP)
    ['{016B9267-0E56-47A5-BE3A-C83C986376DD}']
    // Ver 1.0 Agosto 21 de 2013.
    procedure setConexionBDADO(pNombreBaseDatos, pContrasena  : String ; out esConexionExitosa : Boolean); StdCall;
    procedure setConjuntoDatos(pNombreFuenteDatos, pSQL, pNombreDataSetProvider: String; out esCreacionExitosa : Boolean ); StdCall;
    procedure eliminarConjuntoDatos(pNombreFuenteDatos, pDatasetProvider : String); StdCall;
    procedure getSiguiente(pNombreTabla, pNombreCampo, pCondidicional: String ; out dataGetSiguiente : Double); StdCall;
    procedure getCampo(pNombreTabla, pNombreCampo, pCondicional: String ; out dataGetCampo : Variant); StdCall;
    procedure setCampo(pNombreTabla, pNombreCampo, pValor, pCondicional: String ); StdCall;
    procedure AdicionarRegistro(pNombreTabla, pListaCampo, pValorCampo, pCondicional: String); StdCall;
    procedure eliminarRegistro(pNombreTabla, pCondicional: String ); StdCall;
  end;

  TDMServerData = class(TSoapDataModule, IDMServerData, IAppServerSOAP, IAppServer)
    conServerData: TADOConnection;

  private
    function getConsulta(pSQL: String):TADOQuery; stdcall;
  public
    procedure setConexionBDADO(pNombreBaseDatos, pContrasena  : String ; out esConexionExitosa : Boolean); StdCall;
    procedure setConjuntoDatos(pNombreFuenteDatos, pSQL, pNombreDataSetProvider: String; out esCreacionExitosa : Boolean ); StdCall;
    procedure eliminarConjuntoDatos(pNombreFuenteDatos, pDatasetProvider : String); StdCall;
    procedure getSiguiente(pNombreTabla, pNombreCampo, pCondicional: String ; out dataGetSiguiente : Double); StdCall;
    procedure getCampo(pNombreTabla, pNombreCampo, pCondicional: String ; out dataGetCampo : Variant); StdCall;
    procedure setCampo(pNombreTabla, pNombreCampo, pValor, pCondicional: String); StdCall;
    procedure AdicionarRegistro(pNombreTabla, pListaCampo, pValorCampo, pCondicional: String); StdCall;
    procedure eliminarRegistro(pNombreTabla, pCondicional: String ); StdCall;
   end;

implementation

{$R *.DFM}

procedure TDMServerDataCreateInstance(out obj: TObject);
begin
 obj := TDMServerData.Create(nil);
end;

{ TDMServerDataPredial }

function TDMServerData.getConsulta(pSQL: String): TADOQuery;
var qGetConsulta_temporal : TADOQuery;
begin
  qGetConsulta_temporal:= TADOQuery.Create(nil);
  with qGetConsulta_temporal do
    begin
      close;
      connection:= Self.conServerData;
      sql.text:= pSQL;
    end;
  try
    Result:= qGetConsulta_temporal;
  finally
  end;
end;

procedure TDMServerData.setConexionBDADO(pNombreBaseDatos,
  pContrasena: String; out esConexionExitosa: Boolean);
var ConStr_local : String;
begin
  if FileExists(pNombreBaseDatos) then
    begin
      ConStr_local:= 'Provider=Microsoft.Jet.OLEDB.4.0; ' +
        'User ID=Admin;'+
        'Data Source=' + pNombreBaseDatos  + ';' +
        'Persist Security Info=False;' +
        'Jet OLEDBatabase Password=' + pContrasena ;
      self.conServerData.ConnectionString:= ConStr_local;
      self.conServerData.LoginPrompt:= False;
      self.conServerData.open;
      esConexionExitosa:= True;
    end
  else begin
    esConexionExitosa:= False;
    exit;
  end;

end;


procedure TDMServerData.setConjuntoDatos(pNombreFuenteDatos, pSQL,
  pNombreDataSetProvider: String; out esCreacionExitosa : Boolean);
Var adoDataset_temporal : TADODataSet;
    DSP_temporal : TDataSetProvider;
begin
  // Crea FuenteDatos y tDatasetProvider
  esCreacionExitosa:= True;
  try
    adoDataset_temporal:= TADODataSet.Create(self);
    DSP_temporal:= TDataSetProvider.Create(self);
    adoDataset_temporal.Connection:= self.conServerData;
    adoDataset_temporal.CommandText:= pSQL;
    adoDataset_temporal.MaxRecords:= 50;
    adoDataset_temporal.Name:= pNombreFuenteDatos;
    DSP_temporal.Name:= pNombreDataSetProvider;
    DSP_temporal.DataSet:= adoDataset_temporal;
    RegisterProvider(DSP_temporal);
  except
     esCreacionExitosa:= False;
  end;
end;

procedure TDMServerData.eliminarConjuntoDatos(pNombreFuenteDatos,
  pDatasetProvider: String);
var DSP_temporal : TDataSetProvider;
    ADODataSet_temporal : TADODataSet;
begin
  // Elmina NombreFuenteDatos y tDatasetProvider

  DSP_temporal:= TDataSetProvider(GetProvider(pDatasetProvider));
  ADODataSet_temporal:= TADODataset(DSP_temporal.Dataset);
  try
    UnRegisterProvider(DSP_temporal);
  finally
    DSP_temporal.Free;
    ADODataSet_temporal.Free;
  end;
end;

procedure TDMServerData.getSiguiente(pNombreTabla, pNombreCampo,
  pCondicional: String; out dataGetSiguiente: Double);
Var qGetCampo_temporal : TADOQuery;
begin
  dataGetSiguiente:= 1;
  if pCondicional <> '' then
    qGetCampo_temporal:= getConsulta(' select Max(' + pNombreCampo + ') As Maximo '+
       ' from ' + pNombreTabla +
       ' Where ' + pCondicional)
  else qGetCampo_temporal:= getConsulta(' select Max(' + pNombreCampo + ') As Maximo '+
    ' from ' + pNombreTabla);
  try
    qGetCampo_temporal.open;
    if qGetCampo_temporal.RecordCount >= 1 then
    dataGetSiguiente:= qGetCampo_temporal.FieldByName('Maximo').AsFloat + 1;
  finally
    qGetCampo_temporal.Free;
  end;
end;

procedure TDMServerData.getCampo(pNombreTabla, pNombreCampo,
  pCondicional: String; out dataGetCampo: Variant);
var qGetCampo_temporal : TADOQuery;
begin
  dataGetCampo:= 0;
  if pCondicional <> '' then
    qGetCampo_temporal:= getConsulta(' select ' + pNombreCampo +
      ' from ' + pNombreTabla +
      ' where ' + pCondicional)
  else qGetCampo_temporal:= getConsulta(' select ' + pNombreCampo +
      ' from ' + pNombreTabla);
  try
    qGetCampo_temporal.open;
    if qGetCampo_temporal.RecordCount >= 1 then
       case qGetCampo_temporal.Fields[0].DataType of
          ftString: dataGetCampo:= qGetCampo_temporal.FieldByName(pNombreCampo).AsString;
          ftInteger: dataGetCampo:= qGetCampo_temporal.FieldByName(pNombreCampo).AsInteger;
          ftBoolean: dataGetCampo:= qGetCampo_temporal.FieldByName(pNombreCampo).AsBoolean;
          ftDateTime: dataGetCampo:= qGetCampo_temporal.FieldByName(pNombreCampo).AsDateTime;
          ftFloat: dataGetCampo:= qGetCampo_temporal.FieldByName(pNombreCampo).AsFloat;
       else dataGetCampo:= qGetCampo_temporal.FieldByName(pNombreCampo).AsVariant;
       end;
  finally
    qGetCampo_temporal.Free;
  end;
end;

procedure TDMServerData.setCampo(pNombreTabla, pNombreCampo, pValor,
  pCondicional: String);
var qSetCampo_temporal : TADOQuery;
begin
  qSetCampo_temporal:= getConsulta(' Update ' + pNombreTabla +
                                   ' set ' + pNombreCampo + ' = ' + pValor +
                                   ' where ' + pCondicional);
  try
    qSetCampo_temporal.ExecSQL;
  finally
    qSetCampo_temporal.Free;
  end;
end;

procedure TDMServerData.AdicionarRegistro(pNombreTabla, pListaCampo,
  pValorCampo, pCondicional: String);
var qAdicionarRegistro_temporal: TADOQuery;
begin
  if pCondicional <> '' then
    qAdicionarRegistro_temporal:= GetConsulta(' Insert Into ' + pNombreTabla + '(' + pListaCampo + ')' +
      ' Values (' + pValorCampo + ')' +
      ' Where ' + pCondicional)
  else  qAdicionarRegistro_temporal:= GetConsulta(' Insert Into ' + pNombreTabla + '(' + pListaCampo + ')' +
         ' Values (' + pValorCampo + ')');
  try
    qAdicionarRegistro_temporal.ExecSQL;
  Finally
    qAdicionarRegistro_temporal.Free;
  end;
end;

procedure TDMServerData.eliminarRegistro(pNombreTabla,
  pCondicional: String);
Var qEliminarRegistro_temporal : TADOQuery;
begin
  if pCondicional <> '' then
    qEliminarRegistro_temporal:= GetConsulta('delete from ' + pNombreTabla +
      ' where ' + pCondicional)
  else qEliminarRegistro_temporal:= GetConsulta('delete from ' + pNombreTabla );
  try
    qEliminarRegistro_temporal.ExecSql;
  finally
    qEliminarRegistro_temporal.Free;
  end;
end;


initialization
   InvRegistry.RegisterInvokableClass(TDMServerData, TDMServerDataCreateInstance);
   InvRegistry.RegisterInterface(TypeInfo(IDMServerData));
end.

Bien como tal compila y genera el archivo correspondiente, pero al intentar importar el WSDL me genera un error, en vista de lo sucedido empece por compililar y generar y el esto fue exitoso compilando con tan una la única función y solo un método sin importar el que fueses.

Agradezco de antemano cualquier colaboración.. adjunto fuentes



gertorresm
Colombia
Archivos Adjuntos
Tipo de Archivo: rar Data.rar (10,5 KB, 4 visitas)
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consumir WebService. Ayuda con XML,WSDL,XSD,SOAP josemmerida Internet 2 23-12-2010 13:37:16
Exportar/Importar BD SQL server paladincubano SQL 3 21-02-2008 22:05:35
importar tablas paradox en SQL Server seken Tablas planas 3 03-10-2006 02:33:25
importar nuevos datos access-sql server galmacland MS SQL Server 2 18-02-2005 21:30:00
Web Snap Intraweb SOAP Server etc.. Descendents Internet 0 18-07-2003 01:41:37


La franja horaria es GMT +2. Ahora son las 04:08:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi