代码之家  ›  专栏  ›  技术社区  ›  Adam

正在将wcf.net 3.5发布到IIS 6(Windows Server 2003)

  •  3
  • Adam  · 技术社区  · 14 年前

    我一直在开发一个使用.NET 3.5和iis7的WCF Web服务,它在我的本地计算机上工作得很好。我尝试将它发布到运行IIS6的服务器上,尽管我可以在浏览器中查看WSDL,但客户机应用程序似乎没有正确连接到它。我启动了一个包嗅探应用程序(CharlesProxy),第一条消息的响应返回到客户机为空(0字节)。每一条留言后,第一次出来。

    WCF服务是使用ASP.NET 3.5的较大应用程序的一部分。这个应用程序在IIS6上已经运行了一段时间了,所以我认为它是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>
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   CkH    14 年前

    我一直在IIs5.1和6中托管WCF服务。除了在服务器上安装.NET 3.0+之外,没有什么特别的地方,我认为您已经根据上面的ASP.NET 3.5注释安装了它。

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

    考虑到您可以看到您的WSDL,我会说您的MEX端点正在工作,但您的另一个端点不工作。

        2
  •  2
  •   Kay Khan    14 年前

    解决方案可能非常简单到困难。我使用的是.NET 4.0,起初看起来不可能使用IIS6和WindowsServer2003。在进行了一些深入的研究之后,我做了以下工作并使其工作:

    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授权机构/网络服务访问数据库的权限。

        3
  •  0
  •   thaBadDawg    14 年前

    WCF严重依赖Windows激活服务,我记得在iis6中启动和运行是很困难的(说得更好,相当痛苦),这就是我们最终迁移到iis7的原因。