我有一个自我托管的网络服务,我使用一些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。我尝试过同步和异步,同样的错误。那么将数据上传到此方法的正确方法是什么?
提前致谢。
答案 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";
}