Вызовите службу WCF, используя только код вручную (без кода конфигурации или автогена)

Я примерно следую методу из WCF The Right Way... The Manual Way для настройки службы WCF.

У меня есть созданный вручную прокси-класс, который выглядит так:

// Setup a client so we can call our web services.
public class EmployeeClient :IEmployeeService
{
    private readonly IEmployeeService EmployeeChannel;

    public EmployeeClient(Binding binding, string address)
    {
        var endpointAddress = new EndpointAddress(address);

        EmployeeChannel = new ChannelFactory<IEmployeeService>
                                 (binding, endpointAddress).CreateChannel();
    }

    public EmployeeResponse SaveOrUpdateEmployee(EmployeeContract employee)
    {
        return EmployeeChannel.SaveOrUpdateEmployee(employee);
    }
}

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

В настоящее время я пытаюсь назвать их так:

serviceHost = SelfServiceHost.StartupService();

employeeClient = new EmployeeClient(new BasicHttpBinding(), 
                                    SelfServiceHost.StartUpUrl);

EmployeeResponse employeeResponse = employeeClient.SaveOrUpdateEmployee(emp);

Когда я это делаю, я получаю это исключение:

System.ServiceModel.ProtocolException: Тип содержимого text/xml; charset=utf-8 не поддерживается службой http://localhost:8090/EmployeeService. Привязки клиента и службы могут не совпадать. ---> System.Net.WebException: Удаленный сервер возвратил ошибку: (415) Невозможно обработать сообщение, поскольку тип содержимого 'text/xml; charset=utf-8» не был ожидаемым типом «application/soap+xml; кодировка=utf-8'..

Что мне нужно сделать, чтобы звонок в мою службу работал только с кодом?


person Vaccano    schedule 17.08.2011    source источник
comment
Для дальнейшего использования и на момент публикации этого комментария ссылка на учебник, размещенная в вопросе, больше не загружает учебник. Мне не удалось найти руководство в другом месте, но я смог найти краткую ссылку на это руководство с примером кода проекта здесь: codeproject.com/Articles/114139/   -  person Sean    schedule 20.02.2014


Ответы (1)


Из того, что вы описываете, привязка не настроена совместимым образом.

Я подозреваю, что хост WCF имеет wsHttpBinding, а ваша клиентская сторона имеет BasicHttpBinding или подобное...

см. http://social.msdn.microsoft.com/forums/en-US/wcf/thread/f29cd9c8-3c89-43d2-92ae-d2a270ab86b9/

person Yahia    schedule 17.08.2011