Mostrando postagens com marcador WebServices. Mostrar todas as postagens
Mostrando postagens com marcador WebServices. Mostrar todas as postagens

segunda-feira, 21 de fevereiro de 2011

Alterando o limite de conexões ao IIS do Windows XP

O windows XP não foi feito para atuar como servidor, mas sim como máquina de usuário. Porém é frequente que façamos uso do windows XP durante o processo de desenvolvimento, então muitas vezes precisamos que o windows XP tenha um comportamento um pouco mais parecido com o de um servidor.

O IIS do windows XP vem configurado por padrão para um limite de no máximo 10 conexões simultâneas. Para algumas atividades de desenvolvimento isso pode ser prejudicial.

Podemos alterar esse limite de conexões simultâneas até um limite máximo de 40 conexões, limite definido pelo sistema operacional.

Para fazer essa alteração acesse o diretório adminScripts que estará dentro do diretório do IIS (por default é c:\inetpub) e execute a seguinte instrução, via prompt :

adsutil set w3svc/MaxConnections 40

Pronto, alteração realizada.

domingo, 20 de fevereiro de 2011

Enviando mensagens instantâneas via consumo de Web Service



Introdução Neste artigo iremos acessar via Delphi um web service de envio de mensagens instantâneas. Este web service envia mensagens para ICQ, MSN Messenger, AIM (AOL Instant Messenger) e Yahoo Messenger.
Desenvolvendo o exemplo
O web service que utilizaremos está disponível no site http://www.bindingpoint.com. Crie um novo projeto e salvaremos os arquivos. Adicionaremos 2 Tedits, 1 Tmemo, 1 TRadioGroup e um Tbutton com propriedades name edtNome, edtPara, mmTexto, rdgrpOpcao e btnEnviar respectivamente. Limparemos as propriedades Text dos edtNome, edtPara e mmTexto e no rdgrpOpcao na propriedade Items digitaremos "ICQ, MSN, AIM, Yahoo" (Cada palavra em uma linha necessariamente nesta ordem).
Importaremos o WSDL deste site. Assim conheceremos os serviços disponíveis pelo web service. Para isto iremos em File / New / Other. Na Guia WebServices selecionaremos a opção WSDL Importer.

Uma tela Wizard será aberta solicitando o endereço do WSDL. Digitaremos http://www.bindingpoint.com/ws/imalert/imalert.asmx?wsdl e clicaremos em Next.

Será exibido o código gerado. Clicaremos em Finish e salvaremos o arquivo gerado com o nome de imalert.pas.

Em seu formulário adicione a unit imalert, utilizando o menu File / Use Unit.
No evento OnClick do btnEnviar colocaremos o seguinte código:
procedure TForm1.btnEnviarClick(Sender: TObject); var vResult: SendResult; begin case rdgrpOpcao.ItemIndex of 0: GetInstantMessageAlertSoap.SendICQ('', edtNome.Text, edtPara.Text, mmTexto.Text); 1: GetInstantMessageAlertSoap.SendMSN('', edtNome.Text, edtPara.Text, mmTexto.Text); 2: GetInstantMessageAlertSoap.SendAIM('', edtNome.Text, edtPara.Text, mmTexto.Text); 3: GetInstantMessageAlertSoap.SendYahoo('', edtNome.Text, edtPara.Text, mmTexto.Text); end; case vResult of FAILED: ShowMessage('Falha no envio da mensagem.'); SENT: ShowMessage('Mensagem enviada com sucesso.'); UNREACHABLE: ShowMessage('Destino não encontrado.'); UNAUTHORIZED: ShowMessage('Mensagem recusada. Sem autorização.'); end; end;
Conclusão
Provavelmente você está se questionando sobre a utilidade de um software que envia, mas não recebe mensagens. Este software seria muito útil, por exemplo, em um sistema de vendas, onde automaticamente o cliente receberia uma mensagem avisando que o produto que estava esperando chegou.
Ferramentas Utilizadas:

Borland Delphi 6
Web Service disponível em: http://www.bindingpoint.com

Como consumir WebServices em Delphi

Como consumir WebServices em Delphi

E ai pessoal , tudo bem? Espero que sim…
Como é de praxe neste blog(e na minha vida em geral), vamos direto ao assunto: WebServices já fazem parte da rotina dos programadores, seja qual for a plataforma, e alias em Delphi é algo muito simples de se fazer.
Primeira coisa, se quiserem testar a aplicação de vocês, recomendo que façam um cadastro no Byjg , assim vocês terão acesso a um excelente serviço de busca de CEP’s, que será usado como exemplo.
Bom, feito o cadastro abram o Delphi (no meu caso a Versão 7) e faça File->New->Other aba WebService, e abra “WSDL importer”
Na Caixa que segue digite o endereço do WDSL,no caso, http://www.byjg.com.br/site/webservice.php/ws/cep?WSDL, isto fará a importação de uma interface necessária para a utilização do WEBSERVICE.Depois de avançar finalize, assim você verá que será criada uma unit chamada CEP com o seguinte código.
CODE
// ************************************************************************ //
// The types declared in this file were generated from data read from the
// WSDL File described below:
// WSDL     : http://www.byjg.com.br/site/webservice.php/ws/cep?WSDL
// Encoding : utf-8
// Version  : 1.0
// (27/3/2010 13:28:27 – 1.33.2.5)
// ************************************************************************ // unit cep;
interface
uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
type
  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Borland types; however, they could also
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:string          – “http://www.w3.org/2001/XMLSchema”
  ArrayOfstring = array of WideString;          { “urn:CEPService” }
  // ************************************************************************ //
  // Namespace : urn:http://www.byjg.com.br
  // soapAction: urn:CEPServiceAction
  // transport : http://schemas.xmlsoap.org/soap/http
  // style     : rpc
  // binding   : CEPServiceBinding
  // service   : CEPService
  // port      : CEPServicePort
  // URL       : http://www.byjg.com.br/site/webservice.php/ws/cep
  // ************************************************************************ //
  CEPServicePort = interface(IInvokable)
  ['{EC28595B-95D2-DE51-E5B1-57B81D4826D3}']
    function  obterVersao: WideString; stdcall;
    function  obterLogradouro(const cep: WideString): WideString; stdcall;
    function  obterLogradouroAuth(const cep: WideString; const usuario: WideString; const senha: WideString): WideString; stdcall;
    function  obterCEP(const logradouro: WideString; const localidade: WideString; const UF: WideString): ArrayOfstring; stdcall;
    function  obterCEPAuth(const logradouro: WideString; const localidade: WideString; const UF: WideString; const usuario: WideString; const senha: WideString): ArrayOfstring; stdcall;
  end;
function GetCEPServicePort(UseWSDL: Boolean=System.False; Addr: string=”; HTTPRIO: THTTPRIO = nil): CEPServicePort;
implementation
function GetCEPServicePort(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): CEPServicePort;
const
  defWSDL = ‘http://www.byjg.com.br/site/webservice.php/ws/cep?WSDL’;
  defURL  = ‘http://www.byjg.com.br/site/webservice.php/ws/cep’;
  defSvc  = ‘CEPService’;
  defPrt  = ‘CEPServicePort’;
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = ”) then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as CEPServicePort);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;
initialization
  InvRegistry.RegisterInterface(TypeInfo(CEPServicePort), ‘urn:http://www.byjg.com.br’, ‘utf-8′);
  InvRegistry.RegisterDefaultSOAPAction(TypeInfo(CEPServicePort), ‘urn:CEPServiceAction’);
  RemClassRegistry.RegisterXSInfo(TypeInfo(ArrayOfstring), ‘urn:CEPService’, ‘ArrayOfstring’);
end.
Repare que há uma interface chamada “CEPServicePort”, e uma função chamada “GetCEPServicePort” que retorna um objeto do tipo da interface citada.Em resumo, é só usar está função para pegar o objeto e utilizar as funções de de busca de Cep citadas nesta parte:
  CEPServicePort = interface(IInvokable)
  ['{EC28595B-95D2-DE51-E5B1-57B81D4826D3}']
    function  obterVersao: WideString; stdcall;
    function  obterLogradouro(const cep: WideString): WideString; stdcall;
    function  obterLogradouroAuth(const cep: WideString; const usuario: WideString; const senha: WideString): WideString; stdcall;
    function  obterCEP(const logradouro: WideString; const localidade: WideString; const UF: WideString): ArrayOfstring; stdcall;
    function  obterCEPAuth(const logradouro: WideString; const localidade: WideString; const UF: WideString; const usuario: WideString; const senha: WideString): ArrayOfstring; stdcall;
  end;
Muito bem, mas vamos mastigar um pouco, tem algumas manha ainda, vá até a a paleta WEBServices, e arraste um componente HTTPRIO.
Neste componente, você encontrará todas as propriedades necessárias para se conectar a um webService, no entanto configure apenas o proxy de houver algum, porque o restante das configurações serão retornados pela função “function GetCEPServicePort(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): CEPServicePort; ” Reparem que, o ultimo parâmetro de função é exatamente um componente HTTPRIO, pois a função ira usar parte de suas configurações(que não sejam relacionadas ao serviço em si, mas em relação a rede proxy etc.), para retornar um objeto filho de HTTPRIO (sim um filho, olha esse retorno Result := (RIO as CEPServicePort); , pegando o componente e fazendo o polimorfismo ).
Depois da explicação terica vamos ao código:
CODE
procedure TForm1.Button1Click(Sender: TObject);
var ser: CEPServicePort;
begin       ser:= GetCEPServicePorT(false,”,HTTPRIO1);
      memo1.text:=    ser.obterLogradouroAuth(Edit1.Text,’usuario’,senha’); // o usuario e senha são aqueles que você cadastrou no site dito no começo do artigo
end;
Simplesmente um botão que quando clicado, faz instãncia de um CEPServicePort, atraves da função getCEPServicePort,usando parte da configuração feita no componente ,HTTPRIO1;
Depois é só usar qualquer método declarado na interface CEPServicePort , e no nosso caso usaremos o método obterLogradouroAuth., e simplesmente  jogar o valor do Lagradouro em um MEMO,

Ressaltando que quase todos os WebServices trabalham da mesma forma, alguns métodos de interfaces geradas retornam tipos especificos, mas basta usá-los pois estarão disponíveis na unit baixada através do WSDL;
é isso ai… qualquer dúvida ou sugestão? deixe nos recados!