Настройка WCF 4 с маршрутизацией (global.asax) для конечных точек http и https - PullRequest
7 голосов
/ 16 июня 2010

Я все еще новичок с wcf и не очень хорошо осведомлен в .net в целом.У меня есть веб-сервис WCF 4, который использует подход маршрутизации global.asax и очень упрощенный web.config с использованием стандартного метода конечной точки.Эта служба wcf в настоящее время работает как приложение с веб-сайтом по умолчанию на iis 7.5.Мне нужно, чтобы он поддерживал интерфейсы http и https, если это возможно.Если это слишком сложно, то только https.Как лучше всего поддерживать текущий подход?

Содержимое файлов global.asax.cs и web.config довольно простое:

public class Global : HttpApplication
{
    void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes();
    }

    private void RegisterRoutes()
    {
        // Edit the base address of Service1 by replacing the "ippay" string below
        RouteTable.Routes.Add(new ServiceRoute("myservice", new WebServiceHostFactory(),   
typeof(myservice)));     
    }
}


<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
<webHttpEndpoint>
     <standardEndpoint name="" helpEnabled="true"    contentTypeMapper="myservice.Util.RawMapper,myservice">
        </standardEndpoint>
  </webHttpEndpoint>
</standardEndpoints>

Ответы [ 2 ]

9 голосов
/ 13 октября 2010

Я нашел ответ: вам просто нужно поместить этот фрагмент в ваш web.config в тег serviceModel:

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

Благодаря этому сообщению: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/1dd991a1-e32f-4035-a406-994729858b40

Мой полный файл web.config:

<?xml version="1.0"?> <configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />   </system.web>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
    </modules>   </system.webServer>

  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <bindings>
      <webHttpBinding>
        <binding>
          <security mode="Transport" />
        </binding>
      </webHttpBinding>
    </bindings>
    <standardEndpoints>
      <webHttpEndpoint>
        <!-- 
            Configure the WCF REST service base address via the global.asax.cs file and the default endpoint 
            via the attributes on the <standardEndpoint> element below
        -->
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true">
          <security mode="Transport" >

          </security>
        </standardEndpoint>
      </webHttpEndpoint>
    </standardEndpoints>   </system.serviceModel> </configuration>
3 голосов
/ 05 апреля 2012

Вышеописанное работает, если вы не хотите использовать HTTP и HTTPS.В моем случае я хочу и то и другое, потому что некоторые сервисы требуют SSL (аутентификация), а другие нет, так как предоставляемая ими информация не является конфиденциальной.Реализация сервисов аутентификации проводит собственную валидацию и отказывается отвечать, если запрос не поступил от схемы https.

Приведенная ниже конфигурация работает, если вы хотите настроить HTTP и HTTPS на одной конечной точке.*

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding>
          <security mode="Transport" />
        </binding>
        <binding name="UnsecureBinding"></binding>
      </webHttpBinding>
    </bindings>
    <protocolMapping>
      <add scheme="http" binding="webHttpBinding" bindingConfiguration="UnsecureBinding" />
    </protocolMapping>
    <standardEndpoints>
      <webHttpEndpoint>
        <standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" />
      </webHttpEndpoint>
    </standardEndpoints>
  </system.serviceModel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...