WCF и мыло 1.1

Я пытаюсь создать сервис, который должна, надо надеяться, использовать третья сторона.
Потребитель совместим с SOAP 1.1, который является, почему я использую basicHttpBinding для сервера. Когда фактический запрос выполнен, что-то, кажется, идет не так, как надо с типами контента, ожидаемыми сервером. Используя basicHttpBinding я не добираюсь, почему сервер все еще ожидает 'application/soap+xml', который, к моему знанию, только требуется SOAP 1.2.

Я использовал wireshark для выяснения точно, о чем связывались те два. См. tcp поток и установку ниже.

Любая справка ценится.

Запрос приложения сторонних производителей

ОТПРАВЬТЕ / HTTP/1.1

SOAPAction: http://tempuri.org/ITestService/Hello

Тип контента: text/xml; charset=utf-8

Хост: shdesktop:8000

Довольная длина: 297

Ожидайте: 100 - продолжаются

Соединение:Закрыть

Ответ Сервера WCF

HTTP/1.1 415 не Может обработать сообщение потому что тип контента 'text/xml; charset=utf-8' не был ожидаемый тип 'application/soap+xml; charset=utf-8'.

Довольная длина: 0

Сервер: Microsoft-HTTPAPI/2.0

Дата: вторник, 09 февраля 2010 14:03:19 GMT

Соединение:закрыть

Сервисная конфигурация


    
      
        
        
        
          
            
          
        
      
    
    
      
        
          
          
        
      
    
  

26
задан Silas Hansen 9 February 2010 в 14:31
поделиться

2 ответа

Это длинный указатель на постоянную широкую последовательность (т.е. последовательность из широких символов).

Так как это широкий ряд, вы хотите, чтобы ваша постоянная выглядит как: L «StartWindow» . Я бы тоже не стал создавать промежуточный a , я бы просто передал L «StartWindow» для параметра:

ghTest = FindWindowEx(NULL, NULL, NULL, L"TestWindow");

Если вы хотите быть педантично правильным, «LPCTSTR» является «текстовой» последовательностью - широкой последовательностью в построении Юникода и узкой последовательностью в построении ANSI, поэтому вы должны использовать соответствующий макрос:

ghTest = FindWindow(NULL, NULL, NULL, _T("TestWindow"));

Однако мало кто заботится о создании кода, который можно скомпилировать как для наборов символов Юникода, так и для наборов символов ANSI, и если вы не добьетесь того, чтобы он действительно работал правильно, это может быть немного дополнительной работой для небольшой выгоды. В этом конкретном случае не так много дополнительной работы, но если вы манипулируете последовательностями, есть полный набор макросов манипуляции последовательностями, которые разрешаются в правильные функции.

-121--848988-

Для обработки анализа большого файла можно использовать pulldom API , не загружая его в память одновременно. Это обеспечивает более удобный интерфейс, чем использование SAX с незначительной потерей производительности.

Он в основном позволяет передавать XML-файл до тех пор, пока вы не найдете интересующий вас бит, а затем начать использовать регулярные операции DOM после этого.


from xml.dom import pulldom

# http://mail.python.org/pipermail/xml-sig/2005-March/011022.html
def getInnerText(oNode):
    rc = ""
    nodelist = oNode.childNodes
    for node in nodelist:
        if node.nodeType == node.TEXT_NODE:
            rc = rc + node.data
        elif node.nodeType==node.ELEMENT_NODE:
            rc = rc + getInnerText(node)   # recursive !!!
        elif node.nodeType==node.CDATA_SECTION_NODE:
            rc = rc + node.data
        else:
            # node.nodeType: PROCESSING_INSTRUCTION_NODE, COMMENT_NODE, DOCUMENT_NODE, NOTATION_NODE and so on
           pass
    return rc


# xml_file is either a filename or a file
stream = pulldom.parse(xml_file) 
for event, node in stream:
    if event == "START_ELEMENT" and node.nodeName == "AssetType":
        if node.getAttribute("longname") == "characters":
            stream.expandNode(node) # node now contains a mini-dom tree
            type_nodes = node.getElementsByTagName('type')
            for type_node in type_nodes:
                # type_text will have the value of what's inside the type text
                type_text = getInnerText(type_node)

-121--4667595-

В basicStartBinding используется 1,1 SOAP - но в этом случае у вас будет тип содержимого application/soap + xml .

Поскольку ваш клиент отправляет text/xml - есть ли вероятность, что он ожидает интерфейс REST? Это может быть обработано WCF webStartBinding .

Подробнее об ОТДЫХЕ в WCF читайте в MSDN WCF REST Developer Center и ознакомьтесь с серией экранов Pluralsight на WCF REST - настоятельно рекомендуется!

19
ответ дан 28 November 2019 в 07:52
поделиться

Я занимаюсь этим (довольно часто) для своей работы уже некоторое время. Существует много подводных камней с HTML-письмами. Разные клиенты электронной почты отображают HTML по-разному и делают IE6 продвинутыми.

Вот лето того, что я узнал до сих пор.

  • Используйте встроенный CSS : Стили не всегда поддерживаются.
  • Использование макетов таблиц : Я знаю, но макеты div зависят от CSS, и многие клиенты электронной почты не справляются.
  • Не используйте rowspan : Это вызывает странные проблемы с интервалом.
  • Не используйте фоновые изображения : Поддержка этих изображений ограничена.
  • Стиль тэгов изображения с «дисплей: block» : Это устраняет странные проблемы с интервалами при использовании hotmail.
  • Если использовать несколько таблиц, вложьте их в одну родительскую таблицу : Это останавливает более странные проблемы с интервалами.
  • Не используйте Javascript : Снова не очень хорошо поддерживается.
  • Убедитесь, что адрес электронной почты понятен без изображений : пользователь может не загружать их.
  • Предоставьте онлайн-версию и ссылку на нее : Это позволяет пользователям видеть предполагаемое содержимое, даже если их клиент электронной почты ужасен.
  • Test, test, test : Только то, что он работает в одном почтовом клиенте, не означает, что он работает в других. Большой получил вы Outlook 2007. Оно использует слово для визуализации HTML (вздоха).

Это далеко не полный список, но должен поставить большинство людей на правильный трек.

-121--836572-

Хотя мне понравились многие аспекты дизайна среды выполнения Erlang и платформы OTP, я обнаружил, что это довольно раздражающий язык программы для разработки в. Запятые и точки полностью хромают и часто требуют перезаписи последнего символа многих строк кода только для изменения одной строки. Кроме того, некоторые операции, простые в Ruby или Clojure, утомительны в Erlang, например обработка последовательностей.

Для распределенных систем, полагающихся на общую базу данных, система Mnesia является действительно мощным и, вероятно, хорошим вариантом, но я программирую на языке, чтобы учиться и развлекаться, и раздражающий фактор Эрланга начал перевешивать фактор веселья, как только я прошел через основные учебные пособия по банковскому счету и начал писать плагины для сервера XMPP.

-121--865216-

Обычно при получении сообщения/ошибки в веб-службе, содержащей текст:

content type 'text/xml'

Это означает, что веб-сервер вернул страницу ошибки вместо ожидаемого ответа xml.

7
ответ дан 28 November 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: