2016-09-16 3 views
1

Я пишу API в WCF 4.6.1. Клиент (-и) не будет написан мной и не обязательно будет в .NET (они могут быть на любом языке/платформе).Имеет ли WSDL концепцию асинхронного веб-метода?

Существует веб-метод, который делает что-то, что может занять много времени, поэтому я хочу призвать клиента называть его асинхронно. Я знаю, что клиент может быть написан для обработки веб-метода как async (потоковая передача и т. Д.), Но есть ли способ «обеспечить» фактический веб-сервис как операцию async? Т.е. имеет ли WSDL способ сказать «это метод асинхронности»?

ответ

1

Есть ли у WSDL способ сказать «это асинхронный метод»?

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

Если вы предоставили хорошую документацию, чтобы сказать, что для конкретной операции рекомендуется использовать отдельный поток, потому что ответ медленно генерируется, вы должны быть в порядке. Клиенты должны быть построены и интегрированы с веб-службой. Разработчики заметят медленный ответ, и они решат, нужно ли делать вызов не блокирующим способом. Даже блокирование может быть решением для них, вы никогда не знаете, что вы считаете медленным другим, возможно, не проблема.

Если вы хотите, чтобы «принудительные» клиенты не блокировали ответ, вы могли бы использовать, например, WS-Addressing (я предполагаю, что вы используете WCF для веб-службы SOAP), где ваш клиент предоставляет конечную точку обратного вызова что вы можете вызвать, когда ответ будет готов. Это немного усложняет клиент, так как теперь он должен иметь конечную точку приема. Но разработчик-клиент может предпочесть выбирать, как она вызывает службу (блокируя/не блокируя), а не выполнять спецификацию WS-Addressing.

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