Исключение "Эта операция не поддерживается для относительного URI". происходит в следующей ситуации:
У меня есть сервис WCF:
[ServiceContract(ProtectionLevel=ProtectionLevel.None)]
public interface IMyService
{
[OperationContract]
[FaultContract(typeof(MyFault))]
List MyOperation(int param);
// other operations
}
public class MyService : IMyService
{
public List MyOperation(int param)
{
// Do the business stuff and return a list of MyDto
}
// other implementations
}
MyFault
и MyDto
два очень простых класса, отмеченные с [DataContract]
атрибут и каждый только наличие три [DataMember]
из типа string, int and int?
.
Этот сервис размещается в IIS 7.0 на Сервере Победы 2008 наряду с приложением ASP.NET. Я использую файл SVC MyService.svc
который расположен непосредственно в корне веб-сайта. Сервисная конфигурация в web.config следующая:
Это, кажется, работает, насколько я могу ввести адрес http://www.domain.com/MyService.svc в браузер и добраться, "Это - Windows Communication Foundation Service" - Страница приветствия.
Один из клиентов, использующих сервис, является консольным приложением:
MyServiceClient aChannel = new MyServiceClient("WSHttpBinding_IMyService");
List aMyDtoList = aChannel.MyOperation(1);
Это имеет следующую конфигурацию:
Когда я запускаю это приложение в рабочем сервере при вызове сайта для клиентов aChannel.MyOperation(1)
выдает следующее исключение:
Эта операция не поддерживается для относительного URI.
Когда я выполняю это клиентское приложение на своей разработке ПК с точно той же конфигурацией, за исключением того, что я удаляю proxyAddress="10.20.30.40:8080"
от привязки операция работает без проблем.
Теперь я действительно не знаю то, что определение адреса прокси-сервера могло бы иметь отношение к абсолютному или относительному URIs. Использование прокси-сервера или не является единственной разницей I, видят при выполнении клиента на производстве или на машине разработки.
У кого-то есть идея, что это исключение могло бы означать в этом контексте и как возможно решить проблему?
Заранее спасибо за справку!
Править:
В случае, если это должно быть важно: Сервис и Клиент создаются с WCF в Платформе.NET 4.
10.20.30.40:8080
не является правильным URL. Вам нужен http://10.20.30.40:8080
.
Вот мой диагностический ход мыслей, если это кому-то поможет:
Там, передо мной, был относительный URI. Когда он удалил его, "операция" заработала, поэтому я сделал вывод, что это относительный URI, который был предоставлен "операции", которая их не поддерживает.
Не нужно быть Шерлоком Холмсом, чтобы решить эту проблему. Ключ был в том, чтобы мгновенно увидеть, что перед URI нет scheme://
, что делает его относительным.