将WCF .NET 3.5发布到IIS 6(Windows Server 2003)
我一直在开发一个使用.NET 3.5和IIS7的WCF Web服务,它可以在我的本地计算机上完美工作。我试图将它发布到运行IIS 6的服务器上,即使我可以在浏览器中查看WSDL,但客户端应用程序似乎没有正确连接到它。我启动了一个数据包嗅探应用程序(Charles Proxy),第一条消息的响应返回给客户端为空(0字节)。第一次出现后的每条消息。将WCF .NET 3.5发布到IIS 6(Windows Server 2003)
WCF服务是使用ASP .NET 3.5的较大应用程序的一部分。现在这个应用程序在IIS 6上工作正常,所以我认为这是WCF特有的。我也尝试在SVC文件中抛出一个异常,以查看它是否使它变得如此之大,并且异常从未抛出,所以我有一种感觉它是更低层的东西,它不起作用。
有什么想法?有什么我需要安装在IIS5服务器上?如果是这样,我仍然能够在浏览器中查看WSDL?
服务正在通过使用basicHttpBinding的
的SVC文件食用这里的web.config文件肉(让我知道,如果你需要的任何其他部分):
<system.net>
<defaultProxy>
<proxy usesystemdefault="False" proxyaddress="http://127.0.0.1:80" bypassonlocal="True"/>
</defaultProxy>
</system.net>
.. (还好说,相当痛苦)。
<system.serviceModel>
<services>
<service name="Nexternal.Service.XMLTools.VNService" behaviorConfiguration="VNServiceBehavior">
<!--The first endpoint would be picked up from the confirg
this shows how the config can be overriden with the service host-->
<endpoint address="" binding="basicHttpBinding" contract="Nexternal.Service.XMLTools.IVNService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" name="mexHttpBinding" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="VNServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
我在IIS 5.1和6中始终托管WCF服务。除了在服务器上安装.Net 3.0+之外,没有什么特别之处,我发现您已经基于上面的ASP.NET 3.5注释。
您是否将服务托管在.svc文件中?如果你可以提供一些额外的信息,我相信这个问题可以很快解决。你如何主办WCF服务?您的端点/行为在您的配置文件中看起来像什么?你使用什么类型的绑定?请记住,您只能在IIS 6或更低版本中托管http绑定。使用IIS 7允许您使用WAS,它允许您为服务使用非HTTP绑定。
考虑到你可以看到你的wsdl,我会说你的MEX端点正在工作,但你的其他端点不是。
WCF在很大程度上依赖于Windows激活服务,我记得它是棘手得到它,并在IIS6,这就是为什么我们最终m跑igrated到IIS7。
那么有可能在IIS 5中托管WCF还是需要升级到IIS 7? – Adam 2010-06-08 16:03:04
WCF根本不依赖WAS,它只是一个优点。 WAS允许在IIS 7中托管非HTTP WCF服务,而不必托管TCP服务,例如,作为使用ServiceHost的Windows服务。 – CkH 2010-06-08 19:32:48
我的大部分服务最终都是net.tcp,现在我正在记忆中。 – thaBadDawg 2010-06-08 20:45:43
该解决方案可能非常容易困难。我使用.NET 4.0,起初它看起来无法使用IIS 6和Windows Server 2003的一些挖后,我做了以下并得到它的工作:
- 添加.SVC exntension映射到IIS管理器。右键单击网站,主目录选项卡,单击配置按钮并将C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll添加到svc扩展。
- 从Windows Server 2003卸载更新KB976769v2和KB980773。
- 从您的web.Config文件中删除targetFramework =“4.0”。
- 在system.ServiceModel标签后面的system.ServiceModel中添加serviceHostingEnvironment multipleSiteBindingsEnabled =“true”。
- 右键点击我的虚拟目录,选择ASP.Net选项卡,然后选择4.0.30319或任何适用的情况。
很可能,您可能必须授予NT AUTHORITY/NETWORK SERVICE的权限才能访问您的数据库,如果在配置文件的连接字符串部分指定了该权限。
#1救了我!谢谢! – guanome 2012-08-02 13:43:38
我编辑了我的问题以从web.config添加片段。另外,我的同事提到我发布的服务器上的IIS升级到了IIS6,所以当我说IIS 5.1时我错了。不知道这是否有帮助。我也使用SVC页面来使用basicHttpBinding公开服务。 感谢您的帮助! – Adam 2010-06-08 18:41:27
快速测试。如果您使用httpGetEnabled = true公开http绑定,则不需要Mex端点。删除Mex端点并查看是否仍可以访问WSDL。另外,除非你需要在服务中使用aspCompatibilty,否则删除aspNetCompatibilityEnabled = true行。你使用本地主机代理是什么,如果你从配置中删除它会发生什么? – CkH 2010-06-08 19:03:51
是的,我只是上传它没有mex端点和WSDL来临罚款。 – Adam 2010-06-08 19:11:34