Web服务包装器上的公共/内部可访问性混淆?

时间:2009-07-30 15:46:29

标签: c# web-services

我写了一个简单的Web服务,将word doc转换为pdf。作为Convert方法的一部分,它接收一个自定义设置对象,其中包含有关文档路径等的信息以及数据表,呃数据。

我现在正在创建一个“帮助程序”类来使用Web服务,以消除其他开发人员的麻烦,并且如果说实话,则控制Web服务的使用者。我不希望任何人潜入网络服务(甚至是开发人员)并且不知不觉地使用它。

让我们调用我的Web服务WordToPdfWS和我的助手类WordToPdfHelper(呃); WordToPDFHelper有一个WordToPdfWS的Web引用,可以调用转换(设置)方法没问题(它甚至可以工作!)。

当我创建一个使用者/测试应用程序并设置对WordToPdfHelper的引用时,我发现(正如预期的那样)我可以创建WordToPdfHelper对象并按预期使用它。 但是,在我的消费者中,我也可以创建我的网络服务(WordToPdfWS)并直接从我的消费者那里调用它!

这绝对不是我想要的(例如任何汤姆,迪克和哈丽特开发者都能够得到它),无论如何都要阻止它吗?

亲切的问候,

Mike K。

2 个答案:

答案 0 :(得分:0)

我的猜测是,你的助手上的webservice实例被声明为Public。你希望它是私人的或内部的。

答案 1 :(得分:0)

有趣的问题。理想的情况是限制对lib中WS代理存根的访问,但也可以使用自动生成的代码。自动生成的代码恰好将其输出生成为公共,并且更新该代码文件是不可取的。

我相信您可以通过techniques for code access security找到解决方案。您可以使用Framework的跨程序集调用结构来限制代码访问。

实现代码访问安全性,无论是在类还是方法级别,都可以使用镜像自动生成的存根类的partial class来实现(通过命名空间和名称)。

您的存根类已经是一个部分类(假设它是使用Visual Studio生成的)。创建一个单独的部分类文件并使用代码访问安全性理论上可以提供您正在寻求的包装器限制,并与内部Web服务存根保持同步,同时避免未来更新。

我没试过,所以你的里程可能会有所不同。