我有一个OData服务,并希望公开一个接受字节数组作为图像的方法,我可以在服务器端反序列化并保存。我创建了一个这样的方法:
[WebInvoke(UriTemplate = "/PutImage", Method = "POST")]
public string PutImage(byte[] upE)
{
string ret = "Good";
//De-Serialize here.
return ret;
}
我还为此方法设置了如下配置:
config.SetServiceOperationAccessRule("PutImage", ServiceOperationRights.All);
我相信这会在服务方面起作用,但我不确定如何从客户端调用此方法。
有没有人有这方面的经验?
感谢。
答案 0 :(得分:2)
OData(和WCF数据服务)不支持上述服务操作。首先忽略或不允许UriTemplate。其次,服务操作的所有参数总是在URL中传递,而不是在正文中传递。因此,尽管上述方法可能有效,但您可能不希望将整个映像文件序列化为URL(服务器很可能会拒绝这样大的URL)。 在OData中处理二进制/大流的方法是使用媒体链接条目/媒体资源或新的命名流。
这里有一个很棒的演练如何在这里实施和使用MLE / MR:http://blogs.msdn.com/b/astoriateam/archive/2010/08/04/data-services-streaming-provider-series-implementing-a-streaming-provider-part-1.aspx,http://blogs.msdn.com/b/astoriateam/archive/2010/09/08/data-services-streaming-provider-series-part-2-accessing-a-media-resource-stream-from-the-client.aspx
命名流在新CTP中类似 - 在此处描述:http://blogs.msdn.com/b/astoriateam/archive/2010/11/12/named-resource-streams.aspx
答案 1 :(得分:0)
可以将 POST 与odata结合使用:http://protsyk.com/cms/?p=287