我必须调用WCF服务来转换图像。由于图像是流(可能很大),我想要一种方法,我可以将流和一对参数(图像转换信息)发送到方法。如何定义操作合同的方法签名?请注意,我正在进行JSON调用并使用Http post方法发送图像。所以我没有创建.net代理的奢侈 如何调用以下WCF方法?或者有更好的方法来做到这一点? 例如。
[OperationContract]
[WebInvoke(UriTemplate = "/MyOperation", Method = "POST", RequestFormat = WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
Public CompositeType1 MyOperation(Stream image,CompositeType2 param){
}
答案 0 :(得分:2)
Rajesh回答不正确 您可以使用Stream
获得其他参数试试这个:
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/{pram1}/{pram2}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
string ProcessData(string pram1, string pram2, Stream zipFile);
答案 1 :(得分:0)
首先,当您将Stream作为参数之一时,您无法使用其他参数来更改您的方法,如下所示:
[WebInvoke]
public CompositeType1 MyOperation(Stream image)
{}
现在为了将图像和复合类型对象传递给该方法是可以实现的,但是您需要将请求作为多部分表单数据发布。当您将请求作为多部分表单数据发布时,您需要在服务器端使用解析器来解析流,以便为您提取适当的内容,即从流中提取图像和复合类型对象。已有一个现有的多部分表单解析器供您下载,但您必须自定义它以满足您的要求。我认为这是一项复杂的任务。多部分表单解析的链接是here
可以找到有关多部分表单数据的一些信息here
我想最简单的方法是将操作中的图像上传分开并单独使用。
答案 2 :(得分:0)
使用此代码:
ServiceContract]
public interface IRestServiceImpl
{
[OperationContract]
[System.ServiceModel.Web.WebInvoke(Method = "GET",ResponseFormat=System.ServiceModel.Web.WebMessageFormat.Xml, BodyStyle =System.ServiceModel.Web.WebMessageBodyStyle.Wrapped, UriTemplate = "xml/{id}")]
string XMLData(string id);
[OperationContract]
[System.ServiceModel.Web.WebInvoke(Method = "GET", ResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json, BodyStyle = System.ServiceModel.Web.WebMessageBodyStyle.Wrapped, UriTemplate = "json/{id}")]
string JSONData(string id);
}
public class RestServiceImpl : IRestServiceImpl
{
#region IRestService Members
public string XMLData(string id)
{
return "You Request Porduct" + ":"+id;
}
public string JSONData(string id)
{
return "Yor Request Product" +":"+ id;
}
#endregion
}
答案 3 :(得分:0)
也许您可以使用一个小技巧。您可以使用参数byte []代替流,然后使用以下代码将其转换为流:
Stream stream = new MemoryStream(yourByteArray);