2010-06-08 63 views
3

我一直在开发一个使用.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> 

回答

2

我在IIS 5.1和6中始终托管WCF服务。除了在服务器上安装.Net 3.0+之外,没有什么特别之处,我发现您已经基于上面的ASP.NET 3.5注释。

您是否将服务托管在.svc文件中?如果你可以提供一些额外的信息,我相信这个问题可以很快解决。你如何主办WCF服务?您的端点/行为在您的配置文件中看起来像什么?你使用什么类型的绑定?请记住,您只能在IIS 6或更低版本中托管http绑定。使用IIS 7允许您使用WAS,它允许您为服务使用非HTTP绑定。

考虑到你可以看到你的wsdl,我会说你的MEX端点正在工作,但你的其他端点不是。

+0

我编辑了我的问题以从web.config添加片段。另外,我的同事提到我发布的服务器上的IIS升级到了IIS6,所以当我说IIS 5.1时我错了。不知道这是否有帮助。我也使用SVC页面来使用basicHttpBinding公开服务。 感谢您的帮助! – Adam 2010-06-08 18:41:27

+0

快速测试。如果您使用httpGetEnabled = true公开http绑定,则不需要Mex端点。删除Mex端点并查看是否仍可以访问WSDL。另外,除非你需要在服务中使用aspCompatibilty,否则删除aspNetCompatibilityEnabled = true行。你使用本地主机代理是什么,如果你从配置中删除它会发生什么? – CkH 2010-06-08 19:03:51

+0

是的,我只是上传它没有mex端点和WSDL来临罚款。 – Adam 2010-06-08 19:11:34

0

WCF在很大程度上依赖于Windows激活服务,我记得它是棘手得到它,并在IIS6,这就是为什么我们最终m跑igrated到IIS7。

+0

那么有可能在IIS 5中托管WCF还是需要升级到IIS 7? – Adam 2010-06-08 16:03:04

+1

WCF根本不依赖WAS,它只是一个优点。 WAS允许在IIS 7中托管非HTTP WCF服务,而不必托管TCP服务,例如,作为使用ServiceHost的Windows服务。 – CkH 2010-06-08 19:32:48

+0

我的大部分服务最终都是net.tcp,现在我正在记忆中。 – thaBadDawg 2010-06-08 20:45:43

2

该解决方案可能非常容易困难。我使用.NET 4.0,起初它看起来无法使用IIS 6和Windows Server 2003的一些挖后,我做了以下并得到它的工作:

  1. 添加.SVC exntension映射到IIS管理器。右键单击网站,主目录选项卡,单击配置按钮并将C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll添加到svc扩展。
  2. 从Windows Server 2003卸载更新KB976769v2和KB980773。
  3. 从您的web.Config文件中删除targetFramework =“4.0”。
  4. 在system.ServiceModel标签后面的system.ServiceModel中添加serviceHostingEnvironment multipleSiteBindingsEnabled =“true”。
  5. 右键点击我的虚拟目录,选择ASP.Net选项卡,然后选择4.0.30319或任何适用的情况。

很可能,您可能必须授予NT AUTHORITY/NETWORK SERVICE的权限才能访问您的数据库,如果在配置文件的连接字符串部分指定了该权限。

+0

#1救了我!谢谢! – guanome 2012-08-02 13:43:38

相关问题