【问题标题】:How to Enable HTTPS on WCF WsHttp bindings如何在 WCF WsHttp 绑定上启用 HTTPS
【发布时间】:2016-10-20 07:41:07
【问题描述】:

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

找不到配置绑定扩展“system.serviceModel/bindings/true”。验证此绑定扩展已在 system.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>

【问题讨论】:

  • 不清楚您在使用自定义 bindingExtensions 做什么。我相信如果您删除这些节点,它会起作用。
  • 我试过了,但是没用

标签: asp.net web-services wcf wcf-binding wcf-security


【解决方案1】:

看起来您已将 httpsGetBinding 设置为未定义的绑定。

尝试改变这个:

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

到这里:

 <serviceMetadata httpsGetEnabled="true" />

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2013-01-14
    • 2011-04-28
    • 2013-08-15
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多