C# 使用datacontract上载wcf服务的图像和用户ID
我想使用post、datacontract将图像从javascript上传到wcf服务。 我在谷歌读到,使用datacontract是不可能的,它可以通过消息契约来完成,因为当一个参数是stream时,它不应该有任何其他参数 然而,在一些链接中提到,它可以通过在querystring中传递参数来完成。(例:) 我试过了,但仍然得到一个错误,即若流作为参数存在,那个么它不应该包含任何其他参数。 但即使使用查询字符串也不可能吗? 下面是我的代码C# 使用datacontract上载wcf服务的图像和用户ID,c#,wcf,datacontract,messagecontract,operationcontract,C#,Wcf,Datacontract,Messagecontract,Operationcontract,我想使用post、datacontract将图像从javascript上传到wcf服务。 我在谷歌读到,使用datacontract是不可能的,它可以通过消息契约来完成,因为当一个参数是stream时,它不应该有任何其他参数 然而,在一些链接中提到,它可以通过在querystring中传递参数来完成。(例:) 我试过了,但仍然得到一个错误,即若流作为参数存在,那个么它不应该包含任何其他参数。 但即使使用查询字符串也不可能吗? 下面是我的代码 [OperationContract] [W
[OperationContract]
[WebInvoke(Method = "POST",UriTemplate = "/UploadFile/userId={userId}", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
void UploadFile(string userId,Stream uploadingDetails);
Stream parameter应该是操作合同中的最后一个参数。如果使用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),以及其他示例。谢谢