Самостоятельно размещенный сервис WCF - непонятное поведение - PullRequest
1 голос
/ 04 января 2011

Я нахожусь в процессе изучения WCF, и в качестве практического упражнения я решил написать универсальную оболочку для класса ServiceHost.Идея состоит в том, чтобы иметь класс, подобный приведенному ниже:

public class Host<I(nterface), S(ervice)>
    where S : I, new()
{
    /**/

    ServiceHost mServiceHost;
    S mServiceInstance = new S();
}

Где I-тип - это интерфейс с атрибутом [ServiceContract], а S-тип - это Сервис, который реализует вышеупомянутый интерфейс.

В то же время я создал вспомогательную службу типа hello-world для тестирования своего класса на ходу.

В конструкторе Host я создал внутренний ServiceHost следующим образом:

mServiceHost = new ServiceHost(mServiceInstance);

Я добавил конечную точку службы:

mServiceHost.AddServiceEndPoint(typeof(I), new BasicHttpBinding(), new Uri("http://localhost:40000/MyTestService"));

Чуть позже я открыл хост, запустил свое приложение и попытался определить, будет ли мой браузер отображать службу, присутствующую в разделе "http://localhost:40000/MyTestService" - Я получил пустую страницу, и все попытки добавить ссылку на службу потерпели неудачу.

Позже я добавил тот же Uri в конструктор ServiceHost:

mServiceHost = new ServiceHost(mServiceInstance, new Uri("http://localhost:40000/MyTestService"));

Второй конструкторАргумент может быть либо:

params string[] baseAddresses 

, либо

params Uri[] baseAddresses

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

IРеактивировал мою девушкуpp, и (используя браузер) перешел на URI.Страница сервиса выскочила.В целом - это работает, но не так, как я ожидал, мне кажется, что-то не хватает.

Вопросы:

  1. Почему произошел сбой службы, когда я не предоставил необязательный параметр baseAddresses в конструкторе ServiceHost - при попытке передать адреса при добавлении конечных точек службы?

  2. Могу ли я достичь своей цели "так, как я первоначально хотел, чтобы это было"?

С наилучшими пожеланиями, и надеюсь услышать от любого WCFЭксперты скоро (тм).

1 Ответ

1 голос
/ 04 января 2011

Грег Сансом ответил на ваш первый вопрос. Что касается второго, то это можно сделать: пожалуйста, посмотрите на классы ServiceModelEx Джувала Лоуи (особенно ServiceHost) скачать здесь он содержит несколько полезных классов для WCF

...