I want my WCF response to have a response element with two namespaces using DataContracts, but I can't get it to work. This is what I would like the response to be:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <s:Header /> <s:Body> <ns2:TestReply xmlns="http://www.test.org/test/2007/00" xmlns:ns2="http://www.test2.org/test2/types"> <ns2:Result> <ns2:ActionSuccessful>true</ns2:ActionSuccessful> </ns2:Result> <ns2:ResultData> <ns2:Name>Maikel Willemse</ns2:Name> </ns2:ResultData> </ns2:TestReply> </s:Body> </s:Envelope>
This is the response I get (when testing with the WCF Test Client):
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> <s:Header /> <s:Body> <GetDataResponse xmlns="http://www.test.org/test/2007/00"> <TestReply xmlns:a="http://www.test2.org/test2/types" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <a:Result> <a:ActionSuccessful>true</a:ActionSuccessful> </a:Result> <a:ResultData> <a:Name>Maikel Willemse</a:Name> </a:ResultData> </TestReply> </GetDataResponse> </s:Body> </s:Envelope>
My service interface looks like this:
[ServiceContract(Namespace = "http://www.test.org/test/2007/00")] public interface IService1 { [OperationContract] [return: MessageParameter(Name = "TestReply")] GetDataResponse GetData(string name); }
The service class:
public class Service1 : IService1 { public GetDataResponse GetData(string name) { return new GetDataResponse { Result = new Result {ActionSuccessful = true}, ResultData = new ResultData {Name = name} }; } }
And the DataContract classes are:
[DataContract(Namespace = "http://www.test2.org/test2/types")] public class GetDataResponse { [DataMember(Name = "Result")] public Result Result { get; set; } [DataMember(Name = "ResultData")] public ResultData ResultData { get; set; } } [DataContract(Namespace = "http://www.test2.org/test2/types")] public class Result { [DataMember(Name = "ActionSuccessful")] public bool ActionSuccessful { get; set; } } [DataContract(Namespace = "http://www.test2.org/test2/types")] public class ResultData { [DataMember(Name = "Name")] public string Name { get; set; } }
The target framework of my WCF project is .NET 4. The namespace prefixes do not have to be the same. How can I get the response in the format I want?