我有一个WCF服务,其中有一个方法,它将MessageContracts作为输入参数,并返回一个MessageContract作为out参数。请找到下面的方法定义
[OperationContract(IsOneWay = false)]
FileDownloadReturnMessage DownloadFile(FileDownloadMessage request);
但是当我在客户端上创建代理并尝试访问此方法时,我得到了该方法的不同定义。以下是我尝试访问方法时看到的内容
DownloadFile(FileMetaData metadata, out stream outStream)
完整的网络服务代码如下:
[ServiceContract(Namespace = "http://schemas.acme.it/2009/04/01")]
public interface IFileTransferService
{
[OperationContract(IsOneWay = false)]
FileDownloadReturnMessage DownloadFile(FileDownloadMessage request);
[OperationContract()]
string HellowWorld(string name);
}
[MessageContract]
public class FileDownloadMessage
{
[MessageHeader(MustUnderstand = true)]
public FileMetaData FileMetaData;
}
[MessageContract]
public class FileDownloadReturnMessage
{
public FileDownloadReturnMessage(FileMetaData metaData, Stream stream)
{
this.DownloadedFileMetadata = metaData;
this.FileByteStream = stream;
}
[MessageHeader(MustUnderstand = true)]
public FileMetaData DownloadedFileMetadata;
[MessageBodyMember(Order = 1)]
public Stream FileByteStream;
}
[DataContract(Namespace = "http://schemas.acme.it/2009/04/01")]
public class FileMetaData
{
public FileMetaData(string [] productIDs, string authenticationKey)
{
this.ids = productIDs;
this.authenticationKey= authenticationKey;
}
[DataMember(Name = "ProductIDsArray", Order = 1, IsRequired = true)]
public string[] ids;
[DataMember(Name = "AuthenticationKey", Order = 2, IsRequired = true)]
public string authenticationKey;
}
请告知。
答案 0 :(得分:1)
默认情况下,代理不使用消息协定,因此当您使用消息协定生成服务代理时,它会解包它们并且包含数据协定将用作操作参数和输出值。如果要在代理上使用消息合同,请在Visual Studio中添加服务引用时使用始终生成消息合同。对于svcutil使用/ mc开关。