Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Один wcf сервис для http и https / 14 сообщений из 14, страница 1 из 1
09.02.2011, 21:48
    #37107847
rinat mergenbaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
Привет!

Есть асп.нет сайт 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
10.02.2011, 12:07
    #37108655
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
ну а ежели в endpoint-ах указать полный адрес (и для http и для https), что будет?
кстати, в конфиге какая-то путаница с webHttpBinding/webHttpsBinding (для http security mode="Transport" не должно быть)
(на всякий случай в serviceBehaviors <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>)
...
Рейтинг: 0 / 0
10.02.2011, 12:33
    #37108757
Gatman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
у меня вот-так, работают оба
Код: 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
10.02.2011, 14:22
    #37109154
rinat mergenbaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
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
10.02.2011, 14:50
    #37109273
Gatman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
операционка Windows 7 x64 и Windows 2008 Server
вызов стандартный, $.getJSON
...
Рейтинг: 0 / 0
10.02.2011, 15:32
    #37109426
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
rinat mergenbaevвот такой еррор если оба endpoint-a раскомментить в конфиге
ну а если multipleSiteBindingsEnabled="false"? или есть необходимость multipleSiteBindingsEnabled="true"?
...
Рейтинг: 0 / 0
10.02.2011, 16:38
    #37109652
rinat mergenbaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
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
10.02.2011, 17:40
    #37109828
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
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
11.02.2011, 08:09
    #37110492
rinat mergenbaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
LR,

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

Я так понимаю, что мне надо либо оставлять версию настройки под http либо под https, смотря где лежит конфиг. Либо же динамически конфигурить все. Верно?
...
Рейтинг: 0 / 0
11.02.2011, 09:03
    #37110538
Gatman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
нет, не верно
нужен всего один сайт, для которого в IIS нужно добавить биндинг для https
...
Рейтинг: 0 / 0
11.02.2011, 11:28
    #37110840
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
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
11.02.2011, 14:08
    #37111348
rinat mergenbaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
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
11.02.2011, 15:04
    #37111590
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
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
11.02.2011, 15:09
    #37111608
rinat mergenbaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один wcf сервис для http и https
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
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Один wcf сервис для http и https / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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