我试图发送使用WCF客户端,以一个ColdFusion 9服务使用JSON的请求。 然而,该内容类型的请求的是XML。
这里是服务合同。 正如你可以看到我们specificy使用JSON的RequestFormat。
[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);
}
我也曾尝试设置了发出的请求的Request.ContentType,这也没有工作。
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);
}
这里是一个被发送的请求
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"}
我如何得到这个使用正确的内容类型?
编辑:
在内部,所述GetServiceClient(的clientId)调用使用system.servicemodel.clientbase和的ChannelFactory来创建通信信道。 我们调出由客户端更改终点,所以我们必须在这些基础上增加一些代码来动态改变了终点。
一些更多的信息。 我们有两个应用:一个是.NET MVC 4 Web应用程序托管的客户端应用程序,一个是.NET WCF服务器应用程序来承载后端服务。 我可以从Web应用程序成功地调出该ColdFusion的应用程序,而不是WCF服务器应用程序。 这些都使用相同的代码库,使呼出。
至于我可以告诉的配置是两个相同的。
<system.serviceModel>
<endpointBehaviors>
<behavior name="WcfRestBehavior">
<webHttp />
</behavior>
<client>
<endpoint name="ServiceAgreementRequestService" address="http://PLACEHOLDER/" binding="webHttpBinding" behaviorConfiguration="WcfRestBehavior" contract="IServiceAgreementRequestService"/>