.Net 4 Desktop App - сервис, совместимый с Silverlight 4 - PullRequest
0 голосов
/ 09 июня 2011

Я нахожусь в процессе создания системы для клиента, которая управляет данными определенным образом.(То, что это делает, на самом деле не имеет отношения к моему вопросу).Похоже, что среда рекомендует решение на основе Silverlight (много возможных клиентов), но запуск IIS на доступном сервере может быть сложным, возможно, даже невозможным из-за ограничений, а также из-за того, что я не могу получить доступ к системе для внесения измененийв web.config, если я его настрою.(Я должен был бы предоставить один и надеяться, что это работает, и случайно угадать изменения, если это не так).Поэтому я пытаюсь встроить серверную часть в приложение .Net 4 (WPF) и предоставить оттуда службы WCF, совместимые с Silverlight.

Как открыть службу, совместимую с Silverlight?Кстати, я расскажу о порте 80 для общего доступа к XAP и crossdomain.xml (и индексной странице).Полагаю, что было бы разумно как-то поделиться здесь метаданными службы?

(Silverlight 4, .Net 4)

PS Если вы считаете, что бит конфигурации IIS нелеп, вам следуетПосмотрите, как данные импортируются!: S

Спасибо!

Ответы [ 2 ]

1 голос
/ 09 июня 2011

Я использовал net.tcp службы WCF в службе Windows от Silverlight. Это работает, однако вы должны убедиться, что используете определенный диапазон портов (см. здесь ).

Вы также можете создать REST-сервис WCF - в этом случае порт не должен иметь значения. Как правило, вам вообще не следует публиковать метаданные службы в производственной системе.

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

Для всех, кто интересуется этим, я просто создал собственный сервис WCF. Делает хорошую точку поиска, или даже здесь, на SO.

Вот пример того, о чем я говорю:

<system.serviceModel>
    <bindings>
        <customBinding>
            <binding name="BinaryHTTP">
                <binaryMessageEncoding/>
                <httpTransport/>
            </binding>
        </customBinding>
    </bindings>
    <services>
        <service name="MyServiceClassName" behaviorConfiguration="ServiceBehaviour">
            <endpoint binding="customBinding" bindingConfiguration="BinaryHTTP"
                 name="MainService" contract="BaseNamespace.IMyService"
                 address="MyService"/>
            <endpoint address="" behaviorConfiguration="webHttpEnablingBehavior"
                  binding="webHttpBinding" contract="BaseNamespace.IClientAccessPolicy" />
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            <host>
                <baseAddresses>
                    <add baseAddress="http://localhost:80/" />
                </baseAddresses>
            </host>
        </service>
    </services>

    <behaviors>
        <serviceBehaviors>
            <behavior name="ServiceBehaviour">
                                    <!-- Enables public metadata, good for Add Service Reference in SL -->
                <serviceMetadata httpGetEnabled="True"/>
                                    <!-- Turn this off at the production level. -->
                <serviceDebug includeExceptionDetailInFaults="True"/>
            </behavior>
        </serviceBehaviors>

        <endpointBehaviors>
            <behavior name="webHttpEnablingBehavior">
                <webHttp/>
            </behavior>
        </endpointBehaviors>

    </behaviors>

</system.serviceModel>

Этот пример был частично скопирован из образца размещенного сервиса, который находится в онлайн-галерее VS2010.

Интерфейс IClientAccessPolicy:

Imports System.ServiceModel
Imports System.ServiceModel.web

<ServiceContract()> _
Public Interface IClientAccessPolicy

    <OperationContract(), WebGet(UriTemplate:="/clientaccesspolicy.xml")> _
    Function GetPolicy() As IO.Stream

End Interface

Надеюсь, вы сможете это понять. Просто убедитесь, что ваша основная служба наследует IClientAccessPolicy и возвращает действительную.

...