2009-07-06 127 views
4

我有兩個服務,通過配置文件配置。他們每個人都聽一個http和一個https地址。問題是如何配置端口。如果我配置HTTP端口相同的值和HTTPS端口到另一個值,調試,整個項目我得到了WCF服務主機以下錯誤消息時:WCF端口配置錯誤

狀態:錯誤 System.ServiceModel.AddressAlreadyInUseException: HTTP無法註冊URL https://+:8002/Services/xxxService/ 因爲TCP端口8002正在被另一個應用程序 使用。 ---> System.Net.HttpListenerException:如果我配置了四個端口(HTTP和HTTPS)有不同的價值觀,沒有因爲 它正被另一個進程使用

的 進程無法訪問該文件的https值是在IIS中配置和認證的ssl端口的值,服務調用時出現以下異常(但這兩項服務均在WCF服務主機中啓動):

發生錯誤 HTTP請求至 https://localhost:8000/Services/yyyService/。 這可能是由於以下事實: 服務器證書未在HTTPS 的情況下正確使用HTTP.SYS配置爲 。這也可能是由客戶端和服務器之間的安全綁定 的 不匹配造成的。

如果我將第一個服務配置爲使用SSL端口(443),那麼只會啓動第二個服務(具有「錯誤」https端口的服務)。服務爲先再次出現錯誤信息是:

System.ServiceModel.AddressAlreadyInUseException:因爲TCP端口443正在使用由 另一個應用程序 HTTP不能註冊網址 https://+:443/Services/xxxService/ 。 ---> System.Net.HttpListenerException:因爲 它正在被另一個進程使用

在此之上的 進程無法訪問該文件,我得到一個異常,撥打第二服務時:

將 HTTP請求設置爲 https://localhost/Services/yyyService/時發生錯誤。 這可能是由於以下事實: 服務器證書未在HTTPS 的情況下正確使用HTTP.SYS配置爲 。這也可能是由客戶端和服務器之間的安全綁定 的 不匹配造成的。

當我將兩個服務都配置爲使用https:https:/// 443時,那麼沒有任何東西可以開始。而且我會遇到各種奇怪的異常 - clientcredentials是隻讀的,握手會遇到意想不到的包格式,有關遠程地址等等。

我已經在網絡中配置了這兩個地址。配置如下:

<baseAddresses> 
      <add baseAddress="http://localhost:port1/Services/xxxService/" /> 
      <add baseAddress="https://localhost:port2/Services/xxxService/" /> 
      </baseAddresses> 

[...] 

<baseAddresses> 
      <add baseAddress="http://localhost:port3/Services/yyyService/" /> 
      <add baseAddress="https://localhost:port4/Services/yyyService/" /> 
      </baseAddresses> 

我一直在試圖運行這件事情兩天了,所以任何地方將不勝感激。

PS。在Visual Studio中,我將IIS配置爲開發服務器,而不是內置的Visual Studio Web開發服務器。

編輯:

<system.serviceModel> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

    <services> 
     <service name="namespace.xxxService" 
       behaviorConfiguration="default"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8000/Services/xxxService/" /> 
      <add baseAddress="https://localhost:8001/Services/xxxService/" /> 
      </baseAddresses> 
     </host> 
     <endpoint address="" 
        binding="wsHttpBinding" 
        bindingConfiguration="defaultWsHttpBinding" 
        contract="namespace.IxxxService" /> 

     <endpoint address="mex/" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" 
        bindingConfiguration="" /> 
     </service> 
     <service name="namespace.yyyService" behaviorConfiguration="default"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8003/Services/yyyService/" /> 
      <add baseAddress="https://localhost:8004/Services/yyyService/" /> 
      </baseAddresses> 
     </host> 
     <endpoint address="" 
        binding="wsHttpBinding" 
        bindingConfiguration="defaultWsHttpBinding" 
        contract="namespace.IyyyService" /> 

     <endpoint address="mex/" 
        binding="mexHttpBinding" 
        contract="IMetadataExchange" /> 
     </service> 
    </services> 

    <client> 
<endpoint address="https://localhost:8001/Services/xxxService/" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IxxxService" 
      contract="namespace.IxxxService" name="WSHttpBinding_IxxxService" /> 
     <endpoint address="https://localhost:8001/Services/yyyService/" 
      binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IyyyService" 
      contract="namespace.IyyyService" name="WSHttpBinding_IyyyService" /> 

    </client> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name="default"> 
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 

      <serviceCredentials> 
      <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" 
            membershipProviderName="SqlMembershipProvider" /> 
      </serviceCredentials> 

      <serviceAuthorization principalPermissionMode="UseAspNetRoles" 
           roleProviderName="SqlRoleProvider" /> 

     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

    <bindings> 

     <wsHttpBinding> 
     <binding name="defaultWsHttpBinding"> 
      <security mode="TransportWithMessageCredential"> 
      <message clientCredentialType="UserName" /> 
      <transport clientCredentialType="None" /> 
      </security> 
     </binding> 

     <binding name="WSHttpBinding_IyyyService" 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" establishSecurityContext="true" /> 
      </security> 
     </binding> 
     <binding name="WSHttpBinding_IxxxService" 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" establishSecurityContext="true" /> 
      </security> 
     </binding> 
     </wsHttpBinding> 

    </bindings> 

    </system.serviceModel> 
+0

您能否發佈您的整個/配置部分?這將是非常有益的 - 謝謝! – 2009-07-06 12:28:36

回答

1

你的錯誤「服務器證書未正確配置」可以用「localhost」的訪問服務涉及到你。您的證書可能使用其他內容,例如機器名稱。

嘗試將地址更改爲機器名稱。

您還需要在配置中指定您正在使用https端點的傳輸安全性。