У меня была такая же проблема, хотя причина могла быть другой. Когда я прошел через мой код в отладчике, аргумент метода превратился из экземпляра в ноль.
Для записи это вызвано тем, что RequestElementName отличается от имени метода. Могут быть и другие влияющие факторы, но когда я либо удалил атрибут RequestElementName из определения метода, либо сделал его таким же, как имя метода, проблема с нулевым аргументом исчезла.
Например, ваш код имеет RequestElementName = "SDD2Transport" и имя метода SDD2TransportOp.
Теперь я не знаю, почему это должно быть проблемой, особенно потому, что у вас также есть: ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Default, not Wrapped, что означает, что ElementName не будет использоваться в любом случае.
Интересно, является ли это ошибкой в классе клиентского протокола .NET SOAP, потому что происходит то, что хотя правильный метод вызывается в веб-службе (поскольку он идентифицирован в заголовке действия SOAP), аргументы не получают Десериализованный.
В моем случае мне приходилось редактировать сгенерированный класс C # каждый раз, когда я его заново создавал, чтобы удалить атрибуты RequestElementName. Обратите внимание, что я не имел никакого контроля над исходным WSDL, так как он был предоставлен третьей стороной.