wcfクライアントを使用してjsonを使用してColdFusion9サービスにリクエストを送信しようとしています。ただし、リクエストのコンテンツタイプはxml用です。
これがサービス契約です。ご覧のとおり、特に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);
}
また、OutGoingリクエストに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を使用して通信チャネルを作成します。クライアントによって変更を呼び出すエンドポイント。その上に、エンドポイントを動的に変更するためのコードがあります。
いくつかのより多くの情報。2つのアプリケーションがあります。1つはクライアントアプリをホストする.netMVC4 Webアプリケーションで、もう1つはバックエンドサービスをホストする.netWCFサーバーアプリケーションです。WebアプリケーションからColdFusionアプリを正常に呼び出すことはできますが、wcfサーバーアプリケーションを呼び出すことはできません。これらは両方とも同じコードベースを使用して発信呼び出しを行います。
私が知る限り、構成は両方で同じです。
<system.serviceModel>
<endpointBehaviors>
<behavior name="WcfRestBehavior">
<webHttp />
</behavior>
<client>
<endpoint name="ServiceAgreementRequestService" address="http://PLACEHOLDER/" binding="webHttpBinding" behaviorConfiguration="WcfRestBehavior" contract="IServiceAgreementRequestService"/>