Сервисная библиотека WCF работает только при запуске из Visual Studio - PullRequest
3 голосов
/ 28 июня 2011

Я изучаю WCF.У меня есть веб-приложение ASP.NET MVC2, и я хочу отправлять электронные письма в формате MIME из приложения, поэтому я решил инкапсулировать функции электронной почты в отдельный проект WCF для последующего повторного использования и т. Д. Поэтому я добавил библиотеку служб WCF врешение, закодировало функциональность электронной почты, добавило ссылку на службу в веб-проект, и все это прекрасно работает при запуске из VS.Однако, если я получаю доступ к веб-приложению из окна браузера (а не через Visual Studio 'F5'), служба WCF не работает.Я получаю следующую ошибку:

Невозможно подключиться к удаленному серверу в System.Net.HttpWebRequest.GetRequestStream (TransportContext & context) в System.Net.HttpWebRequest.GetRequestStream () в System.ServiceModel.Channels.HttpOutput.WebRequestHttpOutput.GetOutputStream () Невозможно установить соединение, так как целевая машина активно отказала ему 127.0.0.1:8732 в System.Net.Sockets.Socket.DoConnect

Файл web.config вВеб-приложение было изменено (WCF) следующим образом:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="WSHttpBinding_IEmailService" closeTimeout="00:01:00"
          openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
          bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
          maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
          textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
            maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <reliableSession ordered="true" inactivityTimeout="00:10:00"
            enabled="false" />
          <security mode="Message">
            <transport clientCredentialType="Windows" proxyCredentialType="None"
              realm="" />
            <message clientCredentialType="Windows" negotiateServiceCredential="true"
              algorithmSuite="Default" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://localhost:8732/Design_Time_Addresses/Email/EmailService/"
        binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IEmailService"
        contract="EmailServiceReference.IEmailService" name="WSHttpBinding_IEmailService">
        <identity>
          <dns value="localhost" />
        </identity>
      </endpoint>
    </client>
  </system.serviceModel>

Что мне нужно сделать, чтобы служба app + работала вне VS2010?Кроме того, любые советы по развертыванию будут очень полезны, когда я в конечном итоге развернуюсь на наших серверах.

Спасибо.

Редактировать Спасибо за все ответы.Учитывая, что я собираюсь развернуть это в Интернете, я должен создать отдельное веб-приложение или веб-сервис, который затем ссылается на библиотеку сервисов, и который я бы затем развернул на независимом веб-сервере в свое время?

Ответы [ 3 ]

3 голосов
/ 28 июня 2011

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

Кроме того, и, возможно, что еще более важно, вы фактически развернули службу на локальном компьютере? Когда среда разработки запускается (F5), она запускает небольшую версию IIS для запуска вашей службы. Этого не происходит, когда вы пытаетесь запустить ее вне среды разработки. Вам нужно где-то развернуть службу WCF (либо ваш компьютер для тестирования, либо другой). Тогда вы будете знать, какой порт он прослушивает, и сможете правильно подключить свою среду. Похоже, вы, возможно, не сделали этот шаг, который вызывает вашу проблему.

Вот отличное руководство по развертыванию службы WCF:

http://www.dotnetspark.com/kb/1679-how-to-host-wcf-services-tutorial.aspx

1 голос
/ 28 июня 2011

Причина в том, что когда вы запускаете с F5, ваш wcf сервис автоматически получает WcfSvcHost.exe.Но при прямом доступе к веб-странице через локальный хост (без хостинга службы havign wcf) вы получаете эту ошибку.Что вам нужно сделать, это сначала разместить wcf в IIS (или где-либо еще), а затем использовать веб-приложение.

Здесь - это опции для размещения вашего сервиса wcf.

1 голос
/ 28 июня 2011

Библиотека сервисов WCF - это просто проект для классов сервисов WCF, контрактов и т. Д. Это не сервис. Когда вы запускаете приложение из Visual Studio, оно увидит службу и разместит ее в WcfSvcHost.exe (вспомогательный инструмент для разработки), но в случае реального запуска вы должны сами разместить службу .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...