Как Visual Studio 2008 и svcutil решают, какие типы повторно использовать из ссылочных сборок при создании прокси-класса веб-службы? - PullRequest
0 голосов
/ 02 августа 2010

Мне нужно знать, как svcutil и Visual Studio решают, какие типы можно повторно использовать из ссылочных сборок при создании прокси-класса веб-службы.

У меня есть сборка с некоторыми типами, которые объявлены так:

namespace MYCOMPANY.BO.Accounting
{
    [Serializable, DataContract]
    public class AccountingPackagePutRequest : Request
    {
        // Fields
        [DataMember]
        public IBooking[] bookings;
        [DataMember]
        public IDocument[] documents;

        // Methods
        public AccountingPackagePutRequest();
    }
}

Теперь у меня есть веб-сервис ASP.NET 2.0 (ASMX), который объявлен так:

[WebService(Namespace = "uri://my_company.com/XXXImport")]
[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 GLSImportAccountingPackagePut : System.Web.Services.WebService
{
    [WebMethod]
    public MYCOMPANY.BO.Accounting.AccountingPackagePutResponse AccountingPackagePut(MYCOMPANY.BO.Accounting.AccountingPackagePutRequest request)
    {
        return new MYCOMPANY.BO.Accounting.AccountingPackagePutResponse();
    }
}

Теперь я не могу заставить VS или svcutil повторно использовать типы из первой сборки на клиенте при создании прокси-класса для этого веб-сервиса.

Однако, если я создаю подобный веб-сервис в WCF и пытаюсь сгенерировать прокси-класс для него, типы из первой сборки используются повторно.

В чем здесь проблема, и как я могу заставить VS или svcutil повторно использовать типы для версии веб-службы ASP.NET 2.0 (ASMX)?

Ответы [ 3 ]

0 голосов
/ 03 августа 2010

Разница заключается в контрактах и ​​сериализаторе.На основе архитектуры клиент генерирует прокси-сервер для удовлетворения контрактов службы WCF.Если он может разрешить контракт локально, прокси не генерируется.Также отметим, что WCF - это не что иное, как сборка, предоставляемая через транспортный протокол.

В случае веб-служб ASP.net по умолчанию он не основан на контракте.Но есть нечто, называемое Contract First Web Services , которое решает эту проблему.

0 голосов
/ 12 августа 2010

Как указывает Кбримингтон в «классических» веб-сервисах ASP.NET, нет возможности повторно использовать типы, как это возможно в WCF.Я нашел это также здесь:
1) http://infiniteimprobability.blogspot.com/2009/02/reuse-type-in-web-service.html
2) "Повторное использование существующих типов" игнорируется при добавлении сервисной ссылки
3) http://mark.mymonster.nl/2007/12/16/reusing-class-library-between-web-service-and-consumer/

Однако с небольшим желанием это можно сделать с помощью расширений Schema Importer.См .:
1) http://mark.mymonster.nl/2007/12/16/reusing-class-library-between-web-service-and-consumer/
2) http://webcache.googleusercontent.com/search?q=cache:Uy_5sKE0OzQJ:www.microsoft.com/belux/msdn/nl/community/columns/jdruyts/wsproxy.mspx+wsproxy+belux&cd=1&hl=en&ct=clnk

Вторая ссылка - это кеш Google исходного сообщения, который больше недоступен.Если у вас возникли проблемы с поиском, сообщите мне (у меня есть локальная копия страницы).

0 голосов
/ 03 августа 2010

Повторное использование типов в клиентском .DLL, предоставляемом через веб-службу WCF, было новой функцией с WCF, встреченной бурными аплодисментами на конференции, на которой я был, когда было объявлено.

Насколько я могу сказатьсовместное использование типов между клиентской сборкой и веб-службой на основе ASMX не поддерживается платформой.

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