Каков Ваш предпочтительный метод отправки сложных данных по веб-сервису?

Вы можете создать эту функциональность с помощью Backend. Просто создайте один PHP-скрипт или какой-либо язык, на котором используется ваш бэкэнд. Вот как я читаю PHP.

Просто создайте один php-скрипт, который определит, что вы используете iphone или android или web.check эту ссылку для php script Обнаружение мобильных или настольных браузеров и перенаправление на соответствующую веб-страницу

И перенаправить ее на соответствующий URL-адрес. Вы можете использовать URL-адрес сайта с файлом php https://www.dawawas.com/detect_mobile.php

пользователь разделит этот URL-адрес, и когда другой пользователь коснется вышеуказанной ссылки, тогда скрипт php определит, будет ли он ios или андроид или веб-сайт, и будущая ссылка откроется автоматически через перенаправление

Я реализовал это в нашем приложении ios.

9
задан Chris 23 August 2008 в 18:45
поделиться

4 ответа

существует также аргумент в пользу разделения уровней - имеют ряд сериализуемых объектов, которые передаются и от веб-сервиса и переводчика, чтобы отобразить и преобразовать между тем набором и бизнес-объектами (который мог бы иметь свойства, не подходящие для того, чтобы передать по проводу),

Это - подход, одобренный сервисной фабрикой фабрики программного обеспечения веб-сервиса, и означает, что можно изменить бизнес-объекты, не повреждая интерфейс/контракт веб-сервиса

1
ответ дан 4 December 2019 в 23:08
поделиться

Я сделал бы гибрид. Я использовал бы объект как это

public class TransferObject
{
    public string Type { get; set; }
    public byte[] Data { get; set; }
}

затем у меня есть миленькая утилита, которая сериализирует объект, затем сжимает его.

public static class CompressedSerializer
{
    /// <summary>
    /// Decompresses the specified compressed data.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="compressedData">The compressed data.</param>
    /// <returns></returns>
    public static T Decompress<T>(byte[] compressedData) where T : class
    {
        T result = null;
        using (MemoryStream memory = new MemoryStream())
        {
            memory.Write(compressedData, 0, compressedData.Length);
            memory.Position = 0L;

            using (GZipStream zip= new GZipStream(memory, CompressionMode.Decompress, true))
            {
                zip.Flush();
                var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                result = formatter.Deserialize(zip) as T;
            }
        }

        return result;
    }

    /// <summary>
    /// Compresses the specified data.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="data">The data.</param>
    /// <returns></returns>
    public static byte[] Compress<T>(T data)
    {
        byte[] result = null;
        using (MemoryStream memory = new MemoryStream())
        {
            using (GZipStream zip= new GZipStream(memory, CompressionMode.Compress, true))
            {
                var formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
                formatter.Serialize(zip, data);
            }

            result = memory.ToArray();
        }

        return result;
    }
}

Затем Вы просто передали бы объект передачи, который будет иметь имя типа. Таким образом, Вы могли сделать что-то вроде этого

[WebMethod]
public void ReceiveData(TransferObject data)
{
    Type originType = Type.GetType(data.Type);
    object item = CompressedSerializer.Decompress<object>(data.Data);
}

прямо сейчас сжатый сериализатор использует дженерики для создания этого со строгим контролем типов, но Вы могли сделать метод легко для взятия в Текстовом объекте для десериализации использования originType выше, все зависит от реализации.

надежда это дает Вам некоторое представление. О, и отвечать на Ваш другой вопрос, wsdl.exe не поддерживает типы многократного использования, WCF делает все же.

4
ответ дан 4 December 2019 в 23:08
поделиться

Darren записал: я сделал бы гибрид. Я использовал бы объект как это...

Интересная идея... передающая сериализированную версию объекта вместо (wsdl-редактор) сам объект. В некотором смысле, мне нравится его элегантность, но в другом отношении, это, кажется, побеждает цель выставить Ваш веб-сервис потенциальным третьим лицам или партнерам или что бы то ни было. Как они знали бы, что передать? Они должны были бы положиться просто на документацию? Это также теряет часть "неоднородного клиента" аспект, так как сериализацией является очень конкретный .NET. Я не означаю быть критически настроенным, я просто задаюсь вопросом, предназначено ли то, что Вы предлагаете также, для этих типов вариантов использования. Я не вижу ничто плохого с использованием его в закрытой среде все же.

Я должен изучить WCF... Я избегал его, но возможно время.

1
ответ дан 4 December 2019 в 23:08
поделиться

о, наверняка, я только делаю это, когда я - потребитель веб-сервиса или если у Вас есть своего рода контроллер, от которого они запрашивают объект, и затем Вы обрабатываете сериализацию и отправку, а не их непосредственно потребление веб-сервиса. Но действительно, если бы они непосредственно используют веб-сервис, затем они не нуждались бы или обязательно имели бы блок, который имел бы тип в нем во-первых и должен использовать объекты, которые генерирует wsdl.

И да, то, что я выдвинул, является очень.NET, конкретной, потому что мне не нравится использовать что-либо еще. Единственное другое время я использую веб-сервисы за пределами .NET, было в JavaScript, но теперь я только использую json ответы вместо xml ответов веб-сервиса :)

1
ответ дан 4 December 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: