情况:
我有这份服务合同:
[ServiceContract(ProtectionLevel = ProtectionLevel.EncryptAndSign)]
public interface IMyServiceContract
{
//This WORKS! Because GUIDWRAPPER and Group have a MessageContract
[OperationContract]
Group GetA(GUIDWRAPPER id);
//This DOES NOT WORK, because int has no MessageContract!
[OperationContract]
Group GetB(int id);
}
在这种情况下,Group有一个消息合同,此消息合同从服务合同继承安全级别。小组看起来像这样:
[MessageContract]
public class Group: Entity, ICloneable
{
public Group(){}
[MessageBodyMember]
public String Name {get;set;}
}
GUIDWRAPPER类型是Guid的一个简单包装器,它也有一个消息合同:
[MessageContract]
public class GUIDWRAPPER
{
public GUIDWRAPPER() { }
public GUIDWRAPPER(Guid id)
{
Id = id;
}
[MessageBodyMember]
public Guid Id { get; set; }
}
问题:
当我启动我的服务主机时,它会抱怨操作“GetB”无效,因为返回类型“Group”有一个消息契约而值类型“int”没有。这可能是一个安全漏洞。
“GetA”没有问题,因为返回类型和参数类型都有消息合同。
可能的解决方案:
1。)我可以包装所有值类型,就像我使用GUIDWRAPPER类一样,并给它们一个消息合同。但那对我来说感觉很脏,很臭。
2。)删除所有邮件合同,然后使用数据合同。然后我失去控制权,发送和接收哪些数据。
我的问题:
是否可以将简单的值类型(在本例中为int)传递给具有消息协定返回类型的服务操作? (在这种情况下就像GetB一样)
操作合同是否有允许的属性?