Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SilverLight WCF net.TCP, Ошибка конекта  
V
    Опции темы
mvc
Дата 16.5.2011, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.5.2011

Репутация: 1
Всего: 1



Есть приложения которое реализовано на SilverLight передаю данные на СЛ с помощью  WCF net.tcp .
Создал WCFlib птом создал Windows Service написал апп.конфиг 

Код

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <system.web>
    <compilation debug="true" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfServiceLibrary.ServiceBehavior">
          <serviceMetadata />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="WcfServiceLibrary.ServiceBehavior"
          name="WcfServiceLibrary.Service">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="b1"
            contract="WcfServiceLibrary.IService" />
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:4504/Service" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="b1">
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>




</configuration>


Добавил референс в СЛ сгенерило СервайсРеференс.клиенконфиг
Код

<configuration>
    <system.serviceModel>
        <bindings>
            <customBinding>
                <binding name="NetTcpBinding_IService">
                    <binaryMessageEncoding />
                    <tcpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
                </binding>
            </customBinding>
        </bindings>
        <client>
            <endpoint address="net.tcp://localhost:4504/Service" binding="customBinding"
                bindingConfiguration="NetTcpBinding_IService" contract="ServiceAC.IService"
                name="NetTcpBinding_IService" />
        </client>
    </system.serviceModel>
</configuration>


при запуске выдает ошибку 

Could not connect to net.tcp://localhost:4504/Service. The connection attempt lasted for a time span of 00:00:00.3380193. TCP error code 10013: An attempt was made to access a socket in a way forbidden by its access permissions.. This could be due to attempting to access a service in a cross-domain way while the service is not configured for cross-domain access. You may need to contact the owner of the service to expose a sockets cross-domain policy over HTTP and host the service in the allowed sockets port range 4502-4534.

КлиентАксесПолиси.хмл закинул во все свои проджекты не помагает

 КлиентАксесПолиси.хмл
Код

<?xml version="1.0" encoding ="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from>
        <domain uri="*"/>
      </allow-from>
      <grant-to>
        <socket-resource port="4502-4506" protocol="tcp" />
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>


в чем проблема, помогите.  smile 
PM MAIL   Вверх
-Mikle-
Дата 17.5.2011, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Вы не можете использовать net.tcp в силверлайте, если на стороне сервера не стоит IIS7 с настроенным WAS.

Цитата(mvc @  17.5.2011,  01:38 Найти цитируемый пост)
КлиентАксесПолиси.хмл закинул во все свои проджекты не помагает

Его надо закидывать не во все проджекты, а в корень веб-сайта, который хостит ваш сервис. В вашем случае сайта нет и вам необходимо вернуть его самим сервисом настроив http-maping.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
mvc
Дата 17.5.2011, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.5.2011

Репутация: 1
Всего: 1



у меня вцф сервайс не на иис хостится а на Windows service как сетевая служба виндовс, получается нужно делать еще один ендПоинт на хттп биндинг?

Это сообщение отредактировал(а) mvc - 17.5.2011, 10:13
PM MAIL   Вверх
-Mikle-
Дата 17.5.2011, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Цитата(mvc @  17.5.2011,  13:13 Найти цитируемый пост)
получается нужно делать еще один ендПоинт на хттп биндинг?

Как минимум, вам нужно научить ваш сервис возвращать ClientAccessPolicy.xml Где-то я видел как это делать, там все просто через хттп-мапинг (некий хттп-запрос мапится на метод, который и возвращает эксэмэлку). Но я все равно не уверен, можно ли силверлайт подружить с вин-сервисом, не пробовал связку. Экспериментируйте и о результатах пишите.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
mvc
Дата 18.5.2011, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 16.5.2011

Репутация: 1
Всего: 1



 smile 
Добавляем новый интерфейс для сервиса(WCF)
Код

using System.IO;
using System.ServiceModel;
using System.ServiceModel.Web;


namespace WcfServiceLibrary
{
    [ServiceContract]
    public interface IClientAccessPolicy
    {
        [OperationContract, WebGet(UriTemplate = "/clientaccesspolicy.xml")]
        Stream GetClientAccessPolicy();
    }


в коде сервиса реализуем его
Код

namespace WcfServiceLibrary
{
    public class Service : IService , IClientAccessPolicy
    {
        public Service()
        {
                     
        }
//IService реализуем тоже тут
//
//
//
[OperationBehavior]
        public Stream GetClientAccessPolicy()
        {
            const string result = @"<?xml version=""1.0"" encoding=""utf-8""?>
                <access-policy>
                  <cross-domain-access>
                    <policy>
                      <allow-from http-request-headers=""http://google.com"">
                        <domain uri=""*"" />
                      </allow-from>
                      <grant-to>
                        <socket-resource port=""4502-4534"" protocol=""tcp"" />
                      </grant-to>
                    </policy>
                  </cross-domain-access>
                </access-policy>";

            if (WebOperationContext.Current != null)
                WebOperationContext.Current.OutgoingResponse.ContentType = "application/xml";
            return new MemoryStream(Encoding.UTF8.GetBytes(result));
        }
}


пишем мего конфиг
Код

<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true"/>
  </system.web>
  <!-- When deploying the service library project, the content of the config file must be added to the host's 
  app.config file. System.Configuration does not support config files for libraries. -->
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="WcfServiceLibrary.ServiceBehavior">
          <serviceMetadata/>
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
        <behavior name="enableMetaData" >
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webHttpBehavior">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="enableMetaData" name="WcfServiceLibrary.Service">
        <host>
          <baseAddresses>
            <add baseAddress="net.tcp://localhost:4504"/>
            <add baseAddress="http://localhost:80"/>
          </baseAddresses>
        </host>
        <endpoint address="Tcp" binding="netTcpBinding" bindingConfiguration="b1" contract="WcfServiceLibrary.IService"/>
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/>
        <endpoint address="Http" binding="basicHttpBinding" contract="WcfServiceLibrary.IService" />
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="webHttpBehavior" contract="WcfServiceLibrary.IClientAccessPolicy" />

      </service>
    </services>
    <bindings>
      <netTcpBinding>
        <binding name="b1">
          <security mode="None"/>
        </binding>
      </netTcpBinding>
    </bindings>
  </system.serviceModel>




  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>



также в проджекты сервисов добавляем файл хмл 
Код

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
  <cross-domain-access>
    <policy>
      <allow-from http-request-headers="http://google.com">
        <domain uri="*" />
      </allow-from>
      <grant-to>
        <socket-resource port="4502-4534" protocol="tcp" />
      </grant-to>
    </policy>
  </cross-domain-access>
</access-policy>

в Program.cs пишем такой код
Код

 using (var host = new ServiceHost(typeof(Service)))
            {
                host.Open();
                Console.WriteLine("Service is running...");
                Console.WriteLine("Service address: "+host.BaseAddresses[0]);
                Console.Read();
            }


на "Любимый SIlverLight"  smile  добавляем референс сервиса 

должны добавить нет.тсп иначе будет ругаться что сервайс передает СОАП

user posted image



после добавления должно сгенерить такой ServiceReferences.ClientConfig

Код

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IService" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
                    <security mode="None" />
                </binding>
            </basicHttpBinding>
            <customBinding>
                <binding name="NetTcpBinding_IService">
                    <binaryMessageEncoding />
                    <tcpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
                </binding>
            </customBinding>
        </bindings>
        <client>
            
            <endpoint address="net.tcp://localhost:4504/Tcp" binding="customBinding"
                bindingConfiguration="NetTcpBinding_IService" contract="ServiceRef.IService"
                name="NetTcpBinding_IService" />
            <endpoint address="http://localhost/Http" binding="basicHttpBinding"
                bindingConfiguration="BasicHttpBinding_IService" contract="ServiceRef.IService"
                name="BasicHttpBinding_IService" />
        </client>
    </system.serviceModel>
</configuration>


когда добавили сервайс сам захоститься VS и при переходе на http://127.0.0.1/ClientAccessPolicy.xml
должны увидеть такую картинку  smile 

user posted image

если есть вопросы пишите Skype: freedomdim
или [email protected]

PM MAIL   Вверх
-Mikle-
Дата 18.5.2011, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 13
Всего: 59



Это именно то, про что я говорил (типа хттп-мапинг на метод). Спасибо, что отписался с решением.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.1090 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.