我正在遵循一种模式,该模式具有 WCF 服务的请求和响应对象。我有多个具有相同返回类型和名称的请求对象。任何帮助将不胜感激。
我收到以下异常:
可能由 IncludeExceptionDetailInFaults=true 创建的 ExceptionDetail,其值为: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”。我想尝试找到解决此问题的方法,同时仍然为该属性使用相同的名称。
下面列出了导致问题的类:
检索部门请求:
[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; }
}
检索用户请求:
[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; }
}
服务:
[OperationContract]
[FaultContract(typeof(ServiceFault))]
RetrieveDepartmentsResponse RetrieveDepartments(RetrieveDepartmentsRequest request);
[OperationContract]
[FaultContract(typeof(ServiceFault))]
RetrieveUsersResponse RetrieveUsers(RetrieveUsersRequest request);