- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 wcf 契约(Contract)中使用 Stream
对象,因此被迫使用 MessageContract
而不是 DataContract
。
[MessageContract]
public class Document
{
[MessageBodyMember(Order = 1)]
public System.IO.Stream FileData;
}
[MessageContract]
public class A : Document
{
[MessageBodyMember]
public string input;
}
[MessageContract]
public class B : Document
{
[MessageBodyMember]
public string someProp;
}
[ServiceContract]
public interface ISomeService
{
[OperationContract]
Document SomeMethod(Document file);
}
我希望此服务的使用者创建 A 或 B 的对象并使用它调用服务。在服务端,我可以将其类型转换为适当的对象,然后执行一些操作。
问题是我不能用 MessageContract
指定 KnownType
并且继承的契约(Contract)在服务中使用或用 KnownType
声明之前不能暴露给客户端.
我尝试用谷歌搜索它,但找不到任何与 MessageContract
相关的 KnownType
。
正如评论中所建议的...我用 KnownType
更新了我的消息契约(Contract),但它们仍然没有通过服务引用暴露给客户端...
[MessageContract]
[KnownType(typeof(FileSystemStoredDocument))]
[KnownType(typeof(FileBoundStoredDocument))]
[KnownType(typeof(SharepointStoredDocument))]
public class Document : DocumentInfo, IDisposable
{
}
谁能帮我看看这里出了什么问题?
注意:所有KnownType
都继承自Document
最佳答案
消息契约描述了消息应该是什么样子。它们确实支持继承,但您必须指定在特定操作中使用的确切消息协定。
如果您检查消息的正文部分:
ContractDescription.GetContract(typeof(ISomeService)).Operations[0].Messages[0].Body.Parts
您只会看到一部分 - Stream
对象。这与数据契约形成对比,在数据契约中,正文包含 Object
类型的一部分。所以您明白了为什么 KnownType
在这里不起作用。
(ContractDescription
类用于生成 WSDL。请参阅 WsdlExporter
类。)
您可以做的是创建将包含在消息协定中的数据协定层次结构,例如
[MessageContract]
public class Document
{
[MessageHeader]
public DocumentProperties Properties;
[MessageBodyMember(Order = 1)]
public System.IO.Stream FileData;
}
[DataContract]
[KnownType(typeof(A))]
[KnownType(typeof(B))]
public abstract class DocumentProperties { }
[DataContract]
public class A : DocumentProperties
{
[DataMember]
public string input;
}
[DataContract]
public class B : DocumentProperties
{
[DataMember]
public string someProp;
}
请注意,如果要传递 Stream
,则不能有多个主体成员,因此其余属性必须在标题中。
关于wcf - WCF 中 MessageContract 的已知类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38413321/
我对 WCF 相当陌生,只是有一个关于如何正确使 MessageContract 继承工作的问题。我的设置的简化版本如下 - 一个“基本”消息类型,然后是另一个从它继承的“测试”消息。 [Messag
我有以下 wcf 服务: [ServiceContract] public interface IUnitTestingService { [OperationContract] Te
我收到了一位客户关于他们的网络服务客户端如何工作的规范。该规范是从服务以及相应的 XSD 发送和接收的实际 SOAP XML 消息。客户希望我实现符合客户要求的网络服务。客户端是用 axis2 ws-
我在我的 wcf 契约(Contract)中使用 Stream 对象,因此被迫使用 MessageContract 而不是 DataContract。 [MessageContract] p
我正在编写我的第一个 WCF 服务。我决定先将服务作为 DLL 来编写,然后再考虑 WCF 的内容,这就是我现在所处的位置。 架构师建议我应该坚持我已经完成的消息对象的特定格式。然而,我在消息对象中使
我正在尝试使用以下 MessageContract 通过 Silverlight 客户端上传文件: [MessageContract] public class CategoryClientFileT
我正在尝试用 WCF 服务替换 asmx WebService。我的主要目标是保持 SOAP 消息相同。调用方不是 .NET,需要大量返工才能对契约(Contract)进行细微更改。 我的痛点是我试图
有什么方法可以在使用 Mtom 的同时使用 datacontracts 吗? 最佳答案 有 nothing preventing您不能使用与 MTOM 的数据契约(Contract)。 关于c# -
我想知道,当我使用流式传输通过 WCF 发送数据时,是否有可能返回任何内容?我使用 netTcpBinding,客户端和服务器在同一个本地网络中。 这是我的代码: [ServiceContract()
有没有办法让 DataContractSerializer 序列化一个 [MessageContract],就像它在通过 SOAP 传输时一样? 我有一个类在 WCF 调用的线路上显示如下: J
我正在尝试针对现有示例消息测试 [MessageContract] 类,并且我正在寻找一种方法来简化开发,方法是将示例消息文件读入我的 [MessageContract] 类并查看它是如何工作的(我在
我正在尝试将 MessageContract 添加到我的 WCF 服务,类似于这个问题中发生的事情:WCF: using streaming with Message Contracts 这是我得到的
预先说明:我无法更改传入的 SOAP 请求的格式,因为它们已由国际标准固定 (weeeeeeeee)。 我有一个 SOAP 请求进入我的 WCF 服务,看起来像这样:
我们有一个包含以下契约的 WCF 设置: [ServiceContract( Namespace = Constants.Namespaces.HL7Namespace, Na
我正在导入一个 WSDL 作为服务定义(入站到我的服务),无论出于何种原因,客户端正在格式化请求,使得 WCF 无法在代理类没有 MessageContract 装饰的情况下反序列化它. 我已经通过在
我有一个 WCF 服务操作的要求,它接受一个大流,处理它并返回该流。 我用了an MSDN article on Large Data Streaming作为我需要的引用。我遵循了那篇文章中的建议。
我可以在 WCF 中使用递归 MessageContract 吗?例如: 我需要发布一些参数,其中一个参数是一个文件流数组。这是我的操作合约: DomainResult AddSomethingNew
我需要所有 3 个项目都在 Body 中,以便客户端可以使用它们,他不能修改 Header 中的数据(首先在 MessageHeader 中的前 2 个): [MessageContract] pub
我是一名优秀的程序员,十分优秀!