System.ServiceModel.ClientBase подключен к Сервису - PullRequest
2 голосов
/ 27 июня 2010

У меня есть следующий код:

public partial class MyServiceClient : System.ServiceModel.ClientBase<...

if (m_MyClient == null)
    m_MyClient = new MyServiceClient
        ("BasicHttpBinding_IMyService", remoteAddress);

WriteOutput("Successfully connected to service");

Мой вопрос: как мне узнать, что мой клиент на самом деле подключился к услуге в этот момент?Я хотел бы показать сообщение о неудаче или успехе.

Ответы [ 2 ]

2 голосов
/ 27 июня 2010

Когда вы создали клиент, и никаких исключений, таких как EndpointNotFoundException, не произошло - вы «подключены» к сервису, что на самом деле означает: канал связи между клиентом и сервисом готов к использованию для отправкисообщения туда и обратно.Это все, что есть - на стороне сервера пока нет ничего, чтобы по-настоящему обрабатывать ваши звонки (кроме слушателя канала, который активируется при поступлении сообщения).

Вы также можете проверить свойство .State канала клиента- в идеале, это должно быть Opened в этой точке:

Используйте это, если вы наследуете от ClientBase<T>

m_MyClient.State == CommunicationState.Opened

или это вы используете стандартный клиентский классгенерируется функциональностью Add Service Reference в Visual Studio:

(m_MyClient as IClientChannel).State == CommunicationState.Opened
1 голос
/ 28 июня 2010

После осознания того, что я упомянул в моем комментарии выше, я понял, что ответ на мой вопрос был следующим:

В моем ServiceContract я добавил следующее:

[OperationContract]
bool IsAlive();

Чье внедрениевыглядит следующим образом:

public bool IsAlive()
{
    return true;
}

Затем изменил мой код следующим образом:

m_MyClient = new MyServiceClient("BasicHttpBinding_IMyService", remoteAddress);

try
{
    m_MyClient.IsAlive();
}
catch (EndpointNotFoundException)
{
    WriteOutput("Unable to connect to service");

    m_MyClient = null;
}

if (m_MyClient != null)
    WriteOutput("Successfully connected to service");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...