我有一个带有以下app.config文件的WCF控制台应用程序
<?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 \&gt; RunMyService.exe”运行,它启动并运行良好。现在,我打算在IIS 7中托管这个,我没有找到任何关于如何在那里部署(特定的控制台应用程序)的好例子。我的问题很少:
1)我是否需要在IIS中“添加网站”或“添加应用程序”并将我的文件放在那里?
2)我是否需要.svc文件?如果是,它必须包含什么,如何告诉它开始这个 控制台应用。
3)这个控制台应用程序会在IIS中运行吗?这是如何工作的?
答案 0 :(得分:5)
是的,您需要在IIS中定义一个网站才能在IIS中托管您的服务。此外,您实际上不会在此配置中运行控制台应用程序。换句话说,永远不会调用Program.Main函数。相反,IIS将使用自己的ServiceHost实现直接加载MyTestClassService。
虽然可能可能使用你的控制台应用程序二进制文件与IIS(我说可能是因为我从来没有真正做到这一点,但它应该在技术上可行),它可能更有意义您将服务实现代码移动到单独的类库项目中。然后,您可以从ServiceHost控制台应用程序和IIS引用类库项目。这对其他开发人员来说不那么容易混淆。在任何情况下,您都必须将包含服务接口和服务定义的二进制文件放入您将托管服务的网站的bin目录中。
当前驻留在app.config文件中的配置必须移动到您网站的web.config文件中,并且您必须使用不同的绑定,因为IIS不支持{{1} }。
您不必使用.svc文件;如果您愿意,可以使用configuration based activation。这将允许您设置一个空网站,其中只包含将托管您服务的web.config文件。
重点是您将不会托管控制台应用程序,您将托管服务。现在您的控制台应用程序充当服务主机;重新配置IIS时将采用该角色。为了找到更多资源,只需查看有关在IIS上托管WCF的信息;您目前在控制台应用程序中使用ServiceHost进行托管的事实无关紧要。