Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用datacontract上载wcf服务的图像和用户ID_C#_Wcf_Datacontract_Messagecontract_Operationcontract - Fatal编程技术网

C# 使用datacontract上载wcf服务的图像和用户ID

C# 使用datacontract上载wcf服务的图像和用户ID,c#,wcf,datacontract,messagecontract,operationcontract,C#,Wcf,Datacontract,Messagecontract,Operationcontract,我想使用post、datacontract将图像从javascript上传到wcf服务。 我在谷歌读到,使用datacontract是不可能的,它可以通过消息契约来完成,因为当一个参数是stream时,它不应该有任何其他参数 然而,在一些链接中提到,它可以通过在querystring中传递参数来完成。(例:) 我试过了,但仍然得到一个错误,即若流作为参数存在,那个么它不应该包含任何其他参数。 但即使使用查询字符串也不可能吗? 下面是我的代码 [OperationContract] [W

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

然而,在一些链接中提到,它可以通过在querystring中传递参数来完成。(例:) 我试过了,但仍然得到一个错误,即若流作为参数存在,那个么它不应该包含任何其他参数。 但即使使用查询字符串也不可能吗? 下面是我的代码

 [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),以及其他示例。谢谢