- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在遵循一种模式,该模式具有用于 WCF 服务的请求和响应的对象。我有多个具有相同返回类型和名称的请求对象。任何帮助将不胜感激。
我收到以下异常:
An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: System.InvalidOperationException: An exception was thrown in a call to a WSDL export extension: System.ServiceModel.Description.DataContractSerializerOperationBehavior contract: http://tempuri.org/:IService ----> System.InvalidOperationException: The Service.ServiceContract.IService.RetrieveUsers operation references a message element [http://tempuri.org/:WeekEndingId] that has already been exported from the Service.ServiceContract.IService.RetrieveDepartments operation. You can change the name of one of the operations by changing the method name or using the Name property of OperationContractAttribute. Alternatively, you can control the element name in greater detail using the MessageContract programming model.
编辑:我在属性上使用了 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; }
}
I服务:
[OperationContract]
[FaultContract(typeof(ServiceFault))]
RetrieveDepartmentsResponse RetrieveDepartments(RetrieveDepartmentsRequest request);
[OperationContract]
[FaultContract(typeof(ServiceFault))]
RetrieveUsersResponse RetrieveUsers(RetrieveUsersRequest request);
最佳答案
我认为这是一种类型冲突。在那里面:WeekEndingId 在 RetrieveDepartmentsRequest 中是一个整数,在 RetrieveUsersRequest 中是一个小数。使用 MessageBodyMember 的 Name 属性来解决冲突。或者只需更改 RetrieveUsersRequest 中的属性名称即可。
或者更好:WeekEndingId 不应该总是一个 int 吗?
关于c# - 具有相同返回类型和名称的 MessageBodyMembers 导致异常 - 元素已导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15120613/
我是 WCF 新手,有一个关于 [MessageBodyMember] 属性的基本问题。 据我所知,对于 [DataMember] 属性,除非您设置 IsRequired=true,否则获取和反序列化
我必须为给定的客户端实现 WCF 服务,因此 namespace 和契约(Contract)不是我定义的。问题是,当我将复杂类型用作 MessageBodyMember 时,在服务器端,给定成员在我的
我不明白什么时候应该放 [MessageHeader] 而不是 [MessageBodyMember]? 我有read它用于符合某些协议(protocol)(如 Soap),但它最终会改变什么? 最佳
我正在遵循一种模式,该模式具有用于 WCF 服务的请求和响应的对象。我有多个具有相同返回类型和名称的请求对象。任何帮助将不胜感激。 我收到以下异常: An ExceptionDetail, likel
我有一个包含一个BodyMember的MessageContract。 当我尝试发送该消息契约(Contract)而未初始化该BodyMember时,我得到了以下异常(exception): 发生Sy
我们有一个包含以下契约的 WCF 设置: [ServiceContract( Namespace = Constants.Namespaces.HL7Namespace, Na
我可以在 WCF 中使用递归 MessageContract 吗?例如: 我需要发布一些参数,其中一个参数是一个文件流数组。这是我的操作合约: DomainResult AddSomethingNew
我需要所有 3 个项目都在 Body 中,以便客户端可以使用它们,他不能修改 Header 中的数据(首先在 MessageHeader 中的前 2 个): [MessageContract] pub
我是一名优秀的程序员,十分优秀!