0

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

但是在某些链接中提到可以通过在 querystring 中传递参数来完成。(例如:具有多平台支持的 WCF Restful 服务文件上传)我试过了,仍然收到错误说如果流作为参数存在,它不应该包含任何其他参数。但即使使用查询字符串也不可能吗?以下是我的代码

 [OperationContract]
    [WebInvoke(Method = "POST",UriTemplate = "/UploadFile/userId={userId}", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    void UploadFile(string userId,Stream uploadingDetails);
4

1 回答 1

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 时还有一个选择,只是尽量避免在您的 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}
于 2017-03-09T11:30:55.227 回答