C# WCF GetWebRequest: как установить атрибут в заголовках - PullRequest
0 голосов
/ 06 февраля 2020

Переопределение GetWebRequest и доступ к заголовкам работает просто отлично. Теперь мне нужно установить атрибут. Моя цель выглядит как

<soapenv:Envelope xmlns:urn="urn:company:sap:ds:sales" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
  <messageId xmlns="http://www.company.com/foo/bar/soap/features/messageId/">urn:uuid:123c155c-3ab4-19ca-a045-02003b1bb7f5</messageId>
</soapenv:Header>
<soapenv:Body>
    ...
</soapenv:Body>
</soapenv:Envelope>

Проблема заключается в том, как сгенерировать атрибут xmlns = "http://www.company.com/foo/bar/soap/features/messageId" в заголовке. Я просто потратил несколько часов на чтение документации, и кажется, что просто невозможно установить атрибут в заголовке.

Могу ли я просто заключить в кавычки и написать

request.Headers["messageID xmlns=""http://www.company.com/foo/bar/soap/features/messageId"""] = "urn:uuid:123c155c-3ab4-19ca-a045-02003b1bb7f5";

Но это чувствует что-то не так со мной ..

1 Ответ

0 голосов
/ 07 февраля 2020

пожалуйста, обратитесь к приведенным ниже фрагментам кода, wi sh это полезно для вас.

    class Program
    {
        static void Main(string[] args)
        {
            ServiceReference1.ServiceClient client = new ServiceClient();
            using (new OperationContextScope(client.InnerChannel))
            {
                UserInfo userInfo = new UserInfo();
                userInfo.FirstName = "John";
                userInfo.LastName = "Doe";
                MessageHeader aMessageHeader = MessageHeader.CreateHeader("UserInfo", "http://tempuri.org", userInfo);
                MessageHeader bheader = MessageHeader.CreateHeader("messageId", "http://www.company.com/foo/bar/soap/features/messageId/", "urn:uuid:123c155c-3ab4-19ca-a045-02003b1bb7f5");
           OperationContext.Current.OutgoingMessageHeaders.Add(aMessageHeader);
                OperationContext.Current.OutgoingMessageHeaders.Add(bheader);
                var result = client.Test();
                Console.WriteLine(result);
            }
        }
    }
    public class UserInfo
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
}

Результат.
enter image description here
Это реализация на стороне клиента, вы также можете использовать интерфейс IClientMessageInspector или IDispatchMessageInspector для добавления настраиваемого заголовка на стороне клиента и на стороне сервера.
Не стесняйтесь сообщить мне, если есть что-то, с чем я могу помочь.

...