Веб-сервис WCF позади общедоступного обратного прокси

Здесь вы изменили Fiddle .

Вам просто нужно изменить border:1px solid black; на border-bottom:1px solid black;, чтобы граница находилась только снизу.

Результат выглядит следующим образом:

Result

Вот полный CSS границы 2:

border-2 {
  flex:1 1 auto;
  border-bottom:1px solid black;
  height: 30px;
  border-bottom-left-radius: 3px;
  border-bottom-right-radius: 3px;
}

border-1 {
  width: 100px;
  height: 100px;
  background-color: #ccc;
  margin: 50px;
  border: 1px solid black;
  display: flex;
  border-radius: 3px;
}

border-2 {
  flex: 1 1 auto;
  border-bottom: 1px solid black;
  height: 30px;
  border-bottom-left-radius: 3px;
  border-bottom-right-radius: 3px;
}

  

  

8
задан Robert Mircea 8 November 2008 в 17:56
поделиться

3 ответа

У меня есть подобные проблемы, одна из которых была разрешением адресов сервера и общественности. Это решило ту проблему, хотя у меня все еще есть пара проблем аутентификации.

http://blogs.msdn.com/wenlong/archive/2007/08/02/how-to-change-hostname-in-wsdl-of-an-iis-hosted-service.aspx

1
ответ дан 5 December 2019 в 17:42
поделиться
0
ответ дан 5 December 2019 в 17:42
поделиться

К классу службы добавьте атрибут:

<ServiceBehavior(AddressFilterMode:=AddressFilterMode.Any)>

Это позволяет клиенту адресовать службу по адресу https: // ... но службу размещать на http: // ..... См. этот ответ , чтобы узнать, как создать расширение, позволяющее указывать AddressFilterMode.Any через конфигурацию, не требуя атрибутов кода.

В web.config хоста службы конечная точка Элемент должен иметь абсолютный URL-адрес в атрибуте адреса, который является общедоступным URL-адресом, который будет использоваться клиентом. В том же элементе конечной точки установите для атрибута listenUri абсолютный URL-адрес, который прослушивает узел службы. Способ определения абсолютного URI по умолчанию, который прослушивает хост, - это добавить ссылку на службу в клиентское приложение, которая указывает на физический сервер, на котором размещена служба. Паутина. config клиента будет иметь адрес службы. Затем я копирую это в атрибут listenUri в файле hosts web.config.

В конфигурацию поведения службы добавьте элемент serviceMetaData с атрибутом httpGetEnabled = true

Таким образом, вы получите что-то вроде:

<serviceBehaviors>
  <behavior name="myBehavior">
    <serviceMetadata httpGetEnabled="true" />
  </behavior
</serviceBehaviors>
...
<services>
  <service name="NamespaceQualifiedServiceClass" behavior="myBehavior" >
    <endpoint address="https://www.sslloadbalancer.com" binding="someBinding" contract="IMyServiceInterface" listenUri="http://www.servicehost.com" ...  />
  </service>
</services>

Я не уверен если это работает с безопасностью сообщений или безопасностью транспорта. Для этого конкретного приложения учетные данные были переданы как часть DataContract, поэтому у нас был режим безопасности basicHttpBinding = none. Поскольку транспорт безопасен (для балансировщика нагрузки ssl), проблем с безопасностью не возникало.

Также можно оставить атрибут listenUri пустым, однако он должен присутствовать.

К сожалению, в WCF есть ошибка, когда базовый адрес импортированных схем в WSDL имеет базовый адрес listenUri, а не общедоступный базовый адрес (тот, который настроен с использованием атрибута адреса конечной точки). Чтобы обойти эту проблему, необходимо создать реализацию IWsdlExportExtension, которая напрямую переносит импортированные схемы в документ WSDL и удаляет импорт. Пример этого приведен здесь http://winterdom.com/2006/10/inlinexsdinwsdlwithwcf . Кроме того, у вас может быть класс-пример, унаследованный от BehaviorExtensionElement, и дополнить два новых метода:

Public Overrides ReadOnly Property BehaviorType() As System.Type
    Get
        Return GetType(InlineXsdInWsdlBehavior)
    End Get
End Property

Protected Overrides Function CreateBehavior() As Object
    Return New InlineXsdInWsdlBehavior()
End Function

Это позволит вам добавить поведение расширения в файл .config и добавить поведение, используя конфигурацию, вместо того, чтобы создавать фабрику служб.

под элементом конфигурации system.servicemodel добавьте:

  <endpointBehaviors>
    <behavior name="SSLLoadBalancerBehavior">          
      <flattenXsdImports/>
    </behavior>
  </endpointBehaviors>
        </behaviors>
<extensions>
  <behaviorExtensions>
    <!--The full assembly name must be specified in the type attribute as of WCF 3.5sp1-->
    <add name="flattenXsdImports" type="Org.ServiceModel.Description.FlattenXsdImportsEndpointBehavior, Org.ServiceModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>        
  </behaviorExtensions>
</extensions>

А затем укажите новое поведение конечной точки в своей конфигурации конечной точки с помощью атрибута behaviorConfiguration

<endpoint address="" binding="basicHttpBinding" contract="WCFWsdlFlatten.IService1" behaviorConfiguration="SSLLoadBalancerBehavior">
9
ответ дан 5 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: