2011-01-03 3 views
1

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

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

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

Если тип I является интерфейсом с [ServiceContract] атрибутом & типа S является службой, которая реализует на вышеупомянутый интерфейс.

Я создал вспомогательную службу типа hello-world, чтобы проверить мой класс на ходу.

В конструкторе хозяина я инстанцирован внутренний ServiceHost так:

mServiceHost = new ServiceHost(mServiceInstance); 

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

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

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

Я позже добавил тот же Ури конструктору ServiceHost в:

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

второй аргумент, что конструктора является либо:

params string[] baseAddresses 

или

params Uri[] baseAddresses 

В любом случае, наличие ключевого слова «params» говорит мне, что этот параметр НЕ ДОПОЛНИТЕЛЬНЫЙ.

Я реактивировал свое приложение и (используя браузер), перешел к uri. Появилась служебная страница. В целом - это работает, но не так, как я ожидал, мне, кажется, что-то не хватает.

Вопросы:

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

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

С уважением, и в надежде услышать от экспертов WCF в ближайшее время (tm).

ответ

1

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

+0

Хотелось бы, чтобы он не удалил свой ответ, я собирался «принять», это после некоторого последующего чтения: / – Maciek

Смежные вопросы