gpt4 book ai didi

namespaces - Biztalk 2013 : Setting different namespace on schema elements

转载 作者:行者123 更新时间:2023-12-04 16:54:39 25 4
gpt4 key购买 nike

我正在开发一个 BizTalk 应用程序来查询由第三方编写和维护的许多 Web 服务,但我在获取架构上的命名空间时遇到了一些问题。

基本上,我不能使用 wsdl 来自动生成模式,因为命名空间和元素名称在生成的模式中都是错误的(由于懒惰的 C# wsdl 生成),所以我不得不从头开始编写它们。这很好,但是 Web 服务端点要求模式中的元素都使用特定的命名空间进行限定,并且它们都与整个模式的命名空间不匹配。

我已经弄清楚如何将其他命名空间/架构导入我的架构,但我无法弄清楚如何将元素的命名空间更改为默认名称以外的任何名称。有谁知道如何做到这一点?

例如,模式根必须具有 "http:/tempuri.org/" 的命名空间。 ,但其中一个元素需要命名空间 "http://schemas.datacontract.org/2004/07/ReadService.DTO.Inbound.Supplier" ,但在 BizTalk 中,我无法编辑该元素的命名空间来更改它。

其中一个请求的正文如下所示:

<tem:GetSupplierIdWithExternalId>
<tem:request>
<com:Header>
<com1:Username></com1:Username>
<com1:Locale></com1:Locale>
</com:Header>
<read:ExternalSupplierId></read:ExternalSupplierId>
</tem:request>
</tem:GetSupplierIdWithExternalId>

在这种情况下,“tem”是 http://tempuri.org/ "."、"com1"和 "read"都是不同的命名空间,正如 Gruff 所指出的,它们都是 WCF 项目的默认命名空间。

在 Biztalk 中从 WSDL 生成会产生两个问题:
  • 应用于根注释的默认命名空间不是 tempuri.org(因为它认为这是默认的),它是标准的 Biztalk http://..Folder.SchemaName 命名空间。将此更改为 tempuri.org 会导致必须修复的一系列错误,并且它无法解决更主要的问题:
  • 由于生成 WSDL 的 WCF 函数的编写方式,主要元素名称(上面的 GetSupplierIdWithExternalId)都被错误地命名 - 在大多数情况下,类似于“GetSupplierIdWithExternalId Request ”,因为那是生成模式的函数的名称。再次是由于端点上的懒惰编程,因为元素的名称没有正确定义,它只是由生成过程假设。

  • 如果我尝试创建单个平面文件模式,我只能为整个文件定义一个命名空间,如果我将其设置为 tempuri.org,我会得到:
    <ns0:GetSupplierWithExternalId xmlns:ns0="http://tempuri.org/">
    <Header>
    <Username>Username_0</Username>
    <Locale>Locale_0</Locale>
    </Header>
    <ExternalSupplierId>ExternalSupplierId_0</ExternalSupplierId>
    </ns0:GetSupplierWithExternalId>

    ... SOAP 请求失败,因为内部元素上的命名空间不正确。

    提前致谢!

    最佳答案

    您需要在其自己的架构文件中定义 namespace 为“http://schemas.datacontract.org/2004/07/ReadService.DTO.Inbound.Supplier”的元素,并将其导入架构根并以这种方式组合根。该元素将保留其定义的命名空间。

    查看命名空间“http://schemas.datacontract.org/2004/07/ReadService.DTO.Inbound.Supplier ”,似乎是 WCF 赋予数据协定的默认命名空间,因为它没有明确定义。 (该类的 CLR 命名空间为 ReadService.DTO.Inbound.Supplier)当 DataContractSerializer 在发送请求时序列化消息时,它将使用该命名空间对其进行序列化。您不应尝试在 BizTalk 架构中更改它,否则将出现架构不匹配。

    更新:
    在您的更新中,您在从 WSDL 生成架构时提到了 2 个问题。

  • 你能贴一下这个截图吗?
  • 你确定GetSupplierIdWithExternalIdRequest是不正确的?如果您在 WSDL 中搜索该术语,您能找到它吗?
    操作的请求和响应包装器通常以 -Request 和 -Response 为后缀,因此这可能是完全正确的。
  • 关于namespaces - Biztalk 2013 : Setting different namespace on schema elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37344195/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com