首页 > 解决方案 > 将命名空间添加到元素并在没有别名的情况下进行序列化

问题描述

我想将命名空间设置为包装器。但不是用别名序列化它,我需要它在包装元素本身上。

我得到的是以下

<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>

这可能吗?

标签: c#xmlwcf

解决方案


第一张图片指定了 ServiceContract 的命名空间,要指定你的 body 的命名空间,你可以尝试消息契约。但是您应该注意,返回的类型也应该具有 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();
        }

结果。 在此处输入图像描述

有关详细信息,请参阅https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/using-message-contracts


推荐阅读