Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF Callback / 11 сообщений из 11, страница 1 из 1
29.07.2010, 11:02
    #36765613
prBoris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
подскажите, пытаюсь написать сервис
интерфейс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
namespace MyService
{
    [ServiceContract(CallbackContract = typeof(IRenewable))]

    public interface IMyBaseContract
    {

        // No 'forward' operations

    }

    public interface IRenewable
    {

        [OperationContract]
        void Renew();

    }

    [ServiceContract(CallbackContract = typeof(IMyServiceCallback))]

    public interface IMyService : IMyBaseContract
    {

        [OperationContract]
        void MyServiceMethod();

        [OperationContract(IsOneWay = true)]
        void calculation(int id);
    }

    public interface IMyServiceCallback : IRenewable
    {

        [OperationContract(IsOneWay = true)]
        void OnCallbackMethod(int id);

    }

}


Сервис
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
namespace MyService
{

    public class MyService : IMyService
    {
        ServiceHost host;


        #region IMyService Members

        public void MyServiceMethod()
        {
            
           
        }

        public void calculation(int id)
        {
            if (id >  10 )
            {
                IMyServiceCallback callback = OperationContext.Current.GetCallbackChannel<IMyServiceCallback>();
                callback.OnCallbackMethod( 5 );

            }
        }

        #endregion
    }
}

Теперь создаю проект добавляю веб реферинс и ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
public partial class Window1 : Window
    {
        MyServiceClient client;
        InstanceContext context;
        public Window1()
        {
            InitializeComponent();
            context = new InstanceContext(new ClientCallback());
            client = new MyServiceClient(context);
    
           
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            client.calculation(Convert.ToInt16(tb.Text));

        }
    }

    public class ClientCallback : IMyServiceCallback
    {


        #region IMyServiceCallback Members

        public void Renew()
        {

        }

        public void OnCallbackMethod(int id)
        {
            if (id ==  15 )
            {
                MessageBox.Show(id.ToString());
            }
        }

        #endregion
    }
}


Выдает ошибку в строке
Код: plaintext
1.
 client.calculation(Convert.ToInt16(tb.Text));
Протоколу HTTP не удалось зарегистрировать URL-адрес http://+:80/Temporary_Listen_Addresses/24359c14-39fb-4344-8560-c1660762ea80/, так как TCP-порт 80 используется другим приложением.


Я так понимаю нужно что то с ServiceHost делать... Подскажите
...
Рейтинг: 0 / 0
29.07.2010, 11:48
    #36765715
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
А разве разрешается использовать для своих сервисов и сокетов порты, меньшие чем 1024?

Это же зарезервировано для системы вроде - то есть, могут быть (и даже обязательно будут) конфликты?
Ну а уж использовать 80 порт - то это даже я знаю, что его стандартный веб занимает... 23 - телнет, итп....
:)
...
Рейтинг: 0 / 0
29.07.2010, 12:57
    #36765866
prBoris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
мда... что то я вообще не в ту сторону делаю....
вот нащел пример

http://www.wcftutorial.net/How-to-Create-Callback-Service-in-WCF.aspx


делаю все по примеру (ну разве что изменил немного порт)

CallbackService
его App.config
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
<?xml version="1.0" encoding="utf-8" ?>
<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>
    <services>
      <service name="CallbackService.MyService" behaviorConfiguration="CallbackService.MyServiceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:6577/MyService" />
          </baseAddresses>
        </host>
        <!-- Service Endpoints -->
        <!-- Unless fully qualified, address is relative to base address supplied above -->
        <endpoint address ="http://localhost:6577/MyService" binding="wsDualHttpBinding" contract="CallbackService.IMyContract">
          <!-- 
              Upon deployment, the following identity element should be removed or replaced to reflect the 
              identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
              automatically.
          -->
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <!-- Metadata Endpoints -->
        <!-- The Metadata Exchange endpoint is used by the service to describe itself to clients. --> 
        <!-- This endpoint does not use a secure binding and should be secured or removed before deployment -->
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="CallbackService.MyServiceBehavior">
          <!-- To avoid disclosing metadata information, 
          set the value below to false and remove the metadata endpoint above before deployment -->
          <serviceMetadata httpGetEnabled="True"/>
          <!-- To receive exception details in faults for debugging purposes, 
          set the value below to true.  Set to false before deployment 
          to avoid disclosing exception information -->
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

и CallbackServiceHost конфиг
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services >
      <service behaviorConfiguration="ServiceBehavior"
      name="CallbackService.MyService">
        <endpoint address="http://localhost:6577/MyService"
        binding="wsDualHttpBinding" contract="CallbackService.IMyContract">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex"
        binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ServiceBehavior">
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true "/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>

выдает ошибку

Протоколу HTTP не удалось зарегистрировать URL-адрес http://+:6577/MyService/. Другое приложение уже зарегистрировало этот URL-адрес с помощью HTTP.SYS.

Подскажите в чем тут дело или если не жалка выложите простой пример с Callback
...
Рейтинг: 0 / 0
29.07.2010, 13:34
    #36765981
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
Есть такая фишка в визуал студии - она умеет делать хостинг (поднятие сервиса WCF) сама - на этот случай в свойствах проэкта появляется закладка WCF - и там галочку надо снять. - А то вы запускаете проэкт, студия делает хост напрямую дллки с сервисом, а потом запускает вашу программу, которая тоже делает хостинг для того же самого сервиса на уже занятом порте.

кажется так...
...
Рейтинг: 0 / 0
29.07.2010, 13:35
    #36765987
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
То есть собственно Callback тут нипричем получается.
...
Рейтинг: 0 / 0
29.07.2010, 14:35
    #36766206
prBoris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
D129,

что то не найду я эту вкладку, можешь подсказать где ее там шарить
...
Рейтинг: 0 / 0
29.07.2010, 16:12
    #36766583
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
Я по памяти писал - кроме того, версии студий отличаются бывает такое -
вон же внизу написано

"Enable .... hosting....."
...
Рейтинг: 0 / 0
29.07.2010, 16:16
    #36766606
prBoris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
D129,

эта опция не помогает "Enable .... hosting....." я ее сразу и попробовал, то и написал думаю не там ищу....
...
Рейтинг: 0 / 0
29.07.2010, 18:54
    #36767108
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
prBorisD129,

эта опция не помогает "Enable .... hosting....." я ее сразу и попробовал, то и написал думаю не там ищу....
Так ее надо выключить - по идее... я все эти штучки автоматючки сразу выключаю - гораздо понятнее написать консольное приложение, которое и будет хостингом заниматься...
Если у вас уже так - уберите из дллки сервиса апконфиг - тогда хостинг автоматический не найдет настройки для сервиса, и ему несчем будет запуститься.
...
Рейтинг: 0 / 0
30.07.2010, 11:12
    #36767958
prBoris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
D129,

спс, апконфиг убрал собралось. Добавил еще один проект Wpf Application дальше доже все как по примеру
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
 public partial class Window1 : Window
    {
        MyServiceClient proxy;
        public Window1()
        {
            InitializeComponent();
            IMyContractCallback callback = new MyCallback();
            InstanceContext cntx = new InstanceContext(callback);
            try
            {
                proxy = new MyServiceClient(cntx);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);

            }

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            proxy.MyMethodString(tb.Text);
        }
    }


    class MyServiceClient : DuplexClientBase<IMyContract>, IMyContract
    {
        public MyServiceClient(InstanceContext callbackCntx)
            : base(callbackCntx)
        {
        }
        public void MyMethodString(string values)
        {
            base.Channel.MyMethodString(values);
        }
    }
    class MyCallback : IMyContractCallback
    {

        #region IMyContractCallback Members

        public void OnMyMethodString(string values)
        {
            MessageBox.Show(values);
        }

        #endregion
    }

Вылетает на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
 try
            {
                proxy = new MyServiceClient(cntx);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
"Не удалось найти стандартный элемент конечной точки, ссылающийся на контракт "CallbackService.IMyContract" в разделе конфигурации клиента ServiceModel. Это может быть вызвано тем, что для приложения не найден файл конфигурации или в элементе клиента не найден элемент конечной точки, соответствующий данному контракту."

Подскажете может что то .....
...
Рейтинг: 0 / 0
30.07.2010, 13:39
    #36768440
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WCF Callback
prBoris,

->
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF Callback / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]