Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Признаюсь туплю) / 4 сообщений из 4, страница 1 из 1
11.07.2017, 04:35
    #39486186
INFINITs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Признаюсь туплю)
Всем добрый день. Что-то у меня лыжи не едут.
Балуюсь с wcf, пытаюсь вспомнить что помнил, изучить что не знал.
Захотел сделать такую штуку и впал в ступор.

Хочу чтобы на стороне клиента можно было после адд референс обратиться к методу получить счета
Что-то ввиде
TestServiceWcfClient cl = new TestServiceWcfClient();
Customer cus = cl.getCustomer("Name", "Log");
string ids = cus.getIds();

Понимаю что данный метод должен быть не в дата контракте, возникает вопрос куда его вынести и каким атрибутам пометить.

Просьба натолкнуть на мысль, а то с утра торможу)))

Описание сервиса

Код: c#
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.
51.
52.
namespace TestWcf
{
    [ServiceContract]
    public interface ITestServiceWcf
    {
       [OperationContract]
        Customer getCustomer(string login, string password);
       
    }

    [DataContract]
    public class Customer
    {               
        public Customer(int no, string name)
        {
            No = no;
            Name = name;
        }
        [DataMember]
        public int No { get; private set; }

        [DataMember]
        public string Name { get; private set; }

        [DataMember]
        public string Address { get;  set; }
        
        [OperationContract]
        public string getIds()
        {
            if (this.No == 1)
                return "AAAA";
            else
                return "BBBB";
        }            
   }
}


namespace TestWcf
{  
    public class TestServiceWcf : ITestServiceWcf
    {       

        public Customer getCustomer(string login, string password)
        {
            Customer cust = new Customer (1,"Test");
            
            return cust;
        }             
    }
}




Конфиг сервиса

Код: xml
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.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" />
  </system.web>  
  <system.serviceModel>
    <services>
      <service name="TestWcf.TestServiceWcf">
        <host>
          <baseAddresses>
            <add baseAddress = "http://localhost:8733/Design_Time_Addresses/TestWcf/Service1/" />
          </baseAddresses>
        </host>        
        <endpoint address="" binding="basicHttpBinding" contract="TestWcf.ITestServiceWcf">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>        
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
      </service>    
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>          
          <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/>          
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

</configuration>


...
Рейтинг: 0 / 0
11.07.2017, 10:14
    #39486300
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Признаюсь туплю)
INFINITsПонимаю что данный метод должен быть не в дата контракте, возникает вопрос куда его вынести и каким атрибутам пометить.

Вынести в сервис и пометить как обычный контракт операции.

Т.е. сервисы (причем не важно, SOAP или REST, сделанные на WCF или на Web API) это, если можно так сказать, анемичная модель данных:
- Данные, которые передаются между клиентом и сервисом лежат в DTO (Data Transfer Object). DTO содержат только данные, и не включают никаких методов.
- Все операции лежат в классах бизнес-логики. В нашем случае, это сами сервисы.

Поэтому в вашем случае код на клиенте будет примерно таким:
Код: c#
1.
2.
3.
var customerService = new CustomerServiceClient();
Customer cus = customerService.getCustomer("Name", "Log");
string ids = customerService.getIds(cus.Id);



Надеюсь, что понятно описал
...
Рейтинг: 0 / 0
11.07.2017, 10:41
    #39486336
INFINITs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Признаюсь туплю)
Понял, к этому и пришел. Видимо с утра мозг плавился и хотелось красоты)
...
Рейтинг: 0 / 0
24.07.2017, 11:00
    #39493844
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Признаюсь туплю)
INFINITsПонял, к этому и пришел. Видимо с утра мозг плавился и хотелось красоты)

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


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