我正在编写一个拥有移动客户端的WCF REST服务 移动客户端使用沿OAuth线的“authToken”来表示用户的身份 authToken是一个字符串参数,目前被传递给(几乎)服务中的每个方法。
我想做的是写一些类似于MVC ActionFilter的东西 - 它为每个方法运行并执行authToken处理:验证令牌,查找相关帐户并返回Account实例对象 - 查找失败意味着返回错误,甚至不调用我的方法。
我发现these two个问题类似于我想要做的事情,但看起来棘手的部分是以某种方式引入帐户实例 ?我可以很高兴地创建我的[AuthOperation]属性来实现IOperationBehavior接口,但我无法弄清楚我需要做什么才能引入我的新帐户实例。
public object Invoke(object instance, object[] inputs, out object[] outputs)
{
Account = new Account(_context);
if (!Account.LoadByAuthToken(((string)inputs[0]).FromEncodedString()))
{
outputs = new object[0];
return new ErrorResponse
{
Code = ResponseCode.Exception.ToString(),
DebugMessage = MyStrings.AuthToken_NotFound
};
}
如何将我的帐户实例传递给调用的方法?
object result = this._originalInvoker.Invoke(instance, IntroduceAccount(inputs,Account), out outputs);
return result;
}
最终我想要的是
public MyResponse GetContacts(string authToken)
在服务中公开,但
public MyResponse GetContacts(Account acct)
或
public MyResponse GetContacts(Account acct, string authToken)
实际在服务器上实现 - 并具有authToken - >帐户转换由“操作过滤器”处理。
如果答案是“不要使用WCF,就这样做......”,只要提出的其他内容也符合我的其他要求,我甚至会感到高兴。
答案 0 :(得分:1)
答案 1 :(得分:0)
事实证明,我真的很愚蠢,而且(几乎)实现我的目标实际上相当简单。
在上面的(Invoke)方法中,您可以访问正在调用的实例....所以......
var wcfAccountRequired = instance as IWcfAccountRequired;
if (wcfAccountRequired != null)
{
(wcfAccountRequired).Account = Account;
}
...我只是确保(实例)正在实现特定接口并在其上分配Account属性。如果我没有成功检索帐户,我只能返回错误而不会调用任何内容。
不完美,但简洁地解决了我的问题。