我已经实现了一个wcf服务,并将使用TCP进行传输。我想知道,如何将安全令牌(在我们的情况下为guid)粘贴到对wcf服务的请求的标头中?任何人都可以帮助我或给我任何想法如何做到这一点?或者,如果有任何具体的概念我应该学习?
答案 0 :(得分:3)
操作上下文提供可用的传入和传出标头的集合 通过IncomingMessageHeaders和OutgoingMessageHeaders属性:
public sealed class OperationContext : ...
{
public MessageHeaders IncomingMessageHeaders {get;}
public MessageHeaders OutgoingMessageHeaders {get;}
//More members
}
每个集合都是MessageHeaders类型(即MessageHeader的集合 对象):
public sealed class MessageHeaders : ...
{
public void Add(MessageHeader header);
public T GetHeader<T>(int index);
public T GetHeader<T>(string name,string ns);
//More members
}
public abstract class MessageHeader
{...}
public class MessageHeader<T>
{
public MessageHeader();
public MessageHeader(T content);
public T Content {get;set;}
public MessageHeader GetUntypedHeader(string name,string ns);
//More members
}
您可以使用它将Guid
传递到邮件标题中。
//Client code:
MessageHeader<Guid> tokenHeader = new MessageHeader<Guid>(someGuid);
MyContractClient proxy = new MyContractClient();
using(OperationContextScope contextScope =
new OperationContextScope(proxy.InnerChannel))
{
OperationContext.Current.OutgoingMessageHeaders.Add(
tokenHeader .GetUntypedHeader("Guid","System"));
proxy.MyMethod();
}
proxy.Close();
答案 1 :(得分:0)
希望这会对你有所帮助。
如何:启用WCF身份验证服务http://msdn.microsoft.com/en-us/library/bb398990.aspx。
答案 2 :(得分:0)
在这里看一下这个链接MSDN它会告诉你如何格式化安全标题 Formatting Security Headers | Security Protocols此MSDN站点将说明您可以使用哪些类型的协议和标头内容。
这就是微软安全标题看起来像传递GUID
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><u:Timestamp u:Id="_0">
</u:Timestamp><o:UsernameToken u:Id="uuid-b96fbb3a-e646-4403-9473-2e5ffc733ff8-1">
</o:UsernameToken></o:Security>