代码之家  ›  专栏  ›  技术社区  ›  Tri Q Tran

wcf-codegen:由于message filerequest具有头,因此生成消息协定

wcf
  •  1
  • Tri Q Tran  · 技术社区  · 16 年前

    我知道有一个类似的问题 here 没有解决方案。

    我正在开发一个通过HTTP的WCF流服务。

    这是我的 MessageContract

    [MessageContract]
    public class FileRequest
    {
        #region Message Header
    
        [MessageHeader(MustUnderstand = true)]
        public Credential Credentials { get; set; }
    
        #endregion
    
        #region Message body
    
        [MessageBodyMember(Order = 1)]
        public FileInfo FileInfo { get; set; }
    
        #endregion
    
        #region Ctor
    
        // ...
    
        #endregion
    
    }
    
    [MessageContract]
    public class FileRequestResponse
    {
        #region Message Header
    
        [MessageHeader(MustUnderstand = true)]
        public FileInfo FileHeader { get; set; }
    
        [MessageHeader(MustUnderstand = true)]
        public OperationResult<bool> OperationResult { get; set; }
    
        #endregion
    
        #region Message Body
    
        [MessageBodyMember]
        public Stream FileStream { get; set; }
    
        #endregion
    
    
        #region Constructor
    
        // ...
    
        #endregion
    
    }
    

    这是我的 ServiceContract

    [ServiceContract(Namespace = "https://service.contract.example.com")]
    public interface IUpdateService
    {
        [OperationContract(Action = "GetUpdates")]
        OperationResult<List<FileInfo>> GetUpates(ApplicationInfo applicationInfo, Credential credential);
    
        [OperationContract(Action = "GetFile")]
        FileRequestResponse FileRequest(FileRequest fileRequest);
    }
    

    现在的问题是为什么我会得到这个错误:

    //codegen:生成消息 自消息文件请求以来的协定 邮件头

    当我添加我的服务引用时。最终的结果是,服务约定将fileRequest操作包装成一个我不想要的包装器。

    public FileInfo FileRequest(Credential Credentials, FileInfo, out OperationResult<bool> OperationResult, out System.IO.Stream FileStream)
    

    注: 我没有检查服务引用中的“始终生成消息契约”。

    2 回复  |  直到 14 年前
        1
  •  0
  •   marc_s MisterSmith    16 年前

    您可能想尝试使用 IsWrapped 消息协定的属性:

    [MessageContract(IsWrapped=false)]
    

    不完全确定你需要哪一个( true false )但这是你可以尝试的选择之一。

    另外,还有一个观察:我认为有一个方法叫做 FileRequest 以及一个消息契约,也被称为 文件请求

    普遍接受的最佳实践是有一种方法 GetFile ,调用的请求消息 GetFileRequest 以及响应消息类型 GetFileResponse . 不要对不同的事物使用相同的名称。

        2
  •  1
  •   Sparkup Andrey Solera    14 年前

    集合 [MessageContract(IsWrapped=true)] 对于 所有消息契约 在服务中,然后尝试生成代理。

    推荐文章