Заставить клиент .net WCF использовать RPC / закодированный вместо Document / Literal / Wrapped с сервисом Delphi - PullRequest
5 голосов
/ 14 марта 2011

У меня есть клиент / прокси .Net WCF, построенный на основе службы Delphi. Служба Delphi предоставляет сообщения SOAP в формате, который мой клиент не смог обработать.

На основе приведенных здесь рекомендаций: Delphi SOAP Envelope и WCF Я пришел к выводу, что WCF ожидает, что стиль "Document / Literal / Wrapped" будет способом сериализации сообщения. Оказывается, сервис Delphi использует «rpc» в качестве стиля.

Я не могу заставить службу delphi изменить свой стиль.

Есть ли способ, которым я могу сказать клиенту WCF вместо этого использовать "rpc".

Для справки вот служба Delphi, против которой я строю: http://www.tntschools.com/AkiTimeTableService/wsdl/ICourses

1 Ответ

4 голосов
/ 15 марта 2011

При добавлении ссылки на службу таким образом каждый сгенерированный контракт сообщения оформляется аналогично следующему:

[DebuggerStepThrough]
[GeneratedCode( "System.ServiceModel", "4.0.0.0" )]
[MessageContract( WrapperName = "GetCourseList", WrapperNamespace = "urn:CoursesIntf-ICourses",
    IsWrapped = true )]
public partial class GetCourseListRequest
{
    [MessageBodyMember( Namespace = "", Order = 0 )]
    public string licence;

    public GetCourseListRequest()
    {
    }

    public GetCourseListRequest( string licence )
    {
        this.licence = licence;
    }
}

Каждый сгенерированный контракт операции оформляется аналогично следующему:

[GeneratedCode( "System.ServiceModel", "4.0.0.0" )]
[ServiceContract( ConfigurationName = "ServiceReferences.ICourses" )]
public interface ICourses
{
    [OperationContract( Action = "urn:CoursesIntf-ICourses#GetCourseList", ReplyAction = "*" )]
    [XmlSerializerFormat( Style = OperationFormatStyle.Rpc, SupportFaults = true,
        Use = OperationFormatUse.Encoded )]
    [ServiceKnownType( typeof( TCourse ) )]
    GetCourseListResponse GetCourseList( GetCourseListRequest request );

    // Remaining operation contracts omitted
}

Проверьте Reference.cs, чтобы определить, оформлены ли ваши сообщения и контракты на операции одинаково.Если они есть, проблема лежит в другом месте.Сообщение об исключении будет полезно для отслеживания проблемы (например, это может быть порядок элементов в возвращенном сообщении SOAP).

...