WCF在IIS 7.5 500上使用basicHttpBinding进行休息

时间:2011-02-15 00:07:40

标签: wcf iis-7.5

另一个尝试使用部署到IIS 7.5的basicHttpBinding尝试获取WCF Rest(无svc文件)服务失败了。我相信我已经与IIS一起正确配置了网站。我确定问题出在我的配置中。我收到的回复是500错误。我在这个盒子上运行了一个MVC 3网络。

WCF Rest服务正在使用具有Transportcredentialonly安全模式的basicHttpBinding。这是我的配置;

    <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
    <handlers>
      <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </handlers>
</system.webServer>
<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="AuthBinding">
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Basic"></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="NamedService">
        <endpoint contract="Namespace.IService" binding="basicHttpBinding" bindingConfiguration="AuthBinding"></endpoint>
      </service>
    </services>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true" />
      </webHttpEndpoint>
    </standardEndpoints>
</system.serviceModel>

基于其他帖子的当前网络和IIS配置;

  • 我为网络创建了一个v4.0应用程序池
  • 我创建了与上述应用程序池相关联的网站
  • 我启用了32位和64位.NET v4 ISAPI过滤器
  • 我再次使用Aspnet_regiis.exe -i
  • 注册v4
  • 我安装了HTTP重定向
  • 我启用了基本身份验证

非常感谢任何帮助。我已经在这一天了。顺便说一句......我没有看到任何事件消息。我知道DNS配置正确,因为我可以删除WCF的东西,并在网页上放一个临时的html页面,它可以工作。

---------------- UPDATE --------------------- 使用这个剥离配置后仍然有问题。我遗漏的几件事是这是x64操作系统,我使用城堡作为IoC。我确实运行了Frameword64 / aspnet_regiis.exe。

    <?xml version="1.0"?>
<configuration>
  <configSections>
    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/>
  </configSections>
  <connectionStrings>
    <add name="Main.ConnectionString" connectionString="data source=blah;initial catalog=newdatabase;User ID=web;Password=testing;persist security info=False;packet size=4096;" providerName="System.Data.SqlClient" />
  </connectionStrings>
   <system.web>
    <compilation targetFramework="4.0" />
    <httpModules>
      <add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" />
    </httpModules>
  </system.web>
  <castle>
    <properties>
      <myConnStr>data source=blah;initial catalog=newdatabase;User ID=web;Password=testing;persist security info=False;packet size=4096;" providerName="System.Data.SqlClient</myConnStr>
    </properties>
    <components>
      <component id="RestService" service="Namespace.Rest.IRestService, Namespace.Rest" type="Namespace.Rest.RestService, Namespace.Rest" lifestyle="PerWebRequest"/>
      <component id="Repository" service="Namespace.Domain.Interfaces.IRepository, Namespace.Domain" type="Namespace.Domain.Repository, Thumbfound.Domain" lifestyle="PerWebRequest">
        <parameters>
          <connectionString>#{myConnStr}</connectionString>
        </parameters>
      </component>
    </components>
  </castle>
   <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>
  </system.webServer>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/>
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>
</configuration>

2 个答案:

答案 0 :(得分:4)

  

又一次尝试失败了   使用WCF 休息(无svc文件)服务    basicHttpBinding 部署到IIS 7.5。

你的问题就在那里 - WCF REST 必须使用webHttpBinding - 而非 basicHttpBinding(这是 SOAP 绑定)。

答案 1 :(得分:1)

原来这是Castle Windsor配置问题。

我的问题的解决方法是删除<httpmodules>中的<system.web>部分,并将我的PerRequestLifestyleModule配置放在<modules>的{​​{1}}部分中。我想IIS 7在集成模式下不喜欢httpmodules。