在我开始提问之前,请先了解一些背景信息。我有通过jquery.ajax
调用的WCF服务。我可以在控制台窗口中看到并使用其他工具验证请求只发生一次。
在服务器端,我看到该方法完全触发了3次。怎么会发生这种情况?在我使用以下属性和签名
进行装饰的服务上[OperationContract]
[WebInvoke(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public ResponseEnvelope AddToCart(Order[] Order) //ResponseEnvelope
{
.....
}
有趣的是,当我将响应从ResponseEnvelope
更改为void
时,它可以正常工作。
我怀疑这可能与我的DataContracts
和对象层次结构有关,我现在正在测试它。
感谢任何帮助。
答案 0 :(得分:0)
我一直在度假但是这里是这个问题的答案,以防它帮助任何人下线。这个问题可能没有足够的信息来解决问题。
事实证明问题出在串行器内部。使用对象作为DataContract中的类型生成了一个我最终能够捕获的错误。错误信息实际上非常清楚如何解决问题,所以我将其留在那。
将任何静态未知的类型添加到已知类型列表中 - 例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。 在System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract,XmlWriterDelegator xmlWriter,Object obj,Boolean verifyKnownType,RuntimeTypeHandle declaredTypeHandle) 在System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.SerializeWithXsiType(XmlWriterDelegator xmlWriter,Object obj,RuntimeTypeHandle objectTypeHandle,Type objectType,Int32 declaredTypeID,RuntimeTypeHandle declaredTypeHandle,Type declaredType) ...