在网络服务中获取字节数组内容
get bytearraycontent in web service
我正在尝试将图像解析为字节数组并将其发送到我的网络服务。问题是,我找不到任何方法来读取 bytearraycontent(过去我使用过 HttpContext.Current.Request.Files 但显然它不存在)...有什么帮助吗?
编辑 - 我设法获得了添加的表单数据,但它无法正确保存图像。我切换到 stringContent 但它仍然不起作用,接收到的字符串与我发送的字符串大小完全相同,但它无法打开它。在 web.config.
中添加了“requestValidationMode="2.0"”
代码:
public async Task uploadAP()
{
using (var client = new HttpClient())
{
MultipartFormDataContent form = new MultipartFormDataContent();
string str = File.ReadAllText(DEBRIS_PIC_PATH);
form.Add(new StringContent(str), "ap");
HttpResponseMessage response = await client.PostAsync("http://192.168.1.10:8080/WS.asmx/uploadAP", form);
}
}
显然是这样的:
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public void uploadAP()
{
string t = HttpContext.Current.Request.Form["ap"];
FileStream objfilestream = new FileStream(debrisApPath, FileMode.Create, FileAccess.ReadWrite);
objfilestream.Write(binaryWriteArray, 0, binaryWriteArray.Length);
objfilestream.Close();
}
对于延误,我们深表歉意。这是我承诺使用旧式 ASMX Web 服务的示例,它将从客户端读取 ByteArrayContent
,随后我将提供两个警告...
using System;
using System.IO;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Collections;
using System.Collections.Specialized;
using System.ServiceModel.Activation;
namespace OldWSTest
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string uploadAP()
{
var foo = HttpContext.Current.Request.Form["ap"];
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(foo);
// do whatever you need with the bytes here
return "done";
}
}
}
我肯定会回应 John Saunders 的评论,即对于基础 Web 服务工作,像这样的项目应该认真仔细地研究 WCF/WebAPI,而不是 ASMX。我忘记了基于 ASMX 的 Web 服务是多么痛苦。
我不会保证这是在网络服务端获取此数据的理想方式;几乎肯定有更多 elegant/efficient/better/slicker/faster 方法可以做到这一点。我一直在寻找障碍,我认为这些障碍与旧式 Web 服务模型的局限性有关。然而,据我所知,这有效
AspNetCompatibilityRequirements
模式允许我访问表单集合,而没有它,如果没有 parsing/drilling 进入边界数据,它根本不可用。
祝你好运。希望对您有所帮助。
我正在尝试将图像解析为字节数组并将其发送到我的网络服务。问题是,我找不到任何方法来读取 bytearraycontent(过去我使用过 HttpContext.Current.Request.Files 但显然它不存在)...有什么帮助吗?
编辑 - 我设法获得了添加的表单数据,但它无法正确保存图像。我切换到 stringContent 但它仍然不起作用,接收到的字符串与我发送的字符串大小完全相同,但它无法打开它。在 web.config.
中添加了“requestValidationMode="2.0"”代码:
public async Task uploadAP()
{
using (var client = new HttpClient())
{
MultipartFormDataContent form = new MultipartFormDataContent();
string str = File.ReadAllText(DEBRIS_PIC_PATH);
form.Add(new StringContent(str), "ap");
HttpResponseMessage response = await client.PostAsync("http://192.168.1.10:8080/WS.asmx/uploadAP", form);
}
}
显然是这样的:
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public void uploadAP()
{
string t = HttpContext.Current.Request.Form["ap"];
FileStream objfilestream = new FileStream(debrisApPath, FileMode.Create, FileAccess.ReadWrite);
objfilestream.Write(binaryWriteArray, 0, binaryWriteArray.Length);
objfilestream.Close();
}
对于延误,我们深表歉意。这是我承诺使用旧式 ASMX Web 服务的示例,它将从客户端读取 ByteArrayContent
,随后我将提供两个警告...
using System;
using System.IO;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Collections;
using System.Collections.Specialized;
using System.ServiceModel.Activation;
namespace OldWSTest
{
/// <summary>
/// Summary description for Service1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class Service1 : System.Web.Services.WebService
{
[WebMethod]
public string uploadAP()
{
var foo = HttpContext.Current.Request.Form["ap"];
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(foo);
// do whatever you need with the bytes here
return "done";
}
}
}
我肯定会回应 John Saunders 的评论,即对于基础 Web 服务工作,像这样的项目应该认真仔细地研究 WCF/WebAPI,而不是 ASMX。我忘记了基于 ASMX 的 Web 服务是多么痛苦。
我不会保证这是在网络服务端获取此数据的理想方式;几乎肯定有更多 elegant/efficient/better/slicker/faster 方法可以做到这一点。我一直在寻找障碍,我认为这些障碍与旧式 Web 服务模型的局限性有关。然而,据我所知,这有效
AspNetCompatibilityRequirements
模式允许我访问表单集合,而没有它,如果没有 parsing/drilling 进入边界数据,它根本不可用。
祝你好运。希望对您有所帮助。