Я пытался портировать веб-сервис WSE 3 прежней версии на WCF. Начиная с поддержания назад совместимости с WSE 3 клиента являются целью, я следовал за руководством в этой статье.
После большого метода проб и ошибок я могу назвать сервис WCF от своего клиента WSE 3. Однако я не могу добавить или обновить веб-ссылку на этот сервис из Visual Studio 2005 (с установленным WSE 3). Ответ является "Запросом, отказавшим с состоянием HTTP 400: Плохой Запрос". Я получаю ту же ошибку при попытке генерировать прокси с помощью wsewsdl3 утилиты. Я могу добавить Сервисную Ссылку использование VS 2008.
Я попытался разместить сервис в IIS 7.5 и в Windows 7 и в Windows 2008 Server R2 с тем же результатом. Какие-либо решения или рекомендации по устранению отказов?
Вот соответствующие разделы из файла конфигурации для моего сервиса WCF.
ОБНОВЛЕНИЕ: После попытки предложения трассировки Paul я решил, что исключением является Система. Xml. XmlException: тело сообщения не может быть считано, потому что это пусто
К сожалению, это, кажется, не помогает. Еще одна вещь, которую я заметил, состояла в том, что был отдельный httpsGetEnabled атрибут serviceMetadata элемента. Я добавил, что и установил его на истинный, так как это - https сервис, но результатом было то же. Кажется, что по некоторым причинам WCF не распознает, что это - запрос метаданных.
Вы можете попробовать включить трассировку WCF на сервере. Вставьте это до строки :
<diagnostics>
<messageLogging
logEntireMessage="true"
logMalformedMessages="true"
logMessagesAtServiceLevel="true"
logMessagesAtTransportLevel="false"
maxMessagesToLog ="3000" />
</diagnostics>
Вставьте это после строки :
<system.diagnostics>
<sharedListeners>
<add name="sharedListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\tracelog.svclog" />
</sharedListeners>
<sources>
<source name="System.ServiceModel" switchValue="Verbose, ActivityTracing" >
<listeners>
<add name="sharedListener" />
</listeners>
</source>
<source name="System.ServiceModel.MessageLogging" switchValue="Verbose">
<listeners>
<add name="sharedListener" />
</listeners>
</source>
<source name="ApplicationLogging" switchValue="Information" >
<listeners>
<add name="sharedListener" />
</listeners>
</source>
</sources>
</system.diagnostics>
После дублирования ошибки запустите средство трассировки WCF и откройте файл журнала. Вероятно, имеет место какое-то исключение.
-- EDIT --
Что ж, это интересное сообщение об ошибке. Оно приводит к другим результатам Google: