2012-04-29 23 views
20

WCF'de yeni. Örnek bir WCF servisi geliştirdim. Hizmetim basicHttp bağlayıcı kullanıyor.WCF hizmetimi web sitemde nasıl barındırabilirim?

Hizmetimi yerel IIS 7.5'de WAS kullanarak barındırıyorum ve iyi çalışıyor. Şimdi hizmetimi web sitemde barındırmak istiyorum.

Google'da arama yapıyorum ancak çoğu burada IIS'de localhost'ta barındırılıyor. Lütfen bana nasıl yapacağımı söyle? Bazı öğreticilere veya adım adım kılavuza başvurmak daha iyi olacaktır.

+2

Bkz: [IIS'de bir WCF hizmeti Ev Sahipliği Nasıl] (http://msdn.microsoft.com/en-us/library/ms733766.aspx) - 'localhost' veya başka bir sunucu tamamen alakasızsa - sadece bu adımları izleyin. –

cevap

35

Temelde iki seçenek var, inanıyorum:

Seçenek 1 - "bin" dağıtmak (tercih seçenek)

  1. bir DLL (sınıf kitaplığından) içine WCF hizmetini derlemek
  2. biroluşturmak web sitesinin .\bin klasöre WCF DLL kopya IIS bir web sitesi oluşturmak
  3. web klasöründe uygun bir web.config eklemek sitesindedosya endpoints ve hizmet yapılandırmasını vb tanımlamak için
Kişisel WCF hizmeti artık web sitesinin temel adresinde ulaşılabilir olacaktır

artı *.svc ismi dosya gibi

http://myserver/someweb/Myservice.svc 

Sizin *.svc böyle bir şey görünecektir:

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

Service= özelliklerini hizmetini uygulayan sınıfını belirtir - onun ad ile tam.

Seçenek 2-App_Code

  1. koymak şeyler
  2. .\App_Code klasöre *.cs dosyaları doğrudan ilgili tüm WCF
  3. o web sitesinde
  4. bir *.svc dosyası oluşturmak koymak IIS içinde bir web sitesi oluşturmak
  5. Web sitesi klasöründe uç noktalarınızı ve hizmet yapılandırmanızı vb. Tanımlamak için uygun bir web.config ekleyin.

Kişisel WCF hizmeti artık web sitesinin temel adresinde ulaşılabilir olması, artı *.svc dosyanın, örneğin adı olacak

http://myserver/someweb/Myservice.svc 

Sizin *.svc böyle bir şey görünecektir:

<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> 

Sen temelde <service> etiketi tanımlayıp - ve yine:

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

, numune web.config böyle bir şey basit görünebilir C: name=, hizmeti uygulayan sınıfı - ad alanıyla tam olarak nitelenmiş anlamına gelir. En az bir son nokta içermelidir - "mex" son nokta isteğe bağlıdır - ancak özellikle geliştirme ve test için çok kullanışlıdır. İstemcinin hizmeti "keşfetmesini" ve hizmet açıklamasını almasını sağlar; böylece arabirimle arabirim kurabilir. Servis IIS'de yerleştirildikten sonra,

yapmanız sizin için ücretsiz bir baskı ile genel amaçlı SABUN test programı (WCF veya SoapUI ile ücretsiz olarak gemi olan WCF Test Client gibi bir araç kullanarak eylem görebilirsiniz) kullanın.

+1

Seçenek 2'deki yanlış davranış behaviorConfiguration = "true" doğrudur behaviorConfiguration = "WithDebug" –

+0

@PavelJedlicka: kesinlikle haklısınız - bu hatayı işaret ettiğin için teşekkürler - sabit! –

3

eski iplik, birisi ... ama onun yerine de Global.asax içinde oluşturabilir .svc senin * ait bulursa:

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

Benzer bir sorunla karşı karşıyayım. Lütfen cevabınızı detaylandırır mısınız? –

+0

@ mav3n: Bir web sitesine ev sahipliği yapıyorsanız ve bir WCF hizmetini (web sitenizde) barındırmak istiyorsanız, yukarıdaki kodu global.asax'a ekleyebilirsiniz. Bu şekilde ayrı bir * .svc dosyası eklemeniz gerekmez. Her zaman yapacağın gibi bir hizmet yaratırsın. Örneğimde Ninject kullanıyorum, ancak varsayılan yapıcıyı kullanabilirsiniz. – Roelant

İlgili konular