2010-10-26 2 views
0

J'ai un service WCF qui expose certaines méthodes avec WebInvoke et la méthode POST, cela a fonctionné sur un serveur Windows 2003 machine depuis un certain temps maintenant, la chose est que je dois migrer le service vers une nouvelle machine serveur Windows 2008 et c'est là que je reçois le problème, j'obtiens l'erreur 400 Bad Request lorsque j'essaie d'appeler du client. Le code déployé sur les deux machines est le même, j'ai essayé d'effectuer les appels à la fois avec une solution UnitTest VS2008 et Fiddler2, la même requête renvoie une réponse 200 OK du serveur w2003 mais la 400 sur celle de 2008. J'ai eu un autre service WCF basé sur la même philosophie fonctionnant sur la machine serveur 2003 donc j'ai essayé de le déployer sur le serveur 2008, j'ai découvert que les méthodes GET fonctionnaient correctement sur les deux machines mais si j'essayais de consommer un méthode POST très simple, puis j'obtiens une ERREUR 500. Erreur interne du serveur pointant vers o une erreur "Référence d'objet non définie sur une instance d'un objet". La chose est que cette méthode fonctionne également Si je fais l'appel à l'autre serveur, l'appel est exactement le même, change seulement l'adresse IP, donc je pense qu'il doit y avoir un problème avec IIS 7 que je ne peux pas comprendre puisque le code fonctionne parfaitement sur w2003/IIS6. J'ai vérifié .NET 3.5 installé et tout ce que j'ai trouvé sur les forums.Erreur lors de l'utilisation de l'appel WCF RestFull POST, fonctionne sur W2003 Server/IIS6 mais ne parvient pas à le faire fonctionner sur W2008 IIS7

Je suppose que je devrais poster du code mais comme il fonctionne sur la machine W2003 je ne suis pas tout à fait sûr Cela ferait une différence, j'ai essayé toutes sortes de choses avec des fixations mais pas de chance, je pense Puisque je n'essaie pas de générer un proxy avec svctool ou VS2008, je viens de formater une demande d'URL et de l'envoyer au serveur, comme indiqué avant qu'il ne fonctionne parfaitement sur la première machine ...

Voici un exemple de une requête faite à la main avec fiddler2 (sur les tests unitaires j'utilise la classe WebRequest pour générer l'objet requête avec le même résultat):

POST http://XX.XXX.XXX.XXX/ServiceiPhone/service.svc/DoWork HTTP/1.1 Hôte: XX.XXX.XXX.XXX User-Agent: FoodLinker/1.0 Accept: text/xml Content-Type: application/JSON Accept-Language: es-es Accept-Encoding: gzip, dégonfler Contenu -length: 17 Connection: keep-alive

{ "Data": "MyData"}

le code sur le serveur ressemble à ceci:

[WebHelp(Comment = "Sample description for DoWork")] 
[WebInvoke(UriTemplate = "DoWork")] 
[OperationContract] 
public SampleResponseBody DoWork(SampleRequestBody request) 
{ 
    //TODO: Change the sample implementation here 
    return new SampleResponseBody() 
    { 
     Value = String.Format("Sample DoWork response: '{0}'", request.Data) 
    }; 
} 

Il n'y a pas de configuration de liaison spéciale sur le fichier web.config, un s déclaré avant de travailler sur la machine précédente mais non sur l'autre.

Ceci est pour le projet de test, le code que je veux vraiment déployer est un peu plus complexe mais c'est un scénario similaire et je pense que si je parviens à résoudre ce problème, je le ferai avec l'autre.

Toutes les idées seraient bienvenues, merci à l'avance

Répondre

0

Ok, donc je fini par comprendre, il avait un problème avec .NET Framework 3.5, l'installation du .NET Framework 3.5 SP1 a fait l'affaire , donc si jamais vous rencontrez ce problème il vaut la peine d'essayer de mettre à jour et voir si c'était le problème comme dans ce cas.

Questions connexes