Service Web XML de la réponse reçue “text/plain”. (Encore un autre type de contenu d'erreur.)
Je cherche à développer une application web qui soumet une simple demande de connexion à un service web en utilisant WCF, mais je reçois "type de contenu text/plain du message de la réponse ne correspond pas à" des erreurs, même si le service web semble être de retour XML valide.
J'ai passé en revue les dizaines de semblables S. O. posts concernant cette erreur et ont écarté le plus commun possibilités:
- Je peux voir la réponse que ce n'est pas une page d'Erreur de revenir (comme discuté ici).
- Je ne semble pas avoir une liaison problème d'incompatibilité (comme discuté ici). Mon application et
le service web sont à la fois à l'aide de SOAP 1.1 et j'ai "basicHttpBinding" spécifié. - La réponse inclus dans mon message d'erreur s'affiche pour montrer XML valide
que comprend l'utilisateur et les variables de réponse que je veux. - Je peux voir dans le Web journal du Service de fichiers que la méthode de login est
exécuter pleinement sans lancer une exception. - J'ai collé de la réponse XML dans le W3Schools validateur sans
erreur.
Quoi d'autre pourrait être à l'origine de mon erreur, et pourquoi n'est-ce pas reconnu comme valide XML?
Je suis à l'aide .Net 4.0 et Visual Studio 2010 pour mon application, qui est en communication avec un Java/Tomcat service web sur un serveur distinct.
Voici les extraits pertinents de mon code de connexion:
AuthenticationServiceClient client = new AuthenticationServiceClient(strPortName, strURL);
client.Open();
UserCredentials credentials = new UserCredentials();
credentials.userName = TestUsername;
credentials.password = TestPassword;
LoginResponse response = client.login(credentials); //Using WCF.
Voici ce que la liaison ressemble dans mon Web.Config:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="AuthenticationServiceSoapBinding" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://mywebserviceurl"
binding="basicHttpBinding" bindingConfiguration="AuthenticationServiceSoapBinding"
contract="MyNamespace.AuthenticationService" name="AuthenticationServiceImplPort" />
</client>
</system.serviceModel>
Voici mon Message d'Erreur:
Erreur de test de connexion au service web "WebServiceURL": Système.ServiceModel.ProtocolException: Le type de contenu text/plain du message de la réponse ne correspond pas au type de contenu de la liaison (text/xml; charset=utf-8). Si à l'aide d'un codeur personnalisé, assurez-vous que le IsContentTypeSupported méthode est mise en œuvre correctement. La première 788 octets de la réponse:"
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<loginReponse xmlns="urn:xxxx">
<authKey>xxxx</authKey>
<authMetadata>
<IPaddress>https://MyWebApplicationURL</IPaddress>
<loginTimestamp>xxxx</loginTimestamp><levelOfAssurance>
<AuthMechanism>xxxx</AuthMechanism>
<VettingAssertion>xxxx</VettingAssertion>
</levelOfAssurance>
</authMetadata>
<errorText></errorText>
<successfulLoginFlag>true</successfulLoginFlag>
<userSummary>
<GUID>xxxx</GUID>
<commonName>xxxx</commonName>
<loginName>xxxx</loginName>
</userSummary>
<passwordExpiryDays>xxxx</passwordExpiryDays></loginReponse>
</soap:Body>
</soap:Envelope>
'.
Serveur de trace de pile: à
Système.ServiceModel.Les canaux.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest
demande, HttpWebResponse réponse, HttpChannelFactory usine,
WebException responseException, ChannelBinding channelBinding) à
Système.ServiceModel.Les canaux.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan
délai d'attente)
Système.ServiceModel.Les canaux.RequestChannel.Demande(Message,
Plage de temps (timeout) à
Système.ServiceModel.Les canaux.ServiceChannel.Appelez le(la Chaîne de l'action,
Boolean oneway, ProxyOperationRuntime opération, Object[] ins,
Object[] sorties, la plage de Temps (timeout) à
Système.ServiceModel.Les canaux.ServiceChannelProxy.InvokeService(IMethodCallMessage
appel de méthode, ProxyOperationRuntime opération) à
Système.ServiceModel.Les canaux.ServiceChannelProxy.Invoke(IMessage
message)Exception renvoyé à [0]:
Système.Moment de l'exécution.L'accès distant.Les procurations.RealProxy.HandleReturnMessage(IMessage
reqMsg, IMessage retMsg) à
Système.Moment de l'exécution.L'accès distant.Les procurations.RealProxy.PrivateInvoke(MessageData&
msgData, type Int32) à
MyNamespace.AuthenticationService.AuthenticationService.login(loginRequest
demande)
MyNamespace.AuthenticationService.AuthenticationServiceClient.MyNamespace.AuthenticationService.AuthenticationService.login(loginRequest
demande) C:...\AuthenticationService\Reference.cs:line 1716 à
MyNamespace.AuthenticationService.AuthenticationServiceClient.login(UserCredentials
les informations d'identification) C:...\AuthenticationService\Reference.cs:line 1722
au MyNamespace.Les formulaires.TestWebService.TestLogin_Click(Object sender,
EventArgs e) dans C:...\TestWebService.aspx.cs:line 284
Voici ce que ma réponse du Service Web ressemble dans WireShark:
Ce que je suis de retour semble être le XML affiche après la "première 788 octets de la réponse étaient" dans mon exception qui est levée. Je n'ai pas de pare-feu local l'accès au Service Web, uniquement à partir de mon test du serveur de déploiement. Je vais probablement tester avec WireShark prochaine, mais je pense que ce sera juste vérifier que ma réponse XML correspond à la réponse XML inclus dans le texte de l'exception.
N'hésitez pas à suggérer le "évident". Je pourrait très bien être absent quelque chose d'évident. Je vous remercie.
Vous obtenez le même exception levée si vous modifiez le basicHttpBinding à un webHttpBinding?
Et le service est écrit en Java/Tomcat? Si oui, pourrait être le problème? Est-il un autre consommateur de du serveur web qui n'obtient pas la réponse "text/plain"?
OriginalL'auteur Mac | 2014-01-23
Vous devez vous connecter pour publier un commentaire.
Le problème est que le service est de répondre avec
text/plain
quand il doit être de répondre avectext/xml
ouapplication/xml
qui est ce que votre WCF liaison attend afin de gérer correctement les. Fondamentalement c'est un "problème" sur le côté service: ils sont de retour XML, mais de l'appeler en clair, qui est techniquement exact, mais pas aussi précis que d'un contenu XML de type. Sur la WCF côté, le protocole de la manipulation est assez rigide et s'attend à ce que le type de contenu àtext/xml
ouapplication/xml
afin de procéder à la désérialisation.Vous pourrait contrecarrer leur contenu type de problème par l'écriture d'un WCF personnalisés codeur qui prend en charge
text/plain
mais l'analyse XML.OriginalL'auteur Haney
ce problème peut se produire si WCF Activation des Composants n'ont pas été installés. Veuillez consulter ci-dessous le lien pour plus d'informations et problème similaire face
http://bit.ly/1fYZ2wn
OriginalL'auteur Abhinav Rao