2012-04-29 3 views
20

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

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

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

+2

См: [Как организовать службу WCF в IIS] (http://msdn.microsoft.com/en-us/library/ms733766.aspx) - независимо от того, является ли это 'localhost' или любым другим сервером совершенно неуместным - просто следуйте этим шагам. –

ответ

35

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

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

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

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

http://myserver/someweb/Myservice.svc 

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

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

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

Вариант 2 - поместить материал в App_Code

  1. создать веб-сайт в IIS
  2. положить все ваши WCF связанные *.cs файлы непосредственно в папку .\App_Code
  3. создать *.svc файл на этом сайте
  4. добавьте соответствующий 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 (с бесплатной версией для вас использования).

+1

Ошибка в поведении варианта 2Configuration = "true" correct is behaviorConfiguration = "WithDebug" –

+0

@PavelJedlicka: вы абсолютно правы - спасибо за указание на эту ошибку - исправлено! –

3

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

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

Я столкнулся с аналогичной проблемой. Не могли бы вы рассказать о своем ответе? –

+0

@ mav3n: Если вы размещаете сайт и хотите разместить службу WCF (на своем веб-сайте), вы можете добавить код выше в global.asax. Таким образом, вам не нужно добавлять отдельный файл * .svc. Вы бы создали такую ​​услугу, как всегда. В моем примере я использую Ninject, но, очевидно, вы можете использовать конструктор по умолчанию. – Roelant