【发布时间】:2020-09-12 00:44:21
【问题描述】:
我正在尝试了解如何创建/反向设计一个 Multipart WCF Soap 端点,该端点将附件作为输入参数,由“MIME-delimiter”分隔。
我举了一个例子,说明谁会向这种端点发出请求,但我不明白如何创建服务来接收请求。
所以我得到的示例是这样的(仅供参考,出于安全原因,我已删除信息):
--MIME11111.11111
<SOAP-ENV:Envelope xmlns:SOAP-ENV="" xmlns:eb="" xmlns:xsi="" xsi:schemaLocation="">
<SOAP-ENV:Header>
<eb:MessageHeader SOAP-ENV:mustUnderstand="1" eb:version="2.0">
<eb:From>
<eb:PartyId eb:type="TYPE1">NUMBER</eb:PartyId>
</eb:From>
<eb:To>
<eb:PartyId eb:type="TYPE2">NUMBER</eb:PartyId>
</eb:To>
<eb:CPAId>ID</eb:CPAId>
<eb:Service eb:type="TYPE3">TEXT</eb:Service>
<eb:Action>TEXT</eb:Action>
<eb:MessageData>
<eb:MessageId>ID</eb:MessageId>
<eb:Timestamp>DATE</eb:Timestamp>
</eb:MessageData>
</eb:MessageHeader>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<eb:Manifest eb:version="2.0">
<eb:Reference xlink:href="cid:payload-1" xlink:role="aop:ROOT"/>
</eb:Manifest>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
--MIME11111.11111
Content-ID: payload-1
<?xml version="1.0" encoding="UTF-8"?>
<aop:ROOT xsi:schemaLocation="" xmlns:aop="" xmlns:xsi="">
<aop:ELEMENT>
<aop:SUBELEMENT11>TEXT</aop:SUBELEMENT11>
<aop:SUBELEMENT12>
<aop:SUBELEMENT21>NUMBER</aop:SUBELEMENT21>
<aop:SUBELEMENT22>NUMBER</aop:SUBELEMENT22>
</aop:SUBELEMENT12>
</aop:ELEMENT>
</aop:ROOT>
--MIME11111.11111--
到目前为止我所做的是:
- 在 Visual Studio 中创建了一个 WCF 项目。
-
这样创建我的界面:
[ServiceContract] public interface IService1 { [OperationContract] [WebInvoke(Method = "Post", BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "/PostBusinessData")] PostBusinessDataResponseContract PostBusinessData(Manifest data); } [MessageContract] public class Manifest { [MessageHeader] public Headers MessageHeader { get; set; } [MessageBodyMember] public Stream Reference { get; set; } } [MessageContract] public class PostBusinessDataResponseContract { [MessageBodyMember] public string PostBusinessDataResponse { get; set; } } -
像这样创建我的控制器/服务:
public class Service1 : IService1 { public PostBusinessDataResponseContract PostBusinessData(Manifest data) { return new PostBusinessDataResponseContract() { PostBusinessDataResponse = "It Works"}; } } 我的 Header 类是通过在上例中的“header”元素之间“特殊粘贴”XML 结构而创建的。
我已经为soap-envelope标头设置了类Model,除了元素上的一些属性在生成的请求结构中显示为子元素。
但主要是我不太明白如何为附件中的 in 参数构建代码。在我看来,多部分示例中的附件是作为流出现的,但是作为什么流?一个文件,一个xml字符串/文本? SOAP 信封中的引用包含的唯一内容是所谓的“Content-ID”。没有文件名,没有别的。
如何在我的 backed 中设置我的端点以便能够使用上面示例中显示的请求类型真的是我的问题。
【问题讨论】:
标签: c# wcf soap attachment multipart