Dúvida WEbServices
22/02/2006
0
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
Posts
23/02/2006
Thomaz_prg
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).
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.
24/02/2006
Caduengenheiro
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
16/08/2006
Khaoz
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)
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.
16/08/2006
Khaoz
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)
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.
16/08/2006
Khaoz
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)
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.
16/08/2006
Khaoz
16/08/2006
Khaoz
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]
16/08/2006
Khaoz
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
Clique aqui para fazer login e interagir na Comunidade :)