2015-12-03 2 views
0

Я создал службу WCF и некоторое приложение WPF, использующее ее. Когда я запускаю проект из Visual Studio, открывается тестовый клиент WCF, и приложение работает отлично, метод определяется в службе.Служба WCF, размещенная в службе Windows, не работает

Но мне нужно разместить эту службу WCF в службе Windows. Я следил за this, установил службы, используя Installutil.exe, и запустил службу. Все пошло нормально, оно работает.

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

zad8. has stopped working

После выбора опции для отладки его новый экземпляр VS я

XamlParseException occured in PresentationFramework.dll

трассировка стека показывает, что-то вроде:

connection can't be started, because the target computer is actively refusing it

У вас есть представление, что может пойти не так?

ответ

0

К счастью, мне удалось найти решение. Я думаю, что я должен опубликовать его, возможно, когда-нибудь это поможет кому-то :)

Я на самом деле сделал две ошибки, но один из них, к сожалению, был вызван указанным учебником (here) в связи с моим временным отключением. На шаге 5, пункт 8 этого учебника, есть пример переопределения метода OnStart():

protected override void OnStart(string[] args) 
{ 
    if (myServiceHost != null) 
    { 
     myServiceHost.Close(); 
    } 
    myServiceHost = new ServiceHost(typeof(Service1)); 
    myServiceHost.Open(); 
} 

Берегись, что Service1 неоднозначен в этом контексте, потому что это имя класса проекта службы Windows, а также имя класса службы WCF. Он должен быть написан с полным именем (здесь это WcfServiceLibrary1.Service1). В моем случае имя службы было другим, и я просто поставил Service1 туда, чтобы спешить. Во всяком случае ..

В случае, если у кого-то все это позади и по-прежнему встречается с той же проблемой (с прекращением работы приложения), я думаю, что вы должны попробовать открыть проект в Visual Studio и попытаться отладить клиентское приложение как новый экземпляр (щелкните правой кнопкой мыши по проекту-> Debug -> Start as new instance ...).

Это может показаться тривиальным, но когда вы нажмете F5 или Ctrl + F5, тогда даже если у вас есть только тот проект, который задан как проект запуска, VS все равно будет размещать его клиент. В моем случае это имело значение, потому что мне нужно было использовать файл изолированного хранилища. И поскольку он был сохранен на стороне обслуживания, тогда у меня был этот файл, созданный на сервере IIS, созданным VS. Так или иначе, мой метод создания такого файла установил FileMode.Open(), и он вызывал раздачу, потому что в службе Windows он не существовал, и новый не мог быть создан, и это было необходимо для правильного его запуска.

Более того, это просто показало мне, что на этот вопрос нельзя ответить должным образом, потому что данные, которые я предоставил, были недостаточными, и это было нежно.

Cheers :)

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