SOAP Authorization ve Header Sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

SOAP Authorization ve Header Sorunu

Mesaj gönderen adelphiforumz »

S.A.

SOAP servislerle çok fazla çalışmadığımdan Authorization konusunda ve Header konularında yardımcı olabilirseniz teşekkür ederim.

Authorization olan bir serviste ve aynı zamanda 4 adet header içeren bir yapı olunca işin içinden çıkamadım.

kullandığım servis yapısı aşağıdaki şekilde
Authorization : Basic
Authorization kullanıcı adı ve şifre istiyor

Header 1 : String
Header 2 : String
Header 3 : Integer
Header 4 : String

yapmaya çalıştığım kodun bir kısmı şağıdaki şekilde

Kod: Tümünü seç

function fn_GetAuthenticationToken(sUser, sPassword, sHeader1, sHeader2, sHeader4: String; iHeader3:Integer):String;
  type
   THeaders = class(TSOAPHeader)
   private
      FHeader1: String;
      FHeader2: string;
      FHeader3: Integer;
      FHeader4: tring;
   public
   published
     property Header1 : string  read FHeader1 write FHeader1;
     property Header2 : string  read FHeader2 write FHeader2;
     property Header3 : Integer read FHeader3 write FHeader3;
     property Header4 : string  read FHeader4 write FHeader4;
   end;
var
  _HTTPRIO : THTTPRIO;
  _Port  : Port;
  _GetAuthentication : WideString;
  _bSwc:Boolean;
  _Header : THeaders;
begin
    {$REGION '.....'}
    try
        _bSwc := False;

        _HTTPRIO := THTTPRIO.Create(nil);
        _HTTPRIO.HTTPWebNode.UserName := sUser;
        _HTTPRIO.HTTPWebNode.Password := sPassword;

        _HTTPRIO.HTTPWebNode.MaxSinglePostSize := 1073741824;// maxReceivedMessageSize
        _HTTPRIO.HTTPWebNode.ReceiveTimeout := 50000;

        _HTTPRIO.Port := 'TestPort';
        _HTTPRIO.Service := 'TestService';

        _Header := THeaders.Create;
        _Header.FHeader1 := sHeader1;
        _Header.FHeader2 := sHeader2;
        _Header.FHeader3 := iHeader3;
        _Header.FHeader4 := sHeader2;
        _HTTPRIO.SOAPHeaders.Send(_Header);

        try
            _Port  :=  GetPort(False, '', _HTTPRIO);
        except on E: Exception do
          begin
            Exit;
          end;
        end;

        try
            _GetAuthenticationToken := _Port.GetAuthenticationToken();
        except on E: Exception do
          begin
            Exit;
          end;
        end;

        _bSwc := True;
    except on E: Exception do
      _bSwc := False;
    end;

    if _bSwc = True then
      Result := _GetAuthenticationToken
    else
      Result := '';
    {$ENDREGION}
end;
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: SOAP Authorization ve Header Sorunu

Mesaj gönderen mkysoft »

HTTPRIO nesnesi üzerindeki username/password doldurmanız Basic authentication için yeterli olması lazım. Nasıl bir hata alıyorsunuz?
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: SOAP Authorization ve Header Sorunu

Mesaj gönderen adelphiforumz »

Uncaught SoapFault exception: [Authentication] Invalid auth data in ..............
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: SOAP Authorization ve Header Sorunu

Mesaj gönderen mkysoft »

Delphi 7 kullanıyorsanız bug varmış. Header manuel ekleyebilirsiniz:

Kod: Tümünü seç

{* —————————————————————————-}
procedure TFrm_Test_WS.HTTPReqResp_WSBeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
s: string;
begin
s := ‘Authorization: Basic ‘ + EncodeLoginPW(HTTPReqResp.UserName, HTTPReqResp.Password);
if not HttpAddRequestHeaders(Data, PChar(s), Length(s), HTTP_ADDREQ_FLAG_ADD) then
ManageError(’HttpAddRequestHeaders’, GetLastError());
end;
{* —————————————————————————-}
function TFrm_Test_WS.EncodeLoginPW(const ALogin, APW: string): string;
begin
Result := EncdDecd.EncodeString(ALogin + ‘:’ + APW); // EncdDecd is not documented in Delphi HELP !!!
end;
Kaynak: http://blogs.teamb.com/deepakshenoy/2004/10/13/1584
Cevapla