Как исправить код, генерирующий SvcUtil, с ошибками в нем для клиента C ++ / CLI WCF? - PullRequest
3 голосов
/ 05 ноября 2010

Я столкнулся с проблемой с кодом, сгенерированным SvcUtil при создании клиента WCF в C ++ / CLI.

Когда я запускаю SvcUtil.exe / t: code / l: cpp http://localhost:2772/mex/", он генерирует заголовочный файл, содержащий класс клиента ниже.

[System::Diagnostics::DebuggerStepThroughAttribute, 
System::CodeDom::Compiler::GeneratedCodeAttribute(L"System.ServiceModel", L"3.0.0.0")]
public ref class DemoClient : public System::ServiceModel::ClientBase<IDemo^ >, public IDemo
{

    public: DemoClient();
    public: DemoClient(System::String^  endpointConfigurationName);
    public: DemoClient(System::String^  endpointConfigurationName, System::String^  remoteAddress);
    public: DemoClient(System::String^  endpointConfigurationName, System::ServiceModel::EndpointAddress^  remoteAddress);
    public: DemoClient(System::ServiceModel::Channels::Binding^  binding, System::ServiceModel::EndpointAddress^  remoteAddress);
    public: virtual System::String^  GetDemoString() sealed;
};

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

Demo.h(41): error C3766: 'DemoClient' must provide an implementation for the interface method 'void System::ServiceModel::ICommunicationObject::Closed::add(System::EventHandler ^)' : see declaration of 'System::ServiceModel::ICommunicationObject::Closed::add'
Demo.h(41): error C3766: 'DemoClient' must provide an implementation for the interface method 'void System::ServiceModel::ICommunicationObject::Closed::remove(System::EventHandler ^)' : see declaration of 'System::ServiceModel::ICommunicationObject::Closed::remove'
Demo.h(41): error C3766: 'DemoClient' must provide an implementation for the interface method 'void System::ServiceModel::ICommunicationObject::Closing::add(System::EventHandler ^)' : see declaration of 'System::ServiceModel::ICommunicationObject::Closing::add'
Demo.h(41): error C3766: 'DemoClient' must provide an implementation for the interface method 'void System::ServiceModel::ICommunicationObject::Closing::remove(System::EventHandler ^)' : see declaration of 'System::ServiceModel::ICommunicationObject::Closing::remove'
Demo.h(41): error C3766: 'DemoClient' must provide an implementation for the interface method 'void System::ServiceModel::ICommunicationObject::Faulted::add(System::EventHandler ^)' : see declaration of 'System::ServiceModel::ICommunicationObject::Faulted::add'
Demo.h(41): error C3766: 'DemoClient' must provide an implementation for the interface method 'void System::ServiceModel::ICommunicationObject::Faulted::remove(System::EventHandler ^)' : see declaration of 'System::ServiceModel::ICommunicationObject::Faulted::remove'
Demo.h(41): error C3766: 'DemoClient' must provide an implementation for the interface method 'void System::ServiceModel::ICommunicationObject::Opened::add(System::EventHandler ^)' : see declaration of 'System::ServiceModel::ICommunicationObject::Opened::add'
Demo.h(41): error C3766: 'DemoClient' must provide an implementation for the interface method 'void System::ServiceModel::ICommunicationObject::Opened::remove(System::EventHandler ^)' : see declaration of 'System::ServiceModel::ICommunicationObject::Opened::remove'
Demo.h(41): error C3766: 'DemoClient' must provide an implementation for the interface method 'void System::ServiceModel::ICommunicationObject::Opening::add(System::EventHandler ^)' : see declaration of 'System::ServiceModel::ICommunicationObject::Opening::add'
Demo.h(41): error C3766: 'DemoClient' must provide an implementation for the interface method 'void System::ServiceModel::ICommunicationObject::Opening::remove(System::EventHandler ^)' : see declaration of 'System::ServiceModel::ICommunicationObject::Opening::remove'

Любые предложения о том, что мне нужно изменить или добавить, чтобы исправить это? Должен ли я просто добавить реализацию для перечисленных методов интерфейса?

Ответы [ 2 ]

3 голосов
/ 22 марта 2018

Поскольку ссылка не работает, вы можете использовать Wayback Machine , чтобы увидеть страницу

Соответствующая часть из сообщения

Вы должны использовать следующий обходной путь для успешной компиляции: Найдите полную сборку среды выполнения в: % SYSROOT% \ Microsoft.NET \ Framework \ v4.0.30319 \ System.ServiceModel.dll

Скопируйте эту DLL.

Заменить эталонный узел на: % ProgramFiles (x86) \ Справочные сборки \ Microsoft \ Framework \ .NETFramework \ v4.0 \ System.ServiceModel.dll

Перекомпиляция вашего проекта теперь должна быть успешной.

2 голосов
/ 16 февраля 2011

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

http://connect.microsoft.com/VisualStudio/feedback/details/578860/c-compiler-bug-when-deriving-from-system-servicemodel-clientbase-t

...