如何限制WCF中的公共类
本文关键字:何限制 WCF | 更新日期: 2023-09-27 18:15:21
我是WCF的新手;到目前为止,我的WCF项目引用了一个包含许多公共类的DLL库。
我创建了一个。net 4.0 WCF项目,其中包含一个简单的接口类和一个实现接口的。svc文件。我没有看到应用程序的任何部分。config或任何我可以用来限制共享对象的东西。
如何限制WCF服务,使WCF客户端只能使用某些公共类?或者这是不可能做到的?
更新:在下面添加了我的意图。
我试图通过WCF服务暴露一些函数+类,供一些客户端使用,但这些类存储在这个DLL中。我不想共享dll中的所有类,而只想共享一个子集。
更新2:问题解决
我知道这听起来很傻…但不知何故,这个问题消失了。我不确定是不是重新启动了,但我不再有任何这些问题了。
但是我确实学到了一些关于WCF的知识;一些文章强调,一个好的实践是超越接口和. svc设计,实际上使用不同的程序集来遵循关注点分离模式。
对你的问题的简短回答是
1)你要么控制你通过你的端点公开的内容
2)您使用授权在您的服务方法实现中添加了进一步的限制(登录用户执行哪些操作)
长答案是阅读这篇来自MSDN的文章,它解释了你的问题和许多类似的问题eg
任何客户端都可以调用服务吗?或者你想控制谁可以调用服务吗?
任何客户端可以调用服务的任何方法吗想要控制哪些客户端可以调用哪些方法?
任何客户端都可以执行方法中的所有代码吗?或者你想控制什么客户端可以执行哪些代码?
Update: from your Update
你需要在一个dll中分离你的契约,然后与客户端和服务共享这个dll。客户端不能访问你的实现,只能访问契约。
假设你有一个DLL,它有几十个方法,你只想公开其中的6个。
您开发了一个具有六个方法的WCF服务,并且该服务的实现引用了DLL。
在您的服务实现中,您可能会有这样的内容:
public class MyService : IService
{
MyDll myDll = new MyDll();
public void Method1()
{
myDll.Method1();
}
public string Method2(int someValue)
{
return myDll.Method2(someValue);
}
// and so on
}
接口(IMyService)可能看起来像这样:
[ServiceContract]
public interface IMyService
{
[OperationContract]
void Method1();
[OperationContract]
string Method2(int someValue);
// and so on
}
基本思想是WCF服务充当底层DLL的包装器,并且只公开接口中指定的那些方法/类。
当您通过SvcUtil生成代理时,您将只看到服务中指定的内容,而不是底层DLL中的所有内容-事实上,您不应该看到底层DLL中的任何内容,因为它被服务包装。