我有一个带客户端应用程序的WCF服务。我对客户端和服务器实现都有完全的控制权。我在WCF协定中有数百个方法,这些方法需要客户端提供的一条信息。有没有一种方法可以在每次调用服务时从客户端发送特定的数据,而不是修改数百个方法,可能是在通道中的某个位置?
也许当客户端在进行调用之前设置代理时,它可以将此数据存储在代理的内部属性中的某个地方...然后,数据将被发送到服务器,我可以从服务方法中检查OperationContext或其他内存块,以获取此数据并使用它?
有什么想法吗?
我有一个带客户端应用程序的WCF服务。我对客户端和服务器实现都有完全的控制权。我在WCF协定中有数百个方法,这些方法需要客户端提供的一条信息。有没有一种方法可以在每次调用服务时从客户端发送特定的数据,而不是修改数百个方法,可能是在通道中的某个位置?
也许当客户端在进行调用之前设置代理时,它可以将此数据存储在代理的内部属性中的某个地方...然后,数据将被发送到服务器,我可以从服务方法中检查OperationContext或其他内存块,以获取此数据并使用它?
有什么想法吗?
3条答案
按热度按时间btxsgosb1#
这听起来像你想要的东西像SOAP的Web服务的头部。我不是一个WCFMaven,但这个looks like the WCF equivalent。
0lvr5msh2#
实际上这并不难,我能想到的最好方法是编写一个IClientMessageInspector,它在其BeforeSendRequest方法中将SOAP头添加到Message.Headers中。
参见例如http://weblogs.asp.net/paolopia/archive/2007/08/23/writing-a-wcf-message-inspector.aspx
flvtvl503#
你不能把这件事做得这么简单。这需要花些功夫。
SOAP头确实是向服务传递带外数据和/或从服务传递带外数据的最佳方式,但是您已经定义了契约,添加头将改变契约。
我认为您必须开始使用消息契约。
原件:
使用消息协定: