理论上如此简单,但我从来都不是 WCF 配置方面的专家。我想要做的是:我有一个与此签名匹配的 WCF 方法:
[OperationContract]
[WebInvoke(Method = "POST")]
Stream PostPackets(Stream rawPackets);
我真正关心的是从 Android/iPhone/Blackberry/任何其他类型的设备获取一个字节数组到我的 wcf 服务,处理该数组,然后发回一个不同的字节数组。就我而言,它可能看起来像:
[OperationContract]
[WebInvoke(Method = "POST")]
byte[] PostPackets(byte[] rawPackets);
虽然我看到的所有示例似乎都使用 Stream。
我阅读了许多不同的文章和帖子,但没有直接回答如何在文件传输的上下文之外执行此操作(这不是我的意图)。以下是我面临的问题:
1- 我假设我需要使用 webHttpBinding 使此服务成为 RESTful。这是正确的吗?如果是这样,你能给我指出一个示例配置吗?
2 -(这绝对是我在任何地方都找不到的!)我需要确保这不会给设备开发人员带来巨大的痛苦。您能否向我展示使用 RESTful 服务的 Android 和 iPhone 设备以及(非常重要)它们如何向我的服务发送字节数组的示例?
请原谅我的笨拙...WCF 配置是我每天都做不到的事情之一。一旦我弄清楚了我的配置,我通常会继续前进,直到我的下一个项目(这可能是很长的时间)之前都不必触及它。请帮忙!
更新
我的同事建议我们使用 http 处理程序而不是 wcf。我们真的必须诉诸于此吗?
例如:
public void ProcessPackets (HttpContext context)
更新 2:
我想知道,没有 JSON 有什么办法可以做到这一点吗?将数组发布为“text/plain”类型有什么缺点/替代方法吗?
最佳答案
也许这个简单(且有效的示例)可以提供帮助
服务器
void StartServer()
{
Task.Factory.StartNew(() =>
{
WebServiceHost host = new WebServiceHost(typeof(MyService), new Uri("http://0.0.0.0:80/MyService/"));
host.Open();
});
}
[ServiceContract]
public class MyService
{
[OperationContract]
[WebInvoke(
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public byte[] PostPackets(byte[] rawPackets)
{
rawPackets[0] = 99;
return rawPackets;
}
}
客户
<html>
<script src='jquery-1.8.3.min.js'></script>
<body>
<script>
$(document).ready(function () {
$.ajax({
type: "POST",
contentType: "application/json",
url: "/MyService/PostPackets",
data: JSON.stringify({rawPackets:[65,66,67]}),
dataType: "text",
success: function (data) {
//var div = $("#test").empty();
//$("#test").html(data.d);
alert('success');
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('error');
}
});
});
</script>
</body>
</html>
关于c# - 跨平台 RESTful WCF 方法,传递和返回字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14433420/