WCF-CODEGEN:由于MessageFileRequest具有标头,因此正在生成消息协定

WCF-CODEGEN:由于MessageFileRequest具有标头,因此正在生成消息协定,wcf,Wcf,我知道有一个类似的问题没有解决办法 我正在研究一种基于HTTP的WCF流媒体服务 这是我的MessageContract [MessageContract] public class FileRequest { #region Message Header [MessageHeader(MustUnderstand = true)] public Credential Credentials { get; set; } #endregion #reg

我知道有一个类似的问题没有解决办法

我正在研究一种基于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(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之后的协定已生效 标题

当我添加我的服务引用时。最终结果是服务契约将FileRequest操作包装到我不想要的包装器中

public FileInfo FileRequest(Credential Credentials, FileInfo, out OperationResult<bool> OperationResult, out System.IO.Stream FileStream)
public FileInfo FileRequest(凭证凭证凭证、FileInfo、out OperationResult OperationResult、out System.IO.Stream FileStream)
注意:
我没有选中服务引用中的“始终生成邮件合约”。

您可能希望尝试在邮件合约上使用
IsWrapped
属性:

[MessageContract(IsWrapped=false)]
无法100%确定您需要哪一个(
true
false
),但这是您可以尝试的选项之一

另外,还有一个观察:我认为使用名为
FileRequest
的方法和名为
FileRequest
的消息契约有点冒险


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

您可能希望尝试在消息约定上使用
IsWrapped
属性:

[MessageContract(IsWrapped=false)]
无法100%确定您需要哪一个(
true
false
),但这是您可以尝试的选项之一

另外,还有一个观察:我认为使用名为
FileRequest
的方法和名为
FileRequest
的消息契约有点冒险


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

设置
[MessageContract(IsWrapped=true)]
用于服务中的所有消息合约,然后尝试生成代理。

设置
[MessageContract(IsWrapped=true)]
查找服务中的所有消息合约,然后尝试生成代理。

这不是错误-只是一个信息性说明我知道这不是错误,因为它仍将编译,我只是把它表示为一个错误,因为这是一个意外的结果。这不是一个错误-这只是一个信息说明。我知道这不是一个错误,因为它仍将编译,我只是把它表示为一个错误,因为这是一个意外的结果。我尝试了iswrapp=false/true,结果没有任何差异。我已经更改了MessageContract文件请求名称,但也没有结果。还有其他想法吗?我试过IsWrapped=false/true,结果没有差别。我已经更改了MessageContract文件请求名称,但也没有结果。还有其他想法吗?