8
votes

Le serveur distant renvoya une méthode d'erreur: (405) non autorisée. Service de repos de WCF

Cette question est déjà posée ailleurs, mais ces choses ne sont pas les solutions pour mon problème.

Ceci est mon service p> xxx pré>

J'ai ce code pour appeler ce qui précède Service P>

XElement data = new XElement("SampleItem",
                             new XElement("Id", "2"),
                             new XElement("StringValue", "sdddsdssd")
                           ); 

System.IO.MemoryStream dataSream1 = new MemoryStream();
data.Save(dataSream1);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost:2517/Service1/Create");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
// You need to know length and it has to be set before you access request stream
request.ContentLength = dataSream1.Length;

using (Stream requestStream = request.GetRequestStream())
{
    dataSream1.CopyTo(requestStream);
    byte[] bytes = dataSream1.ToArray();
    requestStream.Write(bytes, 0, Convert.ToInt16(dataSream1.Length));
    requestStream.Close();
}

WebResponse response = request.GetResponse();


4 commentaires

À quoi ressemblent vos itinéraires?


Veuillez ajouter n'importe quelle configuration / code de configuration de la liaison que vous utilisez.


Vous définissez Contentype vers "Application / X-www-Form-Urlencodé". Mais vous envoyez des données XML. Pouvez-vous définir le type de contenu sur "Application / XML"


Je n'ai pas de configuration contraignante


6 Réponses :


4
votes

Exécutez une application WCF pour la première fois?

exécutez ci-dessous la commande pour enregistrer wcf. xxx


0 commentaires

9
votes

La première chose est de connaître l'URL exacte pour votre service de repos. Depuis que vous avez spécifié http: // localhost: 2517 / Service1 / Créer code> Essayez maintenant d'ouvrir la même URL à partir de c.-à-d. Et que vous devriez obtenir la méthode non autorisée comme méthode code> Créer code> est défini pour webinvoke et c'est-à-dire un webgget.

Assurez-vous maintenant que vous avez l'exemple dans votre application client définie dans la même espace de noms de votre serveur ou assurez-vous que la chaîne XML que vous construisie est l'espace de noms approprié pour le service. Pour identifier que la chaîne XML d'objet échantillon peut être désérialisée à l'objet sur le serveur. P>

J'ai l'exemple défini sur mon serveur comme indiqué ci-dessous: P>

string sample = "<SampleItem xmlns=\"http://schemas.datacontract.org/2004/07/XmlRestService\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\"><Id>6</Id><StringValue>from client testing</StringValue></SampleItem>";   
string serviceBaseUrl = "http://localhost:2517/Service1";
string resourceUrl = "/Create";
string method="POST";             
UseHttpWebApproach<string>(serviceBaseUrl, resourceUrl, method, sample);


7 commentaires

Je reçois le serveur distant renvoyé une erreur: (405) méthode non autorisée.


Comment votre service a-t-il hébergé? Avez-vous une entrée dans le global.aSax. Vérifiez également si la page d'aide est activée et à partir de celle-ci, essayez de trouver l'URL de la méthode que vous essayez de poster et de voir que l'URL est correcte.


L'aide est de travailler, je peux voir les services dans le navigateur et obtenir travaille dans le navigateur. Le service est hébergé via VS Server et j'ai des itinéraires enregistrés dans le global.asax


Pouvez-vous supprimer l'attribut vide Uritemplate et voir si cela fonctionne. Aussi votre page d'aide donnerait à l'URL de la méthode de création pendant la poste


La page donne une URL de création lors de l'aide. J'ai supprimé le modèle URI mais je reçois toujours une exception 405


Pouvez-vous utiliser simplement cela sans créer dans votre URI?


Je n'ai pas de créer dans l'Uri



2
votes

Après avoir passé 2 jours à ce sujet, en utilisant VS 2010 .NET 4.0, IIS 7.5 WCF et reposez-vous avec JSON ResponseWrapped, je l'ai enfin craqué en lisant de "lors de l'enquête plus poussée ..." ici https://sites.google.com/site/wcfpandu/useful-links

Le service Web Service Code client généré. CODE> Là, d'où la méthode InvalidProtocol InvalidProtocol, 405 non autorisée. problème est cependant, ce fichier est régénéré lorsque vous actualisez la référence de service, et vous avez également besoin d'une référence DLL au système . Servicemodel.web , pour l'attribut webget.

J'ai donc décidé de modifier manuellement le fichier de référence.cs et de conserver une copie. La prochaine fois que je l'rafraîchi, je vais fusionner mon WebGet () S de retour dans.

La façon dont je le vois, c'est un bug avec svcutil.exe ne reconnaissant pas que certaines des méthodes de service sont obtenez et pas seulement post , même si le WSDL et Aide à ce que le service Web WCF IIS publie, comprend que les méthodes sont post et obtenez ??? J'ai enregistré ce numéro avec Microsoft Connect.


0 commentaires

0
votes

Quand cela m'est arrivé, je viens simplement d'ajouter le mot post au nom de la fonction, et cela a résolu mon problème. Peut-être que cela aidera certains d'entre vous aussi.


0 commentaires


0
votes

Le problème que j'ai corrigé, car votre service est sécurisé par identifiant de connexion avec nom d'utilisateur et mot de passe, essayez de configurer le nom d'utilisateur et le mot de passe sur la demande, cela fonctionnera. Bonne chance!


0 commentaires