是否有任何规范的直接方法可以在 .NET 4 WCF 上启用 protobuf-net 序列化?我试图将代码简化到可以轻松构建的程度:
这是我的服务代码:
[ServiceContract]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MobileServiceV2
{
[WebGet(UriTemplate = "/some-data")]
[Description("returns test data")]
public MyResponse GetSomeData()
{
return new MyResponse { SomeData = "Test string here" };
}
}
[DataContract]
public class MyResponse
{
[DataMember(Order = 1)]
public string SomeData { get; set; }
}
我正在Application_OnStart
(Global.asax)中激活此服务路线,如下所示:
RouteTable.Routes.Add(new ServiceRoute("mobile", new MyServiceHostFactory(), typeof(MobileServiceV2)));
我曾经使用MyServiceHostFactory
MEF 管理服务,但这无关紧要。
我的服务配置都是默认的,Web.Config 中唯一的附加内容在这里:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint helpEnabled="true" maxReceivedMessageSize="5242880" defaultOutgoingResponseFormat="Json" automaticFormatSelectionEnabled="true">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>
</system.serviceModel>
好的,服务活着并且正在运行。有移动/帮助,我可以在移动/某些数据上发出 GET 并获得 XML 和 JSON 的响应
application/xml 返回 XML,application/json 返回 JSON
我需要做什么才能让客户端设置 application/x-protobufs 并使用 protobuf-net 对其响应进行编码?
我读了一整天,越来越困惑……
这是我到目前为止发现的,似乎没有什么可以直接解决:
第二个链接是我需要的,但它对我不起作用。不知道为什么,但我无法弄清楚哪个命名空间MediaTypeProcessor
存在于 .NET4 中并且无法使其工作?
关于通过 web.config 配置 protobuf-net 的各种分散信息给了我不同的错误,我只是不确定我是否需要这样做。我宁愿有纯代码的解决方案。
编辑:
根据我的研究 - 我的不好,MediaFormatter
似乎不在当前版本的 WCF 中。我想知道为所有 protobuf 客户端创建单独的 URL 是否最好?这样我就可以接收 Stream 并返回 Stream。手动处理所有序列化逻辑。更多的工作,但我将更好地控制实际数据。