Я нахожусь в процессе изучения 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.Страница сервиса выскочила.В целом - это работает, но не так, как я ожидал, мне кажется, что-то не хватает.
Вопросы:
Почему произошел сбой службы, когда я не предоставил необязательный параметр baseAddresses в конструкторе ServiceHost - при попытке передать адреса при добавлении конечных точек службы?
Могу ли я достичь своей цели "так, как я первоначально хотел, чтобы это было"?
С наилучшими пожеланиями, и надеюсь услышать от любого WCFЭксперты скоро (тм).