Добавить пространство имен к элементу и сериализовать без псевдонима - PullRequest
0 голосов
/ 12 марта 2019

Я хочу установить пространство имен для оболочки.Но вместо того, чтобы сериализовать его с псевдонимом, мне нужно, чтобы он был на самом элементе оболочки.

То, что я получаю, выглядит следующим образом

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:my-namepsace.com/asdf">
   <soapenv:Header/>
   <soapenv:Body>
     <urn:YVDMS_TASK>
        ...
     </urn:YVDMS_TASK>
   </soapenv:Body>
<soapenv:Envelope>

Но я хочу вот так:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
     <YVDMS_TASK xmlns="urn:my-namepsace.com/asdf">
        ...
     </YVDMS_TASK>
   </soapenv:Body>
<soapenv:Envelope>

Возможно ли это?

1 Ответ

0 голосов
/ 13 марта 2019

Первое изображение определяет пространство имен ServiceContract, чтобы указать пространство имен вашего тела, вы можете попробовать контракт сообщения. Но следует обратить внимание, что возвращаемый тип также должен иметь атрибут MessageContract.

Ниже мой код.

 [MessageContract(WrapperNamespace = "www.message.com")]

public class Employee
{
    [MessageBodyMember(Namespace = "www.message.com")]
    public string Id { get; set; }
    [MessageBodyMember(Namespace = "www.message.com")]
    public string Name { get; set; }
    [MessageBodyMember(Namespace = "www.message.com")]
    public string Department { get; set; }
    [MessageBodyMember(Namespace = "www.message.com")]
    public string Grade { get; set; }
}


[ServiceContract]
public interface IEmployeeService
{
   [OperationContract]
    Employee GetEmployee(Employee employee);
}

 public class EmployeeService : IEmployeeService
{
    public Employee GetEmployee(Employee employee)
    {
        return employee;
    }
}

Когда я вызываю службу у клиента

  using (ChannelFactory<IEmployeeService> ChannelFactory = new ChannelFactory<IEmployeeService>("emp"))
        {
            // ChannelFactory.Endpoint.EndpointBehaviors.Add(new MyEndpointBehavior());
            IEmployeeService employeeService = ChannelFactory.CreateChannel();
            employeeService.GetEmployee(new Employee() { Name = "abc", Department = "dep", Grade = "male", Id = "1er" });
            // List<Employee> list=  employeeService.GetList();
            Console.Read();
        }

Результат. enter image description here

Для получения дополнительной информации, пожалуйста, обратитесь к https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/using-message-contracts

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