创建Web服务以接受文件上载和数据

时间:2014-08-28 23:28:43

标签: c# web-services wcf rest

我需要开发一个可以接受流的restful Web服务以及一些参数。从我所看到和阅读的,具有Stream输入的Web服务不能接受任何其他参数,但这里是一个示例,显示了一个接受字符串参数的工作示例。

我有一个看起来像这样的网络服务:

[ServiceContract]
public interface ISender
{
    [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    int Upload(Stream fileStream);
}

public int Upload(Stream fileStream)
{
    //this does not parse correctly and provide all of the querystring keys (I dont know why)
    NameValueCollection postParameters = HttpUtility.ParseQueryString(new StreamReader(fileStream).ReadToEnd());

    return 1;
}

但我真正想做的是能够接受其他字符串参数。

此帖子creating a webservice that accepts a file (Stream) doesnt want other params表示,当您发送流时,它会发送请求中的所有内容。

所以,为了保持帖子简短,我没有提到客户端。在尝试将数据发布到此服务之前,我想知道我是否以正确的方式进行此操作?我是否正确设置了我的Web服务,如果包含流输入参数的Web服务只能包含单个参数是正确的,那么如何获取对流的访问权限以及我发送的任何其他文本数据?

1 个答案:

答案 0 :(得分:3)

回答您的第一个问题,您可以拥有多个参数,但MSDN声明其他参数请求在请求的URI中:

  

接收任意数据的操作必须具有Stream类型的参数。此外,此参数必须是在请求正文中传递的唯一参数。此示例中描述的操作也采用文件名参数。此参数在请求的网址中传递。您可以通过在WebInvokeAttribute中指定 UriTemplate 来指定在URL中传递参数。在这种情况下,用于调用此方法的URI以“UploadFile / Some-Filename”结尾。 URI模板的“{filename}”部分指定操作的filename参数在用于调用操作的URI中传递 - How to: Create a Service That Accepts Arbitrary Data using the WCF REST Programming Model

以下是MSDN示例,请注意双参数以及 filename 参数如何映射到URI:

[ServiceContract]
public interface IReceiveData
{
    [WebInvoke(UriTemplate = "UploadFile/{fileName}")]
    void UploadFile(string fileName, Stream fileContents);
}

您的样本似乎没问题

更多信息

请参阅 How to: Create a Service That Accepts Arbitrary Data using the WCF REST Programming Model

相关问题