我想使用post,datacontract将图像从javascript上传到wcf服务。 我在google中读过,使用datacontract它是不可能的,它可以用消息契约来完成,因为当一个参数是流时,它不应该有任何其他参数。
但是在某些链接中提到它可以通过在querystring中传递参数来完成。 (例如:WCF Restful service file upload with multi-platform support) 我试过,仍然得到错误说如果流作为参数,它不应该包含任何其他参数。 但即使使用查询字符串也不可能? 以下是我的代码
[OperationContract]
[WebInvoke(Method = "POST",UriTemplate = "/UploadFile/userId={userId}", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
void UploadFile(string userId,Stream uploadingDetails);
答案 0 :(得分:0)
Stream参数应该是您的操作合同中的最后一个参数。如果您使用v3.5或4.0,您将看到该错误。但你可以忽略它。或者你可以试着这样做:
[DataContract]
public class UploadData
{
[DataMember]
string userId { get; set; }
[DataMember]
Stream uploadingDetails { get; set; }
}
public class YourService : IYourService
{
public bool UploadFile(UploadData request)
{
}
}
或者您在使用Stream时还有一个选项,只是尽量避免在ur url中使用.svc。添加以下代码:
public class Global : System.Web.HttpApplication
{
RouteTable.Routes.Add(new ServiceRoute("yourApp/yourService/upload", new WebServiceHostFactory(), typeof(YourService)));
}
并将以下属性装饰到您的服务中:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
并按以下方式致电您的服务:
http://localhost:123456/yourApp/yourService/upload/{userId}