Comment augmenter la taille de la publication d'un service web ASMX?
Fond
Je suis en train d'élaborer un ASP.Net côté serveur de contrôle qui a besoin de parler à un service web ASMX. Le côté serveur de contrôle utilise un WebClient
objet de parler pour le service web, car il a besoin d'être réutilisés souvent dans les différentes applications, et de le rendre plus facile pour les développeurs, ils ne sont pas tenus de créer un service de référence pour le service web.
Mise en œuvre
Lors de l'utilisation du contrôle, il est nécessite l'envoi d'un objet sérialisé pour le service web. L'objet est sérialisé à l'aide de la XmlSerializer
et de la chaîne XML est ensuite compressé à l'aide de la chilkat bibliothèque de compression. L'appel de service web pour la commande se présente comme suit:
webClient.UploadStringAsync(new Uri(serviceHost + serviceMethod), "POST", sendData)
Le contenu de sendData (string
) est compressedResponse={CompressedData}
.
Le service web a une méthode définie comme suit pour recevoir les données et décompressez ensuite la valeur de chaîne à l'aide de la chilkat bibliothèque avant de serialising l'objet à l'aide de la XmlSerializer
.
public void SaveResponse(string compressedResponse)
La communication entre la commande et le fonctionnement du service. Au début il n'y avait pas de paramètres ou de liaison défini dans le web.config
pour ci-dessus. Après une première recherche, je n'ai ajouter
<httpRuntime maxRequestLength="20480"/>
à la fois le client et le serveur web.config
fichiers. Cela a fait aucune différence.
Problème
Compressé ou non compressé les données posté pour le service web dans le sendData
variable est grande pour une requête POST, et est endommagé. Ceci est confirmé lors de la vérification de la dernière quelques caractères de la chaîne avant et après qu'il soit posté sur le serveur dans un format compressé et non compressé, le document Xml est absent de la dernière balise racine lors de la vérification dans le débogueur. Le string
ne peut pas être décompressé et, par conséquent, l'appel de service échoue à chaque fois.
Comment puis-je augmenter la taille de la publication de la WebClient
demande pour s'assurer que la chaîne est reçue par le serveur?
J'ai regardé les différentes option sur Google, mais aucun ne me donnent un assez bon exemple de cas où de faire les changements, ou des exemples de ce que les changements doivent ressembler. Je suis complètement perdu, comme si le changement doit être effectuée sur le serveur ou le consommer de site web, et comme il n'y a pas de liaison définies pour cela, comment faire pour créer une liaison dans le web.config
pour un ASMX HTTP appel de service.
J'ai mis à jour la question avec l'info. Faire une vérification de base sur le comprimé de chaîne par la copie de la dernière quelques caractères avant le post et de le valider à l'encontre de la posté chaîne. Aussi l'envoi du non compressé document Xml montre que la finale de la racine de l'étiquette est manquante, et il est coupé à mi-chemin par le biais lors de la vérification dans le débogueur.
OriginalL'auteur BinaryMisfit | 2011-01-20
Vous devez vous connecter pour publier un commentaire.
Je crois que vous devez être de frapper ASP.NET max demande de limite de longueur. Que vous pouvez modifier via le fichier de configuration, tels que:
maxRequestLength valeur en KO, donc le réglage ci-dessus permettrait de 20 MO. Vous pouvez également appliquer le paramètre uniquement sélectionné des Url en utilisant l'emplacement de la balise par exemple
web.config
et le serveurweb.config
. J'ai mis à jour la question pour en tenir compte. +1 mais pour la réponse détaillée.ne vous obtenez une erreur en particulier? Pouvez-vous partager les détails?
Je suis aussi curieux de savoir comment vous convertissez des données compressées (vraisemblablement dans le tableau d'octets format) dans une chaîne de caractères. Vous avez besoin d'appliquer la conversion inverse après la réception. Base64 serait un bon candidat ici pour l'encodage des données compressées de la chaîne.
Aucune erreur, même après l'ajout d'un try catch. La compression et la décompression se fait à l'aide de la chilkat de la bibliothèque et de la chaîne de conversions sont corrects. La bibliothèque pour l'envoi et la réception de données fonctionne bien lors de la réception de données, et il utilise les mêmes méthodes pour l'envoi. La différence majeure est dans le passé, les valeurs individuelles où le fait d'être envoyé au service, où il reçoit un objet complet. Si je ne peux pas trouver une solution, j'ai peut-être forcé de revenir à l'ancienne méthode.
Pour référence, le code de décompression de la chaîne est
decodedString = gzipEngine.InflateStringENC(compressedData, "windows-1252", "base64")
OriginalL'auteur VinayC
Il semble y avoir aucun moyen de changer la taille de la publication d'un Service Web ASMX quand seulement HttpPost est activé.
La solution a été de passer du service de l'exécution HttpSoap et de créer un service de référence à l'assembly contenant le contrôle. Une fois cela fait, la liaison est créé à l'aide de code dans le contrôle, une fois le point de terminaison est définie par l'intermédiaire d'une propriété.
OriginalL'auteur BinaryMisfit