Укажите исходный порт клиента WCF - PullRequest
0 голосов
/ 13 января 2012

У меня есть служба WCF, опубликованная по определенному адресу, и я хочу общаться с ней через прокси-сервер, созданный в Visual Studio.

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

Проблема заключается в следующем: у меня есть два хоста A и B, на которых запущена служба WCF (одинаковая на каждом хосте), хост A имеет сервис по адресу AdA и порту PA, хост B по адресу AdB и порту PB , Узел A отправляет сообщение узлу B. Узел B выполняет некоторые внутренние операции после сообщения, а затем отправляет сообщение узлу A. Проблема заключается в том, что, когда узел A вызывает веб-метод на B, он отправляет сообщение TCP со случайным src. порт и тот, который не соответствует порту, на котором A размещена служба, поэтому веб-метод не вызывается на A, поскольку исходный порт, назначенный WCF, не соответствует порту, на котором опубликована служба.

До сих пор я использовал BasicHttpBinding.

Как мне этого добиться?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 13 января 2012

Я не думаю, что можно назначить порт источника для любого вида сетевого взаимодействия, поскольку он должен быть уникальным.

Порт источника - это следующий доступный номер, назначенный TCP / IP для клиент. Этот присвоенный номер как трансляция сетевых адресов Метод определяет, на какого пользователя отправлять ответы (см. NAT). Хотя тот же номер клиента может использоваться одновременно в пределах тысячи организаций, каждая сеть TCP / IP отслеживает свою собственную назначенные номера для использования только в этой сети. Сочетание номер порта и IP-адрес называется «сокетом».

Подробнее: http://www.answers.com/topic/port-number#ixzz1jLxPzCVe

0 голосов
/ 18 августа 2012

Проблема в том, что, когда узел A вызывает веб-метод на B, он отправляет TCP-сообщение со случайным портом src, которое не соответствует порт, на котором размещен сервис A, поэтому веб-метод не вызван на A, потому что порт источника, назначенный WCF, не совпадает порт, на котором опубликован сервис.

Нет причины, по которой веб-метод A следует вызывать только потому, что он получает ответ от другого веб-сервиса. Вы должны явно позвонить в службу. Если вы хотите, чтобы A вызывался в ответ на вызов A B, тогда код в службе B должен выполнить этот вызов. Хотя, если у вас есть два метода, которые вызывают друг друга таким образом, это будет просто назад и вперед, поэтому вам понадобится условие выхода. Возможно, если бы вы дали больше подробностей о том, что вы пытаетесь достичь, я мог бы предложить больше советов.

0 голосов
/ 13 января 2012

netPeerTcpBinding позволяет вам указать номер порта для исходящих сообщений.

...