0

我最近遇到了一个让我陷入困境的问题。

我在 WCF 中实现了一个自定义 AuthorizationManager,它首先必须按名称提取操作。WCF 服务通过 REST 和 SOAP 端点公开,因此我必须检查多个位置以找到继续通过身份验证过程所需的信息。

一切都很好,我有大约 15-20 个服务运行良好,但我最近遇到了一个问题,我无法使用我的正常方法提取操作名称。

拉取操作的代码如下:

public class AuthorizationManager : ServiceAuthorizationManager
{
    private ServiceEndpoint _endpoint { get; set; }

    public AuthorizationManager(ServiceEndpoint endpoint)
    {
        _endpoint = endpoint;
    }
    public override bool CheckAccess(OperationContext operationContext, ref Message message)
    {
        var buffer = message.CreateBufferedCopy(Int32.MaxValue);
        message = buffer.CreateMessage();
        var originalMessage = buffer.CreateMessage();


        /*Step 1 - Pull Operation*/
        string action = operationContext.IncomingMessageHeaders.Action ?? OperationContext.Current.IncomingMessageProperties["HttpOperationName"] as string;
        DispatchOperation operation = operationContext.EndpointDispatcher.DispatchRuntime.Operations.FirstOrDefault(o => o.Name == action || o.Action == action);
        Type hostType = operationContext.Host.Description.ServiceType;
        var operationInfo = hostType.GetMethod(operation.Name);


        /*Continue here using operationInfo - but operation is null*/

     }
}

这对于为 REST 和 SOAP 端点提取正确操作很有用,但现在该操作为空。

服务定义如下:

[ServiceContract]
public interface ICollectionService
{
      [OperationContract]
      [WebGet]
      CollectionResponse  GetCollection()
}

一切似乎都很标准,我只是不明白为什么这与我的其他服务有任何不同。

4

1 回答 1

0

我意识到我没有足够仔细地检查我的服务定义,它使用的是 [WebInvoke] 而不是 [WebGet]。这解决了它。

于 2013-04-02T03:12:00.733 回答