Вызов функций WCF с использованием Reflection - PullRequest
0 голосов
/ 18 марта 2010

У меня есть приложение WCF, которое использует NetTcpBinding. Я хочу вызвать функции в службе WCF, используя Methodbase.Invoke из пространства имен System.Reflection. Другими словами, я хочу динамически вызывать функцию, передавая String в качестве имени функции.

Отражение прекрасно работает для веб-службы или приложения Windows или любой библиотеки DLL или класса. Так что, безусловно, есть способ сделать это для WCF, но я не могу выяснить, как это сделать.

Я получаю Имя сборки, тогда все нормально, но мы не можем создать экземпляр класса Interface. Я попытался открыть соединение WCF с помощью привязки и попытался передать этот объект, но он выдает исключение как:

"Объект не соответствует типу цели."

Я открыл соединение и передал объект и тип только для интерфейса. Я не знаю, пытаюсь ли я что-то не так или я использую неправильный путь. Есть идеи, как мне это сделать?

NetTCPBinding все правильно указаны при открытии соединения. Я использую WCF в качестве службы Windows, используя NETTCPBinding.

1 Ответ

1 голос
/ 19 марта 2010

Вы передаете правильный экземпляр, когда вызываете свой метод. Этот экземпляр является прокси-объектом, созданным через интерфейсный вызов ChannelFactory. Я попробовал вашу технику в приложении Hello World Style и получил ожидаемые результаты. Одна вещь, которую я не вижу в вашем примере кода, это как вы инициализируете параметры. Это может быть проблемой. Я считаю, что ваш вызов Type.GetType может быть причиной ошибки, которую вы получаете. Обратите внимание, что я вызываю GetType для объекта Proxy. Ниже приведен пример кода, который вызывает функцию GetData, которая принимает один аргумент как целое число. ...

 Dim myFactory As ChannelFactory(Of SimpleService.IService1)
    myFactory = New ChannelFactory(Of SimpleService.IService1)(myBinding, myEndpoint)
    oProxy = myFactory.CreateChannel()
    'commented out version that does same call without reflection
    ' oProxy.GetData(3)
   Dim oType As Type = oProxy.GetType
   Dim oMeth As MethodInfo = oType.GetMethod("GetData")
   Dim params() As Object = {3}
   Dim sResults As String
   sResults = oMeth.Invoke(oProxy, BindingFlags.Public Or BindingFlags.InvokeMethod, Nothing, params, System.Globalization.CultureInfo.CurrentCulture)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...