Как ограничить публичный класс в WCF? - PullRequest
1 голос
/ 21 ноября 2011

Я новичок в WCF;на данный момент мой проект WCF ссылается на библиотеку DLL, которая содержит много открытых классов.

Я создал WCF-проект .net 4.0 с классом простого интерфейса и файлом .SVC, который реализует интерфейс.Я не вижу ни одной части app.config или чего-либо еще, что я мог бы использовать для ограничения общих объектов.

Как я могу ограничить службу WCF, чтобы только определенные публичные классыможет быть поглощен клиентом WCF?Или это не может быть сделано?

Обновление: добавлено мое намерение ниже.

Я пытаюсь представить некоторые функции + классы через службу WCF для использования некоторыми клиентами, но классыхранится в этой DLL.Я не хочу делиться всеми классами в DLL, но только подмножество.

Обновление 2: проблема решена

Я знаю, что это будет звучать глупо ... но проблема как-то исчезла.Я не уверен, что перезапуск сделал это или нет, но у меня больше нет таких проблем.

Но я немного узнал о WCF;в какой-то статье где-то подчеркивалось, что хорошей практикой является выход за пределы интерфейса и дизайна .SVC, а также использование различных сборок для следования шаблону разделения задач.

Ответы [ 2 ]

1 голос
/ 21 ноября 2011

Короткий ответ на ваш вопрос

1) Вы либо контролируете то, что выставляете через свои конечные точки

2) Вы вводите дополнительные ограничения в реализацию метода обслуживания, используя Авторизацию (Какие операции вошли в систему пользователь выполняет)

Длинный ответ читайте в этой статье MSDN , он объясняет ваш вопрос и множество подобных вопросов, например

Может ли любой клиент позвонить в службу или вы хотите контролировать, кто может звонить сервис?

Может ли любой клиент вызвать любой метод службы или вы хотите контролировать, какие клиенты могут вызывать какими методами?

Может ли любой клиент выполнить весь код метода или вы хотите контролировать, что какой код клиенты могут выполнить?

Обновление: из вашего обновления

Вам необходимо разделить ваши контракты в DLL, а затем поделиться этим DLL с клиентом и сервисом. клиент не будет иметь доступа к вашей реализации, а только к контрактам.

0 голосов
/ 21 ноября 2011

Скажем, у вас есть 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, потому что она обернутауслуга.

...