如何将数据发送到自托管的Web服务?

时间:2014-07-04 13:31:29

标签: c# web-services wcf file-upload self-hosting

我有一个自我托管的网络服务,我使用一些Android应用程序,它工作正常。现在我试图用C#编写代码来使用相同的Web服务并且我遇到了问题。以下是我尝试访问的服务器方法:

[System.ServiceModel.OperationContract, WebInvoke(UriTemplate = "test/")]
string testSaveFile(Stream arq);

public string testSaveFile(Stream img) {
    Console.WriteLine("stream received");
    Console.WriteLine("stream size: " + img.Length); //throws "Error 400 Bad Request"
}

我尝试使用WebClient.Upload()方法,将ContentType设置为multipart / form-data和application / x-www-form-urlencoded的HttpWebRequest来访问此方法,它们都返回WebException(400)我尝试访问流时出现错误请求。 webservice方法会写第一条消息,所以我可以毫无问题地连接到webservice。我尝试过同步和异步,同样的错误。那么将数据上传到此方法的正确方法是什么?

提前致谢。

1 个答案:

答案 0 :(得分:2)

我测试了你的代码,它确实有效。唯一的问题是您的 Stream 不支持 Length 属性。将您的代码更改为此类型,它将起作用。

var wc = new WebClient();
var buf = wc.UploadData("http://......./test", new byte[] { 71, 72, 73, 74, 75 });

[OperationContract]
[WebInvoke(ResponseFormat = WebMessageFormat.Json)]
public string testSaveFile(Stream img)
{
    string filename = ".......";
    Console.WriteLine("stream received");
    using (var f = File.OpenWrite(filename))
    {
        img.CopyTo(f);
    }
    Console.WriteLine("stream size: " + new FileInfo(filename).Length);
    return "OK";
}