gpt4 book ai didi

c# - 补充 BizTalk WCF 服务

转载 作者:行者123 更新时间:2023-11-30 20:44:56 26 4
gpt4 key购买 nike

我有一个基于 BizTalk 的 WCF 服务,我不确定它是如何部署或生成的,但据我所知,它是使用 BizTalk 向导创建的,用于发布 WCF 服务。问题是 BizTalk 服务器安装已被删除,现在服务仍然存在,但它不起作用,当我调用 URL 时,服务响应异常:BizTalk 接收位置可能已禁用。我需要生成 WCF 服务才能替换该服务。我有一个示例请求和响应以及包含服务的文件夹,其中包含很多内容、XML、定义等,但没有 DLL。 SVC 标记引用了 BizTalk 逻辑。

<%@ ServiceHost Language="c#" Factory="Microsoft.BizTalk.Adapter.Wcf.Runtime.WSHttpWebServiceHostFactory, Microsoft.BizTalk.Adapter.Wcf.Runtime, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>

那么我的问题来了,有没有人知道如何根据请求或响应生成服务以取代服务。

最佳答案

如果您只有请求和响应 xml,那么这有点棘手。即使您设法重新创建服务,也不能保证现有服务消费者能够继续调用服务而无需任何更改。但是,如果您想尝试一下,这个粗略的指南会有所帮助:

从soap请求和响应中提取操作签名

这应该很简单。只需查看定义 SOAP 主体的请求 xml 部分。例如:

<soap:Body xmlns:m="http://www.bookshop.com/prices"> 
<m:GetBookPrice>
<param1 xsi:type="xs:string">Metro 2033</param1>
</m:GetBookPrice>
</soap:Body>

这表明操作名称称为 GetBookPrice,并且它采用字符串作为参数。现在查看响应的肥皂主体,例如:

<soap:Body xmlns:m="http://www.bookshop.com/prices"> 
<m:GetBookPriceResponse>
<return xsi:type="xs:decimal">5.99</return>
</m:GetBookPriceResponse>
</soap:Body>

这告诉我们操作的返回类型是十进制:

public decimal GetBookPrice(string bookName);

现在您可以在普通 WCF 服务中重新创建服务操作。

服务定义可能包含复杂类型而不是原始类型,在这种情况下,您需要从请求/响应 xml 中推断类型。如果类型太大,您可以尝试通过以下方式自动推断它们:

  1. 从 XML 推断 XSD - 您只需要从请求/响应文件中提取请求和响应类型,然后通过 xsd.exe 运行它们,它将尝试为您的请求/响应类型生成 XSD 架构。
  2. 从 XSD 推断 CS - 获得 XSD 文件后,再次使用 xsd.exe 推断这些文件的类。然后,您可以使用 DataContract 注释这些类和 DataMember 属性,然后您可以在服务定义中使用它们。

总而言之,这不是我羡慕你的任务 - 即使你设法忠实地重建服务和类型定义,你可能仍然会发现现有客户端无法调用服务,因为错过了一些不存在的可选数据在您拥有的请求/响应文件中。

关于c# - 补充 BizTalk WCF 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28763292/

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