Как отмечает Джон, на самом деле он ничем не отличается от настольного вызова. Обычно вы можете добавить ссылки на службу из среды IDE и позволить Studio сгенерировать упаковщик вызовов, либо вы можете создать его вручную. Ваш случай может немного отличаться, если вы пытаетесь передать строго типизированный DataSet, поскольку сериализация рабочего стола может не соответствовать тому, что устройство хочет для десериализации. Это действительно зависит от вашего сценария использования.
Независимо от вашего механизма вызовов, стоит отметить, что вызовы веб-службы CF мучительно медленны для генерации прокси. Прокси-сервер кэшируется, но может все же занять несколько секунд при первом вызове для возврата. Хорошая практика заключается в том, чтобы веб-сервис предоставлял простой фиктивный метод (или реальный метод, если применимо), который ничего не делает, но может возвращать blittable тип. Когда приложение запускается, создайте рабочий поток для вызова этого метода, который, в свою очередь, сгенерирует прокси. Затем, когда вам нужно вызвать службу для получения реальных данных, время затрачивается только на обслуживание вызова, а не на создание прокси.