WCF:将值类型参数传递给返回消息协定的操作

时间:2017-01-28 10:34:18

标签: c# wcf soap value-type messagecontract

情况:

我有这份服务合同:

[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一样)

操作合同是否有允许的属性?

0 个答案:

没有答案