2013-07-08 6 views
0

У меня есть служба NET REST WCF. NET, которая локально отлично работает в Windows 7 IIS 7, , но когда я пытаюсь развернуть ее на моем сервере QA, который работает под управлением Windows Server 2003, и имеет IIS 6, я начинаю получать ошибки Bad Request. Я уже пробовал решение this, но это не работает для меня. Кажется, что XML, который я отправляю на сервер, не десериализуется, я использую XmlSerializer. Любые идеи?Хостинг веб-сервисов WCF на IIS 6

EDIT: Использование Fiddler Я получил детали исключение:

Request Error 
     The server encountered an error processing the request. The exception message is 'There is an error in XML document (4, 354066).'. See server logs for more details. The exception stack trace is: </p> 
     at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) 
    at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle) 
    at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader) 
    at System.ServiceModel.Dispatcher.UnwrappedTypesXmlSerializerManager.XmlSerializerXmlObjectSerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName) 
    at System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.ReadObject(Message message) 
    at System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRequest(Message message, Object[] parameters) 
    at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters) 
    at System.ServiceModel.Dispatcher.CompositeDispatchFormatter.DeserializeRequest(Message message, Object[] parameters) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage41(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage11(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(MessageRpc&amp; rpc) 
    at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet) 

xmlvalidation.com рассказывает мне, что мой XML является правильным, и я получаю правильный ответ с тем же XML на моем локальном IIS

Решение:here

+0

Вы получаете ошибки при попытке попасть в службу WCF из браузера, из тестового клиента WCF или из собственного кода, вызывающего вызовы в службу WCF? Кроме того, не возражаете ли вы опубликовать некоторые сведения об исключениях, чтобы показать больше информации о плохом запросе. –

+0

У меня нет ошибок, когда я нахожу адрес службы в браузере, но когда я пытаюсь вызвать метод POST из моего приложения C#, я получаю «Ответ сервера: неверный запрос» –

+0

Установил ли пул приложений в 4.0 для вашего каталога virtaul в IIS6? –

ответ

0

Проблема, с которой я боролся, не была установлена ​​максимальная длина текстового поля сообщения. Я полагаю, что если значение равно 0, IIS принимает какое-то значение по умолчанию, которое для IIS 7 больше, чем IIS 6, и, к счастью, для моего XML-сообщения. Пожалуйста, ссылка this ссылка.

0

Есть 2 варианта:

  • Это может быть разница в версии. Xml, который вы отправляете в службу, тот же. Но класс C# dto на IIS 6 отличается, поэтому ошибка десериализации.
  • Вы использовали некоторые типы данных (например, перечисления), которые поддерживаются только в WCF с использованием платформы .NET 4.

Попробуйте это:

  • Добавить новый метод контакта, который принимает string и возвращает строку.
  • Убедитесь, что это работает на обоих макросов
  • Затем постепенно увеличивайте сложность метода до тех пор, пока он не соответствует вашему фактическому методу, проверяя после каждого изменения.
+0

Я установил .net 4.0 на обоих компьютерах, поэтому, возможно, можно исключить вторую возможность. Не могли бы вы объяснить, что вы имеете в виду с первой возможностью? –

+0

для первой возможности проверьте, что метка времени на dll на обеих машинах одинакова. На втором просто потому, что.net 4 не означает, что он используется. –

+0

Код тот же, библиотеки одинаковы. Я совершенно не знаю, что делать сейчас. –

Смежные вопросы