![](/img/trans.png)
[英]“The type RoleProxy was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.” NHibernate
[英]WCF service throws “The type […] was not expected. Use the XmlInclude […]” even if XmlInclude is already being used
我有一个WCF服务(从代码开始),该服务使用服务定义中未定义的对象。 因此,我必须使用[XmlInclude]
属性使WCF理解如何对其进行序列化。 由于某种原因,这不起作用,WCF仍然抱怨(我使用跟踪发现了异常)我必须对已定义的类型使用[XmlInclude]
。
我在这里想念什么?
ServiceHost host = new ServiceHost(typeof(MyService), "http://localhost/myservice");
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy12;
host.Description.Behaviors.Add(smb);
host.Open();
[WebService(Namespace = "http://services.mysite.com/MyService")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
public class MyService : WebService, IMyService {
[WebMethod]
[XmlInclude(typeof(InnerObject))]
public MyReturnObject Test() {
return new MyReturnObject(new InnerObject());
}
}
[ServiceContract]
public interface IMyService {
[OperationContract, XmlSerializerFormat(Style = OperationFormatStyle.Document)]
MyReturnObject Test();
}
MyReturnObject
类包含一个通用对象,该对象可以包含我想要的任何对象。 在此示例中,我包括上面定义的InnerObject
类型,并且类型定义如下所示。
[KnownType(typeof(InnerObject))]
public class MyReturnObject {
public object Content { get; set; }
public MyReturnObject(object content) {
Content = content;
}
}
public class InnerObject {
public int Foo;
public string Bar;
// And some other properties
}
System.InvalidOperationException,mscorlib,版本= 4.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089
不应使用InnerObject类型。 使用XmlInclude或SoapInclude属性可以指定静态未知的类型。
您应该在wcf服务上使用[ServiceKnownType]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.