WCF: ручная настройка привязки и конечной точки вызывает сбойное состояние SerciveChannel - PullRequest
2 голосов
/ 04 мая 2010

Я создал сборку ComVisible для использования в приложении классического asp. Сборка должна действовать как клиент wcf и подключаться к хосту службы wcf (внутри службы windows) на том же компьютере, используя именованные каналы. Хост службы wcf отлично работает с другими клиентами, поэтому проблема должна быть в этой сборке.

Чтобы все заработало, я добавил служебную ссылку на классы сборки и прокси ComVisible, и для меня были созданы соответствующие настройки app.config. Пока все хорошо, за исключением того, что конфигурация приложения не будет распознаваться при создании CreateObject с моей сборкой в ​​коде asp.

Я попытался жестко закодировать (только для тестирования) привязку и конечную точку и передать эти два конструктору моего производного прокси-сервера ClientBase, используя этот код:

private NetNamedPipeBinding clientBinding = null;
private EndpointAddress clientAddress = null;

clientBinding = new NetNamedPipeBinding();
clientBinding.OpenTimeout = new TimeSpan(0, 1, 0);
clientBinding.CloseTimeout = new TimeSpan(0, 0, 10);
clientBinding.ReceiveTimeout = new TimeSpan(0, 2, 0);
clientBinding.SendTimeout = new TimeSpan(0, 1, 0);
clientBinding.TransactionFlow = false;
clientBinding.TransferMode = TransferMode.Buffered;
clientBinding.TransactionProtocol = TransactionProtocol.OleTransactions;
clientBinding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard;
clientBinding.MaxBufferPoolSize = 524288;
clientBinding.MaxBufferSize = 65536;
clientBinding.MaxConnections = 10;
clientBinding.MaxReceivedMessageSize = 65536;

clientAddress = new EndpointAddress("net.pipe://MyService/");

MyServiceClient client = new MyServiceClient(clientBinding, clientAddress);

client.Open();
// do something with the client
client.Close();

Но это вызывает следующую ошибку:

Объект связи, System.ServiceModel.Channels.ServiceChannel, не может использоваться для связи, поскольку он находится в состоянии сбоя.

Среда .Net Framework 3.5 / C #. Что мне здесь не хватает?

EDIT: Я только что понял, что при использовании basicHttpBinding все работает как положено. Так что проблема может быть только в NetNamedPipeBinding.

Любой

1 Ответ

0 голосов
/ 04 мая 2010

Этот клиент находится на той же машине, что и ваш сервис?

netNamedPipeBinding работает только на той же машине. Если вам нужно перейти от машины к машине, используйте netTcpBinding.

В противном случае ваш код кажется мне подходящим - никаких явных, явных упущений или ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...