esy*_*tre 45 .net c# iis wcf was
我们开发了WCF服务,我们正在寻求部署它.我们的客户将使用它,basicHttpBinding但我们的内部团队将使用它namedPipesBinding.
我们想知道在IIS 7或Windows服务中托管它是否更好.我们运行了一些测试,我们发现当我们在IIS中添加绑定时,它不会更新我们服务的配置文件.这意味着我们需要在两个不同的地方维护配置.这不符合逻辑,对吗?
我们还在StackOverflow上读到当WCF服务是IIS中的主机时忽略基址(请参阅有关<baseAddresses>的WCF服务配置文件问题)
mar*_*c_s 76
在IIS中托管有许多优点和许多缺点.
是的,IIS为您提供按需加载 - 这可以是加号或减号.当请求进入时,构造ServiceHost,然后实例化托管的服务类,并处理请求.没有什么需要全天候运行.但与此同时,每次收到消息时,这种设置都需要更多的时间和精力,而且作为程序员,您真的无法控制服务主机.
是的,使用IIS,*.svc文件所在的虚拟目录定义了您的地址 - 您的配置中的任何基地址或明确定义的地址都将被忽略.并且不需要太多努力,您就无法更改服务地址的布局 - 它们总是为http://servername/virtualdirectory/YourService.svc(包括.svc扩展名).
自托管通常更快,因为您的ServiceHost已经启动并运行 - 但是由您来确保它真正启动并运行,每当有消息进入时都没有"按需"加载 - 无论是它还是可以服务请求,或不.但是您可以更好地控制服务主机 - 何时以及如何构建服务主机等等,您可以根据需要选择并定义服务地址.
我个人几乎总是选择使用自托管 - 在控制台应用程序中进行测试,在NT服务中进行生产.对我来说,这似乎是更合适的方式,也是更加可控的方式.你必须做更多的工作 - 但你确切知道你在做什么.
渣
Che*_*eso 26
marc_s通常给出我完全同意的很好的答案,但在这种情况下,我没有.
WCF的自托管并不是一个好主意,尤其是微软即将发布都柏林技术.在IIS中托管时,WCF(和WF)应用程序的管理和操作要简单得多.
此外,您还可以获得按需加载.
IIS7.5(WS2008 R2)有一个永远在线的选项.
如果困扰你,你可以轻松地进行URL重写以省略.svc.
atc*_*way 16
有趣的tidbit->在阅读这个帖子后,我在MSDN中遇到了关于使用Windows服务托管WCF服务的这些词:
以下是Windows服务的一些缺点:
•部署:必须使用.NET Framework Installutil.exe实用程序或通过安装程序包中的自定义操作安装服务.
•有限的功能:Windows服务仍然具有一组有限的开箱即用功能,以支持高可用性,易管理性,版本控制和部署方案.基本上,您必须自己通过自定义代码来满足这些要求,例如,IIS默认情况下会提供其中的一些功能.Windows服务确实增加了可恢复性和一些安全功能,但您仍需要自己做一些工作.
http://msdn.microsoft.com/en-us/library/bb332338.aspx
......以及以下链接:
托管服务:(漂亮的比较图表)
http://msdn.microsoft.com/en-us/library/ms730158.aspx
Céd*_*vin 11
回答这些问题:
我们运行了一些测试,我们发现当我们在IIS中添加绑定时,它不会更新我们服务的配置文件.这意味着我们需要在两个不同的地方维护配置.这不是逻辑,对吗?
当您使用IIS来托管服务时,必须配置App.config文件或web.config文件以允许IIS公开某些绑定,因此在配置文件中,您将把所有绑定放到wcf服务中.Http,net.tcp等......
在绑定中,您不会指定地址,因为您将直接在IIS中指定这些地址.
在IIS中,您必须允许在网站的高级设置中使用绑定.之后,您将为您的网站"Web服务"设置新绑定,并添加您想要监听的每个绑定,并指定地址.
您将直接在IIS中指定地址.
有一个例子.
你的配置文件:
<services>
<service name="ServiceName">
<endpoint address=""
binding="basicHttpBinding"
bindingConfiguration="httpMode"
contract="IContract" />
<endpoint address=""
binding="netTcpBinding"
contract="IContract" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
Run Code Online (Sandbox Code Playgroud)
在你的IIS advenced设置你的意志
启用协议中的http,net.tcp
之后,您将进入IIS绑定.把你的绑定为http normaly并添加一个新的绑定net.tcp,在绑定配置中把端口和虚拟目录放在一起
8001:*
此设置允许所有虚拟目录连接到8001端口.
您还必须在服务器上安装"WCF激活,(Http激活和非Http激活)"功能.
这个问题没有标准答案.我完全不同意Cheeso的答案(WCF的自托管并不是一个好主意).
以下链接请检查:(http://msdn.microsoft.com/en-us/library/ms730158.aspx,http://msdn.microsoft.com/en-us/library/bb332338.aspx),想想你的限制:
你会发现在很多情况下"自托管"是最好的选择.
| 归档时间: |
|
| 查看次数: |
42898 次 |
| 最近记录: |