我遵循的模式具有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 吗?