2010-07-25 68 views
0

我使用WebGet和WebInvoke公开了WCF服务,这些服务要求将数据封装在xml中。我希望能够返回原始数据,而不用将其包装在xml中,还允许客户端调用我的服务,而无需将请求包装在xml中。用于WebGet和WebInvoke的WCF RequestFormat

我使用协议缓冲区序列化的数据,并将结果转换为base64String所以WebGet响应的样子:

<BinVehicleResp xmlns="http://schemas.datacontract.org/2004/07/NTouchServices.Binary_Types" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <BinVehicle>CgsxMjMtNDU2LTc4ORIFNDQwMDAaBUJsYWNrIgVKZXR0YVIJCJrYqoXAShAE (BINARY DATA)</BinVehicle> 
</BinVehicleResp> 

而一个WebInvoke输入必须看像一个最低:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"> BINARY DATA </string> 

我真的只想要BINARY DATA部分,尤其是WebInvoke。我可以和WebGet一起生活。有没有人有任何建议,我可以允许客户端使用WebInvoke做一个HTTP POST,而不需要用xml包装请求?谢谢。

+0

如果您发布的是代码或XML,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码”按钮(101 010),以良好地格式化和语法突出显示它! – 2010-07-25 14:42:02

回答

0

我不确定我完全理解了这个问题。您声明您需要将要发布的数据用XML包装,但是然后询问如何将数据发布但不包含在XML中。我最初的答案是使用BodyStyle参数来声明WebInvoke服务方法:

[OperationContract] 
[WebInvoke(Uri="SomeMethod?x={foo}&y={bar}", BodyStyle=WebMessageBodyStyle.WrappedRequest)] 
public string SomeMethod(string foo, string bar) { 
... 
} 

下面是BodyStyle MSDN文档 - 你可以将其设置为裸(既不回应也不要求被包裹),包裹,或WrappedRequest /响应。

我希望这会有所帮助。

+0

这看起来很有前途,我会试试看。抱歉,这个问题令人困惑。我实际上的意思是为了使它成功的方式,现在WCF需要包装请求和响应 - 但是,我个人希望响应不被包装。 – Sean 2010-07-27 11:56:49

+0

没问题。让我知道如果这工作 - 我很好奇。谢谢! – 2010-07-27 18:32:04