Как установить пространство имен для параметра OperationContract - PullRequest
0 голосов
/ 31 января 2020

У меня есть 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...