Я пытался перенести устаревшую веб-службу 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.
<system.serviceModel>
<services>
<service behaviorConfiguration="MyBehavior"
name="MyService">
<endpoint address="" binding="customBinding" bindingConfiguration="wseBinding"
contract="IMyService" />
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<customBinding>
<binding name="wseBinding">
<security authenticationMode="UserNameOverTransport" />
<mtomMessageEncoding messageVersion="Soap11WSAddressingAugust2004" />
<httpsTransport/>
</binding>
</customBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceCredentials>
<userNameAuthentication userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="MyCustomValidator" />
</serviceCredentials>
<serviceAuthorization principalPermissionMode="UseAspNetRoles" roleProviderName="MyRoleProvider" />
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
ОБНОВЛЕНИЕ: После попытки предложения Пола по трассировке я определил, что исключение составляет System.Xml.XmlException: тело сообщения не может быть прочитано, поскольку оно пустое
К сожалению, это не очень помогает. Еще одна вещь, которую я заметил, заключалась в том, что для элемента serviceMetadata был отдельный атрибут httpsGetEnabled. Я добавил это и установил значение true, так как это служба https, но результат был таким же. Кажется, по какой-то причине WCF не признает, что это запрос метаданных.