Я новичок в WCF, поэтому приношу извинения, если я полностью потерял лодку.Доступ к слою ServiceModel напрямую
Похоже, что WCF предоставляет множество функциональных возможностей для использования слоя «Канал». Например, чтобы создать сервер, вы можете создать прослушиватель каналов из привязки и вызвать WaitForRequest, Ответить и т. Д. Эти методы связаны с объектами Message, поэтому вам нужно что-то сделать с сообщением.
Мой вопрос связан с тем, что происходит, когда мы уже получили сообщение. Предположим, у меня есть объект, который реализует службу, описанную ServiceContract, а объект Message, который я знаю, представляет собой вызов определенной операции. То, что я действительно хотел бы сделать что-то вроде:
Message requestMessage = GetMessageSomehow();
OperationDescription oc = GetContractForMessage();
Message replyMessage = Invoke(myService, oc, requestMessage);
По крайней мере, если бы я мог каким-то образом получить доступ к IOperationInvoker и IDispatchMessageFormatter объекты, которые получают созданные для типа, это было бы довольно просто чтобы связать их вместе, чтобы получить функциональность, которую я ищу.
В моем конкретном случае мне нужно реализовать некоторые простые сервисы Soap 1.1 и 1.2 (без WS-Addressing). У меня уже есть объекты HttpListenerRequest/Response и можно маршрутизировать исходя из заголовка SOAPAction или ContentType.
Я думаю, что эта функциональность также была бы очень полезна для модульного тестирования. Например, мне нужно реализовать существующие клиенты. Было бы неплохо иметь модульные тесты, где я мог бы проверить правильность атрибутов в классе службы (то есть, сообщение, которое, как я знаю, я получаю, правильно переводится в вызов в моем сервисном интерфейсе).
Любые предложения?
Что именно, * это * функциональность, которую вы ищете? Ваш вопрос предполагает, что вы хотите обрабатывать маршрутизацию сообщений самостоятельно - огромная задача в контексте WCF. Можете быть более конкретными? – Ben
Добавил некоторую информацию. Вы хорошо разбираетесь в маршрутизации. Мой случай достаточно прост, когда я делаю это сам, но я не вижу причин, по которым маршрутизация не может быть отделена от Channel Layer также ...объект сообщения должен иметь всю информацию, необходимую для выполнения маршрутизации, не так ли? – JimSteele1222