C # Добавление конечной точки WCF динамически к базовому URL - PullRequest
0 голосов
/ 10 июня 2011

В настоящее время я разрабатываю систему, которая может загружать плагины, созданные для нее, и хотела бы, чтобы они динамически создавали конечную точку WCF.

Что мне после этого,

Давайте посмотрим на пример того, что я пытаюсь сделать. В моем тестировании у меня есть сайт с базовым адресом

http://localhost:9812/

То, что я пытаюсь сделать, это когда я загружаю свой плагин, добавляю его конфигурацию конечной точки WCF к этому URL, так что в итоге получаем

http://localhost:9812/MyPlugin

Я не хочу делать это в файле web.Config, а скорее в коде. Мне удалось заставить его работать, пока я меняю номер порта, который он привязывает к i.e

http://localhost:9787/MyPlugin

Так выглядит мой код

public void StartWcfServices()
    {
        IWcfExample endpoint = new EchoEndpoint();
        var uri = new Uri(_baseAddress);
        string address = _baseAddress + endpoint.GetName();

        var serviceHost = new ServiceHost(endpoint, uri);
        serviceHost.AddServiceEndpoint(typeof(IWcfExample), new BasicHttpBinding(), address);

        serviceHost.Open();

    }

Проблема в том, что при запуске веб-сайта появляется ошибка

HTTP не может зарегистрировать URL http://+:9812/, поскольку TCP-порт 9812 используется другим приложением.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 10 июня 2011

Проблема здесь в сочетании хостинга IIS и хостинга. Я полагаю, что ваше приложение работает ASP.NET MVC в IIS на веб-сайте, выставленном на порт TCP 9812. В этом случае вы не можете открыть ServiceHost для прослушивания того же порта, потому что этот порт уже используется IIS - вы можете попытаться использовать только относительный адрес конечной точки, но он, вероятно, не будет работать, потому что базовый адрес определен в другом процессе. Причем вручную открывающийся сервис хоста в веб-приложении пахнет. Позвольте инфраструктуре IIS сделать это или разместите ваши плагины в службе Windows.

Если вы хотите, чтобы в веб-приложении были плагины, каждый плагин должен поставляться со своим собственным файлом .svc для каждой новой предоставляемой службы. После установки плагина и перезапуска вашего приложения услуга станет доступна на http://localhost:9812/PluginDir/ServiceName.svc

...