ServiceActivationException для службы WCF, размещенной на IIS 7 - PullRequest
0 голосов
/ 27 июня 2011

У нас есть служба RESTful WCF, размещенная в IIS 7. Мы хотим, чтобы служба была доступна как для http, так и для https. Итак, мы добавили 2 привязки для службы host-
HTTP : //service.abc.com
* 1006 HTTPS *: //service.abc.com

Все службы, реализующие единый контракт , работают хорошо, но мы получаем System.ServiceModel.ServiceActivationException для любой службы, которая реализует более одного контрактов.

Все отлично работает только с одним типом привязки: http или https .

Есть решение?

настройка сервиса -

<services>
<service behaviorConfiguration="RESTServiceBehavior" name="App.Services.Service1">
    <endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" contract="App.Contract.Services.IService1"                            bindingConfiguration="RESTServiceBinding"></endpoint>
</service>
</services>

<behaviors>
<endpointBehaviors>
    <behavior name="webBehavior">
        <webHttp/>
        <restGlobalErrorHandler/>
    </behavior>
</endpointBehaviors>

<serviceBehaviors>
    <behavior name="RESTServiceBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
        <serviceAuthorization serviceAuthorizationManagerType="App.Services.AuthorizationManager, App.Services" />
    </behavior>
    <behavior name="">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
</serviceBehaviors>
</behaviors>

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true"/>

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

Ответы [ 2 ]

0 голосов
/ 27 июня 2011

Вам нужны две конечные точки для каждого контракта, который вы хотите выставить на сервисе.Одна конечная точка будет для HTTP, а вторая для HTTPS:

<service behaviorConfiguration="RESTServiceBehavior" name="App.Services.Service1">
    <endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" 
              bindingConfiguration="RESTServiceBinding" contract="App.Contract.Services.IService1" />
    <endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" 
              contract="App.Contract.Services.IService1" />
</service>
0 голосов
/ 27 июня 2011

Я новичок в wcf, но я прочитал его на stackoverflow, что если у вашей службы несколько контрактов, то вы должны добавить ссылку для каждого контракта. если имеется 4 контракта, то необходимо создать 4 сервисные ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...