问题标签 [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.
wcf - WCF 客户端的可选枚举
我正在使用似乎是用 Java 实现的外部供应商的 Web 服务(我相信 Apache Axis),并且我正在使用 WCF 客户端来使用它。一些操作需要枚举类型的输入参数。问题是他们只希望在某些情况下通过枚举。这些元素在 WSDL 中未标记为可空。但是,由于它们是枚举,因此即使未指定,我的 WCF 客户端也将始终传递默认值。此行为导致其服务出现内部错误。
关于如何解决这个问题的任何想法?最好是不需要手动修改代理的解决方案,因为如果将来另一个开发人员要独立生成它,这可能会导致混乱。
特定元素在 WSDL 中指定如下
Svcutil 将其翻译为
编辑:经过更多研究,看起来 svcutil通常应该生成带有附加bool
fieldNameSpecified参数的可选参数 (minOccurs=0),允许调用者指示是否应该序列化该字段(这在此处、此处和在这里)。
但是,在这种情况下,参数引用如下:
当我尝试手动添加适当的fieldNameSpecified方法时,它似乎对序列化没有任何影响(即参数仍然存在于 soap 消息中)。
在这一点上,我想知道
- 为什么 svcutil 不包含fieldNameSpecified参数?
- 为什么手动添加参数似乎不起作用?
- 是否有任何其他解决方法可用于此问题?
编辑:经过更多研究,我确定部分问题是编写 WSDL 的方式。供应商的 WSDL 不符合 DataContractSerializer 的架构参考。因此,svcutil 将故障回复到 XmlSerializer。
问题是它仍在为方法生成消息契约,而不是数据契约。这似乎会导致默认情况下不可为空的任何类型出现问题,因为它们无法从消息中排除(任何人都可以验证这一点吗?)。无论MessageBodyMemberAttribute
出于何种原因,当使用
我能够解决此问题的唯一方法是使用/wrapped
带有 svcutil 的选项。这导致消息合约与实际的序列化参数本身分离。在这种情况下,svcutil会生成parameterNameSpecified方法,并且 XmlSerializer 符合它们。
wcf - WCF:MessageContract 处理 OnDeserialized 事件
如何使用 MessageContract 处理 OnDeserialized 事件?
在收到消息后(但在执行方法之前)需要做一些数据验证和转换。
对于 DataContract,它是通过声明属性解决的。
但是对于 MessageContract 它不起作用。
有没有办法做到这一点?
c# - WCF 中的 MessageHeader 问题
我在 WCF 中有两个单独的消息合同:
这很好用,但是一旦我在 GetBarRequest 上更改 MessageHeader 的类型,该服务就不再起作用:
现在我在 GetFooRequest 和 GetBarRequest 中都有一个名为 ResponseType 的 MessageHeader,但它们有不同的类型。该服务不再起作用。为什么我不能在两个完全不同的消息合约上拥有同名/不同类型的 MessageHeader?
我得到的错误非常神秘:
c# - WCF - How do I return a success or failure message using Message Contracts
Im using SOAP/XML with MessageContracts and have to return a specified format similar to the following:
If validation is successful:
If it is unsuccessful:
Take for instance, the following method. It returns a type of MyResponse. So how can I define MyResponse to return a Success or Failure XML Element?
I can return a success message just fine, like this. It's unwrapped and has an XML element of Success. But I need to also be able to return an XML element of Failure and I can't do that using the same MyResponse type.
c# - WCF 流文件问题
是否可以使用带有 MessageContract 的 WCF 流式传输文件,该 MessageContract 包含另一个 MessageContract,其中包含 Stream?我认为答案是否定的,但可以这么说,我更愿意将我的文件打包在“根”消息中。
换句话说,我的设置是这样的:
请求可以很好地发送和接收到服务,但是,Stream 似乎没有被正确反序列化并作为空引用返回。我知道我在某处阅读了一条规则,该规则在带有 Streaming 的 MessageContract 上声明 Stream 必须是 MessageContract 的主体,我认为这就是现在被违反的内容。我希望 FileTransferMessage 作为 Body,然后 Stream 作为 Body 是可以接受的。
有人对我可以在这里做什么有任何建议吗?我不希望将 Stream/FileName/FileLength 添加到我的 Transport 对象中。
c# - WCF:“取消”操作调用依赖于请求消息合同
这是我的合同:
OperationRequest1 和 OperationRequest2 都继承自 BaseOperationRequest,后者包含进入服务的所有请求的凭据信息:
OperationResponse1 和 OperationResponse2 都继承自一个基类:
ErrorCode 是一个枚举。
正如您在请求中看到的那样,我有两个消息头和一个内部对象,它不会作为 SOAP 消息的一部分反序列化。这样做的原因是我想在我的服务实现处理它之前将此对象注入到请求中。每个操作实现都将使用这个对象,我不希望每个操作对我的数据层进行两次调用。
我想使用 WCF 可扩展性(通过属性)来执行两项任务:
- 验证请求用户。
- 使用复杂/复合业务对象在传入请求类上填充“用户”,以在每个操作中使用。
我调查了 IOperationInvoker、IDispatchMessageFormatter 和 IDispatchMessageInspector,但我没有发现它们中的任何一个都足够合适。
仅供参考,这是我的服务的原始示例实现,没有任何花哨的 WCF 可扩展性(或我的存储库/数据层调用):
IOperationInvoker 似乎是最合适的扩展点,但我不太清楚如何“取消”操作并覆盖对客户端的响应。这是我要去的地方:
wcf - MessageContract 类中的标头字段在 Windows Phone 应用程序中不可用
我有 WCF 服务。在该服务中,我定义了标记为 MessageContract 属性的类:
我对标记为 MessageHeader 属性的字段有问题。在 WPF 应用程序(客户端)中,所有字段都是可见的,但是当我在 Windows Phone 应用程序中使用此服务时,标记为 MessageHeader 的字段不可见。只有正文字段可用。标题字段是否也可用?
wcf - WCF 流 - MessageContract 请求不会在所有引用的程序集中重用类型
我已经修改了 Microsoft 提供的 WCF“流”示例应用程序,以使用在共享程序集中设置并用MessageContract
属性修饰的请求对象。然后应该将其传递给UploadStreamRequest()
服务的方法。
问题是当我向客户端添加服务引用并尝试调用该方法时,MessageContract
对象的每个属性都刚刚转换为单独的参数。
我还在高级设置中尝试了“始终生成消息合同”选项,尽管这会更改方法以便将其传递给请求对象,但它已经重新生成了自己的对象代理表示(即使我有“重用所有引用程序集中的类型都打勾)。
任何人都可以解释我在这里缺少什么吗?
非常感谢
c# - WCF MessageContract 包装和列表
我从一位客户那里收到了关于他们的 Web 服务客户端如何工作的规范。规范是从服务以及相应的 XSD 发送和接收的实际 SOAP XML 消息。客户希望我实施符合客户要求的 Web 服务。客户端是用axis2 ws-stack编写的,我想做的是在WCF中创建一个Web服务,它将接受客户端发出的请求并返回符合他们期望的XML的响应。在这个问题中,我只会发布与请求相关联的 XML 和 XSD,因为如果我可以让它工作,那么将以类似的方式做出响应。
我收到的 XML 如下:
这是相应的 XSD 的样子:
我已经开始以 WCF/MessageContract 格式编写类型,但是我在列表等方面遇到了困难,因为它们是双重包装的。
我的 MessageContracts 看起来像这样:
当我使用 SoapUI 时,我从 Web 服务获得以下响应:
如您所见,它不符合客户期望的 XML 格式。如何让 MessageContract 符合客户期望的 XML?我不知何故需要让列表不像他们那样双重包装,并且类的属性似乎被添加到类名中。
如果您希望我提供更多信息和代码,我可以这样做。不想用可能与问题无关的东西来填充整个帖子。
编辑:
提供的 XSD 文件格式不正确。为了解决这个问题,我从提供的 XML 文件中重新生成了一个 XSD。然后我使用 WSCF.blue 工具为 XSD 生成数据协定代码。
我进行了更改,以便服务合同使用 doc litteral 格式来符合axis2 soap1.1
我还将操作合同更改为将 System.ServiceModel.Channels.Message 作为输入和输出消息,然后使用生成的类(我从 XSD 生成)手动序列化和反序列化 xml。
c# - MessageContract - 无效的方法生成
我有以下 wcf 服务:
但是,当我通过添加服务引用生成 wcf 客户端类时,我得到了这个:
而不是这个:
为什么?