MessageBodyMembers具有相同的返回类型和名称导致异常 - 元素已导出

Bry*_*yan 5 .net c# wcf

我遵循的模式具有WCF服务的请求和响应的对象.我有多个请求对象具有相同的返回类型和名称.任何帮助将不胜感激.

我收到以下异常:

一个ExceptionDetail,可能是由IncludeExceptionDetailInFaults =真,其价值创造的信息:System.InvalidOperationException:一个例外是在呼叫发出到一个WSDL出口扩展:System.ServiceModel.Description.DataContractSerializerOperationBehavior合同:http://tempuri.org/:IService ----> System.InvalidOperationException:Service.ServiceContract.IService.RetrieveUsers操作引用已从Service.ServiceContract.IService.RetrieveDepartments操作导出的消息元素[http://tempuri.org/:WeekEndingId].您可以通过更改方法名称或使用OperationContractAttribute的Name属性来更改其中一个操作的名称.或者,您可以使用MessageContract编程模型更详细地控制元素名称.

编辑:我在属性上使用了Name属性为它们指定了唯一的名称,这确实解决了问题,但我们需要为所有请求使用名称"WeekEndingId".我想尝试找到一个解决方案,同时仍然使用相同的名称的属性.

下面列出了导致问题的类:

RetrieveDepartmentsRequest:

[MessageContract(WrapperName = "RetrieveDepartmentsRequest", WrapperNamespace = "http://Service.V1")]
    public class RetrieveDepartmentsRequest
    {
        [MessageBodyMember(Order = 0)]
        public int WeekEndingId { get; set; }

        [MessageBodyMember(Order = 1)]
        public string UserId { get; set; }

        [MessageBodyMember(Order = 2)]
        public string MachineName { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

RetrieveUsersRequest:

[MessageContract(WrapperName = "RetrieveUsersRequest", WrapperNamespace = "http://Service.V1")]
public class RetrieveUsersRequest
{
    [MessageBodyMember(Order = 0)]
    public int WeekEndingId { get; set; }

    [MessageBodyMember(Order = 1)]
    public string UserId { get; set; }

    [MessageBodyMember(Order = 2)]
    public string MachineName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

IService:

[OperationContract]
[FaultContract(typeof(ServiceFault))]
RetrieveDepartmentsResponse RetrieveDepartments(RetrieveDepartmentsRequest request);

[OperationContract]
[FaultContract(typeof(ServiceFault))]
RetrieveUsersResponse RetrieveUsers(RetrieveUsersRequest request);
Run Code Online (Sandbox Code Playgroud)

小智 2

我相信这是类型冲突。其中: WeekEndingId 是 RetrieveDepartmentsRequest 中的 int 和 RetrieveUsersRequest 中的小数。使用 MessageBodyMember 的 Name 属性来解决冲突。或者只需更改 RetrieveUsersRequest 中的属性名称。

或者更好:WeekEndingId 不应该总是 int 吗?