2012-09-28 68 views
4

我最近在運行Windows Server 2008上的IIS 7.5的開發Web服務器上安裝了4.5框架。安裝後,兩個Web服務開始出現相同的錯誤。這些Web服務是使用MS REST入門套件構建的。這是我得到的錯誤。WCF - 安裝.Net 4.5後發生衝突的端點

綁定實例已經關聯到偵聽URI。如果兩個端點想要共享相同的ListenUri,則它們也必須共享相同的綁定對象實例。兩個衝突的端點是在AddServiceEndpoint()調用,配置文件或AddServiceEndpoint()和config的組合中指定的。

下面是我們配置文件的system.service模型部分的一個副本。

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> 
    <bindings> 
     <webHttpBinding> 
     <binding> 
      <security mode="Transport" /> 
     </binding> 
     </webHttpBinding> 
     <wsHttpBinding> 
     <binding name="EnterpriseIdentityBinding" closeTimeout="00:01:00" 
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
      bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" 
      maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" 
      textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false"> 
      <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
      <reliableSession ordered="true" inactivityTimeout="00:10:00" 
      enabled="false" /> 
      <security mode="TransportWithMessageCredential"> 
      <transport clientCredentialType="None" proxyCredentialType="None" 
       realm="" /> 
      <message clientCredentialType="UserName" negotiateServiceCredential="true" 
       algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 

    <client> 
     <endpoint address="https://betaapps/EnterpriseIdentity/V1/UserService.svc" 
     binding="wsHttpBinding" bindingConfiguration="EnterpriseIdentityBinding" 
     contract="UserServiceWCF.IUserService" name="wsSecureUsers" /> 
     <endpoint address="https://betaapps/EnterpriseIdentity/V1/RoleService.svc" 
     binding="wsHttpBinding" bindingConfiguration="EnterpriseIdentityBinding" 
     contract="RoleServiceWCF.IRoleService" name="wsSecureRoles" /> 
    </client> 

    <standardEndpoints> 
     <webHttpEndpoint> 
     <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true"/> 
     </webHttpEndpoint> 
    </standardEndpoints> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceAuthorization principalPermissionMode="Custom"> 
      <authorizationPolicies> 
       <add policyType="Hsmv.Web.Security.IdentityModel.HttpContextWithRolesPolicy, Hsmv.Web.Security" /> 
      </authorizationPolicies> 
      </serviceAuthorization> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

任何想法,爲什麼安裝.NET 4.5之後會發生這個錯誤?

我想補充一點,我嘗試刪除這一部分,它沒有它的工作。

<webHttpBinding> 
     <binding> 
      <security mode="Transport" /> 
     </binding> 
</webHttpBinding> 

我用這個,因爲這個服務在ssl上運行。我聽說WCF 4.5會嘗試爲您創建綁定和端點,因此它們不需要位於web.config中。所以我想知道這部分是由WCF自動構建的,而不是必需的。或者我的想法不正確? 謝謝!

+0

感謝您報告此問題。我來自WCF團隊。我們現在正在研究這個問題。 – Praburaj

回答

1

我來自WCF團隊。感謝您報告此問題。 WCF團隊將繼續調查此問題以解決問題。在我們調查時,您可以通過在配置文件中明確配置webHttp端點來解決此問題。服務將像以前的行爲一樣。嘗試遵循這些簡單的步驟。

(我以你已經出版了這篇文章爲起點的配置文件)

  1. 註釋掉<standardEndpoints>標籤在你的配置文件:

    <! - <standardEndpoints>
    <webHttpEndpoint>
    < standardEndpoint NAME = 「」 helpEnabled = 「真」 automaticFormatSelectionEnabled = 「真」/ >
    </webHttpEndpoint >
    </standardEndpoints > - >

  2. 將此終點行爲添加到您的列表中,如下所示:

    <行爲>
    <endpointBehaviors>
    <行爲NAME = 「REST」 >
    < webHttp helpEnabled = 「真」 automaticFormatSelectionEnabled = 「真」/ >
    < /行爲>
    </endpointBehaviors >
    < /行爲>

  3. 像這樣在配置文件中顯式配置您的服務端點。要高亮的屬性值分別替換爲您服務類型名稱和合同名稱(注意:如果你沒有爲服務定義的合同,然後在合同中插入服務類型名稱=」」太)

    <服務>
    <服務名稱= 「WcfRestService1.Service1」 >
    <端點地址= 「」 綁定= 「的WebHttpBinding」 合同= 「WcfRestService1.Service1」 behaviorConfiguration = 「REST」/ >
    < /服務>
    </SERV冰>

0

在我的情況下,一旦我刪除從web.config中<security/>標籤的問題就迎刃而解了。我將它設置爲「無」,所以這可能不適用於您的特定情況。