WCF Rest-Client senden falsche content-type

Ich bin versucht, senden Sie eine Anfrage über einen wcf-client, um eine ColdFusion 9 service mit json. Jedoch wird der content-type der Anforderung für die xml.

Hier ist die service-Vertrag. Wie Sie sehen können wir specificy mit RequestFormat von json.

[ServiceContract(Name = "ServiceAgreementRequestService", Namespace = NetworkNamespaces.ServiceNamespace)]
public interface IServiceAgreementRequestService
{
[OperationContract]
[FaultContract(typeof(RequestFault))]
[WebInvoke(UriTemplate = "?method=CreateUser", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
CreateUserResponse CreateUser(CreateUserRequest request);
}

Ich habe auch versucht, die Anfrage.ContentType auf die Ausgehende Anfrage und das hat auch nicht funktioniert.

using (var context = this.GetServiceClient(clientId))
{
WebOperationContext.Current.OutgoingRequest.ContentType = "application/json; charset=UTF-8";
var request = new CreateUserRequest(user.Id, user.Person.FirstName, user.Person.LastName);
var response = context.Channel.CreateUser(request);
}

Hier ist die Anfrage, die gesendet wird,

POST http://somesite.domain.com/WebServices/ProviderService.cfc/?method=CreateUser HTTP/1.1
Content-Type: application/xml; charset=utf-8
VsDebuggerCausalityData: uIDPo7eh9U9jsBVLqVgGtqTK+eMBAAAAb++0xkOSQEmcAKZLgQEsp2/muY2ca6NJiul6pkAaWZwACQAA
Host: somehost.domain.com
Content-Length: 58
Expect: 100-continue
Accept-Encoding: gzip, deflate

{"UserId":4,"FirstName":"FirstName","LastName":"LastName"}

Wie bekomme ich diese auf die korrekte content-type?

EDIT:

Unter der Haube, die GetServiceClient(clientId) - Aufruf verwendet.servicemodel.clientbase und ChannelFactory zu erstellen, die den Kommunikationskanal. Der Endpunkt, wir rufen zu Veränderungen durch den client so haben wir einigen code, der auf der Oberseite von denen, dynamisch ändern Sie den Endpunkt.

Paar mehr Infos. Wir haben zwei Anwendungen : die eine ist eine .net-MVC-4-Webanwendung zum hosten der client-app und einer ist eine .net-WCF-Server-Anwendung, host-backend-services. Ich kann rufen, um den ColdFusion-app erfolgreich von der web-Anwendung, aber nicht die wcf-Server-Anwendung. Beide nutzen die gleiche code-Basis, um den ausgehenden Anruf.

Soweit ich sagen kann, die config ist die gleiche für beide.

<system.serviceModel>
<endpointBehaviors>
<behavior name="WcfRestBehavior">
<webHttp />
</behavior>

<client>
<endpoint name="ServiceAgreementRequestService" address="http://PLACEHOLDER/" binding="webHttpBinding" behaviorConfiguration="WcfRestBehavior" contract="IServiceAgreementRequestService"/>
  • Können Sie nach dem code, auf, wie die Anfrage gesendet wird? Das setzen des content-type für json die ausgehende Antwort in den Dienst zurück den CreateUserResponse Objekt im json-format.
  • Das zweite code-snippet hat den code für das senden der Anfrage. Dazu nutzt das System.ServiceModel zu erstellen, die IClientChannel, die verwendet wird, um die Anfrage zu senden. All die Arbeit, die getan wird, zu erstellen und senden Sie die Anfrage erfolgt von WCF.
  • Sind Sie versuchen, führen Sie eine REST-Anforderung. Tut GetServiceClient besteht in der proxy generiert aus wsdl. Wenn Sie es sind, dann denke ich, dass Sie versuchen, den Dienst aufzurufen mit SEIFE. Um zum aufrufen des WCF service in Erholsamer Weise müssten Sie HttpWebRequest-Klasse
  • Bitte sehen Sie die untenstehenden code-Beispiel, um den Zugriff auf einen RESTful web service.
  • Die folgenden Spuren zeigen, in WCF : Gesendete Nachricht Über Kanal -, Standard-Content-type-mapper ausgewählt, die Anfrage format 'xml', da der content-Typ 'text/html'
  • Wir verwenden Sie nicht den proxy generierten code. Wir erstellten impelemented unserer (gleichen Prinzipien, nur für uns gebaut framework). Wir ursprünglich eingeführt, den Dienst mit Seife, dann schaltet doch auf Ruhe gehofft, wir könnten das tun, einfach durch die Dekoration des Vertrages und die änderung der config. Dies funktioniert in manchen scenariors (Aufruf von web-Projekt), aber nicht aus dem WCF-server-Projekt.

InformationsquelleAutor user1759444 | 2012-10-19
Schreibe einen Kommentar