Dúvida WEbServices
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
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
Curtidas 0
Respostas
Thomaz_prg
22/02/2006
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.
GOSTEI 0
Caduengenheiro
22/02/2006
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
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
GOSTEI 0
Khaoz
22/02/2006
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:
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)
e aqui as linhas que adicionei em meu httpd.conf
Onde eu posso estar errando meu amigos, se alguém poder me dizer ficarei muito grato.
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.
GOSTEI 0
Khaoz
22/02/2006
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:
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)
e aqui as linhas que adicionei em meu httpd.conf
Onde eu posso estar errando meu amigos, se alguém poder me dizer ficarei muito grato.
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.
GOSTEI 0
Khaoz
22/02/2006
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:
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)
e aqui as linhas que adicionei em meu httpd.conf
Onde eu posso estar errando meu amigos, se alguém poder me dizer ficarei muito grato.
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.
GOSTEI 0
Khaoz
22/02/2006
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.
GOSTEI 0
Khaoz
22/02/2006
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]
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]
GOSTEI 0
Khaoz
22/02/2006
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
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
GOSTEI 0