powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Один wcf сервис для http и https
14 сообщений из 14, страница 1 из 1
Один wcf сервис для http и https
    #37107847
rinat mergenbaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Есть асп.нет сайт 4.0. Сайт должен работать по http и https.
Сайт работает.
Также на сайте есть вызовы jquery к wcf, который хостится в этом же сайте.
Сейчас у меня работает либо по http либо по https - в зависимости от параметров в конфиге.

Вот такой конфиг (кусок из веб конфига) работает под https

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<system.serviceModel>
        <bindings>
            <webHttpBinding>
                <binding name="webHttpsBinding">
                    <security mode="Transport">
                        <transport clientCredentialType="None"/>
                    </security>
                </binding>
            </webHttpBinding>
        </bindings>
        <behaviors>
            <endpointBehaviors>
                <behavior name="HMS.DataServices.PaymentsServiceBehavior">
                    <enableWebScript />
                </behavior>
            </endpointBehaviors>
            <serviceBehaviors>
                <behavior name="HMS.DataServices.PaymentsServiceBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service name="HMS.DataServices.PaymentsService">

                <!--HTTP-->
                <endpoint address="" binding="webHttpBinding" contract="HMS.DataServices.IPaymentsService" 
                          behaviorConfiguration="HMS.DataServices.PaymentsServiceBehavior" />

                <!--HTTPS-->
                <endpoint address="" binding="webHttpBinding" bindingConfiguration="webHttpsBinding" 
                          contract="HMS.DataServices.IPaymentsService"  behaviorConfiguration="HMS.DataServices.PaymentsServiceBehavior" />
            </service>
        </services>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    </system.serviceModel>

Обращу внимание, что в даном сценарии вызовы по http доходят до сервера и в виндовом логе я вижу сообщение
авторThe exception message is: Could not find a base address that matches scheme https for the endpoint with binding WebHttpBinding. Registered base address schemes are [http].

Если закомментить endpoint <!--HTTPS--> то будет работать по http.

Есть у кого идеи что чинить?
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37108655
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну а ежели в endpoint-ах указать полный адрес (и для http и для https), что будет?
кстати, в конфиге какая-то путаница с webHttpBinding/webHttpsBinding (для http security mode="Transport" не должно быть)
(на всякий случай в serviceBehaviors <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>)
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37108757
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня вот-так, работают оба
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<bindings>
<webHttpBinding>
 <binding name="Secure">
  <security mode="Transport" /> 
  </binding>
 <binding name="NotSecure">
  <security mode="None" /> 
  </binding>
  </webHttpBinding>
  </bindings>
...
 <services>
 <service name="ServiceName">
  <endpoint address="" behaviorConfiguration="Behavior" binding="webHttpBinding" contract="Contract
  " bindingConfiguration="Secure" /> 
  <endpoint address="" behaviorConfiguration="Behavior" binding="webHttpBinding" contract="Contract"
    bindingConfiguration="NotSecure" /> 
  </service>

</services>

...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37109154
rinat mergenbaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gatmanу меня вот-так, работают оба
...


а код вызова wcf через jquery можно глянуть
и еще, какая операционка?

у меня вот такой конфиг не работает под https, пока не закомменчу HTTPS endpoint

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
	<!-- WCF -->
	<system.serviceModel>
		<bindings>
			<webHttpBinding>
				<binding name="webHttpsPaymentBinding">
					<security mode="Transport" />
				</binding>
				<binding name="webHttpPaymentBinding">
					<security mode="None" />
				</binding>
			</webHttpBinding>
		</bindings>
		<behaviors>
			<endpointBehaviors>
				<behavior name="HMS.DataServices.PaymentsServiceBehavior">
					<enableWebScript />
				</behavior>
			</endpointBehaviors>
			<serviceBehaviors>
				<behavior name="HMS.DataServices.PaymentsServiceBehavior">
					<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
					<serviceDebug includeExceptionDetailInFaults="false" />
				</behavior>
			</serviceBehaviors>
		</behaviors>
		<services>
			<service name="HMS.DataServices.PaymentsService">
				
				<!--HTTP-->
				<endpoint address="http://localhost/..../PaymentsService.svc" binding="webHttpBinding" bindingConfiguration="webHttpPaymentBinding"  
						  contract="HMS.DataServices.IPaymentsService" behaviorConfiguration="HMS.DataServices.PaymentsServiceBehavior" listenUri="/" />
				
				<!--HTTPS-->
				<!--<endpoint address="https://localhost:2348/..../PaymentsService.svc"" binding="webHttpBinding" bindingConfiguration="webHttpsPaymentBinding" 
						  contract="HMS.DataServices.IPaymentsService"  behaviorConfiguration="HMS.DataServices.PaymentsServiceBehavior" listenUri="/" />-->
			</service>
		</services>
		<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
	</system.serviceModel> 	

2 LR сделал - конфиг выше - не помогло.
вот такой еррор если оба endpoint-a раскомментить в конфиге. при этом по ссылке https в браузере сервис виден

Код: plaintext
The exception message is: When 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' is set to true in configuration, the endpoints are required to specify a relative address. If you are specifying a relative listen URI on the endpoint, then the address can be absolute. To fix this problem, specify a relative uri for endpoint 
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37109273
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
операционка Windows 7 x64 и Windows 2008 Server
вызов стандартный, $.getJSON
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37109426
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinat mergenbaevвот такой еррор если оба endpoint-a раскомментить в конфиге
ну а если multipleSiteBindingsEnabled="false"? или есть необходимость multipleSiteBindingsEnabled="true"?
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37109652
rinat mergenbaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRrinat mergenbaevвот такой еррор если оба endpoint-a раскомментить в конфиге
ну а если multipleSiteBindingsEnabled="false"? или есть необходимость multipleSiteBindingsEnabled="true"?

попробовал - та же ошибка. А я вот подумал что проще динамически создавать эндпойнт

автор The exception message is: Could not find a base address that matches scheme https for the endpoint with binding WebHttpBinding. Registered base address schemes are [http].. ---> System.InvalidOperationException: Could not find a base address that matches scheme https for the endpoint with binding WebHttpBinding. Registered base address schemes are [http].
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37109828
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinat mergenbaevпопробовал - та же ошибка
ошибка уже другая - по поводу base address
попробуйте еще так (а для endpoint-ов address="")
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
            <service ...>
                <host>
                    <baseAddresses>
                        <add baseAddress="http://.../"/>
                        <add baseAddress="https://.../"/>
                    </baseAddresses>
                </host>
хотя странно, ведь "при этом по ссылке https в браузере сервис виден"...

есть еще одна "опция" но у меня так же как и baseAddresses закомментирована (и все работает:))
Код: plaintext
1.
2.
3.
4.
5.
    <system.serviceModel>
        <protocolMapping>
            <add scheme="http" binding="webHttpBinding" />
            <add scheme="https" binding="webHttpBinding" />
        </protocolMapping>
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37110492
rinat mergenbaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LR,

кажется тут мой косяк. Сайт то один, но на сервере они в виде 2 разных сайтов (разные названия): один только по http, а ко второму доступ есть только https с помощью клиентских сертификатов. Я веб-конфиг у меня одинаковый для обоих сайтов.

Я так понимаю, что мне надо либо оставлять версию настройки под http либо под https, смотря где лежит конфиг. Либо же динамически конфигурить все. Верно?
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37110538
Gatman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, не верно
нужен всего один сайт, для которого в IIS нужно добавить биндинг для https
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37110840
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinat mergenbaev,

если "они в виде 2 разных сайтов (разные названия)" то, действительно, почему бы не дать каждому (сервису) по конфигу...

"динамически конфигурить" у меня как-то было - в коде что-то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    public class MyServiceFactory : ServiceHostFactoryBase
    {
        MyService serviceInstance = new MyService();

        public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
        {
            ServiceHost service = new ServiceHost(serviceInstance, baseAddresses);
            var transport = (baseAddresses[0].Scheme.ToLower() == "https" ? new HttpsTransportBindingElement() : new HttpTransportBindingElement());
            ...
            return service;
и в .svc файле указать Factory="MyServiceFactory"

но потом понадобилось и https и http (одновременно, наружу и внутри локалки), снес все в конфиг - так (для меня) показалось гораздо гибче...
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37111348
rinat mergenbaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRrinat mergenbaev,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    public class MyServiceFactory : ServiceHostFactoryBase
    {
        MyService serviceInstance = new MyService();

        public override ServiceHostBase CreateServiceHost(string constructorString, Uri[] baseAddresses)
        {
            ServiceHost service = new ServiceHost(serviceInstance, baseAddresses);
            var transport = (baseAddresses[0].Scheme.ToLower() == "https" ? new HttpsTransportBindingElement() : new HttpTransportBindingElement());
            ...
            return service;


Пока оставлю тоже разные конфиги, но чуть позже сделаю через Factory как у вас.
а в какой момент и где в веб-приложении вы запускали CreateServiceHost?
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37111590
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rinat mergenbaev,

это же override ServiceHostFactoryBase.CreateServiceHost
т.е., если (в PaymentsService.svc) указана Factory, например
Код: plaintext
<%@ServiceHost language="C#" Debug="true" Factory="HMS.DataServices.PaymentsServiceFactory"  Service="HMS.DataServices.PaymentsService" %>
то при первом же клиентском запросе сервиса (PaymentsService.svc) этот метод будет вызван
...
Рейтинг: 0 / 0
Один wcf сервис для http и https
    #37111608
rinat mergenbaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LRrinat mergenbaev,

это же override ServiceHostFactoryBase.CreateServiceHost
т.е., если (в PaymentsService.svc) указана Factory, например
Код: plaintext
<%@ServiceHost language="C#" Debug="true" Factory="HMS.DataServices.PaymentsServiceFactory"  Service="HMS.DataServices.PaymentsService" %>
то при первом же клиентском запросе сервиса (PaymentsService.svc) этот метод будет вызван

а слона то и не заметил (с)

Спасибо!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Один wcf сервис для http и https
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]