2017-03-08 63 views
0

我想使用post,datacontract将图像从javascript上传到wcf服务。 我在谷歌阅读,使用datacontract这是不可能的,它可以完成消息合约,因为当一个参数是流,它不应该有任何其他参数。使用datacontract将图像和userid一起上传到wcf服务

但是在某些链接中提到它可以通过在查询字符串中传递参数来完成。 (例如: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

的流paramenter应该在你的经营合同最后一个参数。如果你使用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) 
    { 
    } 
} 

,或者您在使用流,只是尽量避免在.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} 
+0

嗨,你的第一个代码示例没有帮助我因为我仍然得到相同的错误。你能否给我提供完整的代码示例(以及如何调用JavaScript的形式),以及其他示例。谢谢 。 –