Использование одной и той же библиотеки классов в приложении Windows и веб-сервисе - PullRequest
0 голосов
/ 10 декабря 2011

Я работаю с:

Библиотека классов: Model.dll

using System;
using System.Collections.Generic;
using System.Text;

namespace root
{
    public class Customer
    {
        private int _Id;

        public int Id
        {
            get { return _Id; }
            set { _Id = value; }
        }

        private string _Name;

        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }
    }
}

Веб-служба ASP.NET со ссылкой на Model.dll, поэтому я могу использовать в веб-методе:

[WebMethod]
public string HelloWorld(root.Customer customer) {
   return "Hello World";
}

Приложение Windows со ссылкой на Model.dll и веб-службу (1).

root.Customer newCustomer = new Customer();
newCustomer.Id = 1;
newCustomer.Name = "Name";

ws.Service ws = new root.ws.Service();
ws.HelloWorld(newCustomer);
              ^ problem here

Ошибка: аргумент '1': невозможно преобразовать из«root.Customer» - «root.ws.Customer»


(1) Щелкните правой кнопкой мыши -> И веб-ссылка -> Веб-службы в этом решении -> Нажмите Service.asmx ->Введите имя веб-ссылки: ws -> Нажмите Добавить ссылку


Обновлено: Я могу изменить строку в сгенерированном файле Reference.cs из

public string HelloWorld(Customer customer)

до

public string HelloWorld(root.Customer customer)

Таким образом, функция будет искать реальную модель вместо прокси-объекта, но не является реальным ответом.
Я не думаю о редактировании этого файла после каждой веб-ссылкиобновление.
Как заставить это использовать реальную модель?

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

Боюсь, что повторное использование типов в автоматически сгенерированных прокси ASMX невозможно.

Есть три варианта.

1) написать свой собственный генератор кода, который будет действовать как wsdl.exe, то есть создать прокси-сервер вашего веб-сервиса, но с повторным использованием указанных вами типов

(довольно сложно)

2) написать свой собственный переписчик кода, который будет переписывать прокси, сгенерированные автоматически, для использования ваших собственных типов. Вы будете вызывать такой редактор каждый раз после создания ссылки на веб-сервис

(все еще утомительно)

3) переключиться на веб-сервисы WCF. служба WCF для basicHttpBinding семантически эквивалентна веб-службе ASMX (использует тот же протокол связи, основанный на http + soap), но метаданные службы WCF содержат больше информации о типах, так что генератор прокси может "повторно использовать типы из ссылочных сборок ».

(предлагаемый подход)

0 голосов
/ 10 декабря 2011

Если вы отключитесь от asmx и начнете использовать модель WCF svc, вы сможете без особого труда делиться библиотекой между сервером и клиентом.Если это вариант, есть много ресурсов, чтобы помочь вам с WCF онлайн.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...