Странное исключение при соединении с сервисом WCF через прокси-сервер

Исключение "Эта операция не поддерживается для относительного 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.

5
задан Slauma 15 June 2010 в 19:16
поделиться

1 ответ

10.20.30.40:8080 не является правильным URL. Вам нужен http://10.20.30.40:8080.


Вот мой диагностический ход мыслей, если это кому-то поможет:

  1. Исключения обычно не лгут. Обычно они означают именно то, о чем говорят. Фокус в том, чтобы понять, как они могут говорить правду.
  2. Исключение гласило: "Эта операция не поддерживается для относительного URI". Если это правда, то это означает, что операция выполняется, ей дается относительный URL, но она не поддерживает относительные URI.
  3. Затем ОП сказал, что когда он запускает приложение, "за исключением того, что я удаляю proxyAddress="10.20.30.40:8080" из привязок".

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

Не нужно быть Шерлоком Холмсом, чтобы решить эту проблему. Ключ был в том, чтобы мгновенно увидеть, что перед URI нет scheme://, что делает его относительным.

8
ответ дан 14 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: