“如何修复”;找不到与架构http匹配的基址“;。。。在WCF中

“如何修复”;找不到与架构http匹配的基址“;。。。在WCF中,wcf,iis,basichttpbinding,Wcf,Iis,Basichttpbinding,我正在尝试将WCF服务部署到托管在IIS中的服务器。当然,它在我的机器上工作:) 但当我部署它时,会出现以下错误: 此集合已包含一个 使用http方案的地址。有 在中,每个方案最多只能有一个地址 这个收藏 通过谷歌搜索,我发现我必须将serviceHostingEnvironment元素放入web.config文件中: <serviceHostingEnvironment> <baseAddressPrefixFilters> <add prefix="

我正在尝试将WCF服务部署到托管在IIS中的服务器。当然,它在我的机器上工作:)

但当我部署它时,会出现以下错误:

此集合已包含一个 使用http方案的地址。有 在中,每个方案最多只能有一个地址 这个收藏

通过谷歌搜索,我发现我必须将serviceHostingEnvironment元素放入web.config文件中:

<serviceHostingEnvironment>
  <baseAddressPrefixFilters>
    <add prefix="http://mywebsiteurl"/>
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>
<system.serviceModel>
  <serviceHostingEnvironment>
    <baseAddressPrefixFilters>
      <add prefix="http://mywebsiteurl"/>
    </baseAddressPrefixFilters>
  </serviceHostingEnvironment>

  <behaviors>
    <serviceBehaviors>
      <behavior name="WcfPortalBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_IWcfPortal"
               maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
               receiveTimeout="00:10:00" sendTimeout="00:10:00"
               openTimeout="00:10:00" closeTimeout="00:10:00">
        <readerQuotas maxBytesPerRead="2147483647" maxArrayLength="2147483647"
               maxStringContentLength="2147483647"/>
      </binding>
    </basicHttpBinding>
  </bindings>

  <services>
    <service behaviorConfiguration="WcfPortalBehavior" name="Csla.Server.Hosts.Silverlight.WcfPortal">
      <endpoint address="" binding="basicHttpBinding" contract="Csla.Server.Hosts.Silverlight.IWcfPortal"
      bindingConfiguration="BasicHttpBinding_IWcfPortal">
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>

但一旦我做到了这一点,我会得到以下结果:

找不到一个 匹配端点的http方案 具有绑定BasicHttpBinding。 注册基址方案包括 [https]

它似乎不知道基址是什么,但如何指定它?以下是我的web.config文件的相关部分:

<serviceHostingEnvironment>
  <baseAddressPrefixFilters>
    <add prefix="http://mywebsiteurl"/>
  </baseAddressPrefixFilters>
</serviceHostingEnvironment>
<system.serviceModel>
  <serviceHostingEnvironment>
    <baseAddressPrefixFilters>
      <add prefix="http://mywebsiteurl"/>
    </baseAddressPrefixFilters>
  </serviceHostingEnvironment>

  <behaviors>
    <serviceBehaviors>
      <behavior name="WcfPortalBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
    <basicHttpBinding>
      <binding name="BasicHttpBinding_IWcfPortal"
               maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"
               receiveTimeout="00:10:00" sendTimeout="00:10:00"
               openTimeout="00:10:00" closeTimeout="00:10:00">
        <readerQuotas maxBytesPerRead="2147483647" maxArrayLength="2147483647"
               maxStringContentLength="2147483647"/>
      </binding>
    </basicHttpBinding>
  </bindings>

  <services>
    <service behaviorConfiguration="WcfPortalBehavior" name="Csla.Server.Hosts.Silverlight.WcfPortal">
      <endpoint address="" binding="basicHttpBinding" contract="Csla.Server.Hosts.Silverlight.IWcfPortal"
      bindingConfiguration="BasicHttpBinding_IWcfPortal">
      </endpoint>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>


有人能解释一下发生了什么以及如何修复它吗?

您的IIS是否有可能配置为在连接到您的站点/应用程序时需要SSL?

如果它托管在IIS中,则无需指定基址,它将是虚拟目录的地址。

应该有一种方法可以很容易地解决这个问题,使用外部配置部分和额外的部署步骤,将特定于部署的外部.config文件放到已知位置。我们通常使用此解决方案为不同的部署环境(登台、QA、生产等)处理不同的服务器配置,如果没有发生特殊拷贝,则默认使用“dev box”

确认了我的修复:

在web.config文件中,应将其配置为:

<system.serviceModel >
    <serviceHostingEnvironment configSource=".\Configurations\ServiceHosting.config" />
    ...
基本serviceHosting.config应如下所示:

/web.config
/Configurations/ServiceHosting.config
/Configurations/Deploy/ServiceHosting.config
<?xml version="1.0"?>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
        <add prefix="http://myappname.web707.discountasp.net"/>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>

而/Deploy中的一个如下所示:

/web.config
/Configurations/ServiceHosting.config
/Configurations/Deploy/ServiceHosting.config
<?xml version="1.0"?>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
    <baseAddressPrefixFilters>
        <add prefix="http://myappname.web707.discountasp.net"/>
    </baseAddressPrefixFilters>
</serviceHostingEnvironment>

除此之外,您还需要添加一个手动或自动部署步骤,以便将文件从/Deploy复制到/Configurations中的文件之上。这对于服务地址和连接字符串非常有效,并且节省了其他解决方法的工作量


如果你不喜欢这种方法(它对农场很好,但是在单机上比较弱),你可以考虑从Web.CONFIG文件中添加一个从主机机器上的服务部署升级的级别,并将Service HooPosialEngress节点放在那里。它应该为您级联。

如果您想在web.config中使用BaseAddressPrefixFilter,您还必须设置IIS(6)。这帮助了我:

1/在IIS中查找您的站点。 2/属性/网站(选项卡)/IP地址->高级按钮
3/在您将在web.config中使用的同一端口上添加新主机头。

尝试将安全模式从“传输”更改为“无”


我必须对站点/应用程序的IIS配置做两件事。我的问题与让net.tcp在IIS网站应用程序中工作有关:

第一:

  • 右键单击IIS应用程序名称
  • 管理网站
  • 高级设置
  • 将启用的协议设置为“http,net.tcp”
  • 第二:

  • 在管理器右侧的操作菜单下,单击绑定
  • 单击添加
  • 将类型更改为“net.tcp”
  • 将绑定信息设置为{打开端口号}:*

  • 只有列表中的第一个基址将被接管(来自IIS)。
    在.NET4之前,每个方案不能有多个基址。

    解决方案是在Web.Config文件中定义自定义绑定,并将安全模式设置为“传输”。然后,您只需要在端点定义中使用bindingConfiguration属性来指向自定义绑定


    请参见此处:

    嘿,克雷格,你解决了这个问题吗?请让我。。。我现在面临着同样的问题:(有最终的解决方案吗?非常好-我只是为了本地调试而将一个端点从https更改为http,而忘记了将安全模式=“传输”更改为安全模式=“无”.Fixed。我收到了相同的错误,@tomasr和IIS被配置为需要SSL。这会是一个问题吗?有什么办法解决这个问题吗?