Подтвердить что ты не робот

Как разместить мою службу WCF на моем веб-сайте?

Я новичок в WCF. Я разработал образец службы WCF. В моем сервисе используется привязка basicHttp.

Я размещаю свою службу в локальном IIS 7.5, используя WAS, и работает отлично. Теперь я хочу разместить свою службу на своем веб-сайте.

Я ищу Google, но большинство из них размещено в localhost в IIS. Пожалуйста, скажите мне, как мне это сделать? Будет лучше обратиться к руководству или пошаговому руководству.

4b9b3361

Ответ 1

У вас есть в основном два варианта, я считаю:

Вариант 1 - развертывание "bin" (предпочтительный вариант)

  • скомпилируйте вашу службу WCF в библиотеку DLL (библиотека классов)
  • создать веб-сайт в IIS
  • скопируйте DLL WCF в папку .\bin веб-сайта
  • создайте файл *.svc на этом веб-сайте
  • добавьте соответствующий web.config в папку веб-сайта, чтобы определить конечные точки и конфигурацию сервиса и т.д.

Теперь ваша служба WCF будет доступна на базовом адресе веб-сайта плюс имя файла *.svc, например

http://myserver/someweb/Myservice.svc

Ваш *.svc будет выглядеть примерно так:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WCF_Simple_Service.HelloIndigoService"  %>

Атрибуты Service= означают класс, реализующий службу, полностью соответствующую его пространству имен.

Вариант 2 - введите материал в App_Code

  • создать веб-сайт в IIS
  • поместите все связанные с WCF файлы *.cs непосредственно в папку .\App_Code
  • создайте файл *.svc на этом веб-сайте
  • добавьте соответствующий web.config в папку веб-сайта, чтобы определить конечные точки и конфигурацию сервиса и т.д.

Теперь ваша служба WCF будет доступна на базовом адресе веб-сайта плюс имя файла *.svc, например

http://myserver/someweb/Myservice.svc

Ваш *.svc будет выглядеть примерно так:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="Service" 
    CodeBehind="~/App_Code/Service.cs" %>

Простой пример web.config может выглядеть примерно так:

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="WithDebug">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  <services>
    <service name="SimpleWCF.HelloIndigoService" behaviorConfiguration="WithDebug">
      <endpoint
          address=""
          binding="basicHttpBinding"
          contract="SimpleWCF.IHelloIndigoService" />
      <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

В основном вы определяете свой тег <service> - и снова: name= обозначает класс, реализующий службу, - полностью соответствующий своему пространству имен. Он должен содержать по крайней мере одну конечную точку - конечная точка "mex" является необязательной, но очень полезна, особенно для разработки и тестирования. Он позволяет клиенту "обнаружить" службу и получить ее описание сервиса, чтобы он мог взаимодействовать с ней.

Как только ваша служба будет развернута в IIS, вы можете увидеть ее в действии с помощью инструмента, такого как WCF Test Client, который бесплатно отправляется с WCF, или SoapUI, который является универсальной утилитой тестирования SOAP (с бесплатной версией для вас).

Ответ 2

старый поток, если кто-то его найдет... но вместо вашего *.svc вы также можете создать в своем global.asax:

static Global()
{
    RouteTable.Routes.Add(new ServiceRoute("ExternalServices/SOAP/test", new     ninjectServiceHostFactory(), typeof(testService)));
}