:value对推送到服务器请求。但问题是服务的定义。[错误]合同“IFormServices”中的“NewImage”操作有多个主体参数,其中一个是Stream。当Stream为参数时,字面量中不能有其他参数。[接口][OperationContract][WebInvoke(Method="POST",ResponseFormat=WebMessageFormat.Json)]stringNewImage(Streamdata,stringserver,stringdatasource,stringdocument,stringimage_id);[定义]publicstringNewImage(Streamdata,stringserver,stringdatasource,stringdocument,stringimage_id){//这应该与其他类似,需要一个服务器、数据源和某种文档来附加图像。WebClientwsb=newWebClient();字符串str="_URL_";byte[]byte_data=newbyte[data.Length];data.Read(byte_data,0,byte_data.Length);byte[]response=wsb.UploadData(str,"POST",byte_data);字符串retVal=Convert.ToString(响应);//想要返回一个JSON.serialized字典:给定的image_id+从响应返回的id。字典retDict=newDictionary();retDict["文件名"]=image_id;retDict["id"]="";//返回新的JavaScriptSerializer().Serialize(json);返回“-1”;}[javascript代码]var$form=$("").attr({method:"POST",enctype:"multipart/form-data",target:"image_processing",action:"webservices/FormServices.svc/NewImage",id:"push_image_to_server"}).appendTo("body");varim_id=$(this).attr("image_id");$(this).appendTo("form#push_image_to_server");$("").attr({名称:"服务器",值:BASE_URL}).appendTo($表单);$("").attr({名称:"数据源",值:SELECTED_DATASOURCE}).appendTo($form);$("").attr({name:"document",value:SELECTED_DOCUMENT}).appendTo($form);$("").attr({名称:"image_id",值:im_id}).appendTo($form);$("iframe#image_processing").bind("load",function(a,b,c){console.log("SUCCESS",arguments);$("iframe#image_processing").unbind("加载",function(a,b,c){console.log(arguments);_IMAGE_UPLOADS_[a["filename"]]=a["id"];});$("form#push_image_to_server").remove();});所以我想想办法结合4向服务器发送一个字符串+一个文件呢?编辑:将错误代码放在顶部。只是一个想法-如何使用HTTP标头?然后您可以使用WebOperationContext.IncomingRequest进行处理。当你发送一个流时,它实际上发送了请求中的所有内容。我这样做是为了获取数据:publicstringNewImage(Streamdata){NameValueCollectionPostParameters=HttpUtility.ParseQueryString(newStreamReader(data).ReadToEnd());stringserver=PostParameters["server"],stringdatasource=PostParameters["datasource"],stringdocument=PostParameters["document"];stringimage_id=PostParameters["image_id"];varimg=PostParameters["文件"];//做其他处理...}本文:如何:使用WCF创建接受任意数据的服务REST编程模型描述了另一种发布流和一些数据的方法。它们展示了如何将文件名(但您可以添加和/或用任何字符串参数替换它)与文件一起发送。合同是:[ServiceContract]publicinterfaceIReceiveData{[WebInvoke(UriTemplate="UploadFile/{strParam1}/{strParam2}")]voidUploadFile(stringstrParam1,stringstrParam2,StreamfileContents);暴露的服务将通过POST和定义的参数接受流。这是WCF的一个问题错误,它在使用流输入时不接受任何附加参数。我们对WCF也有类似的问题,经过所有研究我们决定将其他输入参数转换为流并使用定界符将其附加到输入如果NewImage方法上的字符串结果参数是某种唯一标识符,您您可以创建另一个名为NewImageAttributes的方法,它接受附加数据和唯一标识符,然后您可以在服务中再次将数据绑定在一起。当然,这意味着调用该服务两次,但它可能会解决您的问题。如何使用HttpRequest.QueryString[]?[OperationContract][WebInvoke(Method="POST",ResponseFormat=WebMessageFormat.Json,UriTemplate="NewImage")]stringNewImage(Streamdata);您通过URL调用它,例如:NewImage?server={server}&datasource={datasource}&document={doc}&image_id={id}然后在您的代码中:publicstringNewImage(StreamimgStream){varrequest=System.Web.HttpContext.Current.Request;varserver=request.QueryString["服务器"];vardatasource=request.QueryString["数据源"];vardocument=request.QueryString["文档"];varimage_id=request.QueryString["image_id"];...}我一直在寻找这样的东西,今天偶然发现了它。以上就是C#学习教程:创建一个接受文件的web服务(Stream),不需要其他参数,共享所有内容。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络合集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
