2015-12-28 5 views
4

У меня проблема с Windows 8 x 64, а также с ОС Windows 7 x 64. У меня есть простая служба WCF, которая использует привязку net.tcp.WCF net.tcp - Соединение отклонено целевой машиной

Я следовал много статей, чтобы написать эту простую услугу в том числе это следующие на MSDN: Hosting and Consuming WCF services

Мои службы и файлы конфигурации точно, как указано в статье выше.

После установки этой службы WCF с помощью InstallUtil.exe в качестве службы Windows , я вижу, что служба устанавливается правильно, а ее работает без ошибок. Я попытался добавить следы на OnStart и OnStop методы службы Windows и не нашел ничего плохого. Как только я попытаюсь ссылаться на эту конечную точку из другого решения, я получить следующую ошибку.

Не удалось подключиться к net.tcp: // localhost: 8523/Inbound. Соединение продолжалось в течение 00: 00: 00.9531494. Код ошибки TCP 10061: Соединение не может быть выполнено, потому что целевая машина активно отклонила его 127.0.0.1:8523.

Я попытался большинство должностей, связанных с этим вопросом через Интернет, а также я попытался открытия брандмауэры, снимите установку антивирусного программного обеспечения, пробовал разные порты, явно созданные входящие и исходящие правила для этих портов в брандмауэре, и т. д. Тем не менее я не могу получить доступ к этой службе Windows, в которой размещается моя служба WCF на основе net.tcp. Включены службы совместного доступа к порту TCP и услуги адаптера TCP-плеера, а также я включил ненужные функции Windows, необходимые для запуска этих служб TCP.

Я вижу, что я всегда могу получить доступ к этой службе в том же решении в другом проекте, потому что Visual Studio немедленно создает Wcf Service Host (WcfSvcHost), когда я пытаюсь ссылаться на эту службу, которая находит все конечные точки в весь проект в текущем решении и загружает их. Пока этот хост работает, я также могу ссылаться на эту услугу и на другое решение без проблем.

Служба Windows, в которой находится моя служба, также такая же, как и указанный код. Очевидно, что это создает экземпляр ServiceHost и запускает его. Я проверил это с некоторыми журналами, что он успешно выполняется при запуске службы. Но я не могу увидеть, что этот процесс запущен в Диспетчере задач, когда начинается моя служба. Я мог видеть эту службу, когда Visual Studio запускает ее, пока я отлаживаю то же решение или пытаюсь ссылаться в том же решении, что упоминалось выше.

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

Должен ли я предоставлять какие-либо специальные разрешения моей службе Windows для запуска этой службы ServiceHost или проблема совсем другая? Я не замечаю здесь что-то очень очевидное? Любая помощь будет высоко оценена. Благодарю.

Вот мой конфигурационный файл.

<system.serviceModel> 
<bindings /> 
<client /> 
<services> 
    <service name="MyWcfServiceLibrary.WCFService"> 
    <endpoint address="" binding="netTcpBinding" bindingConfiguration="" name="TCPEndPoint" contract="MyWcfServiceLibrary.IWCFService"> 
     <identity> 
     <dns value="localhost" /> 
     </identity> 
    </endpoint> 
    <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" name="mexEndPoint" contract="IMetadataExchange" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://127.0.0.1:8523/MyWCFService" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors>   
    <behavior name=""> 
     <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false" /> 
     <serviceDebug includeExceptionDetailInFaults="false" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
</system.serviceModel> 
+1

Вопрос был глупой ошибкой здесь. Мои извинения. Я не смог опубликовать код класса сервиса, потому что переполнение стека не позволяло мне. В myServiceHost = new ServiceHost (typeof (MyWCFService)) я ошибочно ссылался на класс службы Windows вместо службы WCF. Именно по этой причине он не создавал хост службы WCF. Ария, я ценю вашу помощь. Благодарю. – VipinM

ответ

1

Давайте отлаживаем устранение. Включили ли вы совместное использование портов? Это для обмена портами TCP через несколько процессов. Согласно Microsoft «эта служба установлена ​​как часть WCF, но служба по умолчанию не включена в качестве меры предосторожности».

Вот как включить Net.Tcp Port Sharing Service с помощью MMC

  1. В меню Пуск откройте консоль управления служб либо открыв окно командной строки и набрав services.msc Command или открыв Run и введите services.msc в поле «Открыть».
  2. В столбце «Имя» списка услуг щелкните правой кнопкой мыши службу обмена портами Net.Tcp и выберите «Свойства» в меню.
  3. Чтобы включить ручной запуск службы, в окне «Свойства» выберите вкладку «Общие» и в поле «Тип запуска» выберите «Вручную», а затем нажмите «Применить».
  4. Чтобы начать службу, в области состояния службы нажмите кнопку «Пуск». Теперь статус службы должен отображать «Начат».
  5. Чтобы вернуться к списку услуг, нажмите кнопку «ОК» и выйдите из консоли MMC.

Вы также можете включить NetTcpBinding в конфигурации следующим образом.

<system.serviceModel> 
    <bindings> 
    <netTcpBinding name="portSharingBinding" 
        portSharingEnabled="true" /> 
    </bindings> 
    <services> 
    <service name="MyService"> 
     <endpoint address="net.tcp://localhost/MyService" 
        binding="netTcpBinding" 
        contract="IMyService" 
        bindingConfiguration="portSharingBinding" /> 
    </service> 
    </services> 
</system.serviceModel> 

Если служба обмена порта включена и вручную начала, проверьте, если другое приложение работает на порту 8523. Вы можете использовать Netstat -a в командной строке или TCPView по следующему адресу. TCPView

+0

Служба обмена портами net.tcp уже запущена. Также я попытался добавить атрибут portSharingEnabled в файл конфигурации. После этого я получаю AddressAlreadyInUseException. Я попробовал команды TCPView и netstat, чтобы найти все активные порты, но порт, который я использую (8523), там не указан. Я вижу, что этот порт указан только тогда, когда я пытаюсь отладить эту службу, как я упоминал ранее, когда студия запускает WcfSvcHost.exe. – VipinM

+0

Последнее, что касается брандмауэра. Можно ли разместить свой файл конфигурации в исходном сообщении? – Aria

+0

Добавлена ​​конфигурация к исходному сообщению. Благодарю. – VipinM