【发布时间】:2011-12-13 15:21:23
【问题描述】:
我需要创建一个应该从 javascript 调用的 wcf 服务。服务定义如下:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class ClientRequestService : IClientRequestService
{
[WebGet]
[ApplyProxyDataContractResolver]
public ResponseData ProcessClientRequest(String pageId)
{
...
}
}
这个方法应该返回一个我在编译时不知道其类型的对象。所以当它被调用时,我得到以下异常:
不应使用数据合同名称 ... 键入 ...。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。
我创建了自定义 DataContractResolver 并创建了一个实现接口 IOperationBehavior 的属性,以便将我的自定义 DataContractResolver 附加到我的服务。
public class ApplyProxyDataContractResolverAttribute : Attribute, IOperationBehavior
{
public void ApplyDispatchBehavior(OperationDescription description, DispatchOperation dispatch)
{
var dataContractSerializerOperationBehavior =
description.Behaviors.Find<DataContractSerializerOperationBehavior>();
dataContractSerializerOperationBehavior.DataContractResolver = new ProxyDataContractResolver();
}
}
ApplyDispatchBehavior 方法被成功调用,但我的自定义 DataContractResolver 的方法从未被调用,我得到了同样的异常。
我尝试使用 ServiceRoute 类或使用 svc 文件注册我的服务 - 无论如何它都不起作用。
【问题讨论】:
-
您遵循了哪些文档来获得此解决方案?
-
我遇到了同样的问题。有人回答了吗?