Dúvida WEbServices

22/02/2006

pessoal... to seguindo o artigo do guinter pauli a respeito de datasnap e soap baseado na última clubedelphi

eu criei a aplicação servidor e quando coloquei o servidor soap, escolhi o apache 1.x shared module(DLL). Não utilizei o IIS por razoes de trabalho, por aqui todos usam somente apache. Pois bem, compilei a aplicação servidor e gerou um arquivo .dll que coloquei dentro do htdocs do apache. Mas quando chamo no browser pelo localhost este arquivo .dll, apenas pede para salvar o arquivo sem exibir seu conteúdo.

Bem, sei que tenho q configurar o arquivo httpd.conf, mas nem tenho idéia de como configurá-lo para ler dlls do soap...



alguem pode ajudar?

grato


Caduengenheiro

Respostas

23/02/2006

Thomaz_prg

Pois bem, compilei a aplicação servidor e gerou um arquivo .dll que coloquei dentro do htdocs do apache. Mas quando chamo no browser pelo localhost este arquivo .dll, apenas pede para salvar o arquivo sem exibir seu conteúdo.

O que ocorre é que para o apache, a execução de módulos é feita por arquivos com extensão [b:4d58fc0f17]SO[/b:4d58fc0f17] e não [b:4d58fc0f17]DLL[/b:4d58fc0f17], e devem ser colocados na pasta [b:4d58fc0f17]modules[/b:4d58fc0f17] do apache. Você até pode colocar em outra pasta, como na htdocs, mas precisa ser explicado no arquivo httpd.conf (como você mesmo já havia dito).

Bem, sei que tenho q configurar o arquivo httpd.conf, mas nem tenho idéia de como configurá-lo para ler dlls do soap...


coloque no arquivo o código abaixo:

LoadModule ModSeuArquivo modules/SeuArquivo.so 
<Location /linkWeb> 
SetHandler mod_SeuArquivo-handler 
</Location>


onde,

SeuArquivo é o nome do arquivo gerado (atente para o fato de ser case sensitive).

modSeuArquivo é o valor que está definido dentro do arquivo do projeto no delphi (está bem explícito, com o nome do projeto seguido de _module)

mod_SeuArquivo é o nome do seu arquivo, sem a extensão SO.

linkWeb é o link no qual você deseja que seja chamado seu módulo apache. Diferente do IIS, que você chama o módulo especificando o nome da DLL, no apache você dá um ´apelido´ para o módulo. No código citado acima, para que o módulo fosse carregado no browser bastaria digitar http://localhost/linkWeb.

Note que, indiquei [b:4d58fc0f17]modules[/b:4d58fc0f17] como pasta para os módulos, mas você pode trocar para a pasta que quiser. Outro fator interessante é que, você pode ter um arquivo DLL, mas deve especificá-lo.


Responder Citar

24/02/2006

Caduengenheiro

cara.. deu certinho.. valeu... configurei o httpd.conf chamando o arquivo .dll mesmo .. assim:


LoadModule Project2_module modules/SoapServerClubeDelphi.dll
<Location /linkWeb>
SetHandler SoapServerClubeDelphi-handler
</Location>


ai chamo http://localhost/linkWeb

deu certinho.. brigadao


ps: nao mudei o nome do alias linkweb para evitar a fadiga (Jaiminho o carteiro)

aauhahuauhauhuauhuha

brigadao


Responder Citar

16/08/2006

Khaoz

Boa tarde.
Estou dando um UP nessa thread pois nesse exato momento iniciei o exemplo do Guinther Pauli (Revista ClubeDelphi - Ano 5 - Edição 70) utilizando o Delphi 7 Enterprise e com uma pequena modificação no que vai ser o servidor de web services: Estou criando um ´Shared Module´ para o Apache 2.x.x.

Os passos:
Crie o servidor de aplicação:
File > New > Other > Web Services > SOAP Server Application (Selecionei a opção Apache 2.x Shared Module (DLL)

Após isso criei o SOAP Server Data Module:
File > New > Other > Web Services > SOAP Server Data Module

No SOAP Server Data Module adicionei os componentes:
TADOConnection (meu banco é SQL Server 2000)
TADODataSet
TDataSetProvider

Salvei, compilei, copiei a dll gerada para dentro da pasta modules do apache, adicionei as linhas informadas nesse post e restartei o apache.... NADA :(
O Apache não inicia mais depois de adicionar essas linhas.
Procurando pela internet, encontrei algumas dicas interessantes e fiz as modificações, até mesmo para manter o padrão apache, adicionando duas diretivas de compilação: Uma troca a extensão de .dll para .so e a outra adiciona o prefixo mod_ ao arquivo so (dll) gerado.
Também alterei a linha onde é feito a exportação do módulo, mudando o nome do módulo de Project1_module para SOAPServer_module. Também alterei o Output Directory do projeto para sempre compilar a so (dll) diretamente no diretório:
C:\Arquivos de programas\Apache Software Foundation\Apache2.2\modules

Fiz as alterações necessárias no httpd.conf, mas ainda assim NADA :(
Estou rodando a última versão do apache (2.2.3) no windows, localmente para testes, pois é apenas um pequeno exemplo para ver a funcionalidade.

Segue abaixo o código da minha unit de projeto (.dpr)

library SOAPServer;

uses
  WebBroker,
  ApacheTwoApp,
  UWebModule in ´UWebModule.pas´ {ServerWebModule: TWebModule},
  USoapServerDataModule in ´USoapServerDataModule.pas´ {SoapServerDataModule: TSoapDataModule};

{$R *.res}

{$E so}             //change binary file extension from .dll to .so
{$LIBPREFIX ´mod_´} // add a prefix 

exports
  apache_module name ´SOAPServer_module´;

begin
  Application.Initialize;
  Application.CreateForm(TServerWebModule, ServerWebModule);
  Application.Run;
end.


e aqui as linhas que adicionei em meu httpd.conf

LoadModule SOAPServer_module modules/mod_SOAPServer.so

#<IfModule SOAPServer_module>
<Location /delphi>
SetHandler mod_SOAPServer-handler
</Location>
#</IfModule>


Onde eu posso estar errando meu amigos, se alguém poder me dizer ficarei muito grato.


Responder Citar

16/08/2006

Khaoz

Boa tarde.
Estou dando um UP nessa thread pois nesse exato momento iniciei o exemplo do Guinther Pauli (Revista ClubeDelphi - Ano 5 - Edição 70) utilizando o Delphi 7 Enterprise e com uma pequena modificação no que vai ser o servidor de web services: Estou criando um ´Shared Module´ para o Apache 2.x.x.

Os passos:
Crie o servidor de aplicação:
File > New > Other > Web Services > SOAP Server Application (Selecionei a opção Apache 2.x Shared Module (DLL)

Após isso criei o SOAP Server Data Module:
File > New > Other > Web Services > SOAP Server Data Module

No SOAP Server Data Module adicionei os componentes:
TADOConnection (meu banco é SQL Server 2000)
TADODataSet
TDataSetProvider

Salvei, compilei, copiei a dll gerada para dentro da pasta modules do apache, adicionei as linhas informadas nesse post e restartei o apache.... NADA :(
O Apache não inicia mais depois de adicionar essas linhas.
Procurando pela internet, encontrei algumas dicas interessantes e fiz as modificações, até mesmo para manter o padrão apache, adicionando duas diretivas de compilação: Uma troca a extensão de .dll para .so e a outra adiciona o prefixo mod_ ao arquivo so (dll) gerado.
Também alterei a linha onde é feito a exportação do módulo, mudando o nome do módulo de Project1_module para SOAPServer_module. Também alterei o Output Directory do projeto para sempre compilar a so (dll) diretamente no diretório:
C:\Arquivos de programas\Apache Software Foundation\Apache2.2\modules

Fiz as alterações necessárias no httpd.conf, mas ainda assim NADA :(
Estou rodando a última versão do apache (2.2.3) no windows, localmente para testes, pois é apenas um pequeno exemplo para ver a funcionalidade.

Segue abaixo o código da minha unit de projeto (.dpr)

library SOAPServer;

uses
  WebBroker,
  ApacheTwoApp,
  UWebModule in ´UWebModule.pas´ {ServerWebModule: TWebModule},
  USoapServerDataModule in ´USoapServerDataModule.pas´ {SoapServerDataModule: TSoapDataModule};

{$R *.res}

{$E so}             //change binary file extension from .dll to .so
{$LIBPREFIX ´mod_´} // add a prefix 

exports
  apache_module name ´SOAPServer_module´;

begin
  Application.Initialize;
  Application.CreateForm(TServerWebModule, ServerWebModule);
  Application.Run;
end.


e aqui as linhas que adicionei em meu httpd.conf

LoadModule SOAPServer_module modules/mod_SOAPServer.so

#<IfModule SOAPServer_module>
<Location /delphi>
SetHandler mod_SOAPServer-handler
</Location>
#</IfModule>


Onde eu posso estar errando meu amigos, se alguém poder me dizer ficarei muito grato.


Responder Citar

16/08/2006

Khaoz

Boa tarde.
Estou dando um UP nessa thread pois nesse exato momento iniciei o exemplo do Guinther Pauli (Revista ClubeDelphi - Ano 5 - Edição 70) utilizando o Delphi 7 Enterprise e com uma pequena modificação no que vai ser o servidor de web services: Estou criando um ´Shared Module´ para o Apache 2.x.x.

Os passos:
Crie o servidor de aplicação:
File > New > Other > Web Services > SOAP Server Application (Selecionei a opção Apache 2.x Shared Module (DLL)

Após isso criei o SOAP Server Data Module:
File > New > Other > Web Services > SOAP Server Data Module

No SOAP Server Data Module adicionei os componentes:
TADOConnection (meu banco é SQL Server 2000)
TADODataSet
TDataSetProvider

Salvei, compilei, copiei a dll gerada para dentro da pasta modules do apache, adicionei as linhas informadas nesse post e restartei o apache.... NADA :(
O Apache não inicia mais depois de adicionar essas linhas.
Procurando pela internet, encontrei algumas dicas interessantes e fiz as modificações, até mesmo para manter o padrão apache, adicionando duas diretivas de compilação: Uma troca a extensão de .dll para .so e a outra adiciona o prefixo mod_ ao arquivo so (dll) gerado.
Também alterei a linha onde é feito a exportação do módulo, mudando o nome do módulo de Project1_module para SOAPServer_module. Também alterei o Output Directory do projeto para sempre compilar a so (dll) diretamente no diretório:
C:\Arquivos de programas\Apache Software Foundation\Apache2.2\modules

Fiz as alterações necessárias no httpd.conf, mas ainda assim NADA :(
Estou rodando a última versão do apache (2.2.3) no windows, localmente para testes, pois é apenas um pequeno exemplo para ver a funcionalidade.

Segue abaixo o código da minha unit de projeto (.dpr)

library SOAPServer;

uses
  WebBroker,
  ApacheTwoApp,
  UWebModule in ´UWebModule.pas´ {ServerWebModule: TWebModule},
  USoapServerDataModule in ´USoapServerDataModule.pas´ {SoapServerDataModule: TSoapDataModule};

{$R *.res}

{$E so}             //change binary file extension from .dll to .so
{$LIBPREFIX ´mod_´} // add a prefix 

exports
  apache_module name ´SOAPServer_module´;

begin
  Application.Initialize;
  Application.CreateForm(TServerWebModule, ServerWebModule);
  Application.Run;
end.


e aqui as linhas que adicionei em meu httpd.conf

LoadModule SOAPServer_module modules/mod_SOAPServer.so

#<IfModule SOAPServer_module>
<Location /delphi>
SetHandler mod_SOAPServer-handler
</Location>
#</IfModule>


Onde eu posso estar errando meu amigos, se alguém poder me dizer ficarei muito grato.


Responder Citar

16/08/2006

Khaoz

Desculpem o post triplo, esse forum esta ultra-pesado e eu achei que não estava respondendo. Fica a sugestão de colocar um botão para excluir um post/editar um post, pois não achei o mesmo.


Responder Citar

16/08/2006

Khaoz

Bom, aparentemente descobri o possível problema.
Parece que para fazer o delphi funcionar com o Apache 2.2.3 é necessário fazer uma alteração na unit HTTPD2.pas alterando o valor de algumas constantes (e talvez até a implementação de alguns métodos).
O problema é que achei essas alterações apenas para compatibilidade com o apache 2.0.40 - 2.0.55 e não sei de onde esses valores foram tirados (ainda).
Aqui vai o link ([url]http://www.drbob42.com/delphi7/apache2040.htm[/url]) com uma explicação detalhada, pois além dessas alterações você deve recompilar outras duas units que dependem da HTTPD2.
Por hora, criei um novo servidor do tipo ´CGI Stand-alone executable´, larguei dentro do meu cgi-bin e ta tudo blz.[/url]


Responder Citar

16/08/2006

Khaoz

E logo após meu último post, achei onde estão localizadas as informações:
dentro da pasta include do apache, existe um arquivo chamado

ap_mmn.h

Que contém as informações que o arquivo HTTPD2.pas necessita.

Quanto a reimplementação dos métodos, bom fica para um próximo post :D


Responder Citar