0

我正在连接到不接受任何参数并返回简单字符串响应的 SOAP 1.1 Web 服务。

我使用旧的 .NET 2.0 Add Web Reference为复杂类型生成了我的 xsd 文件,它还在 Reference.odx 中生成了端口和多部分消息类型

在我的编排中,我在Web 消息类型下使用正确的多部分消息作为我的请求和响应消息的类型,并在发送操作之前为请求消息使用空的构造消息形状。

尽管明确构造了没有参数的请求消息,但我可以(在 Fiddler 中)看到对服务的请求是正确构建的,但没有请求正文。我期待

    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
                   xmlns:myns="http:myns">
        <soap:Body>
            <myns:ServiceName/>
        </soap:Body>
    </soap:Envelope>

端口和适配器设置正确,因为我可以手动插入带有名为 node 的自动关闭请求的预期请求主体,然后重播失败的请求,然后成功。

我可以想到 2 个可能出错的地方:

  1. 在编排中构造消息
  2. 我的端口适配器可能会忽略空消息,并且在请求正文中不包括 SOAP 信封

即使正文为空,如何强制 SOAP 信封存在?

4

1 回答 1

0

我的问题是由直接在我的编排中使用自动生成的网络消息引起的。我通过以下方式“解决”了我的问题:

  1. 使用 .NET 2.0 Add Web Reference 保存 wsdl 为服务生成 xsd
  2. 使用 Add Generated Items.. > Consume WCF Service,使用 wsdl 和 xsd 选项并选择在 1 中生成的文件
  3. 手动更改生成的文件以删除一些重复的复杂类型和无效的导入
  4. 更改 odx,将消息类型上的修饰符更改为公共(来自内部)
  5. 从我的 BizTalk 项目中排除 Web 引用以避免重复

然后我可以在我的编排中使用生成的多部分消息。至关重要的是,不带参数的服务的消息是使用消息部分定义的,我可以使用消息分配形状对没有内容的消息部分进行硬编码。

我还获得了其他一些好处,例如异常类型。

于 2014-04-02T15:42:32.303 回答