Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Использовать классы из веб сервиса в клиенте / 25 сообщений из 30, страница 1 из 2
12.08.2013, 19:11
    #38363731
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Требуется создать веб сервис, обращаться к которому будут присылая сериализованные в XML объекты с клиента.
Там их будут де-сериализовывать и обрабатывать.
Как объявить все нужные классы на сервисе, чтобы объявления не нужно было дублировать на клиенте?
C#, VS 2008 .NET 3.5
Что-то подсказывает что нужно чтобы код сервиса и клиента находился в одном пространстве имен, но как конкретно???
...
Рейтинг: 0 / 0
12.08.2013, 22:56
    #38363905
SeVa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo Kobler,делается отдельная, общая сборка
...
Рейтинг: 0 / 0
12.08.2013, 23:15
    #38363919
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Извините, мне это ничего не говорит. Можно ли поподробнее? Я столько лет вожусь исключительно с бизнес логикой, что очень отстал от создания новых решений и проектов в студии.
...
Рейтинг: 0 / 0
12.08.2013, 23:23
    #38363921
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo Kobler,

1. Создаёте в студии новый проект с типом (output type) Class Library;
2. Описываете в нём упомянутые выше классы;
3. Добавляете ссылку на проект, или на сборку (dll) на клиенте, и на сервере.
...
Рейтинг: 0 / 0
12.08.2013, 23:27
    #38363925
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
skyANA,

А что насчет пространства имен в этой сборке? Оно должно совпадать с тем, которое используется в клиенте?
У веб сервиса вроде вообще пространство имен не указано явно.
...
Рейтинг: 0 / 0
12.08.2013, 23:36
    #38363929
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo Kobler, за годы возни с бизнес логикой Вы не пользовались пространствами имён?

Допустим система у Вас называется MySuperSystem, общие классы лежат в проекте Common (или DomainModel, или как Вам угодно), тогда в нём пространство имён:
Код: c#
1.
namespace MySuperSystem.Common


на сервере:
Код: c#
1.
2.
3.
4.
5.
6.
namespace MySuperSystem.Server
{
    using Common;

    // ...
}


на клиенте:
Код: c#
1.
2.
3.
4.
5.
6.
namespace MySuperSystem.Client
{
    using Common;

    // ...
}
...
Рейтинг: 0 / 0
12.08.2013, 23:54
    #38363943
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
skyANA,

Именно так, ни разу не пользовался.
В VS2008 проект веб сервиса создается примерно вот таким:

Код: c#
1.
2.
3.
4.
5.
6.
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{



то есть в нем вообще не упоминается в каком пространстве он находится. Но кажется ему это и не нужно до тех пор пока перед этим вставлена строка со ссылой на

Код: c#
1.
using MySuperNamespace;
...
Рейтинг: 0 / 0
13.08.2013, 00:04
    #38363950
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo Kobler, а может таким:
Код: 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.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace WebService1
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }
    }
}




Не суть важно.
Вы можете назначить пространство имён, изменить, расширить, избавиться от него.
Главное, чтобы не возникало неопределённостей.
...
Рейтинг: 0 / 0
13.08.2013, 01:28
    #38363990
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
skyANA,

Да нет же, именно как я показал (за вычетом uses), никакого namespace явно не создается.
Но и так работает, так что Огромное Спасибо!

Посадили разработчика хранимых процедур ваять веб сервисы, вот и чайницкие вопросы возникают.
...
Рейтинг: 0 / 0
13.08.2013, 13:30
    #38364588
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo KoblerskyANA,

Да нет же, именно как я показал (за вычетом uses), никакого namespace явно не создается.
Но и так работает, так что Огромное Спасибо!

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

MSDN Вам в помощь.
...
Рейтинг: 0 / 0
13.08.2013, 13:36
    #38364604
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo KoblerПосадили разработчика хранимых процедур ваять веб сервисы, вот и чайницкие вопросы возникают.Что у Вас за СУБД?

Помнится в SQL Server 2005 появилась фича: "Native XML Web Services (SOAP/HTTP endpoints)". В SQL Server 2012 от неё отказались, т.к. WCF есть.

Но времени было достаточно, чтобы разработчику хранимых процедур познакомиться с веб сервисами.
...
Рейтинг: 0 / 0
13.08.2013, 19:40
    #38365290
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
skyANA,

После создания библиотеки классов вроде все заработало, пока не возникла необходимость создать метод, в который передается объект одного из классов. Вроде бы явно указываю какой класс использовать, но все равно вылезает ошибка. Объявляю:

Код: c#
1.
public bool CreateOrderFromOrderInfo(string username, string password, VElectronics.VE_OrderInfo Order)



Вызываю:

Код: c#
1.
2.
3.
            VElectronics.VE_OrderInfo veo = new VE_OrderInfo();
           ...
            checkBox1.Checked = ves.CreateOrderFromOrderInfo("gobzo", "123456", veo);


ошибка:

Код: c#
1.
Error	2	Argument '3': cannot convert from 'VElectronics.VE_OrderInfo' to 'VElectronics.VE_Service1.VE_OrderInfo'
...
Рейтинг: 0 / 0
14.08.2013, 09:52
    #38365648
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo Kobler, по тексту ошибки вроде Вам должно быть понятно в чём проблема.
ves - это что такое?
...
Рейтинг: 0 / 0
14.08.2013, 17:42
    #38366602
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
skyANA,

ves это веб сервис:

Код: c#
1.
VE_WebService.VElectronicsWebService ves;



Код: c#
1.
2.
3.
4.
5.
6.
7.
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
// [System.Web.Script.Services.ScriptService]
public class VElectronicsWebService : System.Web.Services.WebService {
...
}
...
Рейтинг: 0 / 0
14.08.2013, 18:26
    #38366667
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo Kobler, код вызыва - это код клиента? Для работы с сервисом воспользовались Add Web Reference?
...
Рейтинг: 0 / 0
14.08.2013, 22:57
    #38366910
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
skyANA,

да и да.

мне все больше кажется что от меня потребовали глупость - передавать объект класса с клиента в сервис. в любом случае передадутся только данные без методов. гораздо проще делать как я и раньше делал - вручную сериализовывать на клиенте и десериализовывать в сервисе.
...
Рейтинг: 0 / 0
15.08.2013, 07:38
    #38367023
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo Koblerда и да.

мне все больше кажется что от меня потребовали глупость - передавать объект класса с клиента в сервис. в любом случае передадутся только данные без методов. гораздо проще делать как я и раньше делал - вручную сериализовывать на клиенте и десериализовывать в сервисе.Воспользовавшись Add Web Reference Вы сгенерировали на клиенте необходимые proxy-классы для работы с сервисом по WSDL, что предоставляет последний. Работать теперь надо через них и Вашей библиотекой на клиенте можно не пользоваться. Вы загляните внутрь метода CreateOrderFromOrderInfo на клиенте ради интереса.

Если Вам проще вручную сериализовывать передаваемые данные, то сериализуйте, я не против. Они автоматически будут десериализованы в сервисе.
...
Рейтинг: 0 / 0
15.08.2013, 18:06
    #38368032
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
skyANA,

Это-то понятно, непонятно зачем, когда в прокси-классах нет методов, а только данные.
...
Рейтинг: 0 / 0
16.08.2013, 06:18
    #38368384
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo Kobler, выше упомянул о WSDL, подумайте над этим.
...
Рейтинг: 0 / 0
16.08.2013, 22:53
    #38369519
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
skyANA,

Так можно все глаза просмотреть. Можно подробнее?
Проблема в том, что Reference.cs превращает классы в классы без методов.
Например мой заказ содержит список продуктов:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    [Serializable]
    public class VE_OrderInfo
    {
        public Int32 CustomerId = 0;

        public VE_OrderInfo () {
            Items = new List<VE_ProductInfo>();
        }

        [XmlArray]
        public List<VE_ProductInfo> Items {get; set;}

        public string SpecialInstructions;

        public void AddProduct(VE_ProductInfo pi)
        {
            Items.Add(pi);
        }
    }



Так на клиенте Items становятся просто массивом VE_ProductInfo[] без метода Add. В результате я не могу вызвать ни мой метод AddProduct, ни Items.Add. В связи с этим можно пожалуйста прояснить ранее сказанное:
skyANAОни автоматически будут десериализованы в сервисе.
Как именно этого добиться? Не то чтобы меня напрягало вручную де-сериализовывать, но если можно этого не делать, то было бы лучше.
...
Рейтинг: 0 / 0
16.08.2013, 23:35
    #38369541
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo Kobler,
- Вы, чего, и конфеты за меня есть будете?(с)

Код: 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.
  [Serializable]
    public class VE_OrderInfo : IAddStrongMy
    {
        public Int32 CustomerId = 0;

        public VE_OrderInfo()
        {
            Items = new List<VE_ProductInfo>();
        }

        [XmlArray]
        public List<VE_ProductInfo> Items { get; set; }

        public string SpecialInstructions;



        public void AddProduct(VE_ProductInfopi)
        {
            throw new NotImplementedException();
        }
    }
    public interface IAddStrongMy
    {
        void AddProduct(VE_ProductInfopi);
    }

...
Рейтинг: 0 / 0
27.08.2013, 16:13
    #38378879
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Где-то в степи,

Что такое IAddStrongMy?
...
Рейтинг: 0 / 0
27.08.2013, 20:13
    #38379226
Gobzo Kobler
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Извините, господа, но вопрос решился гораздо проще. Просто удаляются несколько лишних строк...
...
Рейтинг: 0 / 0
28.08.2013, 10:21
    #38379539
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
Gobzo KoblerИзвините, господа, но вопрос решился гораздо проще. Просто удаляются несколько лишних строк...Где удаляются?
...
Рейтинг: 0 / 0
28.08.2013, 10:36
    #38379570
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использовать классы из веб сервиса в клиенте
В кодогенерированных классах сервиса ничего удалять нельзя. При следующем рефреше все изменения слетят.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Использовать классы из веб сервиса в клиенте / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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