Доступ к службе WCF на том же сервере - PullRequest
0 голосов
/ 09 ноября 2009

У меня есть сайт .NET с сервисом WCF. Как мне получить доступ к текущему контексту операций моего сервиса? Один из возможных обходных путей - просто позвонить в службу в приложении ... но это кажется небрежным и избыточным; особенно, когда сервис и веб-сайт - это одно и то же приложение.

- обновление
Цель состоит в том, чтобы создать систему уведомлений через Silverlight и WCF. Когда пользователь создает игру, ему нужно ждать игрока. Когда другой игрок решает присоединиться к игре через страницу со списком игр, которая является просто стандартным HTML, создатель должен быть уведомлен, что кто-то хочет играть. Пользователь нажимает кнопку «Присоединиться» к игре, сервер выполняет обратную передачу страницы и обращается к сервису WCF. Затем WCF отправляет сообщение в интерфейс Silverlight создателя игры.

Теперь я могу просто создать веб-ссылку на свое собственное приложение, но я пытаюсь обойти этот шаг, так как они оба на одном сервере; то же самое приложение.

Ответы [ 4 ]

1 голос
/ 09 ноября 2009

Я согласен с Дэвидом; если вам нужно вызвать сервис без прохождения WCF, вы можете просто создать экземпляр класса сервиса.

С другой стороны, если вы хотите, чтобы служба WCF могла получить доступ к объекту HTTPContext и иметь полный доступ к сеансу веб-пользователя, добавьте атрибут AspNetCompatibilityRequirements в свой класс обслуживания (не в интерфейс):

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService: IMyService
{
    public string DoWork(string myInput)
    {
        HTTPContext context = HTTPContext.Current;
        ...
        return myInput;
    }
}

Хорошо это или плохо, тесная связь или что-то, что действительно зависит от вашего использования и доступности услуги.

0 голосов
/ 11 февраля 2010

После долгих исследований и более ясного понимания WCF я нашел свой ответ. Я использовал привязку DuplexService (активный сеанс / экземпляр сохраняется на клиенте / сервере). Доступ к экземплярам дуплексного сеанса невозможен через стандартную веб-страницу aspx. У вас должен быть клиент (приложение Silverlight или Windows), который может поддерживать активный сеанс на сервере в случае, если сервер передает какие-либо сообщения клиенту.

0 голосов
/ 09 ноября 2009

Вы должны предоставить немного больше контекста и архитектурных деталей. В первую очередь ... откуда именно вам нужен контекст операции? Если вы пытаетесь использовать контекст операции вне области действия веб-службы, то я бы сказал, что вы создаете ОЧЕНЬ ПЛОХУЮ связь между вашим приложением и инфраструктурными и контекстуальными деталями, о которых ваше приложение абсолютно не знает. *

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

0 голосов
/ 09 ноября 2009

Можете ли вы определить «текущий контекст операций?»

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

public class MyWCF : IMyWCF
{
  public void DoWork()
  {
    /// do something
  }
}

в другом месте ...

IMyWcf wcf = new MyWcf();
wcf.DoWork();

Разница между использованием службы здесь или в другом приложении заключается в том, что вы не используете объект прокси / клиента, сгенерированный при добавлении ссылки на службу.

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