Служба WCF недоступна в Windows Server 2008 - PullRequest
0 голосов
/ 11 мая 2011

Я недавно создал службу WCF, а сейчас развертываю ее на Windows Server 2008. Сейчас у нас не включен защищенный протокол. Но мы будем. Я бы хотел, чтобы это работало в любом случае. На сайте у меня включена анонимная аутентификация, а также аутентификация по формам. Причина, по которой я это сделал, состояла в том, чтобы предотвратить всплывающее окно аутентификации на iPad, Android и Internet Explorer. Так что теперь они просто попадают на экран входа в систему. Да, и я активировал WCF в Windows. Если вы также знаете, как подготовить этот https, я бы тоже хотел это выяснить. Спасибо!!

Я получаю эту ошибку, когда пытаюсь вставить в путь * .svc в URL.

System.ServiceModel.ServiceActivationException: Сервис '/WCFServices/Accessioning/QuickDataEntryService.svc' не может быть активирован из-за исключение при компиляции

Вот моя конфигурация web.config.

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true">
        <!--<baseAddressPrefixFilters>
            <add prefix="http://localhost/" />
        </baseAddressPrefixFilters>-->
    </serviceHostingEnvironment>
    <behaviors>
        <endpointBehaviors>
            <behavior name="AspNetAjaxBehavior">
                <enableWebScript />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehavior">
                <serviceDebug includeExceptionDetailInFaults="true" />
                <serviceMetadata httpGetEnabled="true" />
            </behavior>
            <!-- Watch this section when adding a new WCF Service!  New behaviors will be added; just delete them and use "ServiceBehavior" -->
        </serviceBehaviors>
    </behaviors>
    <services>
        <service behaviorConfiguration="ServiceBehavior" name="A.LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding"
                contract="A.LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService" />
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        </service>
        <!--<service name="A.LIMS.UI.Web.WCFServices.Accessioning.IQuickDataEntryService"
                 behaviorConfiguration="ServiceBehavior">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior"
                      binding="webHttpBinding"
                      contract="A.LIMS.UI.Web.WCFServices.Accessioning.IQuickDataEntryService" />
        </service>-->
        <!-- Watch this section when adding a new WCF Service!  Duplicate the "QuickDataEntryService" above for an example, but change the fully qualified name -->
    </services>
</system.serviceModel>

1 Ответ

0 голосов
/ 17 июля 2011

Понятия не имею, что послужило причиной вышеупомянутого исключения, но здесь был окончательный вердикт.Было много вещей, необходимых для WCF и использования SSL-сертификата (протокол HTTPS).Простите за форматирование. Мне не нравится, как переполнение стека иногда помещает код в блок, а иногда нет.

Для web.config в HTTPS требовалось следующее:

Вот некоторые места, где требуется атрибут "requireSSL":

Обратите внимание на «s» в «httsGetEnabled» ниже:

Привязки (отсутствуют в web-конфигурации не-SSL):





Услуги (обратите внимание на «s» в «mexHttpsBinding»):

    <services>
        <service behaviorConfiguration="ServiceBehavior" name="A.LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" contract="A.LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService" />
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
        </service>

    </services>

Последнее, но не менее важное.Я не использую .NET 4.0, но я пробовал .NET на другом компьютере.С .NET 4.0 я не мог заставить службы WCF работать, не настроив их на фактический используемый URL.Если для одного и того же IP было два домена, WCF работал только с доменом в этом блоке внутри блока system.ServiceModel XML в файле web.config.Я не тестировал https в .NET 4.0, поэтому я предполагаю, что протокол в URL будет https ниже:

...