powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / WCF Callback
11 сообщений из 11, страница 1 из 1
WCF Callback
    #36765613
prBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите, пытаюсь написать сервис
интерфейс
Код: 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
WCF Callback
    #36765715
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разве разрешается использовать для своих сервисов и сокетов порты, меньшие чем 1024?

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

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
WCF Callback
    #36765981
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая фишка в визуал студии - она умеет делать хостинг (поднятие сервиса WCF) сама - на этот случай в свойствах проэкта появляется закладка WCF - и там галочку надо снять. - А то вы запускаете проэкт, студия делает хост напрямую дллки с сервисом, а потом запускает вашу программу, которая тоже делает хостинг для того же самого сервиса на уже занятом порте.

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

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

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

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

эта опция не помогает "Enable .... hosting....." я ее сразу и попробовал, то и написал думаю не там ищу....
Так ее надо выключить - по идее... я все эти штучки автоматючки сразу выключаю - гораздо понятнее написать консольное приложение, которое и будет хостингом заниматься...
Если у вас уже так - уберите из дллки сервиса апконфиг - тогда хостинг автоматический не найдет настройки для сервиса, и ему несчем будет запуститься.
...
Рейтинг: 0 / 0
WCF Callback
    #36767958
prBoris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
WCF Callback
    #36768440
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prBoris,

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


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