C#da yazılmış webservise delphiden dosya gönderme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
DelphiMaster
Üye
Mesajlar: 6
Kayıt: 15 Eki 2016 02:11

C#da yazılmış webservise delphiden dosya gönderme

Mesaj gönderen DelphiMaster »

Merhabalar,

C# da yazılmış webservise delphi den binary olarak dosya göndereceğiz. C# tarafında memorystream ile yapmaya çalıştık fakat delphi c# ın memorystream in göremedi yani delphi deki gibi loadfromstream yapamıyorum. Daha önce delphi den c# a dosya gönderen arkadaşlar varsa yardımlarınızı bekliyorum. C# projesini de biz yazıyoruz o yüzden istediğimiz gibi değiştirebiliriz fonksyonu. Memorystream yerine byte array gibi şeylerde kullanabiliriz. Bu konuda tecrübe sahibi arkadaşlar var mı?

Saygılarımla
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: C#da yazılmış webservise delphiden dosya gönderme

Mesaj gönderen csunguray »

Base64 ikili verilerin (İngilizce: binary data) sadece ASCII karakterlerini kullanan ortamlarda (yani web service vb.) iletilmesine ve saklanmasına olanak tanıyan bir kodlama şemasıdır.Yani bir dosyayı base64 kodlamasını kullanarak string veriye çevirebilir ve alıcı tarafta tekrar eski şekline getirebilirsiniz. E-posta içerisine koyduğumuz dosya ekleri de aynı sistemle e-postanın içerisine yerleştirilmektedir.

Bir doayayı base64 olarak kodlamak için:

Kod: Tümünü seç

function EncodeFile(const FileName: string): AnsiString;
var
  stream: TMemoryStream;
begin
  stream := TMemoryStream.Create;
  try
    stream.LoadFromFile(Filename);
    result := EncodeBase64(stream.Memory, stream.Size);
  finally
    stream.Free;
  end;
end;
Base64 olarak string hale getirilmiş bir dosyayı tekrar eski haline getirmek için aşağıdaki kodu kullanabilirsiniz. Sizin senaryonuzda bu işlemi C# tarafında yapmanız gerekir. Ben yine de Delphi'de nasıl yapıldığını yazıyorum.

Kod: Tümünü seç

procedure DecodeFile(const Base64str: AnsiString; const FileName: string);
var
  stream: TBytesStream;
begin
  stream := TBytesStream.Create(DecodeBase64(Base64str));
  try
    stream.SaveToFile(Filename);
  finally
    stream.Free;
  end;
end;
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
DelphiMaster
Üye
Mesajlar: 6
Kayıt: 15 Eki 2016 02:11

Re: C#da yazılmış webservise delphiden dosya gönderme

Mesaj gönderen DelphiMaster »

O zaman webservise string olarak veriyi vereceğiz webservis de bu veriyi decode edecek doğrumudur ?
DelphiMaster
Üye
Mesajlar: 6
Kayıt: 15 Eki 2016 02:11

Re: C#da yazılmış webservise delphiden dosya gönderme

Mesaj gönderen DelphiMaster »

Peki boyut konusunda herhangi bir sınır var mı ? Ne kadar büyüklükte bir veri gönderebilirim ? Sonuçta string verinin belirli bir uzunluğu var.
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: C#da yazılmış webservise delphiden dosya gönderme

Mesaj gönderen csunguray »

Sanırım 2 GB sınır var. Ayrıca şuna dikkat etmelisiniz. 1 KB lik veriyo Base64 e çevirdiğiniz zaman boyutu 1 KB'den daha çok tutar. O yüzden 10 MB attachment (ek dosya) sınırı olan bir mail hesabına 7-8 MB lik dosya yüklediğimizde zaman zaman attachment boyutu aşıldı mesajı alabiliriz.

Zaten çok büyük dosyaları web service yoluyla göndermek web service in amacına çok uymaz.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
DelphiMaster
Üye
Mesajlar: 6
Kayıt: 15 Eki 2016 02:11

Re: C#da yazılmış webservise delphiden dosya gönderme

Mesaj gönderen DelphiMaster »

Anladım teşekkür ederim. Base64stringe çevirip gönderdik maksimum 3mb lik dosya gönderebildik. Biz de byte array olarak gönderdik 8-9mb' a kadar destek sağladı şuanda. İlginiz için teşekkürler
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: C#da yazılmış webservise delphiden dosya gönderme

Mesaj gönderen ertank »

Merhaba,

Hangi Delphi sürümünü kullanıyorsunuz?
Göndermek istediğiniz verinin bir üst limiti var mıdır?
Base64 şeklinde veri gönderir iken 3MB üzeri dosyalarda sorunun hangi tarafta (C#, Delphi) olduğunu tespit edebildiniz mi?
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: C#da yazılmış webservise delphiden dosya gönderme

Mesaj gönderen mkysoft »

Servisde parametre olarak byte array kullanılmasını tavsiye ederim. byte data aktarmak için en iyi yöntem mtom protokolüdür. C# tarafında servisi mutlaka mtom destekleyecek şekilde yayınlayın. Delphi tarafında da vardır bu özellik diye düşünüyorum.

https://en.wikipedia.org/wiki/Message_T ... _Mechanism

Yine Delphi tarafında compression özelliğini aktif edin, C# bunu otomatik yaparken Delphi'de manuel olarak yönetmeniz gerekiyor. byte data sıkıştırayım servise öyle parametre geçeyim diyerek uğraşmayın, http prokolüne bırakın.

https://robertocschneiders.wordpress.co ... hi-client/
Cevapla