Ошибка при использовании WCF RestFull POST, работает на W2003 Server / IIS6, но не может заставить его работать на W2008 IIS7 - PullRequest
0 голосов
/ 26 октября 2010

У меня есть служба WCF, которая предоставляет некоторые методы с помощью метода WebInvoke и POST, это уже давно работает на компьютере с Windows 2003, дело в том, что мне нужно перенести службу на новый компьютер с сервером Windows 2008 и вот где я получаю проблему, я получаю ошибку 400 Bad Request при попытке позвонить с клиента. Код, развернутый на обеих машинах, одинаков, я пытался выполнить вызовы как с помощью решения UnitTest VS2008, так и Fiddler2, тот же самый запрос возвращает ответ 200 OK от сервера w2003, но 400 на сервере 2008.

У меня была другая служба WCF, основанная на той же философии, которая также работала на сервере 2003 года, поэтому я попытался развернуть ее на сервере 2008 года, я обнаружил, что методы GET работают правильно на обеих машинах, но если я пытаюсь использовать очень простой метод POST, затем я получаю ОШИБКУ 500. Внутренняя ошибка сервера, указывающая на ошибку «Ссылка на объект не установлена ​​на экземпляр объекта». Дело в том, что и этот метод работает. Если я выполняю вызов на другой сервер, вызов точно такой же, только меняется IP-адрес, поэтому я думаю, что должна быть какая-то проблема с IIS 7, которую я не могу выяснить так как код отлично работает на w2003 / IIS6. Я проверил установленный .NET 3.5 и все, что нашел на форумах.

Полагаю, мне следует опубликовать некоторый код, но, поскольку он работает на компьютере W2003, я не совсем уверен, что это будет иметь какое-то значение, я пробовал все виды вещей с привязками, но, к счастью, это не нужно, так как Я не пытаюсь сгенерировать прокси с помощью svctool или VS2008, я просто форматирую запрос URL-адреса и отправляю его на сервер, как было указано, прежде чем он безупречно работает на первой машине ...

Вот пример запроса, выполненного вручную с помощью fiddler2 (в модульных тестах я использую класс WebRequest для генерации объекта запроса с тем же результатом):

POST http://XX.XXX.XXX.XXX/ServiceiPhone/service.svc/DoWork HTTP / 1.1 Хост: XX.XXX.XXX.XXX Пользователь-агент: FoodLinker / 1.0 Принять: текст / XML Тип контента: приложение / JSON Accept-Language: es-es Accept-Encoding: gzip, выкачать Длина контента: 17 Подключение: keep-alive

{ "Data": "MyData"}

Код на сервере выглядит так:

[WebHelp(Comment = "Sample description for DoWork")]
[WebInvoke(UriTemplate = "DoWork")]
[OperationContract]
public SampleResponseBody DoWork(SampleRequestBody request)
{
    //TODO: Change the sample implementation here
    return new SampleResponseBody()
    {
        Value = String.Format("Sample DoWork response: '{0}'", request.Data)
    };
}

В файле web.config нет специальной конфигурации привязки, как указано выше, до того, как он будет работать на предыдущем компьютере, а на другом - нет.

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

Любые идеи очень приветствуются, заранее спасибо

1 Ответ

0 голосов
/ 24 ноября 2010

Хорошо, так что я наконец-то понял, что это проблема с .NET Framework 3.5, установка .NET Framework 3.5 SP1 сделала свое дело, поэтому, если вы когда-нибудь столкнетесь с этой проблемой, стоит попробовать обновить и посмотреть, если это была проблема, как в этом случае.

...