首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从OperationContext检索方法名和参数类型

从OperationContext检索方法名和参数类型
EN

Stack Overflow用户
提问于 2014-03-07 17:22:53
回答 1查看 1.5K关注 0票数 0

若要自定义WCF服务器中的授权,我将重写ServiceAuthorizationManager.CheckAccessCore().。在它中,我需要找到客户端使用OperationContext调用的方法。我在这篇优秀的文章中找到了部分解决方案:WCF: Retrieving MethodInfo from OperationContext

我的案例(简化)如下:

代码语言:javascript
复制
[ServiceContract]
public interface IMyService
{
    [OperationContract]
    void Hello(string name);
}

public Class MyService : IMyService
{
    // this method is not part of service contract
    public void Hello()
    {
        Console.WriteLine("Hello World!");
    }

    public void Hello(string name)
    {
        Console.WriteLine(string.Format("Hello {0}!", name);
    }
}

从上面的帖子获取MethodInfo的代码是:

代码语言:javascript
复制
string action = operationContext.IncomingMessageHeaders.Action;
DispatchOperation operation = 
    operationContext.EndpointDispatcher.DispatchRuntime.Operations.FirstOrDefault(o =>
        o.Action == action);

Type hostType = operationContext.Host.Description.ServiceType;
MethodInfo method = hostType.GetMethod(operation.Name);

当调用Hello(“杰克”)时,operationContext.IncomingMessageHeaders.Action提供方法名"Hello",而我还需要参数类型来获得正确的方法。(hostType.GetMethod(operation.Name)抛出一个AmbiguousMatchException)

我可以从OperationContext获得参数类型吗?

EN

回答 1

Stack Overflow用户

发布于 2014-03-07 19:05:16

在WCF中,继承的概念仅限于接口,在WCF中不能在服务类级别使用继承的概念。请参阅http://www.codeproject.com/Questions/302481/WCF-Service-Inharitance

  1. WCF甚至不允许直接重载函数,因此您可以很高兴地依赖Action属性,而不必担心方法/函数参数。即使您希望在服务中使用名称相同的函数,也需要使用"OperationContract“的Action /属性给出一个新的名称,将其公开给客户端。希望这能帮助你解决你的困惑。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22256638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档