我有一个基于BizTalk的WCF服务,我不确定它是如何部署或生成的,但据我所知,它是使用BizTalk向导发布WCF服务的。问题是BizTalk服务器安装被删除了,现在服务仍然在这里,但是它不能工作,当我调用该服务时,服务响应是一个例外: 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" %>
因此,我的问题是,有人知道如何根据请求或响应来生成服务,以取代服务。
发布于 2015-03-03 08:30:57
最后,我使用了一个ashx处理程序来处理请求(与其他响应建立在一起非常有用) xml-> generate ->解析和读取请求。唯一的问题是.ashx终止。
发布于 2015-02-27 12:56:36
如果只有请求和响应xml,那么就有点棘手了。即使您能够重新创建该服务,也无法保证现有的服务使用者能够继续调用该服务而不作任何更改。但是,如果您想尝试一下,这个粗略的指南将帮助您:
从soap请求和响应提取操作签名。
这应该很简单。只需查看请求xml中定义SOAP主体的部分即可。例如:
<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主体,例如:
<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推断类型。如果类型太大,可以尝试通过以下方法自动推断它们:
总之,这不是我羡慕您的任务--即使您能够忠实地重构服务和类型定义,您仍然可能会发现,现有客户端无法基于丢失了一些在请求/响应文件中不存在的可选数据来调用服务。
发布于 2015-02-27 13:04:28
如果使用Visual (Reference>“”)在空白项目中为服务创建客户端,则将获得需要实现的接口(以及所有参数的POCOs )。然后创建一个新的WCF项目,并使用该接口和这些类作为您的合同。
这样,您将遵守现有的模式,而不必手动解释它。
https://stackoverflow.com/questions/28763292
复制相似问题