如何向WCF服务中的所有DataContracts添加标头/数据集?

时间:2011-03-17 08:55:13

标签: wcf

我希望扩展现有服务并为每次调用添加授权。我遇到的问题是我不知道如何以最好的方式做到这一点。我需要做的是发送调用WCF服务的模块的名称。我已经发送了服务的用户名和密码,现在我需要使用调用服务的模块的名称来扩展它。这是因为我们可能允许用户打开模块并显示来自另一个模块的数据,而不是来自第三个模块。

如果我们使用了消息合约,我只需为此添加一个MessageHeader,并在创建请求时设置该标头。遗憾的是,这不是DataContracts的选项,所以我考虑了以下两种选择。

在Order = 1000或类似的基类中添加DataMember。我不知道如果我们之前添加另一个DataMember会发生什么呢?

为模块名称创建属性,并在传输中设置标题。虽然不是很喜欢这个。这很抽象,很难理解。

哪一个是最不邪恶的,还是你有更好的建议?

编辑1:问题不在于如何向服务发送标头问题是如何将具有特定值的标头发送到服务器。在消息检查器中,我只能使用message.GetBody<DataContract>();创建通用实例,这意味着我必须知道我不知道如何的类型。

编辑2:这里的问题是,在我们的应用程序中,我们希望根据调用的位置限制对调用的访问,因此我需要传递此信息。假设我从FindUserModule调用MyService,然后我需要在头文件中添加该模块的id,以便AuthorizationManager可以检查该用户是否真的应该被授权。这是由于许多模块使用了服务调用。

1 个答案:

答案 0 :(得分:1)

custom message inspector中将其处理为SOAP标头。