WCF Nicht zu Deserialisieren. Warum ist mein parameter NULL?
Ich versuche zum einrichten einer web-service wird akzeptieren, dass vordefinierte eingehende SOAP - /XML-Nachrichten. Ich habe keine Kontrolle über den client-code oder der SOAP-Nachricht gesendet. Ich versuche ein einfaches Beispiel, und habe ein problem mit ihm. Lassen Sie uns sagen, dass dies der SOAP-Nachricht:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<CustomerRequest xmlns="http://tempuri.org">
<Customer>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</Customer>
</CustomerRequest>
</env:Body>
</env:Envelope>
Und mein Objekt mit Daten-Vertrag:
[DataContract(Name = "Customer", Namespace = "http://tempuri.org")]
public class Customer
{
[DataMember]
public string FirstName { get; set; }
[DataMember]
public string LastName { get; set; }
}
Service-Schnittstelle:
[ServiceContract(Namespace = "http://tempuri.org")]
public interface IService1
{
[OperationContract(Action="*")]
[WebInvoke(Method = "POST")]
bool Customer(Customer customer);
}
Wenn ich senden über die SOAP-Anfrage kann ich alles in fiddler und es sieht in Ordnung zu sein. Aber wenn es Sie trifft mein code, das Customer-Objekt ist null. Ich fühle mich wie ich ' m fehlt etwas sehr einfach.
Hier ist auch die raw-Anfrage:
POST http://127.0.0.1.:3619/Service1.svc HTTP/1.1
SOAPAction: http://tempuri.org/IService1/Customer
Content-Type: text/xml;charset=utf-8
Host: 127.0.0.1.:3619
Content-Length: 339
Expect: 100-continue
Connection: Keep-Alive
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<CustomerRequest xmlns="http://tempuri.org">
<Customer>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</Customer>
</CustomerRequest>
</env:Body>
</env:Envelope>
- Warum versuchen wir es nicht Umgekehrt? Einen WCF-Dienst erstellen, dass macht dieses Modell und schauen, welche Resonanz die es erzeugt. Dann die Feinabstimmung dieser Antwort, bis es übereinstimmt mit dem, was Sie erwarten.
- Wie sind Sie definiert-Endpunkt? Ist der client schicken Sie alles in die HTTP-Header als auch (wie die
SOAPAction
header)? - Ich habe keine Kontrolle über die SEIFE, die eingehenden. Kann es sein das der Endpunkt. Ich bin nur mit der Standard-build-Endpunkt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich nicht sehen, jede Erwähnung der
CustomerRequest
in Ihrem interface oder service-Implementierung. Ich denke, dass das SOAP request sendenCustomer
eher alsCustomerRequest
. Sie können dies überprüfen, indem Sie mit SOAPUI und generieren Sie eine Probe fordern Sie basierend auf Ihre WSDL. Wird Ihnen sagen, was die Anfrage sollte eigentlich Aussehen.[MessageContract]
genanntCustomerRequest
eine[MessageBodyMember]
genanntBody
mit einemDataContract
genanntCustomer
. Ihre service-Implementierung sollte dann einCustomerRequest
als Eingang. Ich empfehle dringend, die Sie verwenden, SoapUI. Es wird Ihnen helfen, zu Debuggen, Bearbeiten Sie Ihren Vertrag so, dass es zeigt die Schnittstelle, die Sie brauchen, um den client zu können, rufen Sie Ihren service erfolgreich.