указатель на сервис из ServiceHost - PullRequest
1 голос
/ 22 июня 2010

У меня есть следующий код WCF:

ServiceHost host = null;

if (host == null)
    host = new ServiceHost(typeof(RadisService));

Как я могу получить указатель на мой RadisService, чтобы делать с ним звонки?

Ну, это действительно было в целях тестирования, нопожалуйста, позвольте мне задать вопрос в любом случае, в образовательных целях.Что произойдет, если моя служба работает на компьютере (используя хост с графическим интерфейсом), несколько клиентов с разных удаленных компьютеров подключаются к сервису и через графический интерфейс пользователя оставляют комментарии к моей службе.

Код моего сервиса выглядит следующим образомthis:

public class MyClass 
{ 
    [DataMember] 
    static Dictionary<String, Variable> m_Variables = new 
        Dictionary<String, Variable>();
    .... 
}

[ServiceContract] 
public interface IMyClassService 
{ 
    [OperationContract] 
    bool AddVariable(String name, Variable value); 

    [OperationContract] 
    bool RemoveVariable(String name);

    [OperationContract] 
    bool GetVariable(string name, Variable variable); 

    [OperationContract] List<String> GetVariableDetails();
    ... 
}

Так что из моего графического интерфейса хоста службы я хотел бы иметь возможность получить доступ к GetVariableDetails () и просмотреть все комментарии, добавленные от всех различных клиентов на данный момент.Как бы я этого достиг?

Ответы [ 2 ]

2 голосов
/ 25 июня 2010

Если вы делаете свой сервис одноразовым, вы можете создать экземпляр сервиса и передать его ServiceHost:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class CalculatorService: ICalculatorService
{

....

CalculatorService service = new CalculatorService();
ServiceHost serviceHost = new ServiceHost(service, baseAddress);
0 голосов
/ 22 июня 2010

Вы не можете. ServiceHost будет содержать 1-n экземпляров класса обслуживания для обработки входящих запросов, но обычно это «на вызов», например, экземпляр класса службы создается при поступлении нового запроса, метод класса вызывается, а затем снова удаляется.

Так что ServiceHost на самом деле не имеет под рукой никакого экземпляра класса "service", который он может использовать и вызывать методы.

Чего именно вы пытаетесь достичь?

Обновление: узел службы действительно не должен делать ничего, кроме размещения службы - он определенно не должен вызывать саму службу.

То, чего вы пытаетесь достичь, это какая-то административная консоль - графический интерфейс, отображающий текущие комментарии в вашей системе. Сделайте это либо с помощью прямого запроса к базе данных, либо просто используйте консоль графического интерфейса для вызова вашей службы и получения этих записей - но не обременяйте ServiceHost - это неправильное место для установки этой функциональности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...