WCF RequestFormat для WebGet и WebInvoke - PullRequest
0 голосов
/ 25 июля 2010

У меня есть службы WCF, использующие WebGet и WebInvoke, которые требуют, чтобы данные были упакованы в xml.Я предпочел бы иметь возможность возвращать необработанные данные без их переноса в xml, а также разрешать клиентам возможность вызывать мой сервис без необходимости заключать запрос в xml.

Я сериализую данные с использованием буферов протокола и преобразую результат в 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, как это.Кто-нибудь есть какие-либо предложения о том, как я могу позволить клиентам иметь возможность выполнять HTTP POST с помощью WebInvoke без необходимости заключать запрос в XML?Спасибо.

1 Ответ

0 голосов
/ 27 июля 2010

Я не уверен, что полностью понимаю вопрос. Вы заявляете, что вам требуется, чтобы данные POSTed были упакованы в XML, но затем спрашиваете, как вы можете получить данные POSTED, не упаковывая их в XML. Мой первоначальный ответ - объявить ваш метод обслуживания WebInvoke с помощью параметра BodyStyle:

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

Вот документация MSDN для BodyStyle - вы можете установить для него Bare (ни ответ, ни запрос не будут упакованы), Wrapped или WrappedRequest / Response.

Надеюсь, это поможет.

...