Soap em Apache

13/11/2009

Fizemos uma DLL (Soap acessando FB) e colamos em um servidor Win2003 com Apache. Ao tentar acessar o serviço o servidor quer é enviar a DLL para baixar em nossa máquina. Já se geramos o soap em .EXE roda perfeito.

Alguma dica?
José Aguiar

José Aguiar

Curtidas 0

Respostas

Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Olá Amigo,

Ao começar a ler sua dúvida pensei logo: "É so dar permitar para executar scripts e executáveis no diretorio da aplicação dentro do apache".

MAs você cita que com exe funciona. Muito estranho pois tanto um exe quanto uma dll são assembly. Vou verificar pois não sou um eximio conhecedor de apache, faço apenas o basico, configurações simples.

Irei verificar e entro em contato !!

Abs!!

GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

Se preverir posso enviar para vc os fontes, é coisa simples ainda estou só testando.
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Ficaria agradecido se pudesse me enviar.

use o Disco virtual !!!

Abs!!

GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Olá amigo,

Estou aguardando os arquivos para analise.

Att,


GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Olá Amigo,

Estaremos colocando o chamado como cancelado. Caso deseja poderá reabrí-lo que voltaremos a atendê-lo.

Abs!!!
GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

Passo para vc um pequeno exemplo de como estamos desenvolvendo os código. Como tinha falando antes não consiguimos fazer o "servidor" pra rodar em apache como DLL só como EXE.

Outra coisa fizemos o teste com o EXE rodano na mesma máquina que o apache e em rede LAN e funciona, porém ao instalar na empresa A do cliente o modulo servidor com apache e na empresa B, modulo cliente dá um erro, msg de erro anexada.

Já testamos o serviço do lado cliente pelo browse e responde blz, puxa todas as informações do servidor apache mas na hora de utiliza o modulo cliente na o referido erro. O que pode está acontecendo??

Anexo:

http://www.aguiarsistemas.com.br/Soap.rar

OBS:

1 - Utilizamos FB1.5
2 - Delphi 7
3 - DBX
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Olá José,

Li sua resposta agora e ainda nao baixei o arquivo, vou verificar sim com certeza mas uma coisa me ocorreu. Se via browser vc consegue enxergar o servidor e listar os serviços e etc e pela app cliente não então o problema pode estar na maneira em que o cliente acessa o servidor, algo referente e portas, firewall, rede do seu cliente, enfim vou uma sugestão sem nem mesmo ver seus arquivos.

Vou baixar, verificar e entro em contato.

Att,

GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Olá,

Estamos trabalhando no seu chamado, peço a gentileza que aguarde que em breve entraremos em contato.

Att,
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Olá José,

Não há nada de erra tanto com o servidor quanto com o cliente, eu duvido muito que o problema esteja no metodos utilizando até porque voce neste fontes esta usndo componentes CDS para acessar a base.

Você chegou a verificar as permissões do servidor onde o Server esta rodando, questões de rede, acesso aos diretorios e etc ?????

Outra sugestão, e ai mais trabalhoso seria criar um metodo no seu servidor de app um Hello World mesmo. Teste nesta arquitetura para ver se vai dar Timeout se der faça o seguinte.  Pegue o endereço WSDL gerado pelo servidor  vai na alicação cliente e importa o wsdl utilizando o WSDL importer. Isso vai gerar um .pas, uma especie de proxy.

Chame o método Hello World via proxy para ver o que acontece. Assim podemos ver se o proble e com o SOAP Connection ou algo do genero ou com o acesso ao servidor mesmo.


Fico no aguardo !!

ATT,
GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

Nesse servidor apache tenho um terminal server rodando e funcionando blz e tem ADSL veloz. O firewall está off. Agora sobre criar o "Hello Word", como fazer isto em apache? indique um tuto.
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Na verdade é so criar um nova função no sei servidor que vc ja tem ai:

function HelloWorl: String;
begin
result := 'Hello World !!!';
end;

Quando vc acessar o Servidor via Browser vai ter um link para o Descritor do Serviço: WSDL. Clique neste link e vai abrir um XML no browser. Copie a URL que te levou a esta pagina. Esta URL e o endereco que vc vai usar para consumir no cliente, seria algo como:  http://10.0.0.1/Server/Interface?wdsl


Crie uma nova aplicação Win32 no delphi. Salve e va em File -> New -> Order.  Na aba WebService selecione um WSDL Importer. Ele vai te pedir o endereço WSDL. Informe o endereço que você copiou. Avance e finalize a operação.

Isso vai gerar uma unit com os codigos necessário para consumir o serviço. La vai ter a function HelloWorld. Basta usar a function publica que tem neste unit para consumir a função.


Faça o teste para saber se o servidor vai responder.


Att,


GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

No projeto SERVER tenho: .PAS do projeto; o data modulo web, uWM.pas e o data modulo com os componentes de acesso ao banco de dados, uDM.pas. Neste último arquivo na secção public declarei a função: "HelloWorld". Feito isto pelo o browser acessei o endereço: http://192.168.2.100/cgi-bin/SOAPServer.exe/SOAP/ISoapDM (imagem 01), aparece uma página com várias funções e medotos declarados, porém, não aparece a função "HelloWorld".

Ela deveria aparece para eu pegar o endereço dela?
É esse mesmo o endereço?
É neste arquivos mesmo que devo declarar a função?



GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Não é bem por ai não.

Quando criamos um Server na verdade o delphi cria um interface para publicar os os metodos e um classe concreta para implementar. Não adiante colocar os metodos no public do DM pois ele não publica dali não.

Localize a interface do Servidor, ex: Se eu der o nome da classe do servidor de Rodrigo entao ele vai criar uma interface  IRodrigo e um classe TRodrigo. Assim eu vou em IRodrigo e coloco nela a função e em TRodrigo eu Redeclaro a funcção e coloco a implementação.

No seu caso tem a interface ITeste, declare a função nela e na classe  TTeste redeclare e faça a implementação.

Com isso a função vai aparecer no Broser basta então clicar no link WSDL ao lado de ITeste e proceder como falado abaixo.

Att,
GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

Fiz e agora vejo os metodos. Está dando uns erros aqui vou ve uns tuto antes de ti reportar alguma coisa sobre esse erro.
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Blz ficarei aguardando !!

Att,
GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

A chamada da interface é assim q se faz

  Edit1.Text := ITeste1.GetITeste.OiMundo;


???
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Não, não é por ai não.


Na verdade o que vc fez foi um WebService que será consumido remotamento por qualquer aplicacao que possa consumir WebService, Jav, PHP, C#, Delphi, etc.

Quando vc acessar o Servidor via Browser vai ter um link para o Descritor do Serviço: WSDL. Clique neste link e vai abrir um XML no browser. Copie a URL que te levou a esta pagina. Esta URL e o endereco que vc vai usar para consumir no cliente, seria algo como:  http://10.0.0.1/Server/Interface?wdsl


Crie uma nova aplicação Win32 no delphi. Salve e va em File -> New -> Order.  Na aba WebService selecione um WSDL Importer. Ele vai te pedir o endereço WSDL. Informe o endereço que você copiou. Avance e finalize a operação.

Isso vai gerar uma unit com os codigos necessário para consumir o serviço. La vai ter a function HelloWorld dentro de uma interface. Basta usar a function publica que tem neste unit no final da seção interface. Ela usa o componente HTTPRIO para acessar o servidor. Geralmente e um funcao GetxxxxxxPort e ela sempre retorna a interface. Use este funcao GetxxxxxxPort  para consumir a função Hello World.


Lembre-se, estava fazendo isso para testar o acesso ao servidor, para verificar se conseguiremos conectar e consumir o servidor.


Att,
GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

Estou fanzedo deste jeito. Veja:

A unit, na app Server, que tem a interface declarada:



Na unit implementação:


Faço a importação pelo o endereço que pego pelo o browse: http://localhost:5599/scripts/Project2.dll/wsdl/ITeste

Em File --> New --> Othe --> Import......

O delphi gera essa unit na minha app client:



Adiciona essa unit no form1 e chamo a função assim:   Edit1.Text := ITeste1.GetITeste.OiMundo; aí gerra esse erro:



Obs: Nesse projeto cliente tem uma chamada a uma consulta utilizando CDS e funciona, na rede.
        Estou utilizando ISS 5.1 e Delphi 2010 gerando uma DLL.
        Pela net ainda não testei
       



GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Tem um endereco publico que ue possa uimportar o WSDL ???

Assim gero aqui e te emando o exmeplo.

Att,

GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

Não tenho um IP público. Tenho uma conta no no-ip: soapas.no-ip.org (Fiz alteração na porta do IIS 5.1 para 5599)
GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

Outra coisa é q vc tem q marca o dia e um periodo pra tentar conctar
GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

Passe um e-mail seu q te passo os arquivos q estou fazendo. Já consegui colocar pra fucionar, abrir tabelas... Mas não consigo utilizá interfaces..

http://soapas.no-ip.org:12332/scripts/Project2.dll

Só tem q marcar o dia e a hora pra eu deixar o modem conectado no meu pc e os firewall desativado junto com o antivirus (o grande vilão deste historia toda)
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

hum.... Entao era o antivirus ??? Pois bem, a DevMedia nao autoriza divulgar email aqui no sistema de consultoria. Toda a comunicação deve ser feita via sistema. VOce pode utilizar o disco virtual. Att,
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Olá amigo,

Conseguiu acessar o disco virtual ?? Podemos ajudar em algo mais ??

Estamos no aguardo para conluirmos o chamado.

Att,

GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

Estou padado com os dados sobre SOAP. Gerando aqui um arquivozinho do SINTEGRA. Essa semana ainda eu volto aos teste.

Aparentemente era mesmo só o antivirus que barrava a conexão.
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Ok, fico no seu aguardo !
GOSTEI 0
José Aguiar

José Aguiar

13/11/2009

Isso mesmo era só o antivuris. Deu certo aqui.

Estou gerando o CGI mesmo com apache.

Fiz teste com ISAPI, DLL, mas não consiguei colocar com apache, porém, rodou com ISS 5.1 no WinXP. No entando como vou usar em Windows 2003 server e lá o ISS é outro e não deu conta de configurar para rodar scripts.

Agora ainda não consergui fazer interfaces e consumir.

Gratp!
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

13/11/2009

Bem Jose,

Cada duvida tem que ser colocada em um chamado especifico. Se desejar abra um chamado pedindo para consumir um WS com Delhpi.

Agora quando ao suporte ao IIS não sei se a consultoria tem algum canal especifico para isso, vou pedir a ADM para entrar em contato com vc.

Estarei encerrando o chamado caso haja mais alguma duvida basta reabri-lo.

Att,

GOSTEI 0
POSTAR