我是WCF的新手;截至目前,我的WCF项目引用了一个包含许多公共类的DLL库。
我使用简单的接口类和实现接口的.SVC文件创建了一个.net 4.0 WCF项目。我没有看到 app.config 的任何部分或我可用于限制共享对象的任何其他内容。
如何限制WCF服务,以便WCF客户端只能使用某些公共类?或者这可以不做?
我正在尝试通过WCF服务公开一些函数+类供一些客户端使用,但这些类存储在这个DLL中。我不想共享dll中的所有类,只是一个子集。
我知道这听起来很愚蠢......但不知怎的,这个问题就消失了。我不确定是重新启动还是不重启,但我不再遇到任何问题了。
但我确实学到了一些关于WCF的知识;某篇文章强调,一个好的做法是超越界面和.SVC设计,实际上使用不同的程序集来跟踪关注点模式的分离。
答案 0 :(得分:1)
对你的问题的简短回答是
1)您可以控制通过端点公开的内容
2)您使用授权在服务方法实现中加入了进一步的限制 (用户执行的操作记录)
从MSDN这篇文章中读到了很长的答案,它解释了你的问题以及许多类似的问题,例如
任何客户都可以拨打该服务,或者您想控制谁可以呼叫 服务?
任何客户都可以调用该服务的任何方法吗? 想控制哪些客户可以调用哪些方法?
任何客户端都可以执行方法中的所有代码,或者您想要控制什么 客户端可以执行什么代码?
更新:来自您的更新
您需要在dll中分离合同,然后与客户端和服务共享该dll。 客户端无法访问您的实施,只能访问合同。
答案 1 :(得分:0)
假设您有一个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中看到任何内容,因为它由服务包装。