System.ServiceModel.ClientBase连接到Service

时间:2010-06-27 17:21:24

标签: wcf

我有以下代码:

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

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

WriteOutput("Successfully connected to service");

我的问题是我怎么知道我的客户端此时实际连接到服务?我希望显示失败或成功的信息。

2 个答案:

答案 0 :(得分:2)

当你创建了客户端时,并没有发生像EndpointNotFoundException这样的例外 - 那么你就“连接”了服务,这实际意味着:客户端和服务之间的通信通道已经可以使用了用于来回发送消息。这就是全部 - 服务器端没有任何东西可以真正处理您的呼叫(除了频道监听器,如果消息到达将被激活)。

您还可以检查客户频道的.State媒体资源 - 理想情况下,该频道应为Opened

如果您来自ClientBase<T>

,请使用此选项
m_MyClient.State == CommunicationState.Opened

或者您正在使用Visual Studio中Add Service Reference功能生成的标准客户端类:

(m_MyClient as IClientChannel).State == CommunicationState.Opened

答案 1 :(得分:1)

在意识到我在上面的评论中提到的内容之后,我意识到我的问题的答案如下:

在我的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");