【问题标题】:Using WCF MessageContract in SilverLight在 SilverLight 中使用 WCF MessageContract
【发布时间】:2013-04-15 13:00:07
【问题描述】:

基本上我正在尝试将以下类型的对象从 SilverLight 发送到 WCF 服务。对象的消息契约如下:

[MessageContract]
    public class UploadMessage
    {
        [MessageHeader(MustUnderstand = true)]
        public Token Token;

        [MessageHeader(MustUnderstand = true)]
        public string FileExtension;

        [MessageHeader(MustUnderstand = true)]
        public Product Product;

        [MessageBodyMember(Order = 1)]
        public Stream FileByteStream;

}

[OperationContract(IsOneWay = true)]
        void UploadFileStream(UploadMessage upm);

但是,每当我尝试从 SilverLight 客户端调用该方法时,我只能指定 FileByteStream 参数(而不是其他 3 个)。

这可能是什么问题?

【问题讨论】:

  • 可能是因为它们在页眉中?无论如何,如果您编写客户的代码,帮助您会容易得多:)
  • 那么我怎样才能在客户端包含标题呢?并且客户端代码在这里并不是真正重要的,因为它只是对 Web 服务的调用,其中它显然只接受 1 个参数(字节数组)而不是任何标题
  • 标头始终存在,每条 HTTP 消息都有一个标头和一个正文,通常 WCF(或 WebAPI 或您用来编写客户端的任何东西)提供访问响应中标头的函数并在请求对象中......代码会有所帮助。
  • 如果你真的想看看我调用 web 服务的代码然后确定,这里是:code var memoryStream = new MemoryStream(); ofd.File.OpenRead().CopyTo(memoryStream); byte[] bytes = memoryStream.ToArray(); UploadMessage 消息 = 新的 UploadMessage();服务.UploadFileStreamAsync(字节); - 不再接受任何参数code 虽然我没有看到它的用途。
  • 好的,这是来自网络的内存流,但没有定义消息契约,只有原始数据。 Nabheet 的回答会对您有所帮助,我认为您的客户端未正确实施。

标签: c# .net wcf silverlight silverlight-4.0


【解决方案1】:

你在使用 Visual Studio 吗?

在将消息标头添加到消息合同后,您是否在 Silverlight 项目中更新了对 WCF 服务的服务引用?

当我对 WCF 服务进行一些更改但忘记更新服务引用或 Web 引用时,通常会发生此问题。

希望这会有所帮助。

编辑1:

我忘了提到,当您添加服务引用时,您需要选中说明有关创建消息合同的内容的框。默认情况下,Visual Studio 不会创建消息协定,它只会在 WCF 客户端代理中创建数据协定。只有消息合同允许您访问消息标头。

【讨论】:

  • 我已经更新了服务参考等 - 这不是问题。我已经尝试检查“始终生成消息合同”,但我可以创建的 UploadMessage 仍然只能提供 FileByteStream 属性,而不是任何标头属性。我认为我的问题与stackoverflow.com/questions/13942113/… 非常相似,我尝试过应用该解决方案,但没有奏效。'
  • 您能否用您尝试过的所有步骤更新问题?此外,您是否使用 SOAP 跟踪、wireshark 或 SOAP/WCF 日志记录来确定您的消息头是否已添加到消息中,如果是,那么 XML 命名空间是什么,它是否与 WSDL 中指定的命名空间匹配?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2012-11-24
  • 1970-01-01
相关资源
最近更新 更多