如何限制WCF中的公共类?

时间:2011-11-21 09:30:59

标签: c# wcf public sharing

我是WCF的新手;截至目前,我的WCF项目引用了一个包含许多公共类的DLL库。

我使用简单的接口类和实现接口的.SVC文件创建了一个.net 4.0 WCF项目。我没有看到 app.config 的任何部分或我可用于限制共享对象的任何其他内容。

如何限制WCF服务,以便WCF客户端只能使用某些公共类?或者这可以不做?

更新:在下面添加了我的意图。

我正在尝试通过WCF服务公开一些函数+类供一些客户端使用,但这些类存储在这个DLL中。我不想共享dll中的所有类,只是一个子集。

更新2:问题已解决

我知道这听起来很愚蠢......但不知怎的,这个问题就消失了。我不确定是重新启动还是不重启,但我不再遇到任何问题了。

但我确实学到了一些关于WCF的知识;某篇文章强调,一个好的做法是超越界面和.SVC设计,实际上使用不同的程序集来跟踪关注点模式的分离。

2 个答案:

答案 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中看到任何内容,因为它由服务包装。