在流式传输和序列化方面,我有点绿色......但我想要做的是让服务器上的Upload方法向客户端返回一个可序列化的对象(现在它是空的)。
我有一个用[Serializable]装饰的公共类ServiceResult,以及一个实现IFileTransferService的公共类FileTransferService
[ServiceContract()]
public interface IFileTransferService
{
[OperationContract(IsOneWay = false)]
string Upload(FileTransferRequest request);
}
实现做了它的事情,然后在最后我创建并序列化对象并尝试返回字符串
return ServiceResultSerializer.SerializeAnObject(result);
在客户端,我使用此类
调用此服务[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName = "IFileTransferService")]
public interface IFileTransferService
{
// CODEGEN: Generating message contract since the wrapper name (FileTransferRequest) of message FileTransferRequest does not match the default value (Upload)
[System.ServiceModel.OperationContractAttribute(IsOneWay = false, Action = "http://tempuri.org/IFileTransferService/Upload")]
string Upload(FileTransferRequest request);
}
我基本上是在这个博客上找到这个项目:http://weblogs.asp.net/cibrax/archive/2007/08/29/sending-attachments-with-wcf.aspx
尝试让它返回客户端调用者可以使用的值
我现在收到的错误是:
无法加载“上传”操作,因为它具有类型为System.ServiceModel.Channels.Message的参数或返回类型,或者具有MessageContractAttribute的类型和其他不同类型的参数。使用System.ServiceModel.Channels.Message或使用MessageContractAttribute类型时,该方法不得使用任何其他类型的参数。
我不知道这意味着什么:P我认为因为我正在尝试更改服务参数。
对不起,如果我太一般了 - 任何帮助将不胜感激。
答案 0 :(得分:1)
听起来我的FileTransferRequest
班级已应用MessageContractAttribute
。
由于您的输入参数为MessageContractAttribute
,因此您的回复类型也应为MessageContractAttribute
,String
不会。尝试创建一个具有单个字符串类型属性的FileTransferResponse
类,并将其用作返回类型。