WCF Duplex Async
От: Fortnum  
Дата: 25.03.10 22:40
Оценка:
Вопрос: как при использовании опции "/async" в утилите svcutil заставить генерить в составе интерфейсов на стороне клиента методы асинхронного паттерна только для определенных методов, а не для всех?

А теперь чуток поподробнее, где у меня случился затык. Пытаюсь понять, как использовать двусторонний асинхронный интерфейс в WCF. Объявил на стороне сервиса два интерфейса, прямой и обратный:
[ServiceContract(CallbackContract = typeof(IServiceCallback))]
public interface IService
{
    [OperationContract()]
    string TestService(string value);
}

public interface IServiceCallback
{
    [OperationContract()]
    string TestClient(string value);
}

На стороне клиента при помощи svcutil сгенерил прокси. Приводить что получилось не буду, но главное, я использовал опции "/async" + "/tcv:Version35".

Реализовал сервис на стороне клиента:
public class Client : IServiceCallback
{
    ServiceClient _serviceClient;

    public CfgIC()
    {
        var instanceContext = new InstanceContext(this);

        _serviceClient = new ServiceClient(instanceContext);
    }
    public string Test(string value)
    {
        return "Hail to service from client!";
    }
}

И обнаружил проблему: ключ "/async" svcutil сгенерил асинхронные методы не только для прямого сервисного интерфейса IService, но также и для обратного — IServiceCallback. Но если начинку для асинхронного вызова прямого интерфейса — прокси — svcutil сгенерил сам, то вот реализовать методы асинхронного паттерна он требует от меня самостоятельно. Я-то, в принципе, не против, но асинхронные методы в IServiceCallback я все равно использовать не буду. Короче, компилятор ругается, что Client не реализует член интерфейса IServiceCallback.BeginTestClient и IServiceCallback.EndTestClient!

Отсюда мой вопрос, заданный в начале сообщения. Или предложите иной способ решить данную проблему.

Или придется отказаться от использования svcutil и объявлять интерфейсы на стороне клиента вручную?
Re: WCF Duplex Async
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.03.10 07:09
Оценка: 2 (1)
Здравствуйте, Fortnum, Вы писали:

F>Я-то, в принципе, не против, но асинхронные методы в IServiceCallback я все равно использовать не буду. Короче, компилятор ругается, что Client не реализует член интерфейса IServiceCallback.BeginTestClient и IServiceCallback.EndTestClient!


F>Отсюда мой вопрос, заданный в начале сообщения. Или предложите иной способ решить данную проблему.


1)
Внутри асинхронных методов:
throw new NotImplementedException()


2)
delegateType OpDelegate = Op;

IAsyncResult BeginOp(params, AsyncCallback callback, object asyncState)
{
    return OpDelegate.BeginInvoke(params, callback, asyncState);
}

ResultType EndOp(IAsyncResult ar)
{
    return OpDelegate.EndInvoke(ar);
}
Re[2]: WCF Duplex Async
От: Fortnum  
Дата: 26.03.10 07:37
Оценка:
В общем, я понял, что гораздо серьёзнее проблема с тем, что
из 20 методов мне асинхронно вызывать надо 1-2. И стал писать
класс прокси клиента вручную (заодно научусь).

А еще, кажись, идет типа "война", между теми кто вручную
их пишет и теми, кто автоматически генерит Или
мне так показалось из форумов и статей?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.