Вызов операции C # с 'Out' из управляемого кода C ++ - PullRequest
0 голосов
/ 18 апреля 2011

Привет У меня есть веб-сервис WCF, в котором есть описание, которое мне нужно вызвать из родного приложения C ++. У меня есть управляемая мостом DLL, которая работает, но у меня возникают проблемы с вызовом операции WCF с объектом OUT.

Операция C #:

void DoWork(string indxNum, out ErrorWarningsData objerrc)

Здесь ErrorWarningsData - это класс в веб-службе C #.

Вот так выглядит мой код Managed C ++:

gcroot<Binding^> binding1 = gcnew WSHttpBinding();

gcroot<EndpointAddress^> address1 = gcnew EndpointAddress(gcnew String("http://usatondevlas1.na.praxair.com/Build15/ResourceCenterSVC/ResourceCenter.svc"));

gcroot<HelloServiceClient::ServiceReference2::ResourceCenterServiceContractClient^> client = gcnew HelloServiceClient::ServiceReference2::ResourceCenterServiceContractClient(binding1,address1);

gcroot<HelloServiceClient::ServiceReference2::ErrorWarningsData^> objEWData = gcnew HelloServiceClient::ServiceReference2::ErrorWarningsData;

Но когда я пытаюсь вызвать метод DoWork из службы WCF, я получаю сообщение об ошибке.

Вот что я пробовал:

client->DoWork("4278779",[Out] objEWData ); Также попробовал, client->DoWork("4278779",[Out] ^% objEWData ); А также, client->DoWork("4278779",[Out] % objEWData );

Может, кто-нибудь подскажет, как получить доступ к объекту с помощью OUT. Я мог бы найти несколько примеров доступа к [Out] для int и string, но ни одного для объектов

PS: я следовал следующему, чтобы связать службу WCF с собственным приложением [Ссылка] /452443/sozdat-sluzhbu-wcf-dlya-neupravlyaemyh-klientov-c

Ответы [ 2 ]

0 голосов
/ 18 апреля 2011

Я не уверен, почему вы используете gcroot в этих случаях. Вы можете просто сделать:

WSHttpBinding ^ binding1 = gcnew WSHttpBinding(); 
EndpointAddress ^ address1 = gcnew EndpointAddress(gcnew String ("http://usatondevlas1.na.praxair.com/Build15/ResourceCenterSVC/ResourceCenter.svc"));
HelloServiceClient::ServiceReference2::ResourceCenterServiceContractClient ^ client = gcnew HelloServiceClient::ServiceReference2::ResourceCenterServiceContractClient(binding1,address1);
HelloServiceClient::ServiceReference2::ErrorWarningData ^ objEWData = gcnew HelloServiceClient::ServiceReference2::ErrorWarningsData;
client->DoWork("4278779", objEWData); 
0 голосов
/ 18 апреля 2011

Вам не нужна дополнительная разметка для передачи чего-либо в качестве параметра out в C ++ / CLI. Семантика похожа на передачу по ссылке в нативном C ++.

...