Bonjour,
J'essaye d'envoyer des données de taille importantes( > 50Mo) via WCF en wsDualHttpBinding. Malheureusement je n'y arrive pas malgré le paramètrage des variables du genre maxReceivedMessageSize,... Je décrit ci-desous ma manip en détail. Merci d'avance pour votre aide.
J'ai définit un endpoint qui utilise un binding wsDualHttpBinding avec la configuration suivante:
Mon client WCF appelle le contrat "ReadServiceTEST" qui lui renvoie un tableau de 12580000 Bytes ( 12.58Mo ).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <binding name="wsDualHttpBindingConfig" closeTimeout="00:01:00" receiveTimeout="00:01:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" maxBufferPoolSize="52428800" maxReceivedMessageSize="2147483647" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="52428800" maxArrayLength="2147483647" maxBytesPerRead="8192" maxNameTableCharCount="16384" /> <reliableSession inactivityTimeout="00:01:00" /> <security mode="None" /> </binding>
Voir le code du serveur WCF ci-dessous:
Le client WCF récupère bien ce tableau de Byte si MaxSize = 12580000,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public interface MonInterfaceWCF { [OperationContract] [Extensions.NetDataContractAttribute] Byte[] ReadServiceTEST(); } public class MaClasse: MonInterfaceWCF { public Byte[] ReadServiceTEST() { int MaxSize= 12580000;// 12.58Mo Byte[] result = new Byte[MaxSize]; for (int i = 0; i < MaxSize; i++) { result[i] = Byte.MaxValue; } return result; } }
mais plus si MaxSize = 12590000;// 12.59Mo!!!Le comportement que j'observe est que le tableau de Byte est bien renvoyé côté serveur, mais le client qui est en attente active sur l'appelle de la méthode ReadServiceTEST récupère une exception de type timeout au bout d'1 min d'attente.
En activant les traces WCF côté serveur, j'obtient le message suivant:
Si quelqu'un à des suggestions...Une erreur s’est produite lors de la demande HTTP à http://MonPC:1565/ed991dbd-6673-42f0-8b22-4590af8bbe7e. Cela peut être dû au fait que le certificat de serveur n’est pas configuré correctement avec HTTP.SYS pour HTTPS. Une autre raison possible est une non-correspondance de la liaison de sécurité entre le client et le serveur.
Partager