c# - WCF : How cand you add multiple MessageBodyMember to a MessageContract if one is Stream

标签 c# web-services soap messagecontract

我需要所有 3 个项目都在 Body 中,以便客户端可以使用它们,他不能修改 Header 中的数据(首先在 MessageHeader 中的前 2 个):

[MessageContract]
public class UploadRequest
{
    [MessageBodyMember(Order = 2)]
    public string FileName { get; set; }

    [MessageBodyMember(Order = 1)]
    public Guid itemId { get; set; }

    [MessageBodyMember(Order = 3)]
    public Stream Stream { get; set; }
}

我收到的错误是:

System.InvalidOperationException: In order to use Streams with the MessageContract programming model, the type UploadRequest must have a single member with MessageBodyMember attribute and the member type must be Stream.
            at System.ServiceModel.Dispatcher.StreamFormatter.ValidateAndGetStreamPart(MessageDescription messageDescription, Boolean isRequest, String operationName)
            at System.ServiceModel.Dispatcher.OperationFormatter..ctor(OperationDescription description, Boolean isRpc, Boolean isEncoded)
            at System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter..ctor(OperationDescription description, DataContractFormatAttribute dataContractFormatAttribute, DataContractSerializerOperationBehavior serializerFactory)
            at System.ServiceModel.Description.DataContractSerializerOperationBehavior.GetFormatter(OperationDescription operation, Boolean& formatRequest, Boolean& formatReply, Boolean isProxy)
            at System.ServiceModel.Description.DataContractSerializerOperationBehavior.System.ServiceModel.Description.IOperationBehavior.ApplyDispatchBehavior(OperationDescription description, DispatchOperation dispatch)
            at System.ServiceModel.Description.DispatcherBuilder.BindOperations(ContractDescription contract, ClientRuntime proxy, DispatchRuntime dispatch)
            at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost)
            at System.ServiceModel.ServiceHostBase.InitializeRuntime()
            at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
            at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
            at Microsoft.Tools.SvcHost.ServiceHostHelper.OpenService(ServiceInfo info)

我该如何解决?

最佳答案

如果你的一个属性是流,那么你只能有另一个属性Header。然后可以在header中存入FileName和itemId传入。

关于c# - WCF : How cand you add multiple MessageBodyMember to a MessageContract if one is Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34084914/

相关文章:

c# - default.aspx 位于子文件夹中,将其用作 www.mysite.com 上的起始页

perl - API Wrapper 架构最佳实践

java - SignaturePropFile 的 Axis2/rampart 加密问题

c - 使用 libcurl 作为 XML 文件发送 SOAP 请求

c++ - 将 Axis2C 与 Qt 数据结构耦合

c# - 关于using语句的一些高级问题

c# - 正则表达式提取两个分隔符之间的字符串而不返回分隔符?

c# - 如何在工具条按钮位置打开表单

java - 如何在 symbian 应用程序中从 Web 服务读取 xml

java - 如何使用 Spring Integration 调用安全的 SOAP 服务