我知道有一个类似的问题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消息以来的合同 头
当我添加我的服务参考时。最终结果是服务契约将FileRequest操作包装到我不想要的包装器中。
public FileInfo FileRequest(Credential Credentials, FileInfo, out OperationResult<bool> OperationResult, out System.IO.Stream FileStream)
注意: 我没有在服务参考中检查“始终生成消息合同”。
答案 0 :(得分:1)
为服务中的所有邮件合同设置[MessageContract(IsWrapped=true)]
,然后尝试生成代理。
答案 1 :(得分:0)
您可能想尝试在邮件合同中使用IsWrapped
属性:
[MessageContract(IsWrapped=false)]
不是100%确定您需要哪一个(true
或false
),但这是您可以尝试的选项之一。
另外,另一个观察:我认为有一个名为FileRequest
的方法和一个名为FileRequest
的消息合同有点冒险。
普遍接受的最佳实践是拥有一个方法GetFile
,一个名为GetFileRequest
的请求消息和一个响应消息类型GetFileResponse
。不要对不同的东西使用相同的名称。