Je travaille actuellement sur une application WCF qui utilise un service Rails REST. Le problème est quand je fais une mise à jour ou supprimer la demande, Rails ne retourne pas XML, seul l'en-tête suivant:Communication entre Rails et WCF
HTTP/1.1 200 OK
Date: Wed, 13 Jan 2010 13:56:25 GMT
Server: Apache/2.2.14 (Debian)
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 2.2.7
X-Runtime: 20
Cache-Control: private, max-age=0, must-revalidate
Set-Cookie: _Shop-R+Server_session=BAh7BzoPc2Vzc2lvbl9pZCIlODY0NmZlZjQyZTg1OTcyNTE0ZTRlN2NkNTcyZDVmYTEiCmZsYXNoSUM6J0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7BjoLbm90aWNlIidDdXN0b21lciB3YXMgc3VjY2Vzc2Z1bGx5IHVwZGF0ZWQuBjoKQHVzZWR7BjsHRg%3D%3D--88d0f739a64ea3a92e3a034d73365393dcfeee1e; path=/; HttpOnly
Content-Length: 1
Status: 200
Content-Type: application/xml; charset=utf-8
Ceci est à prévoir et corriger pour autant que je sais. Toutefois, lors de l'appel de la demande de service suivante à partir de WCF, nous obtenons une exception ProtocolException (InnerException: XMLException inattendue fin du fichier).
[ServiceContract]
[XmlSerializerFormat]
public interface ICustomerService
{
[OperationContract]
[WebGet(
BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Xml,
UriTemplate = "customers/{id}.xml")]
Customer GetCustomer(string id);
[OperationContract]
[WebInvoke(
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "customers/{id}.xml",
Method = "PUT")]
void UpdateCustomer(string id, Customer newCustomer);
[OperationContract]
[WebInvoke(
BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Xml,
UriTemplate = "customers.xml",
Method = "POST")]
Customer CreateCustomer(Customer newCustomer);
[OperationContract]
[WebInvoke(
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "customers/{id}.xml",
Method = "DELETE")]
void DeleteCustomer(string id);
}
Les méthodes getCustomer et createCustomer fonctionnent sans problème, et UpdateCustomer DestroyCustomer jettent l'exception. Nous suspectons que c'est parce que XML est attendu comme une réponse.
Quelqu'un at-il une expérience avec Rails et WCF et connaît une solution/solution de contournement pour ce problème?
Pour être complet ici les détails d'exception:
ProtocolException { ". Il y a un problème avec le XML qui a été reçu à partir du réseau Voir exception interne pour plus de détails"}
XMLException (InnerException) { "fin de fichier inattendue."} StackTrace:
at System.Xml.EncodingStreamWrapper.ProcessBuffer(Byte[] buffer, Int32 offset, Int32 count, Encoding encoding)
at System.Xml.XmlUTF8TextReader.SetInput(Byte[] buffer, Int32 offset, Int32 count, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose)
at System.Xml.XmlDictionaryReader.CreateTextReader(Byte[] buffer, Int32 offset, Int32 count, Encoding encoding, XmlDictionaryReaderQuotas quotas, OnXmlDictionaryReaderClose onClose)
at System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.UTF8BufferedMessageData.TakeXmlReader()
at System.ServiceModel.Channels.BufferedMessageData.GetMessageReader()
at System.ServiceModel.Channels.BufferedMessage..ctor(IBufferedMessageData messageData, RecycledMessageState recycledMessageState, Boolean[] understoodHeaders)
at System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.ReadMessage(ArraySegment`1 buffer, BufferManager bufferManager, String contentType)
at System.ServiceModel.Channels.WebMessageEncoderFactory.WebMessageEncoder.ReadMessage(ArraySegment`1 buffer, BufferManager bufferManager, String contentType)
at System.ServiceModel.Channels.HttpInput.DecodeBufferedMessage(ArraySegment`1 buffer, Stream inputStream)
Sons comme le mauvais XML, pouvez-vous Sé Fiddler ou un autre outil pour capturer la réponse XML que vous envoyez de Rails? – Nate
C'est le problème, il n'y a pas (et pas censé être) une réponse XML. La seule chose que l'action rails répond est un code d'état. – Ferdy
Pourquoi définissez-vous un contrat de service WCF pour l'API distante de quelqu'un d'autre? Pourquoi ne pas simplement utiliser HttpClient pour faire la requête HTTP directement à l'interface Rails? –