powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Признаюсь туплю)
4 сообщений из 4, страница 1 из 1
Признаюсь туплю)
    #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
Признаюсь туплю)
    #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
Признаюсь туплю)
    #39486336
INFINITs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понял, к этому и пришел. Видимо с утра мозг плавился и хотелось красоты)
...
Рейтинг: 0 / 0
Признаюсь туплю)
    #39493844
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
INFINITsПонял, к этому и пришел. Видимо с утра мозг плавился и хотелось красоты)

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


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