HTTP&HTTP WCF Services

| 我可以拥有同时具有HTTP(基本http绑定)和HTTPS(基本http绑定)绑定的WCF服务项目吗?例如,我将有: https:// localhost:44303 / ServiceA.svc http:// localhost:12345 / ServiceB.svc 将它们放在单独的服务项目中(在部署应用程序时放在单独的站点中)会有任何好处吗?     
已邀请:
        如果已经具有HTTP绑定,则无需更改代码即可添加HTTPS绑定。这是WCF的一大优势。您无需添加单独的站点,只需将新端点添加到配置文件。 以下是同时使用HTTP和HTTPS进行配置的示例。 您可以看到有两个命名的绑定:notSecureBinding和secureBinding,它们对应于HTTP和HTTPS。
  <bindings>
    <basicHttpBinding>
      <binding name=\"notSecureBinding\"
               maxBufferSize=\"2147483647\"
               maxReceivedMessageSize=\"2147483647\">
        <security mode=\"None\"/>
      </binding>
      <binding name=\"secureBinding\"
               maxBufferSize=\"2147483647\"
               maxReceivedMessageSize=\"2147483647\">
        <security mode=\"Transport\">
          <transport clientCredentialType=\"None\"/>
        </security>
      </binding>
    </basicHttpBinding>
  </bindings>
  <behaviors>
    <serviceBehaviors>
      <behavior name=\"StandardServiceBehavior\">
        <serviceMetadata httpGetEnabled=\"true\"/>
        <serviceDebug includeExceptionDetailInFaults=\"true\"/>
        <serviceAuthorization principalPermissionMode=\"None\"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration=\"StandardServiceBehavior\"
             name=\"ServiceName\">
      <endpoint address=\"\"
                binding=\"basicHttpBinding\"
                bindingConfiguration=\"notSecureBinding\"
                contract=\"Namespace.IService\"/>
      <endpoint address=\"\"
                binding=\"basicHttpBinding\"
                bindingConfiguration=\"secureBinding\"
                contract=\"Namespace.IService\"/>
      <endpoint address=\"mex\"
                binding=\"mexHttpBinding\"
                contract=\"IMetadataExchange\"/>
    </service>
  </services>
    
        我试图这样做,当我尝试使用我的安全服务时,出现以下错误:
 The HTML document does not contain Web service discovery information. Metadata contains a reference that cannot be resolved: \'https://localhost:44304/ExternalOrderProcessing.svc\'. There was no endpoint listening at https://localhost:44304/ExternalOrderProcessing.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. The remote server returned an error: (404) Not Found.If the service is defined in the current solution, try building the solution and adding the service reference again.
当我尝试使用不安全的服务时,出现以下错误:
 The HTML document does not contain Web service discovery information. Metadata contains a reference that cannot be resolved: \'http://localhost:5000/LegacyOrderProcessing.svc\'. Content Type application/soap+xml; charset=utf-8 was not supported by service http://localhost:5000/LegacyOrderProcessing.svc.  The client and service bindings may be mismatched. The remote server returned an error: (415) Cannot process the message because the content type \'application/soap+xml; charset=utf-8\' was not the expected type \'text/xml; charset=utf-8\'.. If the service is defined in the current solution, try building the solution and adding the service reference again.
我正在IIS Express中运行它。我已将项目设置为允许SSL。我的配置如下:
<services>
  <service name=\"ExternalOrderProcessing\" behaviorConfiguration=\"SecureBehavior\">
    <endpoint address=\"\" binding=\"basicHttpBinding\" bindingConfiguration=\"BasicHttpBindingSecure\" contract=\"IExternalOrderProcessing\" />
    <endpoint address=\"mex\" binding=\"mexHttpBinding\" contract=\"IMetadataExchange\"/>
  </service>
  <service name=\"LegacyOrderProcessing\" behaviorConfiguration=\"UnsecureBehavior\">
    <endpoint address=\"\" binding=\"basicHttpBinding\" bindingConfiguration=\"BasicHttpBinding\" contract=\"ILegacyOrderProcessing\" />
    <endpoint address=\"mex\" binding=\"mexHttpBinding\" contract=\"IMetadataExchange\"/>
  </service>
</services>

<behaviors>
  <serviceBehaviors>
    <behavior name=\"SecureBehavior\">
      <serviceMetadata httpsGetEnabled=\"true\" httpsGetUrl=\"\"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults=\"true\"/>
      <serviceCredentials>
        <serviceCertificate findValue=\"localhost\" storeLocation=\"LocalMachine\" storeName=\"My\" x509FindType=\"FindBySubjectName\" />
        <clientCertificate>
          <authentication certificateValidationMode=\"None\" />
        </clientCertificate>
      </serviceCredentials>
    </behavior>
    <behavior name=\"UnsecureBehavior\">
      <serviceMetadata httpGetEnabled=\"true\" httpGetUrl=\"\"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults=\"true\"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

<bindings>

  <basicHttpBinding>
    <!-- Used by external order processing service -->
    <binding name=\"BasicHttpBindingSecure\"
            hostNameComparisonMode=\"StrongWildcard\"
            maxBufferSize=\"2147483647\"
            maxReceivedMessageSize=\"2147483647\"
            receiveTimeout=\"00:05:00\"
            sendTimeout=\"00:05:00\"
            openTimeout=\"00:05:00\"
            closeTimeout=\"00:05:00\">
      <readerQuotas maxArrayLength=\"2147483647\"/>
      <security mode=\"TransportWithMessageCredential\">
        <transport clientCredentialType=\"Certificate\" proxyCredentialType=\"None\" realm=\"\" />
        <message clientCredentialType=\"Certificate\" algorithmSuite=\"Default\"  />
      </security>
    </binding>
    <!-- Used to create binding to internal order processing service -->
    <binding name=\"BasicHttpBinding\"
            hostNameComparisonMode=\"StrongWildcard\"
            maxBufferSize=\"2147483647\"
            maxReceivedMessageSize=\"2147483647\"
            receiveTimeout=\"00:05:00\"
            sendTimeout=\"00:05:00\"
            openTimeout=\"00:05:00\"
            closeTimeout=\"00:05:00\">
      <readerQuotas maxArrayLength=\"2147483647\"/>
      <security mode=\"None\" />
    </binding>
  </basicHttpBinding>

</bindings>

<serviceHostingEnvironment multipleSiteBindingsEnabled=\"true\" />
如果我将服务放入两个单独的项目中,那么它将起作用。这样做时,我会忽略配置中的services部分,并删除名称= \“ BasicHttpBindingSecure \”和名称= \“ SecureBehavior \”。     

要回复问题请先登录注册