.NET 1.1, использующий веб-сервис с обнуляемыми типами, что делать? - PullRequest
4 голосов
/ 08 ноября 2011

Мне нужно использовать WebService с .NET 1.1.Проблема в том, что webService возвращает нулевые значения, а .NET 1.1 не работает с типами Nullable.

Часть схемы WebService

 <xs:element name="SomeDate" type="xs:dateTime" nillable="true" />
 <xs:element name="Email" type="xs:string" nillable="true" />

Как вы могли бы ее использовать?Какой подход я бы использовал для решения этой головоломки?

Я даже не могу вызвать веб-сервис..Net 1.1 пытается проанализировать нулевые значения и вылетает.

Когда мы пытаемся вызвать WebService, он дает нам следующее исключение:

Введенная строка была невернаформат.

Сведения об исключении: System.FormatException: входная строка была неверного формата.

Строка 75: [System.Web.Services.Protocols.SoapDocumentMethodAttribute ("http://mysite.com/Clientes/ConsultaCliente", RequestNamespace =" http://mysite.com/Clientes/", ResponseNamespace = "http://mysite.com/Clientes/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)] * ​​1020 *

Строка 76: открытые клиенты ConsultaCliente (ParametrosConsultaClientes parametertros) {

Строка 77: объект [] results = this.Invoke ("ConsultaCliente", новый объект [] {

Строка 78: параметры});

[FormatException: входная строка была в неправильном формате.]

System.Number.ParseInt32 (String s, стиль NumberStyles, информация NumberFormatInfo) + 0

System.Int32.Parse (String s, Стиль NumberStyles, поставщик IFormatProvider) + 37

System.Xml.XmlConvert.ToInt32 (String s)

Ответы [ 4 ]

3 голосов
/ 08 ноября 2011

Вы можете заключить ваш класс DateTime (любого другого типа значения, который должен быть обнуляем) в класс NullableDateTime (в качестве ссылочного типа).Он не так хорош, как универсальный тип, но должен работать даже в .NET 1.1.

Я не тестировал его, но обнаружил Nullable Type Library в Source Forge .

2 голосов
/ 08 ноября 2011

Может быть, вы можете добавить некоторые дополнительные элементы управления в прокси-класс VS или wsdl.exe автоматически генерирует (C:\Projetos\PortalIO\Fontes\DotNet\Source\PortalIO\Web References\wsCentralClientes\Reference.cs)

2 голосов
/ 08 ноября 2011

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

1 голос
/ 08 ноября 2011

При работе в .NET 1.x есть только один способ - трудный путь (так что подайте в суд на меня, Lexus) Проверьте http://msdn.microsoft.com/en-us/magazine/cc188761.aspx и объедините его с XSLT (доступно в 1.x IIRC), чтобы переписатьопределение, чтобы соответствовать десериализатору.

...