2013-07-15 3 views
2

Я использую . NET 3.5This - связанный вопрос, но с использованием Tyn Async Library, так как я нахожусь в 3.5, мне нужен другой подход.Вызов async WCF без ссылки на службу с помощью ChannelFactory

Я использовал для вызова WCF асинхронен путем добавления ссылки на службу и создания своих асинхронные операций с использованием Visual Studio 2010.

Теперь я создал динамический прокси, используя CreateChannel<T> из ChannelFactory класса и мне нужно позвонить метод с асинхронным способом. Вот как я создаю прокси-сервер WCF:

public MyInterface Proxy { get; set; } 

    BasicHttpBinding binding = new BasicHttpBinding(); 
    EndpointAddress ep = new EndpointAddress("http://localhost/myEndpoint"); 
    Proxy = ChannelFactory<MyInterface>.CreateChannel(binding, ep); 

    // I call my method 
    Proxy.MyMethod(); 

    [ServiceContract] 
    public Interface MyInterface 
    { 
     [OperationContract] 
     void MyMethod(); 
    } 

Мне не нужен ответ службы.

+2

см http://stackoverflow.com/ Questio ns/400798/how-to-make-a-call-to-my-wcf-service-асинхронный – vibhu

ответ

1

Я не уверен, если я правильно вас понял, но если вы хотите сделать свой Proxy.MyMethod запустить асинхронный с помощью .NET 3.5, вы можете использовать стандартную BeginInvoke класса делегата, например:

//Make a delegate for your Proxy.MyMethod 
private delegate void MyDelegate(); 

Затем в коде, вы просто вызываете свой метод асинхр:

BasicHttpBinding binding = new BasicHttpBinding(); 
EndpointAddress ep = new EndpointAddress("http://localhost/myEndpoint"); 
Proxy = ChannelFactory<MyInterface>.CreateChannel(binding, ep); 
var delInstance = new MyDelegate(Proxy.MyMethod); 
var result = delInstance.BeginInvoke(); 

Если вам нужно проверить кое-что о результатах, переменная использование результата для этого

+0

Спасибо. Поскольку это не решение, которое я искал, похоже, он работает как асинхронный подход. Однако я отредактировал ваш ответ, потому что, как вы заявили, делегат не разрешил мне запускать асинхронный путь. – anmarti

+0

@senyorToni Добро пожаловать. Также, если вам удобно использовать proxi вместо ChannelFactory, вы можете создать proxi-класс для своего клиента, используя svcutil с/async-директивой. Это автоматически сгенерирует вам метод BeginMyMethod, который запустит async. Без результатов тура вызов будет одной строкой кода: new YourProxiClient(). BeginMyMethod(); – Alex

Смежные вопросы