将 WCF Web 服务 (SOAP) 从 WSDL 生成为 accept/return XML 而不是序列化类型

Generating WCF web service (SOAP) from WSDL to accept/return XML rather than serialized types

我有一个很大的 WSDL 文件,我需要从中生成 WCF Web 服务。我可以使用 svcutil.exe 生成服务,但它没有生成我需要的内容。

我需要 accepts/returns XML 的服务,而不是序列化类型。这样做的原因是如果传入的 XML 有错误,它会在它到达我的代码之前失败——我们不能有这个。我们需要在任何序列化恰好捕获它之前拦截 XML。

这可能吗?

或者有什么方法可以修改生成的服务,以便我可以使用原始 XML 而不是派生的 "Message" 类型?

实际上我想要类似的东西:

XmlDocument PersonRevised(XmlDocument request);

当前代码:

    [ServiceContract(Namespace = "urn:hl7-org:v3")]
        public interface IPRPA_AR101202
        {
            [OperationContract(Name = "PersonRevised", Action = "urn:hl7-org:v3/PRPA_IN101204")]
            PersonRevisedResponse PersonRevised(Message request);
        }


public class PRPA_AR101202 : WCFServiceBase, IPRPA_AR101202
    {
        PersonRevisedResponse IPRPA_AR101202.PersonRevised(Message request)
        {
            PersonRevised  pr = this.ParseMessage<PersonRevised>(request, HL7_XML_NAMESPACE);

            PersonRevisedResult result = new PersonRevisedResult();

            PersonRevisedResponse r = new PersonRevisedResponse(result);

            return r;
        }

    }

更新:

根据答案,我能够创建一个接受字符串的 WCF 服务,但是现在我在基于 WSDL 合同(输入参数)的已实现服务上得到空值;不管它是字符串还是 XmlDocument/XmlNode.

想法?

I need a service that accepts/returns XML, rather than serialized types

在这种情况下,您最好使用 POX 而根本不使用 SOAP/WSDL。 here and here 有一些资源。

The reason for this is if there is an error in the incoming XML it will fail before it hits my code - we can't have this.

我有点知道你在说什么。令人恼火的是,任何序列化异常都会终止通道而不是冒泡回客户端,但是,暴露服务元数据端点的全部要点 是客户端将始终序列化暴露的类型正确地在服务边界之外,因为这就是 WSDL 的用途。

Effecitvely I want something similar to: XmlDocument PersonRevised(XmlDocument request);

您肯定知道,公开 XmlDocument 类型不等同于公开 XML。公开 XmlDocument 不会很好。

如果您绝对需要完全控制反序列化,则必须将您的操作公开为接受字符串类型的参数。然后你可以用它做你想做的事。

public string PersonRevised(string request)
{
    // Deserialize here...
}