WCF1 dostaje strumień, z którym nic nie robi, tylko przekazuje do WCF2. I gdzieś tracę strumieniowanie, a wiadomość jest buforowana.
Oczywiście obie metody używająMessageContract, strumień jest jedynym elementem body, inne dane w nagłówku. Bindingi z Mtom i transferMode streamed, wszystkie quota'y bufory podbite, użyty httpBasicBinding (tcp nie mogę, póki co).
w WCF1 w uproszczeniu wygląda to tak
void Upload1(UploadRequest req)
{
using (var client2 = ...)
{
client2.Upload(new UploadRequest2 {
File = req.File,
FileName = req.FileName,
FileLength = req.FileLength,
...
});
}
}
gdzie UploadRequest wygląda tak:
[MessageContract]
public class UploadRequest
{
[MessageHeader]
public string FileName { get; set; }
[MessageHeader]
public long FileLength { get; set; }
[MessageBodyMember]
public Stream File { get; set; }
}
Nie odkryłem co dokładnie powoduje buforowanie, czy "przepisanie" strumienia z UploadRequest do UploadRequest2, czy coś naknociłem w bindingu między WCF1 a WCF2. Binding wygląda tak:
<binding name="bindingBigStreams" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="104857600" maxBufferPoolSize="104857600" maxReceivedMessageSize="104857600" messageEncoding="Mtom" textEncoding="utf-8" transferMode="Streamed" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="104857600" maxArrayLength="104857600" maxBytesPerRead="8388608" maxNameTableCharCount="104857600" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
</security>
</binding>