Я пытаюсь создать пробное приложение Csla 3.7/Silverlight 3 и работаю над Учебники Рокки. Это действительно простое приложение для редактирования данных одной формы/одного бизнес-объекта, и все просто замечательно вплоть до того момента, когда я пытаюсь настроить Wcf, чтобы приложение Silverlight могло взаимодействовать с порталом данных.
Ошибка, которую я получаю:
CommunicationException was unhandled by user code
An error occurred while trying to make a request to URI 'http://localhost:1406/WcfPortal.svc'.
This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services.
You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent.
This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute.
Please see the inner exception for more details.
Я совершенно озадачен этим, так как я немного новичок в Silverlight и WCF. Моя установка довольно проста для приложения Csla Silverlight. У меня есть 4 проекта:
- CslaSilverlight: Проект Silverlight
- CslaSilverlight.Client: библиотека классов Silverlight
- CslaSilverlight.Server: библиотека классов .NET
- CslaSilverlight.Web: проект ASPNET для размещения приложения SL.
Все работает локально на моем ноутбуке под Cassini. Я хочу, чтобы DataPortal работал вне Silverlight, чтобы я мог получить доступ к SQL Server. Я думаю, что проблема может быть связана с моей конфигурацией Wcf в приложении Silverlight, которая указана в файле ServiceReferences.ClientConfig:
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IWcfPortal" maxBufferSize="65536"
maxReceivedMessageSize="65536" receiveTimeout="10" sendTimeout="10">
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:1406/WcfPortal.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWcfPortal"
contract="Csla.WcfPortal.IWcfPortal" name="BasicHttpBinding_IWcfPortal" />
</client>
</system.serviceModel>
</configuration>
Мне интересно, важен ли номер порта, когда я меняю его, я получаю другую ошибку. Мне также интересно, правильный ли формат адреса конечной точки.
Не уверен, что это важно, но мои настройки serviceModel из ASPNet web.config:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="WcfPortalBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="WcfPortalBehavior" name="Csla.Server.Hosts.Silverlight.WcfPortal">
<endpoint address="" binding="basicHttpBinding" contract="Csla.Server.Hosts.Silverlight.IWcfPortal">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>