Wcf проблема обратной совместимости - отсутствует пространство имен в параметре метода - PullRequest
0 голосов
/ 30 марта 2012

мы размещаем наш веб-сервис WCF в службе Windows.Мы используем basicHttpBinding.Нам необходимо сохранить обратную совместимость с веб-сервисом Soap 1.1.Наша проблема - отсутствует пространство имен для элемента EPTalkMessage в параметре веб-метода.Я много искал, но не нашел способа добавить пространство имен к этому элементу.

Мыло из старого веб-сервиса:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://aaa.sk/EPTalk/IssueDocument</Action>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<IssueDocument xmlns="http://aaa.sk/EPTalk">
  <EPTalkMessage xmlns="http://aaa.sk/EPTalk/ToSignInput" />
</IssueDocument>
</s:Body>
</s:Envelope>

Новое сгенерированное мыло:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://aaa.sk/EPTalk/IssueDocument</Action>
  </s:Header>
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <IssueDocument xmlns="http://aaa.sk/EPTalk">
      <EPTalkMessage />
    </IssueDocument >
  </s:Body>
</s:Envelope>

Сервисная подпись выглядит следующим образом:

[ServiceContract (Namespace = "http://aaa.sk/EPTalk")]
[XmlSerializerFormat(Use = OperationFormatUse.Literal, Style = OperationFormatStyle.Document)]
public interface IRegistryInputWebService
{
    [OperationContract(Action = "http://aaa.sk/EPTalk/IssueDocument")]
    RegistryServiceResult IssueDocument([MessageParameter(Name = "EPTalkMessage")]
        UpvsPortalEmulator.ToSignInput.EPTalkMessage message);
}

Связывание:

BasicHttpBinding
{                   
 MaxReceivedMessageSize = 1024 * 1024 * 10,
 MaxBufferSize = 1024 * 1024 * 10,
 ReaderQuotas =
              {
                MaxArrayLength = 1024 * 1024 * 10,
                MaxStringContentLength = 1024 * 1024 * 10
               },
 MessageEncoding = WSMessageEncoding.Text,
 Security = new BasicHttpSecurity
                {
                 Mode = BasicHttpSecurityMode.None
                 }
 };

Отредактировано: добавлено определение EPTalkMessage.

 [XmlType, XmlRoot (ElementName = "EPTalkMessage", Namespace = Declarations.SchemaVersion, IsNullable = false), Serializable]
    public class EPTalkMessage
{
}

Большое спасибо заваша помощь

1 Ответ

0 голосов
/ 02 апреля 2012

После поиска я решил эту проблему с помощью MessageContracts.

...