Как я могу указать кодировку сообщения для входящих сообщений в клиенте WCF на основе кодировки сообщения в ответном сообщении с сервера?

Как я могу указать кодировку сообщения для входящих сообщений в клиенте WCF на основе кодировки сообщения в ответном сообщении с сервера?

Сервер может отправить ответ с кодировкой текстового сообщения или MTOM?

Как это определить и соответственно как указать кодировку сообщения на клиенте, после получения ответа от сервера.


person Ummar Muhammad    schedule 27.12.2011    source источник


Ответы (1)


Если вы хотите изменить кодировку сообщения, вам нужно определить конфигурацию привязки — выберите любую привязку, которую вы используете, и определите, что вы хотите, например. Кодировка MTOM:

<bindings>
  <wsHttpBinding>
    <binding name="MTOM" messageEncoding="Mtom" />
  </wsHttpBinding>
</bindings>

Затем в ваших конечных точках как на сервере, так и на клиенте (они должны выстраиваться и определять одно и то же!), вам нужно использовать эту конфигурацию привязки:

  <service name="test" >
    <endpoint name="test"
        address=""
        binding="wsHttpBinding"
        bindingConfiguration="MTOM"
        contract="IYourService" />
  </service>

Вы должны настроить это как на клиенте, так и на сервере - вам нужно заранее решить, использовать ли кодировку MTOM (вместо обычной текстовой кодировки).

person marc_s    schedule 27.12.2011
comment
Спасибо, но у меня другой запрос. Могу ли я узнать кодировку ответа от сервера до того, как сообщение будет фактически декодировано, и чтобы я мог использовать правильную конечную точку с той же кодировкой на стороне клиента, что и для ответа на стороне сервера. - person Ummar Muhammad; 27.12.2011
comment
@klra: я пытался объяснить, что: нет вы не можете этого сделать - вам нужно решить заранее при настройке служб, какие кодировки будут использоваться на каких конечных точках. Вы не можете волшебным образом обнаружить это для каждого сообщения - это должно быть определено и настроено. - person marc_s; 27.12.2011
comment
Хорошо, можем ли мы хотя бы определить кодировку входящего сообщения на любом уровне на стороне клиента или на стороне сервера? - person Ummar Muhammad; 28.12.2011
comment
@klra: нет, но зачем тебе это?? У вас должна быть статическая конфигурация, поэтому, если вы вызываете свой сервер на любой заданной конечной точке, вы знаете из конфигурации, какая у него будет кодировка.... - person marc_s; 28.12.2011
comment
Это необходимо, потому что сервер может отправлять текстовое сообщение или сообщение в кодировке MTOM. Однако некоторые люди пишут, что конечная точка, настроенная с кодировкой MTOM, также может принимать сообщение в строковой кодировке и будет правильно десериализована, но я не уверен. - person Ummar Muhammad; 28.12.2011