Dúvida WEbServices

22/02/2006

0

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

Caduengenheiro

Responder

Posts

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

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

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

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

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

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

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

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar