У меня есть служба 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 нет специальной конфигурации привязки, как указано выше, до того, как он будет работать на предыдущем компьютере, а на другом - нет.
Это для тестового проекта, код, который я действительно хочу развернуть, немного сложнее, но это похожий сценарий, и я думаю, что если мне удастся решить эту проблему, возможно, я сделаю это с другим.
Любые идеи очень приветствуются,
заранее спасибо