繁体   English   中英

将令牌传递给WCF服务

[英]Passing a token to WCF service

我真的需要知道如何在不向我的所有合同添加额外参数的情况下将令牌传递给WCF服务,某些值就像一个数字,以便我以后可以在我的服务上使用它。

一种方法是使用WCFExtras并将值放在soap标头中。

[SoapHeader("MyToken", typeof(Header), Direction = SoapHeaderDirection.In)]
[OperationContract]
string In();

这将使得WSDL中的令牌显而易见,以防服务操作需要它。

另一种选择是使用HTTP标头 ,您可以在不使用方法的情况下进行操作。 这样做的缺点是令牌没有出现在WSDL中,因此WSDL不再完整地描述该服务。

使用自定义标头解决此问题。

您可以为客户端分配自定义标头,如下所示:

            IContextChannel contextChannel = (IContextChannel)myServiceProxy;
            using (OperationContextScope scope = new OperationContextScope(contextChannel))
            {
                MessageHeader header = MessageHeader.CreateHeader("PlayerId", "", _playerId);
                OperationContext.Current.OutgoingMessageHeaders.Add(header);
                act(service);
            }

在服务方面,您可以获得此值:

    private long ExtractPlayerIdFromHeader()
    {
        try
        {
            var opContext = OperationContext.Current;
            var requestContext = opContext.RequestContext;
            var headers = requestContext.RequestMessage.Headers;
            int headerIndex = headers.FindHeader("PlayerId", "");
            long playerId = headers.GetHeader<long>(headerIndex);
            return playerId;
        }
        catch (Exception ex)
        {
            this.Log.Error("Exception thrown when extracting the player id from the header", ex);
            throw;
        }
    }

另请参阅此问题 ,了解如何通过配置文件设置自定义标头。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM