У меня есть DataContract:
[DataContract(Name = "Mission", Namespace = "http://www.company.com/namespace")]
public class Mission
{
//...
}
И контракт операции:
[ServiceContract]
public interface IMissionService: IClientChannel
{
[OperationContract]
MissionResponse Go(Mission Mission);
}
Когда я создаю клиента:
private IMissionService GetClient()
{
var binding = new BasicHttpBinding(BasicHttpSecurityMode.None);
var factory = new ChannelFactory<IMissionService>(binding,
new EndpointAddress(IntegrationTestsConfiguration.Url));
return factory.CreateChannel();
}
И вызываю запрос :
using var client = GetClient();
client.Open();
var response = client.Go(new Mission());
Мое xml сообщение выглядит следующим образом:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IMissionService/Go</Action>
</s:Header>
<s:Body>
<Go xmlns="http://tempuri.org/">
<Mission xmlns:d4p1="http://www.company.com/namespace" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<d4p1:Field1>ABC</d4p1:Field1>
<d4p1:Field2>ABC</d4p1:Field2>
//....
</Mission>
</Go>
</s:Body>
</s:Envelope>
Как принудительно задать пространство имен для типа Mission
(<d4p1:Mission>
)? Почему это не добавлено?
Я заметил, что DataContract
для root типа игнорируется. Имя элемента XML получается из имени параметра метода, а не Name
, установленного в DataContract
attr, установленного для типа Mission
.