2012-11-01 106 views
2

我有一個WCF控制檯應用程序具有以下app.config文件在IIS託管WCF控制檯應用程序7

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="serviceBehavior"> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <bindings> 
     <netNamedPipeBinding> 
     <binding name="namedPipeBindingConfig" maxBufferPoolSize="268435456" maxBufferSize="16777216" maxReceivedMessageSize="16777216" /> 
     </netNamedPipeBinding> 
    </bindings> 

    <services> 
     <service behaviorConfiguration="serviceBehavior" name="MyTestNamespace.MyTestClassService"> 
     <endpoint address="net.pipe://localhost/MyService" 
      binding="netNamedPipeBinding" bindingConfiguration="namedPipeBindingConfig" 
      name="NamedPipeBinding" contract="MyTestNamespace.IMyTestContract" /> 
     </service> 
    </services> 
    </system.serviceModel> 
</configuration> 

我收留了它作爲一個控制檯應用程序(接口,實現和託管類都在一個單一的項目),基本上這樣做:

ServiceHost host = new ServiceHost(typeof(MyTestClassService)); 
host.Open(); 

我從命令提示符下運行 「C:\ SomePath \> RunMyService.exe」 並開始和偉大工程。現在,我計劃在IIS 7中託管這個,我沒有找到任何有關如何在此處部署(控制檯應用程序)的好例子。我有的幾個問題是:

1)我需要在IIS中添加網站或添加應用程序並將我的文件放在那裏嗎?

2)我會需要一個.svc文件嗎?如果是的話,它必須包含什麼,以及如何告訴它開始這個控制檯應用程序 。

3)這個控制檯應用程序會在IIS內部運行嗎?這個怎麼用 ?

回答

5

是的,您需要在IIS中定義一個網站,以便在IIS中託管您的服務。此外,您實際上不會在此配置中運行您的控制檯應用程序。換句話說,Program.Main函數永遠不會被調用。相反,IIS將使用自己的ServiceHost實現直接加載MyTestClassService。

雖然可能可以使用您的控制檯應用程序二進制與IIS(我可能會說,因爲我從來沒有真正做到了這一點,但它應該在技術上是可能的),它可能會更有意義,爲您的移動服務實現代碼放入一個單獨的類庫項目中。然後,您可以從ServiceHost控制檯應用程序和IIS中引用類庫項目。這對其他開發者來說會更少混淆。在任何情況下,您都必須將包含您的服務接口和服務定義的二進制文件放入您將承載該服務的網站的bin目錄中。

當前駐留在您的app.config文件中的配置將不得不移動到您的網站的web.config文件,並且您必須使用不同的綁定,因爲IIS不支持net.pipe

您不必使用.svc文件;如果您願意,可以使用configuration based activation。這將允許你建立一個只有web.config文件的空網站,該文件將託管你的服務。

重點是您不會託管一個控制檯應用程序,您將託管一項服務。現在您的控制檯應用程序充當服務主機;當你重新配置IIS時將扮演這個角色。爲了查找更多資源,只需查找有關在IIS上託管WCF的信息;您目前在控制檯應用程序中使用ServiceHost的事實是無關緊要的。

相關問題