«нормальный» SVC против «Silverlight» SVC (WCF) - PullRequest
0 голосов
/ 27 апреля 2010

Я пытаюсь вызвать службу WCF из моего приложения Silverlight 3. Но ... при попытке создать в моем веб-проекте «службу wcf с поддержкой silverlight» мой VS2008 падает при создании элемента (я думаю, что при редактировании web.config).

Итак, я подумал: давайте создадим «нормальный» сервис wcf и вручную отредактируем его как «веб-сервис с поддержкой silverlight».

Итак, я удивляюсь, в чем разница, и второе: почему существует разница между службой, вызываемой из приложения silverlight и приложения не Silverlight?

Это то, что у меня сейчас есть для привязки (у меня есть служба без контракта на интерфейс, только открытый класс, для начала):

<system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="RadControlsSilverlightApp1.Web.GetNewDataBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <bindings>
            <customBinding>
                <binding name="customBinding0">
                    <binaryMessageEncoding />
                    <httpTransport />
                </binding>
            </customBinding>
        </bindings>
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
        <services>
            <service behaviorConfiguration="RadControlsSilverlightApp1.Web.GetNewDataBehavior"
             name="RadControlsSilverlightApp1.Web.GetNewData">
                <endpoint address="" binding="customBinding" bindingConfiguration="customBinding0"
                 contract="RadControlsSilverlightApp1.Web.GetNewData" />
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            </service>
        </services>

    </system.serviceModel>

Этот не работает, потому что, когда я добавляю ссылку на него из приложения silverlight, я получаю следующие сообщения:

Warning 2   Custom tool warning: Cannot import wsdl:portType
Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter
Error: Exception has been thrown by the target of an invocation.
XPath to Error Source: //wsdl:definitions[@targetNamespace='']/wsdl:portType[@name='GetNewData']    C:\Silverlight\RadControlsSilverlightApp1\RadControlsSilverlightApp1\Service References\ServiceReference1\Reference.svcmap  1   1   RadControlsSilverlightApp1
Warning 3   Custom tool warning: Cannot import wsdl:binding
Detail: There was an error importing a wsdl:portType that the wsdl:binding is dependent on.
XPath to wsdl:portType: //wsdl:definitions[@targetNamespace='']/wsdl:portType[@name='GetNewData']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='CustomBinding_GetNewData']    C:\Silverlight\RadControlsSilverlightApp1\RadControlsSilverlightApp1\Service References\ServiceReference1\Reference.svcmap  1   1   RadControlsSilverlightApp1
Warning 4   Custom tool warning: Cannot import wsdl:port
Detail: There was an error importing a wsdl:binding that the wsdl:port is dependent on.
XPath to wsdl:binding: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:binding[@name='CustomBinding_GetNewData']
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:service[@name='GetNewData']/wsdl:port[@name='CustomBinding_GetNewData']  C:\Silverlight\RadControlsSilverlightApp1\RadControlsSilverlightApp1\Service References\ServiceReference1\Reference.svcmap  1   1   RadControlsSilverlightApp1
Warning 5   Custom tool warning: No endpoints compatible with Silverlight 3 were found. The generated client class will not be usable unless endpoint information is provided via the constructor.  C:\Silverlight\RadControlsSilverlightApp1\RadControlsSilverlightApp1\Service References\ServiceReference1\Reference.svcmap  1   1   RadControlsSilverlightApp1

(ps., Служба может быть запущена в браузере, я получаю это:

svcutil.exe http://localhost:9599/GetNewData.svc?wsdl

)

Ответы [ 2 ]

0 голосов
/ 26 мая 2010

Казалось, что под рукой была другая проблема, здесь ответили

Могу ли я использовать общий список в WCF, который вызывается из silverlight?

0 голосов
/ 27 апреля 2010

В первую очередь для вас сделано:

Web.config is configured to use basicHttpBinding since Silverlight does not support ws*. 
ASP compatibility mode: <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 

Так что хорошим началом было бы преобразование вашего сервиса в использование basicHttpBinding. Проверьте Настройка служб с помощью файлов конфигурации , чтобы узнать больше о разделах web.config, которые относятся к службам.

Может быть некоторая потеря гибкости при использовании шаблонов, как описано в Шаблон службы WCF с включенным Silverlight является плохой практикой

...