Comment utiliser HttpWebRequest d'appeler une Opération de Service Web qui prend en byte[] paramètre?
Je suis en train d'appeler un [webmethod] à partir de C#. Je peux appeler simple webmethod qui prennent en 'string' paramètres. Mais j'ai un webmethod qui prend dans un " byte [] paramètre. Je suis en cours d'exécution dans '500-erreur interne du serveur lorsque j'essaie de l'appeler. Voici quelques exemple de ce que je suis en train de faire.
Permet de dire que ma méthode est comme ça
[WebMethod]
public string TestMethod(string a)
{
return a;
}
Je l'appelle comme ceci en utilisant HttpRequest en C#
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Credentials = CredentialCache.DefaultCredentials;
req.Method = "POST";
//Set the content type of the data being posted.
req.ContentType = "application/x-www-form-urlencoded";
string inputData = "sample webservice";
string postData = "a=" + inputData;
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] byte1 = encoding.GetBytes(postData);
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
StreamReader sr = new StreamReader(res.GetResponseStream());
string txtOutput = sr.ReadToEnd();
Console.WriteLine(sr.ReadToEnd());
}
Cela fonctionne parfaitement bien. Maintenant j'ai un autre webmethod qui est définie comme ceci
[WebMethod]
public string UploadFile(byte[] data)
J'ai essayé de l'appeler comme ça
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = "data=abc";
byte[] sendBytes = encoding.GetBytes(postData);
req.ContentLength = sendBytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(sendBytes, 0, sendBytes.Length);
Mais qui me donne l'500 erreur interne 🙁
OriginalL'auteur shergill | 2009-04-01
Vous devez vous connecter pour publier un commentaire.
c'est possible, je l'ai fait moi-même
D'abord l'en-Tête paramètres, ce qui peut être obtenu si votre webservice peut être exécuté via web et l'envoi de paramètres. J'utilise les outils de développement de google Chrome. Le moyen le plus facile est de passer en revue la description de la webservice (i.e. http ://myweb.com/WS/MyWS.asmx?op=Validation)
La requête de la partie
Maintenant vous pouvez obtenir le flux entrant de la réponse
Pensez à adapter l'enveloppe SOAP et les paramètres à être envoyé conformément à la description donnée par la page de détails de l'webservice (i.e. http ://myweb.com/WS/MyWS.asmx?op=Validation).
OriginalL'auteur Edgar Chavolla
Vous êtes à l'aide de HTTP POST/HTTP OBTENIR la capacité de l'ASP.NET Web Service de plomberie au lieu d'envoyer une véritable web-appel de service. C'est un mécanisme qui vous permet de tester les services web simples, mais il n'est pas vraiment conçu pour une utilisation dans une application de production. En fait, si vous naviguez sur le web-URL du service, vous constaterez qu'il ne peut même pas afficher un test de la forme d'entrée pour ce type de paramètre. Il pourrait être possible de trouver un moyen de le forcer à travailler, mais pour être honnête, vous devriez utiliser de la façon qui il est destiné et de générer un service web proxy.
Au sein de Visual Studio avec le bouton droit de la souris cliquez sur le projet contenant le code du client et sélectionnez Ajouter Web ou le Service de Référence. Ensuite, tapez l'URL du service web et il va générer un proxy. Si vous êtes en utilisant WCF ça va ressembler à quelque chose comme ceci:
Espère que cette aide.
Pas sûr que sur le dessus de ma tête 🙂
Si le code ci-dessus fonctionne, vous pourriez utiliser un violon pour voir comment la requête http est construit et ensuite utiliser cette information pour obtenir votre code personnalisé à travailler.
fiddler2.com/fiddler2
OriginalL'auteur Mitch Denny
Vous aurez probablement besoin de base64 encode les données binaires.
Mais l'erreur 500 est un indice de regarder dans le journal des événements Windows et voir ce qui s'est passé sur le côté serveur.
OriginalL'auteur John Saunders
chaîne postData = "data=abc";
pense que vous devriez passer de tableau d'octets sous forme de tableau, pas une chaîne base64. par exemple:
chaîne postData = "data=97&data=98&data=99"; //tableau d'octets pour abc est [97,98,99]
veuillez vous référer à https://www.codeproject.com/Tips/457410/Xml-WebService-Array-Parameters
OriginalL'auteur custjcy