2012-04-29 96 views
20

我是WCF新手。我開發了一個示例WCF服務。我的服務使用basicHttp綁定。如何在我的網站託管我的WCF服務?

我在本地IIS 7.5中使用WAS託管我的服務,它工作正常。現在我想在我的網站上託管我的服務。

我搜索谷歌,但其中大部分都託管在本地IIS中。請告訴我如何做到這一點?最好參考一些教程或一步一步的指南。

+2

參見:如何舉辦IIS中的WCF服務( http://msdn.microsoft.com/en-us/library/ms733766.aspx) - 無論是「localhost」還是任何其他服務器都完全不相關 - 只需遵循這些步驟即可。 –

回答

35

你有兩種基本的選擇,我相信:

選項1 - 「bin」 的部署(首選)

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

Service=屬性是指實現服務的類 - 其命名空間完全合格。

選擇2 - 把東西到App_Code

  1. 在IIS
  2. 把所有相關的直接*.cs文件到.\App_Code文件夾WCF
  3. 在該網站
  4. 創建 *.svc文件中創建一個網站
  5. 在網站文件夾中添加一個合適的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免費提供的工具(如WCF Test Client)或者SoapUI這是一個通用SOAP測試實用程序(爲您提供免費版本)使用)。

+1

選項2中的錯誤behaviorConfiguration =「true」正確的是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