问题标签 [messagecontract]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3212 浏览

c# - WCF 消息契约和流式处理

我快疯了,我已经用这个工作了一天多,仍然不知道为什么它不起作用,

我有一个用于发送流的 MessageContract,但出现以下错误,

不需要输入数据合同名称为“FileStream: http://schemas.datacontract.org/2004/07/System.IO ”的“System.IO.FileStream”。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。

任何帮助都会被大大占用,

0 投票
2 回答
5910 浏览

.net - WCF:数据合约被转换为消息合约

我的 WCF 服务导出单个操作,标记有 catch-all 操作和回复操作,以便它代表服务的公共入口点:

客户端代理仍然作为数据合约生成。

然而,我发现,尽管客户端发送了数据合约,但当msg被序列化时,正文似乎是数据合约的等效消息合约,而不是数据合约本身。

即使这样也很好,除了提取内部的数据契约涉及对传入的 XML 进行手动解析。服务本身没有MessageContract要使用的实际类型,因此访问主体意味着提取节点、重新标记元素等。这是一个手动过程,当暴露的操作不是Message基于 - 时,WCF 可能已经在幕后处理了。

当它是数据合同到数据合同时,WCF 如何做到这一点?有没有办法可以使用相同的过程?

0 投票
2 回答
1264 浏览

xml - 如何在 WCF 消息合同中直接使用 XML?

我正在与 WCF 合作,通过 SOAP 实现一组非常(非常)复杂的交互(我们已经由一个从未听说过计算机的人控制的委员会交给我们)。我将收到如下所示的消息:

...并且我不希望将正文内容解析为由xsd.exeor创建的对象模型svcutil.exe(这些工具是否甚至可以生成可以成功序列化/反序列化此特定 XML 的对象模型是一个激烈争论的问题)。我计划创建一个消息契约来实现这些服务,我想知道我是否可以做类似于以下的事情:

...然后直接操作在请求和响应消息中传入和传出的 XML。这将大大简化开发,因为我只需要处理可能出现在消息中的 XML 的一小部分,而且我可以使用它们比生成的对象模型所允许的更简单。

这种模式(XmlElement在消息合同中使用)是否适用于我的目的?如果不是,我怎样才能实现直接使用 XML 而不必Message直接使用对象的目标?

0 投票
1 回答
5344 浏览

c# - WCF“始终生成消息合同”不生成 MessageContract

我正在将 WSDL 作为服务定义(入站到我的服务)导入,并且无论出于何种原因,客户端正在格式化请求,以便 WCF 无法在没有具有MessageContract装饰的代理类的情况下对其进行反序列化。

通过在主容器类上添加属性,我已经让它以这种方式工作MessageContract,这很好,因为 WCF 将它们构建为部分类,这意味着我可以装饰我的部分并不理会生成的部分。但是,为了正确反序列化主容器类上的属性,我必须使用MessageBodyMember指定命名空间的属性来装饰它们。

这显然是一件坏事®,因为这意味着每次我从 WSDL 重新生成时,我都会失去从客户端接收消息的能力。我已经在服务参考配置上设置了“始终生成消息契约”,但这似乎是一个谎言——无论我是否离开我的部分类装饰,都不会生成消息契约MessageContract

有什么办法可以强制 WCF 生成这些MessageContracts?

编辑

我不确定它是否相关,但是当 svcutil 生成代理类时,它用

当我添加MessageContract属性时,服务会因消息而中断

显式排序不能用于参数或返回值。请从自定义属性中删除 Order 属性。

XmlElement在成功调用服务之前,我必须从生成的属性中删除所有 Order 指令。

0 投票
1 回答
5184 浏览

wcf - 将 Soap Header 中的信息发送到 C# 中的 WCF 服务

我想要一个 Web 应用程序来创建对我的 WCF 服务的服务引用,将信息插入到 soap 调用的标头并调用我的 WCF 方法。

我阅读了 MessageContract 属性并在接口文件中声明了一个:

我的 WCf 界面是:

我不想将 BasicServiceHeader 作为 GetData 函数的参数传递,我想保持函数原样并在函数内提取 BasicServiceHeader,我可以这样做吗?

0 投票
1 回答
1688 浏览

wcf - WCF MessageContract - 自定义传出 SOAP 消息 - 多个主体

我必须调用一个对它选择处理的 SOAP 消息格式要求极高(非标准)的 Web 服务。我无法控制服务器端的实现,也没有可用的 WSDL,我所拥有的只是一条截获的消息,附在下面。

我的第一个想法是 WCF+MessageContract,但无论我用最后一个做什么,我似乎都无法得到正确的结果。传出消息应如下所示。最棘手的部分似乎是多个正文内容(下面的“ProxyInfo”和“PayloadInfo”)。除此之外,我也无法让 WCF 从 SOAP 消息头中删除“Action”元素。我意识到它是 WCF 的一个重要元素,但我怀疑我能否说服 Web 服务接受它。答案可能是另一个故事,但当我到达它时,我会越过那座桥。

目前我正在考虑自定义序列化和传出/传入消息的后/预处理。在最坏的情况下,我想我将不得不手动执行 Web 请求和序列化。求救啊,我真的快绝望了。。。

0 投票
2 回答
1916 浏览

c# - 如何将 XML 文件转换为 MessageContract 类的实例?

我正在尝试[MessageContract]针对现有的示例消息测试一个类,并且我正在寻找一种通过将示例消息文件读入我的[MessageContract]类的实例并查看它是如何工作来简化开发的方法(我正在处理一个这里特别复杂的合同,非 WCF 来源)。

我的[MessageContract]班级看起来像这样:

我可以使用如下代码将文件读入Message类的实例:

然而,这并不是特别有用,因为它根本不允许我测试我的[MessageContract]课程。

WCF 内部的某个地方是一个用于将此Message实例转换为特定[MessageContract]类的实例的系统,但它是什么?

0 投票
1 回答
1505 浏览

wcf - WCF MessageContract 列表序列化

我有以下 MessageContracts 可用作请求:

但是在 SoapUI 中进行测试时,getLimited 请求正文被创建为:

其中v2= Api2Information.Namespace。我真正想要的是将 PropertyList 中包含的字符串命名为v2,而不是arr。无论如何我可以做到这一点吗?我正在将 ASMX 服务转换为使用 WCF,并且我们有一些应用程序无法重新编译和重新分发。

感谢您的帮助!

0 投票
2 回答
1671 浏览

wcf - WCF 代理类中缺少方法参数

我有一个定义如下的 WCF 方法:

实际的实现是这样的:

SourceDataQuery 对象:

我的问题是当我将此 WCF 服务添加到另一个项目并通过添加服务引用创建代理时,我的代理类有一个 GetSourceData 方法,但它的输入参数丢失。它不带任何参数。我可以看到 SourceDataQuery 对象是在代理类中正确生成的。

知道为什么缺少输入参数吗?

0 投票
1 回答
2160 浏览

wcf - WCF 服务 Wsdl 错误:操作引用了已导出的消息元素

我们有一个 WCF 服务,它有两个具有相同消息协定的操作(Operation1 和 Operation2)。当您访问 Wsdl (Get/Http) 时,我们会收到此错误:


System.InvalidOperationException:调用 WSDL 导出扩展时引发异常:System.ServiceModel.Description.DataContractSerializerOperationBehavior

contract: Xxxxx ----> System.InvalidOperationException: Xxxx.IServiceInterface.Operation1 操作引用了已经从 Xxxx 导出的消息元素 [http://schemas.somecompany.com/namespace/version/:MessageContract]。 IServiceInterface.Operation2 操作。

您可以通过更改方法名称或使用 OperationContractAttribute 的 Name 属性来更改其中一项操作的名称。或者,您可以使用 MessageContract 编程模型更详细地控制元素名称。


在我看来,应该可以为不同的服务操作重用相同的消息。我了解错误中给出的解决方案,但我们希望为许多不同的操作提供相同的消息。

想法?

更多信息:我们实现了事件发布/订阅机制。事件订阅者使用他们想要处理的事件类型声明服务操作,并将其包装在通用消息合同类中。这个通用消息类使用消息代码属性来使用事件发布者 xml 名称 - 这是一个单一的消息结构。所有事件订阅者都在 UDDI 中注册,并且发布/订阅机制使用这些端点将事件推送给订阅者。在 UDDI 中注册服务操作会检测特定的事件名称空间以将这些服务操作注册为事件处理程序(而不是请求/响应操作)。