如何在 WCF WsHttp 绑定上启用 HTTPS

How to Enable HTTPS on WCF WsHttp bindings

您好,我正在尝试在 https 上启用我的 wcf 服务 运行,但我收到此错误

找不到配置绑定扩展 'system.serviceModel/bindings/true'。确认此绑定扩展已在系统中正确注册。serviceModel/extensions/bindingExtensions 并且拼写正确。

任何人都可以让我知道我哪里出错了。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
   <system.web>
      <compilation debug="true" />
      <authentication mode="None"/>
      <httpRuntime maxRequestLength="2097151"   />
      <hostingEnvironment shadowCopyBinAssemblies="false"/>
      <pages compilationMode="Never"/>
   </system.web>      
   <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
   <system.serviceModel>
      <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />

      <services>
         <service name="MyWebApp.Medical.WebViewer.Wcf.StoreService" behaviorConfiguration="WebViewerServiceBehavior">
            <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IStoreService" behaviorConfiguration="WebViewerServiceBehavior" bindingConfiguration="HandleLargeData"/>
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
         </service>

        <service name="MyWebApp.Medical.WebViewer.Wcf.PatientService" behaviorConfiguration="WebViewerServiceBehavior">
          <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IPatientService" behaviorConfiguration="WebViewerServiceBehavior" bindingConfiguration="HandleLargeData"/>
          <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
        </service>

         <service name="MyWebApp.Medical.WebViewer.Wcf.ObjectQueryService" behaviorConfiguration="WebViewerServiceBehavior">
            <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IObjectQueryService" behaviorConfiguration="WebViewerServiceBehavior">
            </endpoint>         
            <endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration="" contract="IMetadataExchange">         
            </endpoint>
         </service>
         <service name="MyWebApp.Medical.WebViewer.Wcf.ObjectRetrieveService" behaviorConfiguration="WebViewerServiceBehavior">
            <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IObjectRetrieveService" behaviorConfiguration="WebViewerServiceBehavior">
            </endpoint>
         </service>
         <service name="MyWebApp.Medical.WebViewer.Wcf.PacsQueryService" behaviorConfiguration="WebViewerServiceBehavior">
            <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IPACSQueryService" behaviorConfiguration="WebViewerServiceBehavior">
            </endpoint>
            <!-- Metadata Endpoints -->
            <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. -->
            <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
         </service>
         <service name="MyWebApp.Medical.WebViewer.Wcf.PACSRetrieveService" behaviorConfiguration="WebViewerServiceBehavior">
            <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IPACSRetrieveService" behaviorConfiguration="WebViewerServiceBehavior">
            </endpoint>
         </service>
         <service name="MyWebApp.Medical.WebViewer.Wcf.AuthenticationService" behaviorConfiguration="WebViewerServiceBehavior">
            <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IAuthenticationService" behaviorConfiguration="WebViewerServiceBehavior">
            </endpoint>
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
         </service>
         <service name="MyWebApp.Medical.WebViewer.Wcf.PatientAccessRightsService" behaviorConfiguration="WebViewerServiceBehavior">
            <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IPatientAccessRightsService" behaviorConfiguration="WebViewerServiceBehavior">
            </endpoint>
         </service>
         <service name="MyWebApp.Medical.WebViewer.Wcf.AnnotationsService" behaviorConfiguration="WebViewerServiceBehavior">
            <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IAnnotationsService" behaviorConfiguration="WebViewerServiceBehavior" bindingConfiguration="HandleLargeData">
            </endpoint>
         </service>
          <service name="MyWebApp.Medical.WebViewer.Wcf.OptionsService" behaviorConfiguration="WebViewerServiceBehavior">
              <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IOptionsService" behaviorConfiguration="WebViewerServiceBehavior">
              </endpoint>
          </service>
          <service name="MyWebApp.Medical.WebViewer.Wcf.AuditLogService" behaviorConfiguration="WebViewerServiceBehavior">
              <endpoint address="" binding="webHttpBinding" contract="MyWebApp.Medical.WebViewer.ServiceContracts.IAuditLogService" behaviorConfiguration="WebViewerServiceBehavior">
              </endpoint>
          </service>
          <service name="MyWebApp.Medical.WebViewer.Wcf.ExportService"
                  behaviorConfiguration="WebViewerServiceBehavior">
              <endpoint address=""
      binding="webHttpBinding"
      contract="MyWebApp.Medical.WebViewer.ServiceContracts.IExportService"
      behaviorConfiguration="WebViewerServiceBehavior"
      bindingConfiguration="HandleLargeData">
              </endpoint>
          </service>
          <service name="MyWebApp.Medical.WebViewer.Wcf.MonitorCalibrationService"
                  behaviorConfiguration="WebViewerServiceBehavior">
              <endpoint address=""
      binding="webHttpBinding"
      contract="MyWebApp.Medical.WebViewer.ServiceContracts.IMonitorCalibrationService"
      behaviorConfiguration="WebViewerServiceBehavior"
      bindingConfiguration="HandleLargeData">
              </endpoint>
          </service>
          <service name="MyWebApp.Medical.WebViewer.Wcf.WorklistService"
                  behaviorConfiguration="WebViewerServiceBehavior">
              <endpoint address=""
      binding="webHttpBinding"
      contract="MyWebApp.Medical.WebViewer.ServiceContracts.IWorklistService"
      behaviorConfiguration="WebViewerServiceBehavior"
      bindingConfiguration="HandleLargeData">
              </endpoint>
          </service>
      </services>
      <extensions>
        <bindingExtensions>
          <add name="basic" type="basicHttpBinding"/>
          <add name="webBind" type="webHttpBinding"/>
          <add name="ws*bind" type="wsHttpBinding"/>
        </bindingExtensions>
         <behaviorExtensions>
            <add name="jsonWebHttp" type="MyWebApp.Dicom.Services.ErrorHandler.JsonErrorWebHttpBehaviorElement, MyWebApp.Medical.WebViewer.WCF" />
            <add name="CorsSupport" type="MyWebApp.Wcf.CorsSupportBehaviorElement, MyWebApp.Wcf.WebHttpCorsBehavior" />
         </behaviorExtensions>
      </extensions>
      <bindings>
         <webHttpBinding>

            <binding name="HandleLargeData"  maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" receiveTimeout="01:00:00" openTimeout="01:00:00" closeTimeout="01:00:00" sendTimeout="01:00:00">
              <security mode="Transport">
                <transport clientCredentialType="None"/>
              </security>
               <readerQuotas maxDepth="2147483647"
                  maxStringContentLength="2147483647"
                  maxArrayLength="2147483647"
                  maxBytesPerRead="2147483647"
                  maxNameTableCharCount="2147483647" />
            </binding>
         </webHttpBinding>
      </bindings>
      <behaviors>
         <serviceBehaviors>
            <behavior name="WebViewerServiceBehavior">
               <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
               <!--<serviceMetadata httpGetEnabled="true" httpGetUrl="anonymous" />-->
              <serviceMetadata  httpsGetBinding="true"  httpsGetUrl="anonymous" />
               <!-- 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>
         <endpointBehaviors>
            <behavior name="WebViewerServiceBehavior">
               <webHttp />
               <jsonWebHttp />
               <CorsSupport />
            </behavior>
         </endpointBehaviors>
      </behaviors>
   </system.serviceModel>
   <connectionStrings>
   </connectionStrings>
   <appSettings>

   </appSettings>
    <system.webServer>
        <staticContent>
            <remove fileExtension=".dcz"/>
            <mimeMap fileExtension=".dcz" mimeType="application/x-zip-compressed" />
        </staticContent>
    </system.webServer>
</configuration>

您似乎已将 httpsGetBinding 设置为未定义的绑定。

尝试改变这个:

 <serviceMetadata  httpsGetBinding="true"  httpsGetUrl="anonymous" />

对此:

 <serviceMetadata httpsGetEnabled="true" />

您还为绑定提供了一个名称 - 'HandleLargeData'。只有在 bindingConfiguration 属性 中明确设置它的服务才会使用它。也许这就是您想要的,但只是需要注意的事情。