我有一个基于Delphi服务构建的.Net WCF客户端/代理. Delphi服务以我的客户端无法处理的格式提供SOAP消息. 根据这里的指导:Delphi SOAP Envelope and WCF我已经明白WCF希望“Document / Literal / Wrappe
根据这里的指导:Delphi SOAP Envelope and WCF我已经明白WCF希望“Document / Literal / Wrapped”样式成为消息序列化的方式.事实证明,Delphi服务使用“rpc”作为样式.
我无法让delphi服务改变它的风格.
有没有办法告诉WCF客户端使用“rpc”代替.
作为参考,这里是我正在构建的Delphi服务:http://www.tntschools.com/AkiTimeTableService/wsdl/ICourses
以这种方式添加服务引用时,每个生成的消息协定都以与以下方式类似的方式进行修饰:[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消息中元素的顺序).