Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SOAP işlemlerinde TMom yapısı hakkında
#1
Merhabalar,

Yaşadığım sorunu detayları ile yazmaya çalışacağım. Biraz uzun olacak fakat sabırla okuyup cevaplayan arkadaşlara şimdiden teşekkür ederim.

Digital Planet (N11 E-Fatura Servisleri) alt yapısını kullanan E-FATURA entegrasyonu yapmaya çalışıyorum.
Uygulamayı "Embarcadero® RAD Studio 10.3 Version 26.0.36039.7899" üzerinde geliştiriyorum ve HTTPRIO üzerinden SOAP servislerini kullanıyorum.

Entegrasyon için 2 adet servis sunulmaktadır. Bunlardan bir tanesi  "messageEncoding="Mtom" ve " messageEncoding="text"  şeklindedir.

URL bilgileri aşağıdaki şekildedir
"MTom" Servisleri
https://n11integrationtest.digitalplanet....asmx?wsdl
https://n11integrationtest.digitalplanet...rvice.asmx

"Text" Servisleri
https://n11integrationwithoutmtomtest.di....asmx?wsdl
https://n11integrationwithoutmtomtest.di...rvice.asmx

//*******************************************************************************//

Şimdi gelelim yaşadığım sorunlara
Eğer "Text " servisini kullanarak işlem yaparsam Token alma işlemi düzgün olarak çalışmaktadır.
Fakat "Mtom" Servisini kullanmaya kalktığımda "Unsupported Media Type (415) - ..'//n1integrationtest.digitalpln......" diye devam eden bir hata almaktayım.

İnternetten yaptığım incelemelerde SOAP Header yada Soap Content-Type olarak parametre geçmem gerektiği yönünde bilgiler yer alıyor.
Bunları aşağıdaki şekilde farklı yollarla denedim fakat başarılı olamadım.

Belki hatalı bir kullanım yapıyor olabilirim bu konuda nasıl bir yol izlemeliyim.
Teşekkürler


procedure TDigitalPlanetServis.HTTPWebNodeBeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient);
begin
   // Client.CustomHeaders['CorporateCode'] :=  sComponayCode;
   // Client.CustomHeaders['LoginName'] :=  sUser;
   // Client.CustomHeaders['Password'] :=  sPassword;
   // Client.CustomHeaders['timeout'] := IntToStr(TimeOut);

   // client.Accept := 'application/xml, text/plain; q=0.9, text/html;q=0.8,';
   // Client.AcceptCharset := 'utf-8, *;q=0.8';
   // client.AcceptEncoding  := 'Mtom';
   // Client.ContentType := 'application/xml';

   // Client.CustomHeaders['textEncoding'] := 'utf-8';
   // Client.CustomHeaders['messageEncoding'] := 'Text';
   // Client.CustomHeaders['hostNameComparisonMode'] := 'StrongWildcard';
   // Client.CustomHeaders['transferMode'] := 'Buffered';
   // Client.CustomHeaders['messageEncoding'] := 'Mtom';
end;
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#2
(25-12-2020, Saat: 11:48)adelphiforumz Adlı Kullanıcıdan Alıntı: Merhabalar,

Yaşadığım sorunu detayları ile yazmaya çalışacağım. Biraz uzun olacak fakat sabırla okuyup cevaplayan arkadaşlara şimdiden teşekkür ederim.

Digital Planet (N11 E-Fatura Servisleri) alt yapısını kullanan E-FATURA entegrasyonu yapmaya çalışıyorum.
Uygulamayı "Embarcadero® RAD Studio 10.3 Version 26.0.36039.7899" üzerinde geliştiriyorum ve HTTPRIO üzerinden SOAP servislerini kullanıyorum.

Entegrasyon için 2 adet servis sunulmaktadır. Bunlardan bir tanesi  "messageEncoding="Mtom" ve " messageEncoding="text"  şeklindedir.

URL bilgileri aşağıdaki şekildedir
"MTom" Servisleri
https://n11integrationtest.digitalplanet....asmx?wsdl
https://n11integrationtest.digitalplanet...rvice.asmx

"Text" Servisleri
https://n11integrationwithoutmtomtest.di....asmx?wsdl
https://n11integrationwithoutmtomtest.di...rvice.asmx

//*******************************************************************************//

Şimdi gelelim yaşadığım sorunlara
Eğer "Text " servisini kullanarak işlem yaparsam Token alma işlemi düzgün olarak çalışmaktadır.
Fakat "Mtom" Servisini kullanmaya kalktığımda "Unsupported Media Type (415) - ..'//n1integrationtest.digitalpln......" diye devam eden bir hata almaktayım.

İnternetten yaptığım incelemelerde SOAP Header yada Soap Content-Type olarak parametre geçmem gerektiği yönünde bilgiler yer alıyor.
Bunları aşağıdaki şekilde farklı yollarla denedim fakat başarılı olamadım.

Belki hatalı bir kullanım yapıyor olabilirim bu konuda nasıl bir yol izlemeliyim.
Teşekkürler


procedure TDigitalPlanetServis.HTTPWebNodeBeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient);
begin
   // Client.CustomHeaders['CorporateCode'] :=  sComponayCode;
   // Client.CustomHeaders['LoginName'] :=  sUser;
   // Client.CustomHeaders['Password'] :=  sPassword;
   // Client.CustomHeaders['timeout'] := IntToStr(TimeOut);

   // client.Accept := 'application/xml, text/plain; q=0.9, text/html;q=0.8,';
   // Client.AcceptCharset := 'utf-8, *;q=0.8';
   // client.AcceptEncoding  := 'Mtom';
   // Client.ContentType := 'application/xml';

   // Client.CustomHeaders['textEncoding'] := 'utf-8';
   // Client.CustomHeaders['messageEncoding'] := 'Text';
   // Client.CustomHeaders['hostNameComparisonMode'] := 'StrongWildcard';
   // Client.CustomHeaders['transferMode'] := 'Buffered';
   // Client.CustomHeaders['messageEncoding'] := 'Mtom';
end;

Merhabalar,

Content-Type: application/xop+xml; charset=UTF-8; type="application/soap+xml";
Şeklinde bir örnek mevcut. Denediniz mi acaba?

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#3
@hi_selamlar Hocam

aşağıdaki şekillerde denemeler yaptım fakat sonuç yine hatalı geliyor.
kodları yanlış yerlere yada yanlış şekilde yazmış olabilirim. doğrusunu tam bilmiyorum deneme yanılma yöntemi ile yapıyorum.
//    client.ContentType   := 'application/xop+xml';
//    client.AcceptCharSet := 'UTF-8';
//    client.AcceptCharSet := 'charset=UTF-8';
//    Client.Accept        := 'application/soap+xml';

    Client.CustomHeaders['Content-Type'] := 'application/xop+xml';
    Client.CustomHeaders['charset'] := 'UTF-8';
    Client.CustomHeaders['type'] := 'application/soap+xml';

Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#4
Şöyle bir örnek belki başlangıç için yol gösterebilir. Öncelikle uses satırına "Winapi.WinInet" eklemek gerekecektir. 
var EkBaslik:String;
begin
  EkBaslik:='CorporateCode: ' + sComponayCode;
  HttpAddRequestHeaders(Data, PChar(EkBaslik), Length(EkBaslik), HTTP_ADDREQ_FLAG_ADD);
  EkBaslik:='LoginName: ' +  sUser;
  HttpAddRequestHeaders(Data, PChar(EkBaslik), Length(EkBaslik), HTTP_ADDREQ_FLAG_ADD);
//v.s. v.s.
gibi bir yapıyı kullanmayı deneyin. Header içerisinde gerekli parametreleri bu şekilde eklemek mümkündür.
Cevapla
#5
Merhaba,

Component > Import WSDL bölümünden "https://n11integrationwithoutmtomtest.digitalplanet.com.tr/IntegrationService.asmx?wsdl" kaynağını ekleyerek SOAP arabiriminin pascal kodunu üretip IntegrationServiceSoap nesnesini oluşturarak entegrasyon metodlarını doğrudan pascal kodları ile erişmeyi denediniz mi?
Cevapla
#6
(26-12-2020, Saat: 09:31)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: Merhaba,

Component > Import WSDL bölümünden "https://n11integrationwithoutmtomtest.digitalplanet.com.tr/IntegrationService.asmx?wsdl" kaynağını ekleyerek SOAP arabiriminin pascal kodunu üretip IntegrationServiceSoap nesnesini oluşturarak entegrasyon metodlarını doğrudan pascal kodları ile erişmeyi denediniz mi?

@Abdullah ILGAZ hocam şu anda bahsettiğiniz yöntemle çalışıyorum. Fakat malesef sorun oluyor

(26-12-2020, Saat: 00:04)sabanakman Adlı Kullanıcıdan Alıntı: Şöyle bir örnek belki başlangıç için yol gösterebilir. Öncelikle uses satırına "Winapi.WinInet" eklemek gerekecektir. 
var EkBaslik:String;
begin
  EkBaslik:='CorporateCode: ' + sComponayCode;
  HttpAddRequestHeaders(Data, PChar(EkBaslik), Length(EkBaslik), HTTP_ADDREQ_FLAG_ADD);
  EkBaslik:='LoginName: ' +  sUser;
  HttpAddRequestHeaders(Data, PChar(EkBaslik), Length(EkBaslik), HTTP_ADDREQ_FLAG_ADD);
//v.s. v.s.
gibi bir yapıyı kullanmayı deneyin. Header içerisinde gerekli parametreleri bu şekilde eklemek mümkündür.

@sabanakman Hocam bu yöntem delphi 10.2 sonrasında desteklenmiyor. HTTPRIO yapısında değişkliğe gidilmiş.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#7
Bildiğim kadarıyla, Delphi & C++ Builder ürünlerinde mevcut hazırda bir mtom desteği yok, sadece http header'a bilgilerin eklenmiş olması yeterli olmaz.
WWW
Cevapla
#8
(30-12-2020, Saat: 00:33)ismailkocacan Adlı Kullanıcıdan Alıntı: Bildiğim kadarıyla, Delphi & C++ Builder ürünlerinde mevcut hazırda bir mtom desteği yok, sadece http header'a bilgilerin eklenmiş olması yeterli olmaz.

Peki hocam çözümü ve öneriniz nedir ?
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#9
mtom'lu soap mesajı yapısının (header, body ne varsa) incelenip, Delphi tarafında benzer mesajın üretilmesi gerekiyor.
WWW
Cevapla
#10
(25-12-2020, Saat: 11:48)adelphiforumz Adlı Kullanıcıdan Alıntı: Merhabalar,

Yaşadığım sorunu detayları ile yazmaya çalışacağım. Biraz uzun olacak fakat sabırla okuyup cevaplayan arkadaşlara şimdiden teşekkür ederim.

Digital Planet (N11 E-Fatura Servisleri) alt yapısını kullanan E-FATURA entegrasyonu yapmaya çalışıyorum.
Uygulamayı "Embarcadero® RAD Studio 10.3 Version 26.0.36039.7899" üzerinde geliştiriyorum ve HTTPRIO üzerinden SOAP servislerini kullanıyorum.

Entegrasyon için 2 adet servis sunulmaktadır. Bunlardan bir tanesi  "messageEncoding="Mtom" ve " messageEncoding="text"  şeklindedir.

URL bilgileri aşağıdaki şekildedir
"MTom" Servisleri
https://n11integrationtest.digitalplanet....asmx?wsdl
https://n11integrationtest.digitalplanet...rvice.asmx

"Text" Servisleri
https://n11integrationwithoutmtomtest.di....asmx?wsdl
https://n11integrationwithoutmtomtest.di...rvice.asmx

//*******************************************************************************//

Şimdi gelelim yaşadığım sorunlara
Eğer "Text " servisini kullanarak işlem yaparsam Token alma işlemi düzgün olarak çalışmaktadır.
Fakat "Mtom" Servisini kullanmaya kalktığımda "Unsupported Media Type (415) - ..'//n1integrationtest.digitalpln......" diye devam eden bir hata almaktayım.

İnternetten yaptığım incelemelerde SOAP Header yada Soap Content-Type olarak parametre geçmem gerektiği yönünde bilgiler yer alıyor.
Bunları aşağıdaki şekilde farklı yollarla denedim fakat başarılı olamadım.

Belki hatalı bir kullanım yapıyor olabilirim bu konuda nasıl bir yol izlemeliyim.
Teşekkürler


procedure TDigitalPlanetServis.HTTPWebNodeBeforePost(const HTTPReqResp: THTTPReqResp; Client: THTTPClient);
begin
   // Client.CustomHeaders['CorporateCode'] :=  sComponayCode;
   // Client.CustomHeaders['LoginName'] :=  sUser;
   // Client.CustomHeaders['Password'] :=  sPassword;
   // Client.CustomHeaders['timeout'] := IntToStr(TimeOut);

   // client.Accept := 'application/xml, text/plain; q=0.9, text/html;q=0.8,';
   // Client.AcceptCharset := 'utf-8, *;q=0.8';
   // client.AcceptEncoding  := 'Mtom';
   // Client.ContentType := 'application/xml';

   // Client.CustomHeaders['textEncoding'] := 'utf-8';
   // Client.CustomHeaders['messageEncoding'] := 'Text';
   // Client.CustomHeaders['hostNameComparisonMode'] := 'StrongWildcard';
   // Client.CustomHeaders['transferMode'] := 'Buffered';
   // Client.CustomHeaders['messageEncoding'] := 'Mtom';
end;

Bu hafta 10.4 e yükseltme yapmıştım. Aynı yapıyı kullanan modülümü kontrol edince çalışmadığını gördüm sayenizde  Tongue . Yalnız verdiğiniz bu Client.CustomHeaders['Password'] :=  sPassword; şeklindeki yapı header parametre üzerinde gerekli düzeltmeyi yapsa da servislerim çalışmadı. Delphi 10.2 üzerinden wsdl import ile oluşan unit'i kullanınca servis çalışıyor ama 10.4 ile import edilende bir sıkıntı var. Burada proje Delphi 10.4 e ait, header ile giden isim ve şifre Client.CustomHeaders ile ayarlanıyor. Tek değiştirdiğim 10.4 ile 10.2 nin import sınıflar. Geniş vakit bulursam üzerine biraz düşeceğiz gibi Huh
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  SQL Table Type parametre gecisi hakkında (Çözüldü) adelphiforumz 1 151 09-04-2026, Saat: 15:53
Son Yorum: adelphiforumz
  Video Oynatma Hakkında adelphiforumz 7 844 17-12-2025, Saat: 07:36
Son Yorum: mrmarman
  nduWlanAPI Kullanımı hakkında nurah 3 806 09-09-2025, Saat: 09:33
Son Yorum: RAD Coder
  AES Şifreleme Hakkında tmrksmt 25 5.850 06-09-2025, Saat: 22:12
Son Yorum: delphi.developer
  SuperObject dosyaları hakkında adelphiforumz 2 622 18-06-2025, Saat: 11:02
Son Yorum: engerex



Konuyu Okuyanlar: 1 Ziyaretçi