1

我创建了一个权限属性,并在我用 BLL 编写的方法中使用了它。如果我需要,它可以正常工作并且调试良好。但是当我在我的中使用相同的属性时,WCF layer它就会停止工作。没有给出任何错误,但没有检查权限,也没有调试。代码只是忽略了属性。

为了简单起见,我使用这种方法

我的 WCF 方法调用与 WCF 方法在同一类中定义的另一个方法,并且该子方法调用 BLL,并且该子方法具有权限属性。

但是没有用。请指导。

4

2 回答 2

3

PostSharp 是构建过程的一部分。我怀疑包含您的 WCF 服务的库没有运行 PostSharp 后编译过程,该过程将属性代码与您自己的代码交织在一起。如果它不是你的断点......等等。对于 PostSharp 代码将不起作用。

通常,后编译过程由位于开发 PC 系统托盘中的后台应用程序完成。但是可以禁用它。我不知道您是如何编译 WCF 服务库的。

您可以手动将 PostSharp 添加到您的项目中:

引用 PostSharp 文档:

  1. 使用文本编辑器打开项目文件(csproj、vbproj、...)。如果您的项目已在 Visual Studio 中加载,请打开解决方案资源管理器,右键单击项目名称,单击“卸载项目”,然后再次右键单击同一项目并单击“编辑”。

  2. 找到文件末尾附近的元素。例如,C# 2.0 项目应该以类似于以下的元素结束:

    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />

  3. 导入行之前,插入以下文本:

    <PropertyGroup><DontImportPostSharp>True</DontImportPostSharp></PropertyGroup>

  4. C#/VB 导入行之后,插入以下文本:

    <Import Project="....\第三方\PostSharp 2.0\PostSharp.targets" />

  5. 保存文件并重新加载项目。

  6. 编译。

如果您从 BLL 程序集中调用方法,请检查 PostSharp 后编译过程是否也正确运行。

于 2012-06-08T07:01:22.390 回答
0

我不知道 PostSharp 但是:

我的第一步是反射 P​​ostSharp 编织 IL 以查看生成的代码。看起来对吗?

我假设该方面着眼于一些安全上下文信息。如果上下文无效,您是否在忽略处理的方面有保护代码?Persmission 属性是否会在不告诉您的情况下处理此问题。

换句话说,Permission 属性是否设计为与 WCF 请求端点一起使用?

于 2012-06-08T06:28:35.353 回答