我有以下代码:
public partial class MyServiceClient : System.ServiceModel.ClientBase<...
if (m_MyClient == null)
m_MyClient = new MyServiceClient
("BasicHttpBinding_IMyService", remoteAddress);
WriteOutput("Successfully connected to service");
我的问题是我怎么知道我的客户端此时实际连接到服务?我希望显示失败或成功的信息。
答案 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");