Недавно мы обновили приложение, которое содержало веб-службы, использующие WSE 2.0, до .NET 3.5. Когда мы преобразовывали проект в Visual Studio 2008, в нем ничего не упоминалось об удалении и / или изменении пространств имен WSE 2.0. Вот базовая архитектура веб-сервисов в проекте .NET 1.1.
Исходный код веб-службы:
[WebService(Namespace = "http://tempuri.org")]
public class MyWebService : BaseWebService
{
//Do some stuff
}
Исходный код BaseWebService:
using Microsoft.Web.Services2;
using Microsoft.Web.Services2.Security;
using Microsoft.Web.Services2.Security.Tokens;
namespace MyNameSpace
{
public class BaseWebService : System.Web.Services.WebService
{
public BaseWebService()
{
if (RequestSoapContext.Current == null)
throw new ApplicationExcpetion("Only SOAP requests are permitted.");
}
}
}
Во время преобразования класс BaseWebService.cs был исключен из проекта, а пространства имен WSE2.0 были удалены из класса.
У кого-нибудь еще возникают проблемы с попыткой обновить веб-службу с .NET 1.1 с помощью WSE до .NET 3.5?
Это связано с предыдущим вопросом, который у меня был относительно клиента, использующего обновленную веб-службу:





Самая большая проблема, которую я обнаружил, - это Javascript, который жестко запрограммировал имена некоторых моих серверных элементов управления. в ASP.NET 2.0 с мастер-страницами идентификатор изменился на что-то вроде ctrl $ _gridview1_checkbox1 ... Следовательно, любые жестко запрограммированные ссылки необходимо было изменить и сгенерировать на стороне сервера с использованием свойства ClientID элемента управления.
Я также обнаружил, что .NET 2.0 более строги в отношении неперехваченных исключений, после обновления и простого изменения минимального кода, чтобы получить успешную компиляцию, мы начали получать множество сбоев и необработанных исключений. У нас изначально был очень ошибочный и плохо написанный код, но интересно то, что .net 1.1 никогда не жаловался и не проглатывал ошибки с радостью ...
Поскольку я ответил к исходному вопросу:
WCF (.net 3.5) считается совместимым с WSE3 (.net 2.0+), но не с WSE2 (.net 1.1+).
Поэтому, если вы не хотите менять клиента, но хотите, чтобы он был совместим со службой, вы можете оставить старый исходный код службы и сохранить ссылки на сборки WSE2 в решении VS2008. Таким образом, и клиент, и сервис будут совместимы.
Клиентский прокси должен унаследовать Microsoft.Web.Services2.WebServicesClientProtocol. Реализация службы должна использовать пространства имен и сборки Microsoft.Web.Services2. В Web.config должен быть правильно настроен system.web / webServices / soapExtentionTypes.
Сделанный. Я опубликовал настройки soapExtensionTypes для обновленной веб-службы.
Вот настройки в web.config для службы:
<system.web>
<webServices>
<soapExtensionTypes>
<add type = "Microsoft.Web.Services2.WebServicesExtension, Microsoft.Web.Services2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" priority = "1" group = "0" />
<!--<add type = "Microsoft.Web.Services2.Configuration.WebServicesConfiguration, Microsoft.Web.Services2, Version=2.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>-->
</soapExtensionTypes>
</webServices>
</system.web>
Значит, ссылка на WSE 2.0 должна быть в клиенте и сервисе или просто в сервисе?