【问题标题】:Uploading image along with userid for wcf service using datacontract使用 datacontract 上传图像以及 wcf 服务的用户 ID
【发布时间】:2017-03-08 15:41:41
【问题描述】:

我想使用 post、datacontract 将图像从 javascript 上传到 wcf 服务。 我在google上读到,使用datacontract是不可能的,可以用message contract来完成,因为当一个参数是流时,它不应该有任何其他参数。

但是在某些链接中提到可以通过在 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);

【问题讨论】:

    标签: c# wcf datacontract messagecontract operationcontract


    【解决方案1】:

    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 时还有一个选择,请尽量避免在您的 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}
    

    【讨论】:

    • 嗨,您的第一个代码示例对我没有帮助,因为我仍然遇到同样的错误。您能否为我提供完整的代码示例(以及如何调用表单 javascript),以及其他示例。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多